调度策略
调度指标一:周转时间
算法一:
先进先出(FIFO)
很好理解,字如其面。
eg.
缺点:
(假设ABC都在0时刻到达)
到达顺序:A,B,C。
平均周转时间:(100+110+120)/3=110s
算法二:
最短任务优先(Shortest Job First,SJF)
哪个任务短执行哪个。
假设ABC同时到达。
缺点:
A在0s到达,B和C在10s到达。
BC仍要等待A完成后再执行。
P2:15+24+1(进程调度)=40s
P3:18+24+36+1(进程切换)+1(进程调度)=80s
P1:24+36+30+12+1(切换)+1(切换)+1(调度)=105s
t=(40+80+105)/3=75s
算法三:
最短完成时间优先(Shortest Time-to-Complete First,STCF)
它抢占式地调度程序,即抢占一个工作,运行另一个工作。相对的,SJF是非抢占式的。
当新工作进入系统,STCF会确定谁的剩余时间最少并且调度该工作。
调度指标二:响应时间
SJF和STCF的响应时间都不咋地。
算法四:轮转(Round-Robin)
简单说来,就是不是一直做一个工作,A工作一会后B工作。
(时间片的长度必须是时钟中断周期的整数倍)
缺点:
若时间片太短,突然切换上下文会影响整体性能;时间片太长,响应时间不好。并且RR的周转时间不理想。
结合I/O
当工作发出I/O请求时,当前运行的程序会被阻塞,不使用CPU。这时,调度程序应在CPU上安排另一个工作。
eg.
A和B都需要50s的CPU时间,但A每运行10ms就发出I/O请求,假设每个I/O请求需要10ms,B不发出I/O请求。
如此实现重叠(overlap)。
但是有个最重要的问题:我们不知道每个工作的长度(时间),执行怎样的调度策略?
且听下回分解。