进程调度算法实验
实验目的
- 理解进程调度的基本概念和原理
- 掌握 FCFS、SJF、RR、优先级调度、MLFQ 等算法
- 通过模拟实验比较各算法的性能指标
实验环境
文件结构
性能指标
设进程 P_i 的到达时间为 $AT_i$,服务时间为 $BT_i$:
\text{周转时间} = CT_i - AT_i
\text{等待时间} = WT_i = TAT_i - BT_i
\text{响应时间} = RT_i = \text{首次运行时间} - AT_i
算法公式
FCFS 周转时间
TAT_i = \sum_{j=1}^{i} BT_j - AT_i \quad (AT_i \leq AT_{i+1})
SJF 平均等待时间最小化
\min \frac{1}{n} \sum_{i=1}^{n} WT_i
RR 吞吐量
\text{吞吐量} = \frac{n}{T_{\text{总}}} \quad \text{其中 } T_{\text{总}} = CT_{\text{max}} - AT_{\text{min}}
运行方式
命令行参数说明
| 参数 |
说明 |
默认值 |
-n, --num |
进程数量 |
5 |
-s, --seed |
随机种子 |
42(固定) |
-a, --algo |
运行的算法 |
全部 |
--demo |
使用预设演示数据 |
False |
--arrival |
到达时间范围 |
0,50 |
--burst |
服务时间范围 |
1,20 |
--priority |
优先级范围 |
1,10 |
预设演示数据
| PID |
到达时间 |
服务时间 |
优先级 |
| P1 |
0 |
7 |
3 |
| P2 |
2 |
4 |
1 |
| P3 |
4 |
1 |
4 |
| P4 |
5 |
4 |
2 |
| P5 |
6 |
2 |
3 |
思考题
- 分析 FCFS 和 SJF 各自的优缺点
- 为什么说 SJF 可以获得最短的平均等待时间?
- RR 算法中,时间片大小对系统性能有何影响?
- 多级反馈队列如何解决"长作业饥饿"问题?
- 如何证明某种调度算法是最优的?
参考资料
- 操作系统概念(Abraham Silberschatz)
- 现代操作系统(Andrew S. Tanenbaum)