[OS] Nonpreemptive Scheduling vs. Preemptive Scheduling

두비니

·

2021. 4. 25. 02:51

 

 

 


Nonpreemptive Scheduling vs. Preemptive Scheduling

선점 / 비선점 스케줄링


 

 

1. CPU Scheduling이 필요한 경우들

우선 CPU Scheduling이 필요한 경우는 최대한 CPU의 뽕을 뽑아먹기 위해서입니다.

즉, 프로세스들에게 적절하게 CPU를 배분해서 효율적으로 작업을 처리하기 위함이죠.

그래서 그 경우에는 크게 4가지로 나뉩니다.

 

1. running -> waiting : I/O 발생

2. running -> ready : timeout, interrupt

3. waiting -> ready : I/O or event 끝

4. Terminates : exit

+) ready -> running : Scheduler dispatch

 

 

뒤에서 더 자세히 보게 되겠지만, 위 경우에서 1번과 4번은 무조건 Nonpreemptive Scheduling에 의해서 선정되게 되고, 2번과 3번Preemptive Scheduling에 의해 선정되게 됩니다.

자세한 내용은 아래에서 봅시다.

 

2. Nonpreemptive Scheduling

 

Nonpreemptive Scheduling, 즉 비선점 스케줄링에 대해서 먼저 알아봅시다. Nonpreemptive Scheduling의 경우, 위에서 이야기한 CPU Scheduling이 발생하는 경우 중 1번과 4번에 대해서 발생하게 됩니다.

1번과 4번의 공통점은 프로세스가 모두 ready queue와 관련없는 곳으로 간다는 것입니다.(waiting상태로 가거나, 아예 terminated되거나) 따라서 뭔가 바뀌는 것 없이 새로운 프로세스와 CPU를 연결시키는게 끝이기 때문에 '돌발상황이 발생하지 않는다'라고 보면 될 것 같습니다.

 

- 이미 할당된 자원을 다른 프로세스가 강탈할 수 없음

- 돌발상황도 없어지기 때문에 응답시간의 예측이 쉬워짐

- 일괄처리 방식에 적합

- 대신 효율적이지 못함(비교적)

 

 

3. Preemptive Scheduling

 

위에서 말한 2번과 3번의 경우에는 Preemptive Scheduling의 방법에 따르게 됩니다.

우선 2번과 3번의 공통점을 찾아보면, 둘 다 결국 프로세스가 ready상태로 돌아오게 됩니다.

즉, ready queue의 상태가 변경된다는 것이죠.

 

이러한 경우에는, 대부분의 ready queue가 우선순위(priority)를 가지고 있기 때문에, 이러한 우선순위를 고려하여 다시 CPU를 재할당해줄 필요가 있습니다. 무조건 "효율"이 먼저니까요.

그래서 nonpreemptive scheduling과는 반대로 새로 ready queue에 들어온 친구가 가장 효율적이라고 판단된다면 지금 사용되고 있는 CPU를 뺐어와서 할당되는 상황도 발생합니다.

그래서 "선점" 스케줄링이라는 이름이 붙었구나 라는 생각도 할 수 있구요.

 

따라서 특징으로는 다음과 같습니다.

- 우선순위가 높은 프로세스를 빠르게 처리할수 있음

- 어떤 프로세스가 자원을 사용하고 있을때 우선순위가 더 높은 프로세스가 올경우 자원을 강탈함

- 비교적 높은 효율성

- 오버헤드가 크다

 

4. 두 Scheduling의 차이

 

두 스케줄링의 가장 큰 차이점은 CPU가 다른 프로세스에게 선점당할 수 있는지의 여부입니다. Preemptive scheduling은 우선순위에 따라 CPU선점이 일어나기도 하지만, nonpreemptive scheduling의 경우는 전혀 발생하지 않습니다. 또한 Preemptive scheduling은 효율이 극대화되지만 오버헤드가 발생하는 반면, nonpreemptive scheduling의 경우에는 효율은 비교적 떨어지는 반면, 오버헤드는 거의 일어나지 않습니다.