CPU scheduling

CPU 스케줄링의 결정 시점은 다음과 같은 프로세스의 상태 변화가 있을 때이다.

  1. 수행 → 대기    interrupt
  2. 수행 → 준비    time-out
  3. 대기 → 준비    wake-up
  4. 수행 → 종료
    * 대기 → 수행    dispatch
CPU scheduling에 대한 이미지 검색결과


Preemptive / Non-preemptive

비선점형 스케줄링(Non-preemptive Scheduling)

비선점형은 위의 결정 시점 중 1번과 4번의 상황에서만 스케줄링이 발생한다.

어떤 프로세스가 CPU를 할당 받으면 그 프로세스가 종료되거나 IO request가 발생하여 자발적으로 대기 상태로 들어갈 때까지 계속 실행된다.

일반적으로 선점형보다 scheduler 호출 빈도가 낮고 context switching overhead가 적다.

즉, 어떤 프로세스가 작업을 마치고 자발적으로 대기 상태로 들어가거나 종료되는 경우 다른 프로세스가 실행된다.


선점형 스케줄링(Preemptive Scheduling)

선점형은 위의 결정 시점 1번에서 4번까지 모든 상황에서 발생한다.

어떤 프로세스가 실행되다 time silce를 모두 사용해 time-out되거나, IO가 발생하거나, event를 기다려야 하는 상황이라면 다른 프로세스에게 CPU 사용을 양보하게 된다.

다르게 말하면 프로세스를 쫒아 내고 CPU 자원을 선점할 수 있다는 뜻이다. (이 때 선점의 근거가 바로 우선순위다.)

현대 OS는 대부분 시분할 선점형 스케줄링을 사용한다. 생각해보면 당연한게 비선점형은 해당 작업이 끝날 때 까지 계속 실행되기 때문에 멀티 프로세스 환경에서 응답성을 기대할 수 없다.


Note

선점형/비선점형 스케줄링이 아니라, 선점형/비선점형 커널에 대한 개념이 있다.

비선점형 커널과 선점형 커널의 차이점은 time-slice동안 interrupt가 들어와도 실행을 보장하느냐 아니냐다.


* Realtime 실시간

컴퓨터에서 실시간은 임계 시간(deadline) 안에 실행되는 것을 의미한다.


'OS > Kernel' 카테고리의 다른 글

[kernel] LKM, Loadable Kernel Module / Kernel Compile  (0) 2017.10.14
[kernel] virt_to_phys  (0) 2017.10.13
[kernel] exploit  (0) 2017.10.06
Interrupt  (0) 2016.10.07
System call / vDSO, vsyscall  (0) 2016.09.18