操作系统|FCFS,SJF,HRN

1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。

输入样例:
作业名提交时间运行时间
152
225
324
FCFS:
按照提交时间排序:2,3,1
作业2 开始时间 2
运行时间 5
完成时间 7
周转时间 7 - 2 = 5
带权周转时间 5 / 5 = 1
作业 3 开始时间 7
运行时间 4
完成时间 11
周转时间 11 - 2 = 9
带权周转时间 9 / 4 = 2.25
作业 1 开始时间 11
运行时间 2
完成时间 13
周转时间 13 - 5 = 8
带权周转时间 8 / 2 = 4
SJF:
按照运行时间从短到长排序:1,3,2
作业 1 开始时间 5
运行时间 2
完成时间 7
周转时间 7 - 5 = 2
带权周转时间 2 / 2 = 1
作业3 开始时间 7
运行时间 4
完成时间 11
周转时间 11 - 2 = 9
带权周转时间 9 / 4 = 2.25
作业 2 开始时间 11
【操作系统|FCFS,SJF,HRN】运行时间 5
完成时间 16
周转时间 16 - 2 = 14
带权周转时间 14 / 5 = 2.8
HRN:
作业1 等待时间 5 - 5 = 0优先权 0 / 2 + 1 = 1
作业2 等待时间 5 - 2 = 3优先权 3 / 5 + 1 = 1.6
作业3 等待时间 5 - 2 = 3优先权 3 / 4 + 1 = 1.75
按照优先权排序:3,2,1
作业 3 开始时间 2
运行时间 4
完成时间 6
周转时间 6 - 2 = 4
带权周转时间 4 / 4 = 1
作业 2 开始时间 6
运行时间 5
完成时间 11
周转时间 11 - 2 = 9
带权周转时间 11 / 5 = 1.8
作业1 开始时间 11
运行时间 2
完成时间 13
周转时间 13 - 5 = 8
带权周转时间 8 / 2 = 4

#include #include using namespace std; struct Box { string ID; //作业号 double begin_time; //提交时间 double turnaround_time; //周转时间 double service_time; //要求服务时间 double finish_time; //完成时间 double Wturnaround_time; //带权周转时间 double wait_time; //等待时间 double rate; //优先权 Box& operator = (const Box& p2)//重载 = 运算符,方便排序 { this->begin_time = p2.begin_time; this->finish_time = p2.finish_time; this->service_time = p2.service_time; this->ID = p2.ID; this->turnaround_time = p2.turnaround_time; this->Wturnaround_time = p2.Wturnaround_time; this->wait_time = p2.wait_time; this->rate = p2.rate; return *this; } }; typedef struct { Box data[100]; } JCB; JCB jcb; int n; void init()//初始化作业块 { cout<<"please input the number of the process:"; cin>>n; for(int i = 0; i>jcb.data[i].ID; cout<>jcb.data[i].begin_time; cout<>jcb.data[i].service_time; } for(int i = 0; i jcb.data[j].begin_time) swap(jcb.data[i],jcb.data[j]); } } for(int i = 0; i jcb.data[j].ID) swap(jcb.data[i],jcb.data[j]); } } }void FCFS()//先来先服务 { double bt = jcb.data[0].begin_time; double gtt = 0; double gwtt = 0; double real_begin; cout<<"ID"<<"real begin time"<<"begin time"<<"turnaround time"<<"finish time"<<"wighted turnaround time"< jcb.data[j].service_time) swap(jcb.data[i],jcb.data[j]); for(int i = 0; i jcb.data[j].ID) swap(jcb.data[i],jcb.data[j]); } } bt = jcb.data[0].begin_time; for(int i = 0; i>k; init(); switch(k) { case 1: FCFS(); break; case 2: SJF(); break; case 3: HRN(); break; default: break; } } return 0; }


    推荐阅读