文章目录
前言
Tips:各种算法的学习思路
1.算法思想
2.算法规则
3.算法优缺点
4.是否产生饥饿
5.抢占式还是非抢占式
6.算法用于进程调度/进程调度
一、处理机调度相关基本概念
1.衡量调度的常用指标
- 周转时间=完成时间-到达时间
- 等待时间=周转时间-运行时间(-I/O操作时间)
- 吞吐率=作业量/单位时间
- 响应时间=首次返回时间-用户请求时间
2.进程调度的功能
(1)记录系统中所有进程的实行情况
为进程的调度做准备,将各个进程的状态记录在各个进程的PCB中。
(2)选择占有处理机的进程
按照一定的策略选择一个进程处于就绪状态。
(3)进行进程上下文的切换
当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文的切换,以使被调度旋转的进程得以执行。
广义的进程调度是指上面三个步骤,狭义的进程调度是指1,2两个步骤,第三个步骤,只有在其他进程抢到执行权才会进行。
二、调度算法
1.先来先服务算法(FCFS)
描述:将各个进程根据到达时间,逐一放入内存中,根据到达时间的优先程度逐个执行。类似于排队买奶茶。
总结
思考:缺点很明显,买一杯奶茶的人,可能因为前面买20杯奶茶而等待半个小时。
2.短作业优先算法(FCFS)
非抢占式描述:运行时间短的进程会被优先执行。给未做奶茶的队伍给排了一个序,买的少的先做
抢占式描述:抢占式是指运行中的进程会被动让出CPU。给买奶茶的队伍给排了一个序,买的少的先做,哪怕买的多的已经在做了
总结
思考: 缺点也很明显,长作业进程会饥饿,会饿死…只要一直有人来买一杯奶茶,买两杯奶茶的人这辈子都喝不到了…
3.高响应比优先算法(HRRN)
描述:通过响应比=(等待时间+运行时间)/运行时间,来优先分配调度。还是买奶茶,买奶茶数量少的人,肯定不希望花很长的时间,做很少的事情。通过不满意度(买奶茶总共时间/买奶茶数),等比的让用户进行买奶茶。
总结:
思考:虽然这个算法已经很好了,但是没有区分任务的紧急程度。在沙漠中快渴死的一群人,都想先舔一口奶茶再说吧。
三种算法的比较
以上三种算法都是对于早期批处理系统的调度算法
4.时间片轮转算法(RR)
描述:类似于先来先服务算法,只不过每次只服务一个时间片,服务后的进程重新排到就绪队列末尾,直到服务完成。还是买奶茶,如果时间片为2,每人先给2杯奶茶,然后到后面重新排队。
时间片为2时:
时间片为5时:
思考:如果轮流时间片太长,就会导致每个进程执行完后再轮流,增大了响应时间,退化成了先来先服务算法。每人一次最多发100杯奶茶,跟普通排队买奶茶有什么区别…
5.优先级调度算法
非抢占式描述:优先级越高的进程,优先执行。这次用打菜,VIP优先,SVIP更优先,还是等前面人把4个菜打完。
抢占式描述:优先级越高的进程,抢先执行。这次用打菜,VIP优先,SVIP更优先,这次不是插队了,菜都不等你打完,VIP就是嚣张。
补充
思考
6.多级反馈队列调度算法
描述:通过多级队列,队列优先级从高到底,时间片从低到高,极大的平衡了各自调度算法的优缺点。沙漠中刚走出来的人,(时间片)先喝一杯奶茶为了(优先级)活命。再喝2杯奶茶解决温饱,再喝4杯奶茶为了享受。
注意:还未执行完毕的时间片被抢占了,会回到当前队列等待。你在喝完第1杯奶茶解决温饱时,有人刚从沙漠走出了走出来,他先喝一杯活命,你继续喝第2杯奶茶