1 实验问题描述
设计程序模拟进程的先来先服务FCFS、短作业优先SJF和时间片RR算法的调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。如果选择RR算法,还需要指定时间片大小q。
分别采用三种进程调度算法进行调度,计算每个进程的完成时间,周转时间、带权周转时间和等待时间,并且统计n个进程的平均周转时间、平均带权周转时间和平均等待时间。最后,对三个算法做出比较评价。
程序要求如下:
采用FCFS、SJF和RR算法分别模拟进程调度过程,计算每个进程的周转时间,带权周转时间和等待时间,并且计算所有进程的平均周转时间,带权平均周转时间和平均等待时间;
输入
进程数n,进程编号,以及每个进程的到达时间T1, … ,Tn和服务时间S1, … ,Sn。在屏幕上要以表的形式显示输入的信息,如:
Process Num. | Arrival Time | CPU Burst |
--------- | --------- | --------- |
也可以以文件形式存储上述信息,在程序运行时从文件中读取数据并显示如上表的输入信息。此外,RR算法还要求输入时间片大小q。
根据显示信息:“1-FCFS,2-SJF,3-RR”,选择0、1或者2进入对应的算法过程。
输出:
要求模拟整个调度过程,输出每个时刻的进程运行状态,如:
Process Num.(pid) | Start Time(st) | End Time(et) | Ready Queue(rq) |
--- | --- | ---- | ---- |
--- | --- | ---- | ---- |
要求输出计算出来的每个进程的周转时间,带权周转时间和等待时间,如:\
Process Num.(pid) | Turnarround Time(tt) | WeightedTurnarround Time(wtt) | Waiting Time(wt) | Arrival Time | CPU Burst |
0 | --- | --- | --- | --- | --- |
1 | --- | --- | --- | --- | --- |
要求输出所有进程的平均周转时间,带权平均周转时间和平均等待时间。如:
Algorithm: ---------------
Average TAT: ---------------
Average WTAT: ---------------
Average WT: ---------------
2 测试数据
测试数据1:
n = 5, q = 2或4
pid | ArrivalTime | ServiceTime(CPU Burst) |
0 | 0 | 6 |
1 | 1 | 2 |
2 | 2 | 5 |
3 | 3 | 9 |
4 | 4 | 8 |
测试数据2:
n = 5, q = 2或10
pid | ArrivalTime | ServiceTime(CPU Burst) |
0 | 0 | 5 |
1 | 1 | 7 |
2 | 3 | 3 |
3 | 4 | 8 |
4 | 6 | 2 |
3 流程图
3.1 FCFS
3.2 SJF
3.3 RR
4 实验结果
4.1 测试数据1
4.1.1 FCFS
4.1.2 SJF
4.1.3 RR
q=2
q=4
4.2 测试数据2
4.2.1 FCFS
4.2.2 SJF
4.2.3 RR
q=2
q=10
4.3 实验结果汇总
测试数据1:
Algorithm | AvgTAT | AvgWTAT | AvgWT | |
FCFS | 13.80 | 2.41 | 7.80 | |
SJF | 13.60 | 2.37 | 7.60 | |
RR | q = 2 | 18.00 | 2.82 | 12.00 |
q = 4 | 19.20 | 3.15 | 13.20 |
测试数据2:
Algorithm | AvgTAT | AvgWTAT | AvgWT | |
FCFS | 13.20 | 3.69 | 8.20 | |
SJF | 10.20 | 1.92 | 5.20 | |
RR | q = 2 | 15.80 | 3.42 | 10.8 |
q = 10 | 13.20 | 3.69 | 8.20 |
5 实验代码
请见GitHub。
OS-Experiments/exps_1_updated at main · Jackkee27/OS-Experiments