FCFS(first come first served):先来先服务,根据到达时间依次执行
SJF(short job first):根据作业的运行时间从小到大依次执行
HRRN(highest response ratio next):根据响应比从大到小依次执行,响应比动态计算
周转时间 = 完成时间 - 到达时间
带权周转时间 = 周转时间 / 运行时间
响应比 = (运行时间+已经等待时间) / 运行时间 = 1+已经等待时间 / 运行时间
响应比可能表达方法不同,但是意义是一样的。
注:计算时响应比只用来比较大小,故我直接把+1省略了。如果题目要求计算其值,记得加一。
源代码如下:
#include
#include
using namespace std;
#define MAXSIZE 5//作业数
struct process
{
int pid;
//作业号
double come_time;
//到达时
double run_time;
//运行时
double begin_time;
//开始时
double over_time;
//完成时
double round_time;
//周转时
double avg_time;
//带权周转时
double HRR;
//响应比
}pc[MAXSIZE];
//作业数
bool CmpByComeTime(process p1, process p2) {//按到达时间正序排序
return p1.come_timep2.HRR;
}
void get_beginAndOver_time() {
for (int i = 0;
i> pc[i].pid >> pc[i].come_time >> pc[i].run_time;
}
FCFS();
cout << "the results of FCFS are:" << endl;
print();
SJF();
cout << "the results of SJF are:" << endl;
print();
HRRN();
cout << "the results of HRRN are:" << endl;
print();
system("pause");
return 0;
}
运行结果如下:
文章图片
【OS作业调度FCFS,SJF,HRRN算法的C++实现】