操作系统进程的调度与调度算法
一、调度的基本概念
当计算机有一堆任务需要处理,但由于资源有限,无法同时处理,这时候就需要某种规则来决定任务的处理顺序,即调度。
调度分为三个层次:
要做什么 | 调度方向 | 发生频率 | 对进程状态影响 | |
---|---|---|---|---|
高级调度(作业调度) | 按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程 | 外存到内存(面向作业) | 低 | 无 -> 创建态 -> 就绪态 |
中级调度(内存调度) | 按照某种规则,从挂起队列中选择合适的进程将其数据调回内存 | 外存到内存(面向进程) | 中 | 挂起态 -> 就绪态(或阻塞挂起 -> 阻塞态) |
低级调度(进程调度) | 按照某种规则,从就绪队列中选择一个进程为其分配处理机 | 内存到CPU | 高 | 就绪态 -> 运行态 |
其中,几个需要注意的点:
- 作业调度是将作业从外存第一次调入内存并创建线程。
- 内存调度将内存中暂时不会使用的内存映像调到外存,之后需要使用了,再次调回。这里就引入了两个挂起状态(就绪挂起和阻塞挂起),使得进程状态转换变为了七状态模型。最重要的是,内存调度内存中的进程的PCB是不会迁移到外存的,而是会进入内存的挂起队列中。
二、批处理系统调度算法
调度算法所针对的可以是作业,也可以是进程(但要注意区别作业调度和进程调度的差别)。
算法 | 思想 | 是否可抢占 | 优点 | 缺点 | 是否会产生饥饿 |
---|---|---|---|---|---|
先来先服务(FCFS) | 在作业/进程调度时,每次调度都是从后备队列/就绪队列中选择最早到达的作业/线程为其服务(作业调度将作业调入内存、分配资源、创建进程;进程调度为之分配处理机) | 非抢占式 | 公平且实现简单 | 对长作业有利,但对短作业不利 | 否 |
最短作业优先(SJF) | 在作业/进程调度时,每次调度都是从后备队列/就绪队列中选择最短服务时间的作业/线程为其服务(对于进程调度时称为短进程优先SPF) | SJF和SPF是非抢占式的,但有最短剩余时间优先算法(SRTN)是抢占式的 | 平均周转时间短,进程等待时间短 | 对短作业有利,但不利于长作业,短作业的频繁到来可能导致长作业的饥饿 | 是 |
高响应比优先(HRRN) | 在作业/进程调度时,计算每个作业/进程的响应比,选择响应比最高的作业/进程为其服务 | 非抢占式 | 综合考虑了等待时间和运行时间,既考虑了作业的到达先后顺序,又能避免长作业不被响应的问题 | 每次调度前需要计算响应比增加系统开销 | 否 |
其
中
,
响
应
比
=
等
待
时
间
+
要
求
服
务
时
间
要
求
服
务
时
间
其中,响应比=\frac{等待时间+要求服务时间}{要求服务时间}
其中,响应比=要求服务时间等待时间+要求服务时间
这些算法一般适用于早期批处理系统,当然FCFS算法也经常结合交互式系统算法使用(多级反馈队列调度算法),下节介绍。
三、交互式系统调度算法
算法 | 思想 | 是否可抢占 | 优点 | 缺点 | 是否会饥饿 | 补充说明 |
---|---|---|---|---|---|---|
时间片轮转算法(RR) | 此算法只针对进程,以各个进程到达就绪队列的顺序(FCFS),轮流让各个进程执行一个固定大小的时间片。在时间片结束后,如果未执行完就立即剥夺处理机分配,重新进入就绪队列队尾等待 | 抢占式(时钟中断) | 公平;响应快 | 高频率的进程切换,系统开销较大;不区分任务紧急程度 | 否 | 时间片大小对算法的效果影响较大,时间片过大算法就向FCFS算法趋近,而时间片过小则进程切换过于频繁,系统开销巨大 |
优先级调度算法 | 调度时选择优先级最高的作业/进程进行调度,甚至还会用于I/O调度 | 均有 | 优先级区分了任务的重要程度;动态优先级调整可以灵活调整各作业/进程的偏好程度 | 高优先级的进程源源不断到来会导致低优先级进程的饥饿 | 是 | 进程的优先级设置中通常有静态优先级和动态优先级 |
多级反馈队列调度算法 | (1)设置多级就绪队列,各级队列优先级从高到低,时间片从小到大;(2)新进程首先进入第1级队列,按FCFS等待被分配,若时间片结束未进程未结束,进入下一级队列队尾(如果已在最后一级则重新返回这级队列队尾);(3)只有k级队列为空时,才为k+1级队列队首进程分配时间片 | 抢占式 | 对各进程较为公平(FCFS);每个新到达的进程可以快速被响应(RR);短进程只需要较少时间就能完成(SPF) ;不必估计进程运行时间;考虑进程的优先级;灵活调整对进程的偏好 | 可能会产生饥饿(源源不断的短进程进入) | 是 | 如何理解灵活调整进程偏好:比如I/O密集型进程由于阻塞后重新放回就绪队列,此进程仍然会被放入优先级高的队列保持较高优先级 |
- 多级反馈队列调度算法理解图:
- 优先级调度算法中的优先级设置规则:
(1) 静态优先级中,系统进程优先级高于用户进程
(2) 前台进程优先级高于后台进程
(3) 操作系统更偏好于I/O型繁忙型进程(I/O设备和CPU可并行,先让I/O密集型进程完成I/O, 可以提高系统吞吐量)
(4) 动态优先级中,提升就绪队列中等待时间长进程的优先级,降低占用处理机运行时间长的优先级
参考:《王道考研操作系统》
地址:https://www.bilibili.com/video/BV1YE411D7nH