Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 10 - 0 = 10s
TBturnaroundtime = 20 - 0 = 20s
TCturnaroundtime = 30 - 0 = 30s
TAVGturnaroundtime = (10+20+30) / 3 = 20s
TAVGturnaroundtime = (100+110+120) / 3 = 110s
=> CPU사용시간이 너무 긴 프로세스 때문에 사용시간이 짧은 프로세스의 대기시간이 너무 길어진다.
가장 짧은 작업을 먼저하고, 다음 짧은 작업,.. 순으로 실행시킨다.
예시
A가 B바로 전에 도착했고, B는 C바로 전에 도착했다. A는 100s 동안 실행, B,C는 각각 10s 동안 실행된다.
Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 120 - 0 = 120s
TBturnaroundtime = 10 - 0 = 10s
TCturnaroundtime = 20 - 0 = 20s
TAVGturnaroundtime = (120+10+20) / 3 = 50s
Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 100 - 0 = 100s
TBturnaroundtime = 110 - 10 = 100s
TCturnaroundtime = 120 - 10 = 110s
TAVGturnaroundtime = (100+100+110) / 3 = 103.33s
선정성을 SJF에 추가해 주자
새로운 작업이 시스템에 들어올때.
예시
A는 t = 0에서 도착했고, B,C가 10s에 도착했다. A는 100s 동안 실행, B,C는 각각 10s 동안 실행된다.
Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 120 - 0 = 120s
TBturnaroundtime = 20 - 10 = 10s
TCturnaroundtime = 30 - 10 = 20s
TAVGturnaroundtime = (120+10+20) / 3 = 50s
작업이 도착한 시간부터 그것이 스캐줄링된 시간까지의 시간
Treseponse = Tfirstrun - Tarrival
STCF과 관련된 기술들은 response time에 특히 좋지 않다.
우리가 response time에 민감한 스케줄러를 만드는 방법은 뭐가 있을까?
예시
A는 t=0에 도착했고 B는 바로 다음에 도착했다. A는 10s 동안 실행되고 B는 9s동안 실행된다. A와 B의 response time은?(SJF를 이용하라)
Treseponse = Tfirstrun - Tarrival
TAreseponse = 9 - 0 = 9s
TBresponse = 0-0 = 0s
Time slicing Scheduling
RR은 공정하지만 turnaroundtime과 같은 메트릭스에서 좋지않은 성능을 낸다.
예시
A,B,C는 동시에 도착했다. 각각은 5초동안 실행된다.
TAVGresponse = (0+ 5 + 10) / 3 = 5s
Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 5 - 0 = 5s
TBturnaroundtime = 10 - 0 = 10s
TCturnaroundtime = 15 - 0 = 15s
TAVGturnaroundtime = (5 + 10 + 15) / 3 = 10s
TAVGresponse = (0 + 1 + 2)/3 = 1s
Tturnaroundtime = Tcompletion - Tarriaval
TAturnaroundtime = 13 - 0 = 13s
TBturnaroundtime = 14 - 0 = 14s
TCturnaroundtime = 15 - 0 = 15s
TAVGturnaroundtime = (13 + 14 + 15) / 3 = 14s
time slice가 작을 수록(1~10ms보다 작은 0.1ms)
time slice가 클수록
time slice의 길이를 결정하는 것은 시스템 디자이너에게 trade off를 보여준다.