页面置换、作业调度、进程调度小剖析
页面置换、作业调度和进程调度他们之间有很多相似的地方,作业跟进程调度之间尤为相似,之前一直搞不清他们之间的区别跟联系,你是不是也跟我有一样的感受呢?看完这篇文章或许会让你对他们有更清晰的认识。
页面置换算法:
1,先进先出:淘汰最早进入cache的信息块。
2,最近最久未使用:淘汰近期使用频率最低的信息块。
3,随机替换:用随机数发生器随机产生一个信息块号,然后淘汰掉。
4:优化替换:此方法必须先执行一次程序,然后根据cache替换情况对接下来的信息块进行替换。
5:最佳置换:淘汰规则是将以后永远不会用到或者最长时间不会用到的信息块淘汰掉。此方法能够最大限度的减少缺页率,但是这是一种理想的方法,现实是无法实现的,只能作为其他置换算法的一个衡量标准。
作业调度:
1,先来先服务:按作业的到达时间进行调度,先到达先调度。
2,最短作业优先:优先执行所需时间最短的作业。
3,优先数:优先执行优先级高的作业。
4,最高响应比优先:优先执行响应比高的作业。响应比=(等待时间+计算时间)/计算时间。
进程调度:
1,先进先出:跟作业调度的先来先服务差不多,先执行最先进入就绪队列的进程。
2,最短优先:跟作业调度的短作业优先差不多,优先执行所需时间最短的进程。
3,最高响应比:跟作业调度的最高响应比差不多,优先执行响应比高的进程。响应比=(等待时间+要求服务的时间)/要求服务的时间。
4,优先级:跟作业调度的优先级算法差不多,优先执行优先级高的进程。
5:,时间片轮转:按照先进先出的规则给进程分配时间片,时间片结束后不管有没有执行完,都将执行下一进程。
看到这里,大家会发现作业调度跟进程调度是如此的相似,那么他们之间到底有什么关系呢?一起看下面这张图:
由上图可以看出,作业调度跟进程调度是密切相关的,首先进行作业调度将使之进入就绪队列,然后进行进程调度,或者进程执行完毕继续下面的进程,或者挂起等待下一轮的调度。下面结合生活中的例子分析一下两级调度。
第一级的作业调度是会将一批作业同时装入内存,以淋浴公共澡堂为例,里面可能只有1个水龙头,但可以一次让三四个人一起进去洗,因为洗澡的人并不是总要占着水龙头,只要相互差开就行了。那么澡堂就可以规定一次进三个人,这三个洗完,再进三个。
第二级调度就是进程调度了,三个人同时用水龙头,那这个水龙头就相当于CPU,当然也可以多个水龙头,那就是多处理器了。洗的过程中,三个人可能有的在搓澡,有的在冥想也不一定,也有可能都就绪了等着冲水,那让谁用水龙头呢?最简单就是排先后,先申请的先用原则,但也不一定,比如有一个人说我再简单冲一下就洗完了,那就是个短作业,不妨让他先洗,洗完他就走了,这样大家的平均等待时间会缩短,也算是提高了效率;再就是有一个人可能在洗的过程中突然被肥皂迷了眼,所以需要赶紧冲一下,这就是高优先级的作业了,不同优先级之间,先可着高优先级的进行调度,这也是一种原则。所以总的来说,进程调度是在多个就绪进程中按一定的策略选出当前应执行的进程,合适与否,是按一定的策略遴选出来的。
我的理解大概就这些,不知道看完以后是不是对你有帮助,大家有什么更好的理解希望不吝赐教!