实验内容:模拟进程调度。

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.csvtest_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. 实验要求

实验要求:

作业提交:

  • 代码上传到服务器指定文件
  • 实验报告(同时提交markdown和pdf格式)提交到课堂派

4. 评分

本次课程设计按百分制打分,满分为100分。

  • 进程控制块及进程创建,得20分
  • 每个调度算法,得20分
  • 非关键性代码(如读写文件),得15分

  • 文档可读性,得5分

注:以上评分只是参考,比如

5. 实验报告

实验报告模板

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-07-23 22:14

results matching ""

    No results matching ""