操作系统作业调度算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统上机测试作业调度算法算法

一、实验目的和要求(供参考)

1.掌握作业调度功能和调度程序常用算法。

2.掌握利用C语言设计实现不同调度策略的作业调度算法。

3.验证不同作业调度算法对性能的影响。

二、实验环境(供参考)

1.知识准备:学过进程管理、作业管理、处理机调度等章节的内容。

2.开发环境与工具:

硬件平台——个人计算机。

软件平台——C语言开发环境。

三、实验内容

用“先来先服务(FCFS)”算法和“最短作业优先(SJF)”算法模拟作业调度。

要求:按作业的到达顺序输入各作业需要的运行时间,按算法调度输出平均周转时间。

例如(FCFS),输入:8(到达时间0),5(到达时间2),7(到达时间3),1(到达时间6)J1 J2 J3 J4

0 8 13 20 21

输出:aver=(8+(13-2)+(20-3)+(21-6))/4=51/4

例如(SJF),输入:8(到达时间0),5(到达时间2),7(到达时间3),1(到达时间6)J1 J4 J2 J3

0 8 9 14 21

输出:aver=(8+(9-6)+(14-2)+(21-3))/4=42/4

注:输入的格式任意,只要输出平均周转时间即可。

四、代码(带注释)

1、先来先服务

实验结果(截图呈现)

代码:

#include

using namespace std;

class Fcfs

{

private:

int num[10]; //作业编号

double arriveTime[10]; //到达时间

double startTime[10]; //开始时间,进内存时间

double workTime[10]; //工作时间

double finishTime[10]; //完成时间

double cirTime[10]; //存放每一个作业的周转时间

//double freeTime[10]; //上一个作业已结束,但下一个作业还未到,存放这一段空闲时间

public:

Fcfs(int n) //n为作业数目

{

cout<<"默认第一个作业的到达时间为0。"<

for(int i=0;i

{

num[i]=i+1; //给作业编号

cout<<"第"<

cout<<"请输入该作业的到达时间:";

cin>>arriveTime[i];

if(i==0)

arriveTime[i]=0; //默认第一个作业的到达时间为0

cout<<"请输入该作业的执行时间:";

cin>>workTime[i];

if(i==0)

{

startTime[i]=0;

finishTime[i]=workTime[i];

//freeTime[i]=0;

}

else if(arriveTime[i]<=finishTime[i-1]) //如果后一个作业已到,而前一个作业未结束

{

startTime[i]=finishTime[i-1]; //则后一个作业的开始时间为上一个作业的结束时间

finishTime[i]=startTime[i]+workTime[i];

//freeTime[i]=0; //前一个一结束就开始工作,没有空闲时间}

else if(arriveTime[i]>finishTime[i-1])

{

//freeTime[i]=arriveTime[i]-finishTime[i-1];//计算空闲时间,前一个作业已完成,但后一个作业还没到,中间空闲时间

startTime[i]=arriveTime[i]; //由于来的时候前一个作业已完成,则该作业的开始时间即为它的到达时间

finishTime[i]=startTime[i]+workTime[i];

}

cirTime[i]=finishTime[i]-arriveTime[i];

}

}

//计算平均周转时间

double getAverageCir(int n) //n为作业数

{

double averageCir,sumCir=0;

for(int i=0;i

sumCir+=cirTime[i];

averageCir=sumCir/n;

return averageCir;

}

//打印输出

void print(int n) //n为作业数

{

cout<<"num\t"<<"arrive\t"<<"start\t"<<"work\t"<<"finish\t"<<"cir\t"<

for(int i=0;i

{

cout<

}

cout<

cout<<"平均周转时间:"<

}

};

int main()

{

int n; //n为作业数目

cout<<"请输入作业数目:";

cin>>n;

Fcfs f=Fcfs(n);

f.print(n);

return 0;

}

相关文档
最新文档