다중처리기 스케쥴링
다중 CPU가 사용이 가능하다면 Load Sharing(부하 공유)가 가능해진다.
다중처리기 스케쥴링에 대한 접근 방법
Asymmetric MultiProcessing
비대칭 다중처리는 Master Server 처리기가 모든 스케쥴링 결정과 입출력 처리 그리고 다른 시스템의 활동을 처리하게 한다. 다른 처리기들은 사용자의 코드만 실행한다.
Symmetric MultiProcessing
대칭 다중처리는 각 처리기가 독자적으로 스케쥴링을 수행한다. 모든 프로세스는 공동 Ready Queue에 있거나 각 처리기의 Ready Queue에 존재한다. 각 처리기의 스케쥴러가 Ready Queue를 확인해 실행할 프로세스를 선택해 진행한다.
처리기 친화성
프로세스가 특정 처리기에서 실행중일 때 캐시메모리에는 가장 최근에 접근된 데이터가 처리기의 캐시를 채우게 된다. 이 때 프로세스가 처리기를 이주하게 되었을 때 다음과 같은 상황이 벌어진다.
- 처리기의 캐시 메모리 내용은 무효화 된다.
- 처리기의 캐시는 다시 채워져야한다.
캐시를 무효화하고 다시 채우는 작업은 비용이 많이 들기 때문에 SMP시스템에서 대부분의 경우 같은 처리기에서 프로세스를 실행시키려고 한다. 이를 처리기 친화성이라 한다.
부하 균등화
SMP시스템에서 자원 사용을 최대화 하려면 Load Balancing이 중요하다. Load Balancing은 SMP 시스템의 모든 처리기 사이에 부하가 균등하게 분산되도록 시도한다. Load Balancing기능은 SMP 시스템의 처리기별 독립적 Ready Queue가 할당된 시스템에만 필요한 기능이다. 이 Load Balancing은 Processor Affinity에 반(反)하게 된다.
Pull 이주
Pull 이주는 유휴상태의 처리기가 바쁜 처리기를 기다리는 프로세스를 자기쪽으로 Pull해온다.
Push 이주
Push 이주는 특정 태스크가 주기적으로 각 처리기의 부하를 검사하고 부하 불균등 상태라면 덜 바쁜 처리기로 Push된다.
다중코어 프로세서
컴퓨터 하드웨어의 경향은 하나의 물리적인 칩 안에 여러 개의 처리기 코어를 장착한다. 이를 다중코어 프로세서라고 하며 깍 코어는 구조적인 상태 유지를 위한 레지스터 집합을 가진다. 이를 통해 OS 입장에서 별개의 물리 처리기처럼 보이게 된다. 이 다중코어 프로세서는 스케쥴링을 복잡하게 한다. Memory Stall현상은 Cache Miss 등 여러 원인에 의해 발생되게 되는데 프로세서가 메모리를 접근할 때 데이터가 가용해지기를 기다리면서 시간을 허비하는 현상이다. 이를 해결하기 위해 하드웨어 설계부터 스레드가 각 코어에 할당될 수 있도록 다중 스레드 프로세스 코어를 구현한다.
가상화와 스케쥴링
가상화 시스템이 스케쥴링에 영향을 미치는 요소는 매우 방대하기 때문에 짧게 표현하기 힘들다. 개략적으로 가상화 소프트웨어는 시스템에서 실행중인 Virtual Machine마다 하나 이상의 가상 CPU를 제공하고 물리 CPU들을 머신이 사용할 수 있도록 스케쥴한다. 일반적인 가상 환경은 하나의 호스트 OS가 다수의 게스트 OS를 관리하게 되는 구조로 이루어지게 되는데 각 게스트 운영체제는 시분할 혹은 실시간 연산을 포함하는 특정 사용 환경 등 사용자에 맞게 세밀하게 조율될 수 있다. 예를들어 100ms을 할당하는 시분할 운영체제에서 가상 머신 내의 운영체제가 실제 얼마만큼 CPU를 할당받는가에 대한 내용은 가상화 시스템에 달려있다. 아무리 가상화 시스템의 스케쥴 정보를 알고 있고 조율을 했다 하더라도 가상머신의 타이머는 물리 CPU의 시계보다 오래 걸리기 때문에 부정확하기 때문에 경우에 따라 스케쥴링이 무산될 수 있다.