1. 真题背景与核心考点解析
2009年考研计算机专业基础综合(408)第24题是一道经典的进程调度算法应用题。这道题出现在操作系统部分的考查中,主要检验考生对多种进程调度算法的理解程度和实际应用能力。从历年真题分析来看,进程调度算法是操作系统部分的必考内容,几乎每年都会以不同形式出现。
这道题的特殊性在于它采用了"计算题+简答题"的复合形式。题目会给出3-5个进程的到达时间和服务时间,要求考生分别计算在不同调度算法下的平均周转时间和平均带权周转时间。这种题型不仅需要掌握算法原理,更需要具备快速准确的手算能力。
重要提示:在实际考试中,这类题目往往要求10-15分钟内完成计算和简答,因此平时练习时就要养成规范、快速的解题习惯。
2. 进程调度算法基础概念
2.1 关键术语定义
在深入解析之前,我们需要明确几个核心概念:
- 到达时间(Arrival Time):进程进入就绪队列的时间点
- 服务时间(Burst Time):进程需要占用CPU的总时间
- 完成时间(Completion Time):进程执行结束的时间点
- 周转时间(Turnaround Time):完成时间 - 到达时间
- 带权周转时间(Weighted Turnaround Time):周转时间 / 服务时间
2.2 常见调度算法分类
考试中常见的调度算法可分为两大类:
-
非抢占式调度:
- 先来先服务(FCFS)
- 短作业优先(SJF)
- 优先级调度(非抢占式)
- 高响应比优先(HRRN)
-
抢占式调度:
- 最短剩余时间优先(SRTF)
- 时间片轮转(RR)
- 优先级调度(抢占式)
3. 典型题目解析与计算步骤
3.1 题目示例重现
假设题目给出如下进程信息:
| 进程 | 到达时间 | 服务时间 |
|---|---|---|
| P1 | 0 | 7 |
| P2 | 2 | 4 |
| P3 | 4 | 1 |
| P4 | 5 | 4 |
3.2 FCFS算法计算过程
步骤1:确定调度顺序
按照到达时间排序:P1 → P2 → P3 → P4
步骤2:绘制甘特图
code复制时间轴:0-----7-----11-----12-----16
P1 P2 P3 P4
步骤3:计算各时间参数
| 进程 | CT | TAT | WTAT |
|---|---|---|---|
| P1 | 7 | 7-0=7 | 7/7=1.0 |
| P2 | 11 | 11-2=9 | 9/4=2.25 |
| P3 | 12 | 12-4=8 | 8/1=8.0 |
| P4 | 16 | 16-5=11 | 11/4=2.75 |
步骤4:计算平均值
平均周转时间 = (7+9+8+11)/4 = 8.75
平均带权周转时间 = (1.0+2.25+8.0+2.75)/4 = 3.5
3.3 SJF算法计算过程
步骤1:初始时刻(0ms)
就绪队列:P1(唯一进程)
执行P1(0-2ms)
步骤2:2ms时刻
P2到达,P1剩余5ms
就绪队列:P1(5), P2(4)
选择P2执行(2-4ms)
步骤3:4ms时刻
P3到达,P2剩余2ms
就绪队列:P1(5), P2(2), P3(1)
选择P3执行(4-5ms)
步骤4:5ms时刻
P4到达,P3已完成
就绪队列:P1(5), P2(2), P4(4)
选择P2执行(5-7ms)
步骤5:7ms时刻
P2已完成
就绪队列:P1(5), P4(4)
选择P4执行(7-11ms)
步骤6:11ms时刻
就绪队列:P1(5)
执行P1(11-16ms)
甘特图结果:
code复制时间轴:0-2-4-5-7-11-16
P1 P2 P3 P2 P4 P1
注意:SJF的非抢占式版本在实际考试中更常见,但有些题目会明确要求使用抢占式版本(SRTF),务必仔细审题。
4. 高频考点与解题技巧
4.1 易错点分析
- 时间单位混淆:有些题目用ms,有些用时间片,统一单位很重要
- 抢占时机判断:新进程到达时是否触发抢占
- 上下文切换开销:部分题目会考虑调度开销
- 优先级定义:数字越大优先级越高还是越低
4.2 快速计算技巧
- 表格法:建立完整的时间参数表格,避免遗漏
- 分段计算:对于抢占式算法,将进程执行分段记录
- 交叉验证:用不同方法验证结果合理性
- 特殊值检查:第一个和最后一个进程的时间参数往往具有特征
5. 扩展算法解析
5.1 时间片轮转(RR)算法
假设时间片q=3,计算过程如下:
- 0ms:P1开始(0-3)
- 3ms:P1剩余4,P2到达,队列:P2,P1
- 3-5ms:P2执行(3-5)
- 5ms:P2剩余2,P3到达,队列:P1,P2,P3
- 5-8ms:P1执行(5-8)
- 8ms:P1剩余1,P4到达,队列:P2,P3,P4,P1
- 8-10ms:P2执行(8-10)
- 10ms:P2完成,队列:P3,P4,P1
- 10-11ms:P3执行(10-11)
- 11ms:P3完成,队列:P4,P1
- 11-14ms:P4执行(11-14)
- 14ms:P4剩余1,队列:P1,P4
- 14-15ms:P1执行(14-15)
- 15ms:P1完成,队列:P4
- 15-16ms:P4执行(15-16)
- 16ms:所有进程完成
5.2 高响应比优先(HRRN)算法
响应比 = (等待时间 + 服务时间) / 服务时间
计算关键时间点的响应比:
- 0ms:只有P1,执行P1(0-2)
- 2ms:
- P1剩余5,等待时间=0 → (0+5)/5=1
- P2到达,等待时间=0 → (0+4)/4=1
选择P2执行(2-4)
- 4ms:
- P1剩余5,等待时间=2 → (2+5)/5=1.4
- P2剩余2,等待时间=0 → (0+2)/2=1
- P3到达,等待时间=0 → (0+1)/1=1
选择P1执行(4-9)
- 9ms:
- P2剩余2,等待时间=5 → (5+2)/2=3.5
- P3等待时间=5 → (5+1)/1=6
- P4等待时间=4 → (4+4)/4=2
选择P3执行(9-10)
- 10ms:
- P2剩余2,等待时间=6 → (6+2)/2=4
- P4等待时间=5 → (5+4)/4=2.25
选择P2执行(10-12)
- 12ms:
- P4等待时间=7 → (7+4)/4=2.75
执行P4(12-16)
- P4等待时间=7 → (7+4)/4=2.75
6. 性能比较与算法选择
6.1 各算法计算结果对比
| 算法 | 平均周转时间 | 平均带权周转时间 |
|---|---|---|
| FCFS | 8.75 | 3.5 |
| SJF | 7.75 | 3.125 |
| RR(q=3) | 9.25 | 3.875 |
| HRRN | 7.25 | 2.875 |
6.2 算法适用场景
- FCFS:简单但性能差,适合长作业为主的系统
- SJF:理论最优,但需要预知服务时间
- RR:公平性好,适合分时系统
- HRRN:平衡响应时间和执行效率
7. 实战演练与注意事项
7.1 典型错误案例
错误场景:在SRTF算法中,新进程到达时忘记比较剩余时间
正确做法:
- 维护当前进程剩余时间
- 每次新进程到达时比较:
- 若新进程服务时间 < 当前剩余时间,则抢占
- 否则继续执行当前进程
7.2 计算加速技巧
- 并行计算法:同时计算多个算法的时间参数
- 特征点标记:在时间轴上标记所有进程到达时刻
- 预判转折点:提前预测可能发生抢占的时间点
- 模板化记录:使用固定格式记录每个进程的状态变化
7.3 考试时间管理建议
- 5分钟:理解题意,整理已知条件
- 8分钟:完成主要算法的计算
- 2分钟:检查关键时间点的调度决策
- 5分钟:回答简答部分并整体复核
在实际教学过程中发现,很多考生在RR算法计算时容易遗漏时间片未用完但进程已完成的情况。例如一个进程剩余2ms但时间片是3ms,实际只执行2ms就应该转入下一个进程。这种细节往往就是拉开分数的关键。