【OS笔记06】:进程和线程4-进程调度的核心算法
文章目录
- 接续:进程调度算法 (思路2)
- 4. 时间片轮转法 (RR)
- (1) 时间片取多大比较合适?
- (2) 最佳的时间片值是多少?
- 5. 调度算法的融合:多级反馈队列
- 多级反馈队列调度算法
- 算法规则
- 多级反馈队列调度算法示例
- 相关习题与解析
接续:进程调度算法 (思路2)
在上一节笔记中,学习了基于“重要性”的调度算法,如短进程优先(SJF)和最高响应比优先(HRN)。现在,我们来学习另一种完全不同的设计思路:
从 “先到的进程结束,后到的进程方运行” 演进为 “先到的进程运行一个片刻,后到的进程立即运行”。
这种公平地给予每个进程一个运行机会的思想,就是时间片轮转法。
4. 时间片轮转法 (RR)
- 核心思想:
- 进程就绪队列往往按到达的时间来排序。
- 调度程序总是选择就绪队列中的第一个进程,即按照先来先服务原则调度。
- 但是,一个进程占用处理机则仅使用一个时间片。
- 在使用完一个时间片后,如果进程还没有完成,它必须释放出处理机给下一个就绪的进程。
- 该进程返回到就绪队列的末尾,重新排队等待再次运行。
(1) 时间片取多大比较合适?
这是一个关键的权衡问题:
- 如果时间片长度过短:
- 调度程序剥夺处理机的次数增多,这将使进程上下文切换次数也大大增加,加重了系统开销,影响整体效率。
- 如果时间片长度过长:
- 长到足以让一个进程完成其全部运行工作,那么时间片轮转法就退化为先来先服务(FCFS)策略了,失去了快速响应的优势。
(2) 最佳的时间片值是多少?
最佳时间片没有一个固定的值,它取决于具体的系统环境。
- 参考公式:
时间片长度 q = 响应时间 R / 最大进程数 N_max
- 它将随系统而异、随负载而异,同时也随进程而异。
- 时间片的选择是实现调度算法的关键之处,通常需要综合考虑终端数目、处理机能力、各终端任务的急迫程度、外存传输速度等方面的因素。
5. 调度算法的融合:多级反馈队列
我们已经学习了 FCFS、优先级算法和时间片轮转法。有没有一种算法能集它们之所长呢:多队列表反馈法,也常被称为多级反馈队列调度算法。
多级反馈队列调度算法
- 定义: 它是先来先服务、时间片轮转和优先级算法的综合。
- 核心思想:
- 设置多个就绪队列,并为每个队列赋予不同的优先级。第1个队列优先级最高,第2个次之,以此类推。
- 每个队列中进程执行的时间片大小也各不相同。进程所在队列的优先级越高,其相应的时间片就越短。
- 根据作业性质或类型不同,将进程就绪队列分为多个,每个队列采用不同的调度算法。
- 例如: 终端型作业为前台作业(优先级高,用RR),批处理作业为后台作业(优先级低,用FCFS)。
算法规则
- 新进程进入: 当一个新进程进入系统时,首先将它放入第1队列(最高优先级)的末尾,按FCFS原则排队等待调度。
- 时间片用完降级: 如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2队列的末尾,再同样地按FCFS原则等待调度执行。这个过程可以一直持续下去,直到进程被移入最后一个队列。在最后一个队列中,通常采用时间片轮转的方式运行。
- 调度原则(抢占式):
- 仅当第1队列为空时,调度程序才调度第2队列中的进程运行。
- 仅当第1至第(i-1)个队列均为空时,才会调度第i个队列中的进程运行。
- 抢占: 如果处理机正在为第i队列中的某进程服务时,又有新进程进入优先级较高的队列(第1至i-1队列),则此时新进程将抢占正在运行进程的处理机。被抢占的进程被放回第i队列的末尾,重新等待调度。
多级反馈队列调度算法示例
- 问题: 设有A、B、C、D、E五个进程,其到达时间和要求运行时间如下表。采用多级反馈队列调度算法,系统中共有3个队列,其时间片依次为1、2和4。试计算其平均周转时间和平均带权周转时间。
作业 | 提交时间 | 运行时间 |
---|---|---|
A | 0 | 3 |
B | 1 | 8 |
C | 3 | 4 |
D | 4 | 5 |
E | 5 | 7 |
-
调度分析: 这是一个非常复杂的抢占和降级过程。根据算法规则,CPU总是在最高优先级的非空队列中选择进程运行。一个进程在用完当前队列的时间片后,会被移动到下一级队列的队尾。
(书中的调度分析过程较为简略,我们直接看最终的计算结果) -
周转时间的计算结果:
作业 | 提交时间 | 运行时间 | 开始时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
A | 0 | 3 | 0 | 9 | 9 | 3.00 |
B | 1 | 8 | 1 | 27 | 26 | 3.25 |
C | 3 | 4 | 3 | 20 | 17 | 4.25 |
D | 4 | 5 | 4 | 22 | 18 | 3.60 |
E | 5 | 7 | 5 | 26 | 21 | 3.00 |
- 平均周转时间 T = (9 + 26 + 17 + 18 + 21) / 5 = 18.2
- 平均带权周转时间 W = (3 + 3.25 + 4.25 + 3.6 + 3) / 5 = 3.42
- 带权周转时间 = 周转时间 / 运行时间,它衡量了单位运行时间所带来的等待开销。
相关习题与解析
-
下面关于进程的叙述中,不正确的有 _____ 条。
- ① 进程申请CPU得不到满足时,其状态变为等待状态。
- ② 在单CPU系统中,任一时刻都有一个进程处于运行状态。
- ③ 优先级是进行进程调度的重要依据,一旦确定不能改变。
- ④ 进程获得处理机而运行是通过调度而实现的。
- 参考答案: 3 (即 ① ② ③)
解析:
- ① 错误。申请CPU而得不到满足时,是就绪态。等待态是等待I/O等资源。
- ② 错误。当所有进程都在等待I/O或系统空闲时,没有进程在运行。
- ③ 错误。优先级分为静态优先级和动态优先级,动态优先级在运行中是会改变的。
-
下述作业调度算法中,______调度算法与作业的估计运行时间有关。
- A. 先来先服务
- B. 短作业优先 (✓)
- C. 时间片轮转
- D. 多级队列
解析: 短作业优先(SJF)算法的核心就是根据作业的估计运行时间来选择最短的作业进行调度。
-
______ 优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。
- A. 静态 (✓)
- B. 作业
- C. 资源
- D. 动态
解析: 这是静态优先级的定义。动态优先级则是在运行过程中可以改变的。
-
现有3个同时到达的作业J1、J2和J3,它们的执行时间分别是T1、T2和T3,且T1<T2<T3。系统按单道方式运行且采用短作业优先算法,则平均周转时间是 _____ 。
- A. (3T₁+2T₂+T₃)/3 (✓)
- B. (T₁+T₂+T₃)/3
- C. (T₁+2T₂+3T₃)/3
- D. T₁+T₂+T₃
解析:
- 短作业优先,执行顺序为 J1 → J2 → J3。
- J1的周转时间 = T₁
- J2的周转时间 = T₁ + T₂
- J3的周转时间 = T₁ + T₂ + T₃
- 平均周转时间 = (T₁ + (T₁ + T₂) + (T₁ + T₂ + T₃)) / 3 = (3T₁ + 2T₂ + T₃) / 3。
-
设有四个作业同时到达,每个作业的执行时间均为2小时,它们在一台处理器上按单道方式运行,则平均周转时间为 _____ 。
- A. 8小时
- B. 2.5小时
- C. 5小时 (✓)
- D. 1小时
解析: 由于作业同时到达且运行时间相同,任何调度算法(如FCFS)效果都一样。
- 第一个作业的周转时间 = 2小时
- 第二个作业的周转时间 = 2 + 2 = 4小时
- 第三个作业的周转时间 = 4 + 2 = 6小时
- 第四个作业的周转时间 = 6 + 2 = 8小时
- 平均周转时间 = (2 + 4 + 6 + 8) / 4 = 20 / 4 = 5小时。