SJF (Shortest - Job - First)
SJF의 기본적인 알고리즘은 CPU burst time이 짧은 것부터 실행시키는 것이다.
SJF는 Preemptive / Nonpreemptive 둘다 가능하다.
Nonpreemptive SJF는 현재 시점에 대기중인 프로세스 중 CPU burst time이 가장 짧은 것을 실행시킨 후에, 프로세스가 종료되거나 wait상태가 되기 전까지 실행한 후에 다시 Ready Queue를 보고 가장 짧은 burst time을 가진 프로세스를 실행시키는 방법이다.
이와 같이 burst time이 가장짧은 P4 -> P1 -> P3 -> P2 순으로 실행시킨다.
이때의 평균 대기시간은 3 + 16 + 9 + 0 /4 = 7s 이다.
Preemptive SJF는 프로세스 실행중 남아있는 burst time보다 적은 burst time을 가진 프로세스가 들어오면, 현재 실행하고 있던 프로세스를 Ready Queue에 넣고 더적은 burst time을 가진 프로세스를 실행하는 것이다.
맨처음에 도착한 P1을 실행하던 도중 P2가 도착한다. 이때 P1의 Burst time = 7 , P2의 Burst time = 4이므로 CPU는 P2를 실행하게 된다. 그러던 도중 P3가 들어오지만 P2의 Burst time이 더 적으므로 계속 P2를 실행시킴. P2의 실행이 끝나고 난 뒤 각각의 프로세스의 Burst time을 보면,
P1 = 7 ,P2 = 0(종료) ,P3 = 9 ,P4 = 5 이므로 CPU는 P4를 실행하게 된다.
이때의 Trunaround time(대기시간 + 실행시간)
P1 = 9 + 8 = 17
P2 = 0 + 4 =4
P3 = 15 + 9 = 24
P4 = 2 + 5 = 7
'O.S' 카테고리의 다른 글
Process Scheduling - Round_Robin (0) | 2012.04.19 |
---|---|
Process Scheduling - Priority (0) | 2012.04.19 |
Process Scheduling - FCFS (0) | 2012.04.19 |
Critical Section - 공유메모리 (2) | 2012.04.17 |
Interrupt (0) | 2012.04.17 |