SJF(Shortest-Job-First)

수행시간이 적은 것을 먼저 처리 하는 방식

만약 다음 처리 시간이 같다면 FCFS 로처리

 

 

 

Process 가 Ready Queue 에 있고 Burst Time 이 주어질때

 

Burst Time 이 가장 작은것 먼저 실행 시키면 위 처럼 간트차트가 된다

 

총 대기시간 28초

평균대기시간은 7초

 

턴어라운드 타임은 프로세스당 앞에 기다린 시간과 해당 프로세스가 처리 되는 시간까지 임으로

 

토탈 턴어라운드 타임은 52

평균 턴어라운드 타임은 13이 된다

 

 

최적이 증명가능하다

평균 대기 시간이 왜 최소로 갖느냐면 짧은게 앞에 있으니 대기시간이 짤방질 수 밖에 없다

 

그런데 이건 구현이 불가능한데, 다음 CPU Burst 타임을 알수가 없기 때문이다

대신 근사적으로 구하는건 예측을 통해서 구현할수 있는데 

예측은 이 프로세스가 과거에 얼마만큼 시간을 썼는지를 보고 판단하게 된다

 

시간은 지수적 시간을 적용하는데 그 이유는 최근에 많이 썼을 수록 가중치를 더 줘서 CPU burst 시간을 조정한다

 

10*1/2 + 6*1/2 = 8

타우식은 CPU Burst 타임이 타우 그래프에 따라 파란색 처럼 이동 평균선 역할을 해준다

 

그런데 이 전 사용시간에 대해서도 저장처리를 해야 하기 때문에 이론적으론 옵티멀한데 실제 사용하긴 어렵다

 

 

SJF 는 Preemtpvie 할 수도 있고 Non-Preemptive 할 수도 있다

앞서서 5초로 CPU burst 이 계산된게 있는데 새로 계산된 프로세스의 시간이 1 이라면 

이때 1초가 먼저 실행 되면 선점형이고 기다렸다 처리되면 비선점형이 된다

그런데 이렇게 할려면 해당  프로세스의 남은 CUP burst Time 을 알아야 하기 때문에 이것 또한 쉽지 않다

 

 

 

 

 

반응형

+ Recent posts