调度算法(重点)
饥饿的理解
轮到该进程使用CPU时,另一个进程以某种原因抢先占用CPU(抢占)
几个人一起吃一块蛋糕,轮到你吃时,你后边的人抢到你前面吃掉了你的那一份,没吃到原本该你吃的东西,你会很饥饿
非抢占
FCFS、SPN、HRRN
抢占
RR、SRT、Feedback
开销小
FCFS、RR
有饥饿
SPN、SRT、Feedback
2.10.1 FCFS先来先服务
- 按照请求cpu顺序执行
- 对短进程不利,参考超市购物
- 对I/O密集型不利,因为cpu需求小
- 属于非抢占,无饥饿,响应时间可能很长
- 早晨食堂排队买早餐就是先来先服务
2.10.2 RR时间片轮转调度算法RoundRobin
-
在FCFS中加入加入时钟中断
-
在分时系统或事务处理系统中特别有效
-
属于抢占,无饥饿算法,性能与时间片设置密切
- 时间片长:对长作业有利
- 时间片短:对短作业有利
-
对I/O密集型不利:I/O密集型进程每次短暂使用CPU后,都会再加入队列尾进行调度,而cpu密集型则可以占用cpu更长时间,I/O密集型进程所用时间大于预期时间。
- 你早餐去食堂排队买两个鸡蛋(短作业),到你的时候买了一个鸡蛋饭卡没钱了(I/O中断),你只能去充卡,卡充好后(I/O满足),你再回来排队,只能从队尾排起
-
改进的算法:URR
-
新增I/O阻塞完成的进程队列队列,该队列优先级高于就绪队列,比RR更公平
- 你早餐去食堂排队买两个鸡蛋(短作业),到你的时候买了一个鸡蛋饭卡没钱了(I/O中断),你只能去充卡,卡充好后(I/O满足),你再回来排队,可以只排因为充卡中断买鸡蛋的人排成的队,而不用去排没买过饭的人排成的队
-
早晨食堂排队买早餐的基础上,增加一个时间限制,你30秒之内买不完饭就要重新排队…
2.10.3 短作业优先SJF/SPN/SPF
- 该算法照顾短作业,所以必须事先知道谁“短”,所以该算法前提为所有进程执行时间已知
- 属于非抢占、有饥饿算法
- 减少了平均周转时间,因为非抢占,不适用于分时、事务处理系统
- 用户估计不准时不能做到SJF
- 早晨食堂排队买早饭,谁买东西快谁先买,但一个人正在买的时候另一个人不能插队
2.10.4 剩余时间最短者优先算法SRT
- 选择预期剩余时间最短的进程,是在短作业优先的基础上增加了抢占机制
- 属于抢占、有饥饿算法
- 该进程必须记录进程已执行时间
- 在平均周转时间上优于短作业优先,也需要预估进程执行时间
- 早晨食堂排队买早饭,谁买东西快谁先买,如果小张还有1分钟才能买完,这时候来了一个还差59秒就能买完的人,新来的人就能插到小张前面买
2.10.5 HRRN 最高响应比优先算法
-
当前进程执行完成时,下一个选用响应比最高的进程
-
属于非抢占,有饥饿算法
-
响应比=(waitTime+serveTime)/serveTime=1+waitTime/serveTime
-
你去食堂是为了买早饭,你到食堂的排队时间+买饭时间再除以买饭时间就是响应比,这个值越大,你买早饭的效率就越低
-
短作业serveTime小,waitTime/serveTime更大,响应比更大,优先调度
-
长作业等待时间长了之后,waitTime/serveTime增大,响应比变大,优先调度
-
该算法是一种动态优先级调整算法,结合了FCFS和SJF
-
该算法既照顾了短进程,又不让长进程长时间饥饿
-
该进程需要进行响应比计算,需要预估执行时间
-
去食堂排队买早饭,小张急着上课,买东西快,或者小李买的慢,但是被插队了好几次,阿姨为了不让大家生气,允许他俩插队打饭
2.10.6 FeedBack 反馈调度算法
-
该算法的思路是惩罚长进程,而像SJF、SRT、HRRN是给短进程优惠
-
属于抢占、有饥饿算法
-
设置多个优先级队列区别对待,各个队列中时间片可以不一样长,优先级高的队列时间片短
-
新来的进程位于最高级优先级队列尾
-
先执行优先级高队列中的进程,进程时间片用完还没执行完就会降级到优先级更低的队列尾
-
一般优先级为i的队列时间片为2^i
-
能够较好的满足各种类型用户需求
-
终端型用户、短作业用户:交互作业常为短作业、在比较高的优先级队列就能执行完
-
长进程用户:进程随着队列下降,分配的时间片足够执行完
-
去食堂排队买早饭,有好几个窗口,但只有一个打饭阿姨,阿姨让大家排成一个队,轮流来第一个窗口打饭,在10秒内没打完饭的人去第二个窗口排队,等第一个窗口没人了,阿姨来第二个窗口帮大家打饭,20秒内没打完的人再去第三个窗口排队,第三个窗口可能时间限制是40秒,第四个第五个以此类推,要是这时候又来了一个人打饭,阿姨要回到第一个窗口在10秒内帮他打饭,打不完这个人也要挨个去更长时间的窗口排队