운영체제 - 7

KOCW 운영체제 7강

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


6강에 이어서…

CPU의 resource를 받기 위해서 process들은 ready Queue라는 곳에서 기다린다고 배웠다. 근데 정확히는 PCB가 기다리는 것이다.

os7_1

강의에서는 위 그림과 같이 Ready Queue가 linked list로 PCB가 줄지어 있는 구조라고 했다.


Context Switching

process를 나중에 다시 현재 상태부터 재개하기 위해서 process나 thread의 상태를 저장하는 과정이다. - 출처

왜 필요한지부터 생각해봐야할 것 같지만 우리는 이미 답을 알고 있다.

만약에 컴퓨터가 한번에 1개의 일밖에 할 수 없다면’ 이라는 상황을 가정해보자. 컴퓨터는 1개의 일을 온전히 다 끝낼 때까지 아무것도 못한다. 그렇게 되면 우리는 여러개의 프로그램을 쓸 수가 없고, 한 대의 서버컴에 여러명이 접속해서 사용한다는 것은 상상도 할 수 없을 것이다.

따라서 multiprogramming, time-sharing system이 등장한 것이다. process가 CPU time을 안쓰고 있을 때 다른 process에게 CPU time을 할당해주는 것이다. 바로 ‘다른 process에게 CPU time을 할당해주는’ 이 때에 context switching이 일어난다. 다음의 과정을 한번 살펴보도록 하자.

  1. Process1이 I/O operation등등의 이유로 CPU time이 다른 process에게 할당되어야 하는 상황.
  2. context switching발생. 기다리던 process2에게 CPU time 할당해줄 때 OS의 PCB1에 현재 process1의 상태를 저장해야 함. → 다시 process1으로 돌아왔을 때 현재 상태에서 실행을 재개해야하기 때문.
  3. process2를 실행시킬 때 PCB2에 저장된 값을 복원하여 그 상태부터 실행 재개.

이 과정이 context switching하는 과정이다. OS의 dispatcher라는 프로그램이 위 과정을 실행시켜주는 것이다.


CPU Scheduling


Scheduling criteria(스케쥴링의 척도)


CPU Scheduling Algorithms


FCFS(First-Come, First-Server)

간단명료. 먼저 온 process를 먼저 처리해주는 것. → Non-preemptive 방식이다.

위에서 scheduling의 척도에 대해서 배웠다. 그 중에 waiting time이라는 것이 있는데 현재 알고리즘을 waiting time에 집중해서 보도록 하겠다.

Ex) P1 : 24ms , P2 : 3ms, P3 : 3ms 의 실행시간이 걸린다고 가정해보자. 만약에 P1-P2-P3 순서로 들어왔다면 다음과 같이 CPU time을 할당받을 것이다.

os7_2

보면, 총 30ms의 실행시간이 걸린다. 그렇다면 waiting time을 보도록 하자. P2는 현재 24ms만큼 기다렸고, P3는 27ms만큼의 waiting time을 가진다. 각 process의 waiting time을 평균을 내보면, \(\text{Total Average Waiting Time}={P1_{waitTime}+P2_{waitTime}+P3_{waitTime} \over \text{Total Process number}}={0+24+27 \over 3}=17ms\) 17ms이 평균 waiting time임을 알 수 있다.


그렇다면 같은 실행시간이지만 다른 순서로 Queue에 들어왔다고 가정해보자. P3-P2-P1순서로 들어왔다면 다음과 같다.

os7_3

총 실행시간은 아까와 같이 30ms이 걸린다. 그러나 평균 waiting time을 구해보면 3ms임을 알 수 있다. 이렇듯 실행시간이 오래 걸리는 process를 먼저 실행시키는건 waiting time측면에서는 매우 비효율적이라는 것을 알 수 있었다.