实验内容:模拟进程调度。
1. 实验目的
加深对进程调度的理解。
2. 实验内容
2.1 实验内容
在服务器上用Vim编写程序,模拟进程调度,至少实现3种调度算法(至于调度细节,自行把握,本次实验没有标准答案,设计言之有理即可),
- 调度算法:先来先服务,短作业优先,优先级+时间片轮转
- 输出进程调度顺序
- 所有进程调度完,输出平均等待时间和平均带权周转时间
$$ 平均带权周转时间 = \frac{1}{作业个数} \cdot \sum\frac{作业完成时刻 - 作业到达时刻}{服务时间}
$$
在指定文件编写代码(可以自行在文件中添加函数等):
- 在文件
exp8_process_schedule/process_schedule.h
定义PCB、进程创建、调度等(如果你有多个头文件,最多提交代码时,将多个头文件内容放到process_schedule.h
) - 在文件
process_schedule.c
实现进程调度模拟操作
测试文件test_data_5.csv
和test_data_200.csv
(实际测试,可以先取用进程少的测试test_data_5.csv
,确保结果与逻辑结果一致无误,再用进程多的进行测试),格式如下:
pid,arrive_time,run_time,priority
1,1,2,4
2,3,5,2
3,4,8,3
4,6,1,1
5,7,4,1
pid
表示进程号,arrive_time
表示进程到达时间,run_time
表示进程运行所需的时间,priority
表示进程优先级,值越小表示优先级越高。
2.2 常见问题
(1)短作业优先,抢占还是不可抢占
都行,也可以两个都做。
(2)优先级+时间片轮转
同一个优先级的进程时间片都用完了,接下来怎么处理,是给进程再次赋予时间片,直接全部进程运行完,还是挪到下一个优先级。这个取决于你的设计,调度策略很多,本次实验没有标准答案,你选择你认为最合理的策略来实现。
(3)时间片设置多少
我没有给初值,是因为你可以用不同的时间片来测试。报告呈现,给出某个取值的结果就行。当然,你如果用不同的时间片来测试,并分析结果(是不是时间片太小也不好,太大也不好?),那就更好了。
(4)用scanf从终端获取数据
这个是不行的,不符合实际的软件测试,软件测试通常有很多测试文件,需要多次测试,每次从文件拷贝内容到终端,浪费时间,因此,需要直接从文件读取。
2.3 常见误区
(1)一开始就把进程全部创建好了
这不符合实际情况,进程是陆陆续续到达的,到达了才创建。
3. 实验要求
实验要求:
实验基本要求见:所有实验要求章节
截止时间:2022年7月2日 20:00,==不接受补交==
不得抄袭,一经发现,直接不予通过,已经上线代码查重,详情见所有实验要求/代码查重。
作业提交:
- 代码上传到服务器指定文件
- 实验报告(同时提交markdown和pdf格式)提交到课堂派
4. 评分
本次课程设计按百分制打分,满分为100分。
- 进程控制块及进程创建,得20分
- 每个调度算法,得20分
非关键性代码(如读写文件),得15分
文档可读性,得5分
注:以上评分只是参考,比如
5. 实验报告
见实验报告模板。