운영체제 - 8

KOCW 운영체제 8강

양희재 교수님 강의를 듣고 쓴 글입니다.


SJF(Shortest-Job-First)

CPU Time을 가장 적게 쓰는 process를 우선적으로 Ready Queue에서 꺼내서 CPU Time을 할당해주는 스케쥴링 알고리즘이다.

os8_1

위와 같은 예시가 있다고 해보자. 위 경우에서 SJF 알고리즘으로 AWT(Average Waiting Time)을 구해보도록 할 것이다. P1~P4는 모두 0ms에 Ready Queue에 도착했다고 하자.


os8_2

CPU Time이 짧은 순서대로 Queue에서 선택되므로 위와 같이 처리된다.

os8_3

AWT를 계산하면 7ms가 나옴을 알 수 있다.


만약 FCFS(First-Come, First-Server)로 AWT를 구한다면?

os8_4


결론 : SJF는 optimal하다. 하지만 현실적이지 않은 알고리즘이다. → 실제로 해당 process가 CPU Time을 얼마나 사용할지 아무도 모르기 때문이다. 따라서 예측해야 하는데 이러한 과정들이 overhead가 될 수 있다.


Non-preempitive SJF

Non-preempitive는 process가 CPU에 실행되고 있으면, 끝날 때까지 기다려야 한다.

os8_5

위와 같은 예시상황이 있다고 해보자.

os8_6

이번엔 P1~P4가 같은 시각에 Queue에 도착한 것이 아니라 다른 시각에 도착한 상황이다. Non-preempitive SJF 로 process 처리순서를 나타내면 위와 같다. 원래라면 SJF이므로 가장 CPU Time이 짧은 P2가 먼저 처리됐어야 했지만 P1보다 늦게 도착했기 때문에 P1이 먼저 처리되는 모습을 볼 수 있다. 그리고 Non-preempitive하므로 P1이 모두 다 처리된 후에 P2가 처리될 수 있었다.


이제 AWT를 구해보자.

os8_7

7.75ms가 나온다. 아까와는 달리 수식이 약간 더 복잡해 보인다. Queue에 도착한 시각이 다르기 때문에 대기 시간도 아까와는 다르게 계산해야했기 때문이다.


Preempitive SJF

os8_5

아까 위에서와 같은 예시이다. AWT를 구해보자.


os8_8

os8_9

같은 상황에서 더 짧은 AWT가 나왔다!

이렇듯 어떤 방식으로 process를 처리하냐에 따라 효율성이 달라진다.


Priority Scheduling

os8_10

Priority의 숫자가 작으면 더 높은 우선순위를 가진다고 하자.

os8_11

AWT는 위와 같이 계산될 것이다.


Starvation

Queue에 있는 우선순위가 낮은 process가 하나 있다고 가정해보자. 해당 process보다 높은 우선순위의 process들이 Queue에서 사라지면, 언젠간 CPU에 의해 처리될 것이다. 하지만 만약에 미처 높은 우선순위의 process들이 다 사라지기도 전에 새로운 process(우선순위가 더 높음)가 Queue에 load된다면? 이라는 상황을 가정해보자. 아마도 우선순위가 낮은 그 process는 영원히 실행되지 못한채로 Queue에 남을 것이다. 결국 CPU Time을 못 받는다는 것이다. 이를 가리켜 Starvation이라고 부른다.

해당 현상은 Aging이라는 것으로 해결한다. 시간이 지남에 따라 우선순위에 변화를 주면서 말이다.


Round Robin

Time Slice(=𝝙)로 시간을 쪼개서 매번 process를 처리한다.


os8_12

𝝙=4ms라고 가정했고, 상황은 위와 같다.

os8_13

Round Robin방식으로 process를 처리한 과정이다. 𝝙를 어떻게 하냐에 따라서 AWT는 달라진다. 따라서 성능이 𝝙에 의존적이다.

따라서 적절한 𝝙를 찾는게 성능에 중요하다.