postgraduate-prep/experiment/README.md

125 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 进程调度算法实验
## 实验目的
1. 理解进程调度的基本概念和原理
2. 掌握 FCFS、SJF、RR、优先级调度、MLFQ 等算法
3. 通过模拟实验比较各算法的性能指标
## 实验环境
- Python 3.x
## 文件结构
```
experiment/
├── README.md # 实验文档
└── code/ # 代码目录
├── base.py # 基础类Process, ProcessScheduler
├── main.py # 主程序入口
├── fcfs.py # 先来先服务调度
├── sjf.py # 短作业优先调度 (含 SRTF)
├── rr.py # 时间片轮转调度
├── priority.py # 优先级调度
└── mlfq.py # 多级反馈队列调度
```
## 性能指标
设进程 $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}}
$$
## 运行方式
```bash
cd code
# 使用演示数据5个进程
python main.py --demo
# 生成随机测试数据默认5个进程种子42
python main.py
# 生成100个随机进程
python main.py -n 100
# 固定种子生成1000个进程可复现
python main.py -n 1000 -s 42
# 自定义参数范围
python main.py -n 50 --arrival 0,100 --burst 5,50 --priority 1,5
# 运行指定算法
python main.py -n 20 -a FCFS,SJF,RR
# 每次运行使用不同随机数据
python main.py -n 20 -s -1
```
### 命令行参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-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 |
## 思考题
1. 分析 FCFS 和 SJF 各自的优缺点
2. 为什么说 SJF 可以获得最短的平均等待时间?
3. RR 算法中,时间片大小对系统性能有何影响?
4. 多级反馈队列如何解决"长作业饥饿"问题?
5. 如何证明某种调度算法是最优的?
## 参考资料
- 操作系统概念Abraham Silberschatz
- 现代操作系统Andrew S. Tanenbaum