一.时间片轮转算法
- 算法规则:轮流让就绪队列中的进程执行一个时间片。若进程未在一个时间片内执行完毕,则将进程重新放到就绪队列队尾进行排队。
- 用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)
- 抢占式的算法(如果进程未在一个时间片内执行完毕,会被强行剥夺处理机使用权)
- 优点:公平,响应快
- 缺点:由于高频率的进程切换,会有一定开销。不区分任务的紧急程度
- 不会导致饥饿
- 时间片过长时:当每个进程都可以在一个时间片内运行完毕,则会退化成先来先服务算法
- 时间片过短时:由于高频率的进程切换,系统需要花费大量时间来进行进程切换
二.优先级调度算法
- 算法规则:每个进程/作业有各自的优先级,调度时选择优先级最高的进程/作业
- 用于进程和作业调度
- 非抢占式的情况:只有当前进程主动放弃处理机后,会选择当前已到达并且优先级最高的进程进行执行
- 抢占式的情况:不仅在进程主动放弃处理机时,每当有新的进程到达就绪队列时,就需要根据优先级进行调度
- 静态优先级:创建进程时确定,之后一直不变
- 动态优先级:根据具体情况动态的调整优先级
- 合理设置优先级:
系统进程优先级高于用户进程 前台进程优先级高于后台进程 操作系统更偏好于I/O型进程 - 优先级调整的时机:
如果进程在就绪队列中等待时间很长时,可以适当提升其优先级 如果进程占用处理机运行了很长时间时,可以适当降低其优先级 - 优点:比较灵活,可以优先处理紧急和重要进程
- 缺点:如果有源源不断的高优先级进程进入就绪队列,则可能出现饥饿
三.多级反馈队列调度算法
- 算法规则:
(1)首先设置多级就绪队列,各队列的优先级从高到低,时间片从小到大 (2)新进程到达时先进入第1级队列,按先来先服务原则等待分配时间片。若时间片用完进程还未结束,则将其放入下一级队列队尾。如果已经在最后一级队列,则继续放入最后一级队列队尾 (3)每次都执行不为空队列中的最高优先级队列中的靠前的进程 也就是说只有第1~k级队列都为空时,才会执行第k+1级队列中的进程 (4)如果是被抢占处理机的进程则依旧放入原队列队尾 - 用于进程调度
- 抢占式的算法(假设在第3级队列的进程运行过程中,第1级队列中进入了一个新的进程,那么新进程会抢占处理机,原来运行的进程进入第3级队列队尾)
- 优点:对各类进程相对公平;每个新到达的进程都可以很快得到响应;短进程只有较少的时间就可以完成;可灵活的调整对各类进程的偏好程度(比如专门将其放入哪一级队列)
- 会导致饥饿(如果有短进程源源不断的到达)
|