티스토리 뷰
다중 처리기라는 것은 쉽게 말해 CPU의 역할을 하는 것이 여러 개라는 것이다.
처리기가 여러개이기 때문에 부하분산이 가능하지만, 그에 따라서 스케줄링은 더 복잡해진다.
( 이 전에 설명했던 스케줄링 기법들과 마찬가지로 최선의 해결책이란 존재하지 않는다. 그저 상황에 따를뿐. )
요즘은 하나의 칩에 여러개의 처리기 코어가 들어가있는 다중코어 프로세서가 많이 사용된다.
( 16코어 8스레드 → 128개의 논리 프로세서 )
- 비대칭 다중처리 (Asymmetric Multiprocessing) : 비교적 간단하다
하나의 처리기를 master로 두어 해당 처리기가 모든 스케줄링결정과 입출력처리, 다른 시스템의 활동을
취급하게한다. 다른 처리기들은 User코드만을 수행한다.
하나의 처리기가 다 처리하기 때문에 공유자원이 존재하지 않고 처리기간 이동이 필요없다.
- 대칭 다중처리 (Symmetric Muliprocessing) : 현대 OS들은 이걸 지원한다. - SMP
처리기마다 독자적이 스케줄링을 진행한다.
모든 프로세스는 공동의 Ready Queue나 처리기마다의 Ready Queue에 존재하며,
모든 처리기에는 각각의 스케줄러가 있어야 한다.
때문에 동시에 여러 처리기에서 공동자료구조에 접근할 시 동기화문제가 발생할 수 있다.
처리기 친화성
[ 상황 ]
A 처리기에서 특정 프로세스가 실행되었다. A 처리기의 CashMemory에는 해당 프로세스의 데이터가 남게 된다.
이 때 스케줄러에 의해서 해당 프로세스가 B 처리기를 할당받는다면 ?
A 처리기에 존재하는 CashMemory의 이주가 필요하다. 이는 극심한 자원소모가 발생한다.
- "대부분 SMP System은 한 처리기에서 다른 처리기로의 이주를 피하고 같은 처리기에서 처리하려는 현상"
위 현상을 처리기 친화성이라고 하며, 위 상황에서 이 현상을 이용해 자원소모를 최소화할 수 있다.
- 연성친화성과 강성친화성이 있고, Liunx System의 경우 두 가지모두 지원한다.
부하 균등화
- 처리기마다 Ready Queue가 존재하는 경우에만 해당된다. ( 하지만 대부분이 이렇다. )
- PUSH 및 PULL 이주가 있는데 동작방식은 아래와 같다.
PUSH 이주 : 특정 Task가 각 처리기의 부하를 감시하고, 불균형 감지시 프로세스를 바쁜 처리기에서
덜 바쁜 처리기로 PUSH하여 부하 균등화를 진행한다.
PULL 이주 : 한가한 처리기가 바쁜 처리기에서 프로세스를 PULL하여 가져와서 처리한다.
( 종종 병렬적으로 구현된다. )
- 처리기 친화성하고 서로 엇갈리는 역할이다.
몇 번이나 말했듯이 절대적인 기준은 없고 상황에 따라서 달리해야한다는 것을 명심하자.
'운영체제(OS)' 카테고리의 다른 글
[OS] "동적연결 & 공유" 라이브러리 (1) | 2019.11.20 |
---|---|
[OS] 실시간 CPU 스케줄링 (0) | 2019.11.04 |
[OS] CPU Scheduling 기본 ( 6가지 ) (0) | 2019.11.04 |
[OS] CPU Scheduling (0) | 2019.09.30 |
[OS] Process Synchronized (0) | 2019.09.07 |