进程调度算法小结
进程调度算法,说白了在有限的CPU资源下,如何充分的利用CPU 高效的为各个进程服务。
村里新开了一个网吧 类比一台机器
网吧里有一台可供上网的电脑 类比单核CPU
来了一群小学生兴高采烈的想上网 类比一堆进程等着CPU来执行
网吧的老板 类比操作系统的进程调度器
OK 到这里,一堆进程抢着一个单核CPU执行 被我们类比成了一群小学生去网吧抢一台电脑上网。
非抢占式时代
(任何一个小学生上机了,其他人必须等他玩够了才能上,他没玩够都只能在旁边看着)
1.先来先服务算法
很好理解了,按照小学生们进入网吧的顺序排队,一个一个的玩,上一个玩够了 下一个才能上。
问题:来的晚的小明同学就很气,明明自己就想上网看一下拼嘻嘻买的练习册邮到哪了,五分钟都用不上的事,硬是要等前面的张三同学打一局50分钟还不投的LOL排位
对于执行时间短来的晚的进程很不友好,执行时间长的进程排在前面会导致后面的进程响应时间大大增长
2.短任务优先算法
也很好理解,不论小学生们什么时候进的网吧,每次都按每个小学生想上网的时间排序,再按顺序上网
问题:爱学习的小明同学早早的就能占上电脑,但是张三同学就很恼火,从早上八点来的想打一局LOL 排到晚上还没排到,后来的小马晚上五点来的都能排在他前边
很容易使执行时间长的进程排在后面长时间饥饿
3.高响应比优先算法
既然光靠进网吧顺序排序不公平,光靠占用电脑上网时间排序也不中,那不如二者结合一下
响应比 = (等待时间+要求服务时间)/ 要求服务时间 根据响应比排序,这下小学生们都觉得公平多了。
完全串行执行,用户体验不好,多个进程不能并行执行
抢占式时代
(不需要等上一个小学生玩够,根据网管的规则可以直接让下一个小学生上去爽一爽)
抢占式相比较非抢占式,就是一天网吧老板来了,发现小学生们规规矩矩的排队,无论按什么规则,总有排在后面的小学生默默落泪
网吧老板心里不是滋味,于是想办法打破之前的规则,制定新的规则,不需要上一个小学生玩够就可以根据规则,让下一个小学生上去爽一会,再轮给下一个小学生。没办法,一台电脑大家挤一挤嘛。
4.时间片轮转算法
小学生还是按照进网吧的先后顺序排队,网吧老板拿出一块秒表,每个小学生上机就开始计时,到了规定的时间就让下一个小学生上。
问题: 老板如果把秒表设定十秒,结果每个小学生上机后光是开机+关机就要用掉5秒,那他娘的轮来轮去时间都浪费在开机关机上了。
时间片设计的过端会导致CPU频繁的上下文切换,会浪费资源
5.优先级调度算法
老板根据想上网时间,来网吧顺序,以及家里有没有背景(是否是内核进程)来综合考虑,发给每个小学生发一张数字卡片,拿到的数字越小代表优先级越高
然后根据优先级排序,顺序让小学生们上机
老板还会动态的更新小学生手里的数字卡片,最大努力的保证公平,也最大努力的让家里有背景的同学赢在起跑线上。
最后看一下进程调度切换的实现