基于优先级的多道程序系统作业调度——基于优先级
编写并调试一个多道程序系统的作业调度模拟程序。
作业调度算法:采用基于优先级的作业调度。
本程序中,我设定CPU最大可运行资源数为10,时间片为0.5,如果输入的作业(单个)占用CPU时间大于10,程序终止,无法调度。
测试样例:
作业名 提交时间 CPU时间 IO时间 优先级
1 5 2 1 3
2 2 5 4 4
3 2 4 2 1
按照优先级排序:2,1,3
原理:从时间 2 开始,作业2运行0.5后交给作业1,以此类推,直到作业1先完成,此时轮转了3次 + 1 = 3*1.5 + 1 = 5.5,作业1完成时间为 5.5 + 2 + 1 = 8.5,而它不占用CPU的时间是7.5(IO不占用)。
ex:作业1完成时间 8.5,周转时间 8.5 - 5 = 3.5,带权周转时间 3.5 / 2 = 1.75。
作业 3 完成时间 = 2 + 3*1.5(作业1在,每轮1.5)+ 1.5(作业1收尾这一轮) + 4*1(只剩2个,每轮1) + 2 = 14
作业2完成时间 = 2 + 3*1.5 + 1.5(作业1收尾这一轮) + 4*1(作业3在,每轮1) + 2*0.5 + 4 = 17
代码:
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; struct Box { string ID; //作业号 int priority; //优先级 double begin_time; //提交时间 double rtime; //已经运行时间 double turnaround_time; //周转时间 double cpu_service_time; //占用CPU的时间