티스토리 뷰

멀티프로세서란 CPU가 여러개인 프로세서를 말한다. 흔히 말하는 다중코어이다. 싱글코어 만으로는 한계가 있기 때문에 다중코어를 사용하게 된 것이다. 하지만 다중코어에는 문제가 있다. 프로그램은 하나의 CPU만 사용하기 때문에 아무리 많은 CPU를 달아도 속도적 측면에서는 변화가 없는 것이다. 이 문제를 해결하기 위해서는 프로그램을 병렬 실행이 되도록 다시 짜야 한다. 보통 쓰레드를 이용한다. 쓰레드는 나중에 자세히 설명한다고 한다. 멀티 쓰레드 응용 프로그램은 작업을 여러 CPU에 할당하여 CPU의 수가 많을수록 더 빠르게 실행되도록 한다.

 

여러 CPU에 작업을 어떻게 스케줄 해야 하는가?

운영체제는 어떻게 작업을 여러 CPU에 스케줄할 수 있을까? 

 

멀티 프로세서 구조

먼저 단일CPU와 멀티CPU 하드웨어의 근본적인 차이를 알아보자.

다수의 프로세서 간에 데이터의 공유, 하드웨어 캐시의 사용방식에서 근본적인 차이가 발생한다.

단일 CPU 시스템에서는 하드웨어 캐시 계층이 존재한다. 이 캐시는 프로그램을 빠르게 실행하기 위해 존재한다.

 

 

예를 들어 데이터를 가져오는 load명령어를 실행하는 프로그램과 메인 메모리,캐시를 가진 하드웨어를 생각해보자. 

명령어에 의해 CPU는 메인 메모리로 부터 데이터를 가져온다. 메인 메모리는 속도가 느리기 때문에 가져오는데 시간이 오래걸린다. 다음에도 이 데이터를 사용할 것이라고 예상한 CPU는 캐시에 데이터의 복사본을 저장해 둔다. 그리고 다음에 데이터를 가져올 때 캐시에 데이터가 존재하는지 확인한 후 존재하면 캐시에서, 없으면 메인 메모리에서 가져온다.

캐시는 지역성에 기반한다. 시간 지역성공간 지역성의 두 종류가 있다. 시간 지역성의 기본 아이디어는 데이터가 한 번 접근되면 가까운 미래에 다시 접근되기 쉽다는 것이다.

공간 지역성의 기본 아이디어는 프로그램이 주소 x의 데이터를 접근하면 x 주변의 데이터가 접근되기 쉽다는 것이다.

 

하지만 하나의 시스템에 여러 프로세서가 존재하고 하나의 공유 메인 메모리가 있을 때 어떤 일이 일어날까?

 

 

왼쪽 CPU에서 주소 A를 읽는다고 가정하자. 캐시에 값이 없기 때문에 메모리에서 가져와 값 D를 저장한다. 그러고 D의 값을 D`로 바꾼 후 저장한다. 대부분 바뀐 값을 메모리가 아닌 캐시에 먼저 저장 한다. 메모리 값을 바꾸는 건 오래 걸리기 때문이다. 오른쪽 CPU에서 D`을 읽어와야 하는데 캐시에만 D`이 저장되어 있고 메모리에는 D값이 저장되어 있다. 이런 문제를 캐시 일관성 문제라고 한다.

이 문제의 해결책은 하드웨어에 의해 제공된다. 하드웨어는 메모리 주소를 계속 감시하고 제대로 된 상황만 발생하도록 시스템을 관리한다.

위 사진 처럼 하나의 메모리에 여러 CPU가 데이터를 갱신할 때는 항상 공유하도록 한다. 버스 기반 시스템에서는 버스 스누핑이라는 기법을 사용한다. 캐시는 자신과 메모리를 연결하는 버스의 통신 상황을 계속 모니터링 한다. 캐시 데이터에 대한 변경이 발생하면 자신의 복사본을 무효화 시키거나 갱신한다. 나중 쓰기 캐시는 메인 메모리에 쓰기 연산이 지연되기 때문에 캐시 일관성 유지 문제를 휠씬 복잡하게 만든다. 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함