OS/프로세스 관리

CPU 스케줄링

검정비니 2018. 11. 30. 04:31
728x90
반응형

CPU 스케줄링


CPU 스케줄링은 다중 프로그램 운영체제의 기본이다. 운영체제는 CPU를 프로세스들 사이에서 교환함으로써 컴퓨터를 보다 생산적으로 만든다. CPU 스케줄러는 다양한 프로세스들과 각 프로세스의 스레드들이 CPU를 할당받을 수 있게 해주는 역할을 한다. 모든 프로세스는 실행되기 전에 스케줄링 되기 때문에, 이 CPU 스케줄링은 운영체제의 핵심이라고 할 수 있다.





1. CPU 입/출력 버스트 사이클(CPU I/O Burst Cycle)


프로세스 실행은 CPU 실행과 입/출력 대기의 사이클로 구성된다. 프로세스들은 이들 두 상태 사이를 교대로 이동 한다. 프로세스 실행은 CPU 버스트(Burst)로 시작된다. 뒤이어 입/출력 버스트가 발생하고 그 뒤를 이어 또 다른 CPU 버스트가 발생하며 이어 또 다른 입/출력 버스트 등으로 진행 된다. 결국 마지막 CPU 버스트가 또 다른 입/출력 버스트가 뒤따르는 대신 실행을 종료하기 위한 시스템 요청과 함께 끝난다.




입출력 중심의 프로그램은 전형적으로 짧은 CPU 버스트를 많이 가지며 CPU 지향 프로그램은 다수의 긴 CPU 버스트를 가진다. 이러한 분포는 CPU 스케줄링 알고리즘을 선택하는데 매우 중요하다.





2. CPU 스케줄러


프로세스(Process)가 구동하려면 다양한 시스템 자원이 필요하다. 대표적으로 CPU(중앙처리장치)와 입출력장치가 있는데, 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당하는지 정책을 만드는 것을 CPU스케줄링이라고 한다. CPU스케줄링에 대해 알아보기 전에, 왜 필요한지 짚고 넘어갈 필요가 있다.




프로세스는 작업(Job)을 완료할 때까지 다양한 상태가 되는데, 우리가 주목해야할 것은 'Waiting'이다. 프로세스가 CPU를 점유하여 작업을 수행하는 도중 I/O 또는 Interrupt가 발생하면 일시적으로 프로세스는 CPU를 사용하지 않게 된다. 하지만 계속 점유하고 있다. 이러한 상황을 줄여, CPU를 최대한 활용하면 시스템의 성능 개선을 꾀할 수 있다. 결국, "어떻게 프로세스들이 CPU를 효율적으로 사용하게 할 것인가?" 라는 고민에서 CPU 스케줄링이 출발한다고 할 수 있다.


CPU 스케줄링은 크게 비선점 스케줄링(non-preemptive scheduling)과 선점 스케줄링(pre-emptive scheduling)으로 나누어진다.


CPU 스케줄링 결정은 다음의 네 가지 상황에서 발생할 수 있다.


1) 한 프로세스가 실행 상태에서 대기 상태로 전환될 때 (예를 들어, I/O 요청 등에 의해서 대기 상태로 전환 될 때)


2) 프로세스가 실행 상태에서 준비완료 상태로 전환될 때 (예를 들어, 인터럽트가 발생할 때 등)


3) 프로세스가 대기 상태에서 준비완료 상태로 전환될 때 (예를 들어, 입출력의 종료 시)


4) 프로세스가 종료할 때


1과 4의 경우, 스케줄링 면에서는 선택의 여지가 없다. 실행을 위해 새로운 프로세스(준비완료 큐에 하나라도 존재할 경우)가 반드시 선택되어야 한다. 그러나, 상황 2와 3을 위해서는 선택의 여지가 있다.


상황 1과 4에서만 스케줄링이 발생할 경우에는 비선점 스케줄링이라고 하며, 그 반대의 경우에는 선점 스케줄링이라고 한다.






3. 디스패처 (Dispatcher)

CPU 스케줄링 기능에 포함된 또 하나의 요소는 디스패처이다. 디스패처는 CPU의 제어를 단기 스케줄러가 선택한 프로세스에게 넘겨주는 모듈이며 다으모가 같은 작업을 포함한다.


- 문맥을 교환하는 일


- 사용자 모드로 전환하는 일


- 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동(jump)하는 일


디스패처는 모든 프로세스의 문맥 교환 시 호출되므로, 가능한 한 가장 빠르게 실행되어야 한다. 디스패처가 하나의 프로세스를 정지시키고 다른 프로세스의 실행을 시작하는 데까지 소요되는 시간을 디스패키 지연(dispatch latency)이라고 한다.

반응형