调度算法(笔记)
自己的小小笔记总结
调度算法:根据系统的分配策略所规定的资源分配算法
①为什么会有调度算法?调度算法有什么用?根据不同的系统和系统目标,采用不同的调度算法,能更加高效地提高效率。
②有哪些调度算法?
1.先来先服务调度算法(FCFS)
2.短作业(进程)优先调度算法(SJF)
3.高优先权调度算法(FPF)
4.基于时间片的轮转调度算法(RR)
1.先来先服务调度算法(最简单的调度算法)
原理:
可用于作业调度和进程调度。谁先来就先给谁服务
作业调度时:从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为他们分配资源,创建进程,然后放入就绪队列。
进程调度时:从就绪队列中选择一个最先进入该队列的进程,为它分配处理机。
优点:利于长作业,CPU繁忙型进程
缺点:不利于短作业,I/O繁忙型进程
2.短作业(进程)优先调度算法
原理:
对短作业或短进程优先调度(偏心短作业/短进程)
作业调度时:从后备作业队列中选择一个或多个估计运行时间最短的作业,将它们调入内存,为他们分配资源,创建进程,然后放入就绪队列。
进程调度时:从就绪队列中选择一个估计运行时间最短的进程,为它分配处理机。
优点:利于短作业(进程)
缺点:不利于长作业,没考虑作业的紧迫程度,实际应用中该算法不一定能真正做到短作业优先调度。
3.高优先权调度算法(FPF)
原理:
对短作业或短进程优先调度(偏心短作业/短进程)
作业调度时:从后备作业队列中选择若干个优先权最高的作业,将它们调入内存,为他们分配资源,创建进程,然后放入就绪队列。
进程调度时:从就绪队列中选择一个优先权最高的进程,为它分配处理机。
算法分类:
非抢占式优先权算法(要从一而终运行下去,除非自身放弃处理机)
抢占式优先权算法(处理机可以被抢)
优先权分类:
静态优先权:在创建进程时确定,在整个运行期间保持不变。
那怎么确定这个静态优先权呢?
有三依据: ①进程类型。系统进程的优先权比一般用户进程的要高
②进程对资源的需求。
③用户要求
动态优先权:在创建进程时确定,但可以在运行期间改变
优点:利于短作业(进程)
缺点:不利于长作业,没考虑作业的紧迫程度,实际应用中该算法不一定能真正做到短作业优先调度。
高响应比优先调度算法
这里要记住的是一个公式:
优先权(响应比)=(等待时间+要求服务时间)/要求服务时间
优点:照顾短作业,考虑作业的先后到达次序,兼顾长作业
缺点:增加系统开销(因为每次调度都要进行响应比计算)
4.基于时间片的轮转调度算法
(1)时间片轮转法
原理:在每次调度,把CPU分配给队首进程(按先来先服务排序的队列),让其执行一个时间片。当时间片用完,该进程会被停止,然后把它送到就绪队列的末尾,再把处理机分配给新的队首进程。
(2)多级反馈队列调度算法
原理:
(1)设置多个就绪队列,为各个队列依次递减赋予不同优先权,且第一队列优先权最高, 最后队列优先权最低。优先权越高,时间片越小。(在每个队列中都遵循FCFS)
(2)当一个新进程进入内存时,首先把它放进第一队列末尾,按FCFS原则静静地等待。轮到自己上场的时候,如果在规定的时间片里没有完成自己的任务,就会被安置到第二队列的末尾,同样,如果还没完成,就会到第三队列末尾,这样依次被安排下去。。。
(3)只有当第一队列空闲时,调度程序才会找第二队列的进程去运行。同理,只有当第1~(i-1)队列空闲时,才会调度第i队列的进程。
优点:拥有较好的性能,能满足终端型作业用户,短批处理作业用户,长批处理作业用户的需要。
调度算法中涉及的计算:
等待时间=开始服务时间-到达时间
优先权(响应比)=(等待时间+要求服务时间)/要求服务时间