※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


스케줄링에 대해서 이야기해보자. 앞에서 설명했듯이, 스케줄링이란 CPU에 의해 실행될 프로세스들이 대기하고 있는 메모리 안의 ready queue에서 다음에 실행할 프로그램을 선택하는 과정이다.


위의 그림에서는 P1~P4 중에서 P2가 선택된다는 가정하이다. 

오늘 공부할 내용의 주 내용은 P1~P4 중에서 하나를 선택할 때 사용하는 알고리즘을 공부할 것이다.


우선 언제 스케줄러가 스케줄링을 하는가? 보통 4가지로 귀결된다.


1. I/O request를 통해 running state에서 waiting state로 갈 때

2. running state에서 ready state으로 갈 때 (interrupt occurred)

3. waiting state에서 ready state으로 갈 때 (I/O request)

4. 프로세스가 끝날 때


1번과 4번의 경우는 무조건 non preemptive하게 스케줄링이 일어난다. 


※ 여기서 잠깐, non preemptive와 preemptive는 무엇인가?

http://operatingsystems.tistory.com/entry/OS-Preemption-and-NonPreemption

위의 링크를 참고하세요.


1번!! I/O request가 발생하면 당연히 device queue로 가야지 어쩔꺼니? I/O할 동안에는 CPU를 사용할 필요가 없잖아.

4번!! 프로세스가 끝나면 당연히 CPU를 내놔야지 어쩔꺼냐?

(1번과 4번은 사실 Multiprogramming OS라는 전제하이다.)


2번과 3번은 조금 생각해보자.


2번 자체가 Preemption인데, Preemption이 일어나려면 스케줄러가 ready queue로부터 어떤 프로세스를 선택해야 한다. 이것이 곧 스케줄링이니까.

3번은 한번 더 생각해봐야 한다. 하나의 프로세스(P0)가 waiting state에서 ready state로 갔다는 말은 P0가 ready queue에 놓여졌다는 뜻이다. 그런데 만일, P0가 가장 높은 우선순위를 가져서 당장 수행해야한다면 어떤일이 벌어질까? 현재 실행되고 있는 프로세스(P1)는 아무것도 모르고 CPU를 빼앗길 것이고 P0가 실행될 것이다. P1은 결국 원하지 않는데 강제로 CPU 점유권을 빼앗긴 것이다. 이것이 Preemption이잖아.


그림으로 설명하면 이렇다.

P1이 실행되고 있는 상태에서 P0은 device queue에서 I/O operation을 막 끝내고 ready queue로 옮겨질라고 그런다.



그렇게 P0이 ready queue로 옮겨졌는데, 어라? P0의 우선순위가 젤 높다. 심지어 지금 실행되고 있는 P1보다 높다.



그래서 당연히 스케줄링이 일어난다.



결국 Preemption이 일어난다. 반대로 말하면, 만일 P0의 우선순위가 기존에 실행되고 있던 P1보다 낮다면 Preemption이 일어나지 않는다는 뜻이다.


정리하면 이렇다. 위의 4가지 경우의 수에서


1. I/O request를 통해 running state에서 waiting state로 갈 때

2. running state에서 ready state으로 갈 때 (interrupt occurred)

3. waiting state에서 ready state으로 갈 때 (I/O request)

4. 프로세스가 끝날 때


1번과 4번은 스케줄러가 반드시 non preemptive하게 개입하는 경우에 해당하고

2번은 스케줄러가 preemptive하게 개입하는 경우

3번은 스케줄러가 preemptive하게 개입하거나 스케줄러가 개입하지 않는 경우가 되겠다.


다음 포스팅에서 스케줄링 알고리즘을 구체적으로 알아보자 :-)




'Operating Systems' 카테고리의 다른 글

[OS] Remote Procedure Call  (1) 2013.01.22
[OS] Scheduling Algorithm  (2) 2013.01.13
[OS] Preemption and Non-Preemption  (0) 2013.01.13
[OS] Context Switcing  (2) 2013.01.01
[OS] Job Queue, Ready Queue 그리고 Device Queue  (1) 2013.01.01
Posted by 빛나유
,