作业调度算法C实现.docx

上传人:b****3 文档编号:1507657 上传时间:2022-10-22 格式:DOCX 页数:45 大小:97.11KB
下载 相关 举报
作业调度算法C实现.docx_第1页
第1页 / 共45页
作业调度算法C实现.docx_第2页
第2页 / 共45页
作业调度算法C实现.docx_第3页
第3页 / 共45页
作业调度算法C实现.docx_第4页
第4页 / 共45页
作业调度算法C实现.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

作业调度算法C实现.docx

《作业调度算法C实现.docx》由会员分享,可在线阅读,更多相关《作业调度算法C实现.docx(45页珍藏版)》请在冰豆网上搜索。

作业调度算法C实现.docx

作业调度算法C实现

计算机操作系统

实验报告

 

学号:

 姓名:

 班级:

实验时间:

   2011-10-10 

实验编号

002

实验名称

作业调度算法

实验目的和要求

通过对作业调度算法的模拟加深对作业概念和作业调度算法的理解

实验内容

(1)模拟FCFS算法实现作业调度

(2)模拟短作业优先算法实现作业调度

模拟最高相应比优先算法实现作业调度

一、实验题目

输入:

作业流文件,其中存储的是一系列要执行的作业,

每个作业包括三个数据项:

作业号、作业进入系统的时间(用一小数表示,如10:

10,表示成10.10)、估计执行时间(单位小时,以十进制表示)

参数用空格隔开,下面是示例:

18.000.5

28.150.3

38.300.25

48.350.20

58.450.15

69.000.10

79.200.05

其中调度时刻为最后一个作业到达系统的时间!

输出:

作业号进入内存的时间,每行输出一个作业信息。

并输出每一种调度算法的平均周转时间和平均带权周转时间。

二、算法设计思路

首先用一个switch函数做界面选择进入哪一种算法。

用一个内来定义作业

floats;//提交时间

floatj;//执行时间

floatk;//开始时间

floatw;//完成时间

floatz;//周转时间

floatd;//带权周转时间

1,先来先服务,首先计算第一个作业的完成时间,周转时间,带权周转时间。

再用for循环来计算剩下每一个作业的完成时间,周转时间,带权周转时间。

然后再算出平均周转时间和平均带权周转时间。

2,短作业有优先,首先计算第一个作业的完成时间,周转时间,带权周转时间。

再用来计算其他作业的。

其中在for循环中嵌套while函数,在每一次计算前判断处于等待状态的作业个数,然后按执行时间,从短到长排序,将排在第一个的作业计算。

以此类推。

3.响应比,与短作业优先类似,只是在排序前,循环计算一次响应比,用一个数组来存放响应比,然后按照优先比从小到大排序,然后计算。

三、算法流程图

主要的算法是响应比优先,所以这里只画了响应比优先的流程图,下面为响应比算法函数的代码:

voidxyb(zuoyea[])

{

intj=0,k=0,c=0,b=0;

floatm=0;

floatn=0;

floatx=0;

floatz[N];//存放z[]数组

zuoyet;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

{

z[c]=(a[j-1].w-a[c].s)/a[c].j;

}

for(c=j;c

{

for(b=c+1;b

{

if(z[c]>z[b])

{

t=a[c];

a[c]=a[b];

a[b]=t;

x=z[c];

z[c]=z[b];

z[b]=x;

}

}

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;

n+=a[j].d;

}

cout<<"响应比的平均周转时间为:

"<

cout<<"响应比的平均带权周转时间为:

"<

}

根据以上的代码画出流程图如下:

判断进入准备状态的作业

以数组z[]来存放响应比

计算

以响应比大小进行排序

响应比算法流程图

三、算法中用到的数据结构

classzuoye

{

public:

floats;//输入时间

floatj;//执行时间

floatk;//开始时间

floatw;//完成时间

floatz;//周转时间

floatd;//带权周转时间

};

voidfcfs(zuoyea[]);//先来服务

voiddzy(zuoyea[]);//短作业优先

voidxyb(zuoyea[]);//响应比

voidmulu(zuoyea[]);//选择目录

voidshuchu(zuoyea[]);//输出结果

四、算法的主要模块

响应比函数是其中比较重要的模块,其中计算的过程:

用循环函数for来计算,

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

/*用while函数来判断处于准备状态的工作,即输入时间<最后一个已完作业的完成时间*/

for(c=j;c

{

z[c]=(a[j-1].w-a[c].s)/a[c].j;

}

/*用循环函数来计算处于准备状态作业的响应比,在z[]为储存响应比的数组。

*/

for(c=j;c

{

for(b=c+1;b

{

if(z[c]>z[b])

{

t=a[c];

a[c]=a[b];

a[b]=t;

x=z[c];

z[c]=z[b];

z[b]=x;

}

}

/*用冒泡算法按照响应比的大小,从小到大将作业进行排序*/

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;//计算总的周转时间

n+=a[j].d;//计算总的带权周转时间

}

五、实验代码

#include"iostream.h"

#defineN30

inti=0;

classzuoye

{

public:

floats;//输入时间

floatj;//执行时间

floatk;//开始时间

floatw;//完成时间

floatz;//周转时间

floatd;//带权周转时间

};

voidfcfs(zuoyea[]);//先来服务

voiddzy(zuoyea[]);//短作业优先

voidxyb(zuoyea[]);//响应比

voidmulu(zuoyea[]);//选择目录

voidshuchu(zuoyea[]);//输出结果

voidmain()

{

zuoyea[N];

cout<<"输入0,0结束";

do

{

cout<<"请输入第"<

";

cin>>a[i].s>>a[i].j;

i++;

}while(i

=0);//用do...while函数来控制输入

mulu(a);

shuchu(a);

}

voidmulu(zuoyea[])

{

intm;

cout<<"请选择算法:

"<

cout<<"1.先来先服务算法;"<

cout<<"2.短作业优先;"<

cout<<"3.优先比算法;"<

cin>>m;

switch(m)//switch函数来选择算法

{

case1:

fcfs(a);break;

case2:

dzy(a);break;

case3:

xyb(a);break;

default:

{

cout<<"错误,请重新输入!

"<

mulu(a);

}

}

}

voidshuchu(zuoyea[])

{

cout<<"提交\t"<<"执行\t"<<"开始\t"<<"完成\t"<<"周转\t"<<"带权周转"<

intj;

for(j=0;j

{

cout<

}

}

voidfcfs(zuoyea[])

{

intj=1;

floatm=0;//总周转时间

floatn=0;//总带权周转时间

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

a[j].k=a[j-1].w;//开始时间

a[j].w=a[j].k+a[j].j;//完成时间

a[j].z=a[j].w-a[j].s;//周转时间

a[j].d=a[j].z/a[j].j;//带权周转时间

m+=a[j].z;

n+=a[j].d;

}

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

"<

cout<<"fcfs平均带权周转时间为:

"<

}

voiddzy(zuoyea[])

{

intj=0,k=0,c=0,b=0;

floatm=0;

floatn=0;

zuoyet;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

{

for(b=c+1;b

{

if(a[c].j>a[b].j)

{

t=a[c];

a[c]=a[b];

a[b]=t;

}

}

}

a[j].k=a[j-1].w;

a[j].w=a[j].k+a[j].j;

a[j].z=a[j].w-a[j].s;

a[j].d=a[j].z/a[j].j;

m+=a[j].z;

n+=a[j].d;

}

cout<<"短作业优先的平均周转时间为:

"<

cout<<"短作业优先的平均带权周转时间为:

"<

}

voidxyb(zuoyea[])

{

intj=0,k=0,c=0,b=0;

floatm=0;

floatn=0;

floatx=0;

floatz[N];//存放z[]数组

zuoyet;

a[0].k=a[0].s;

a[0].w=a[0].k+a[0].j;

a[0].z=a[0].w-a[0].s;

a[0].d=a[0].z/a[0].j;

m=a[0].z;

n=a[0].d;

for(j=1;j

{

k=j;

while(a[k].s<=a[j-1].w&&k

{

k++;

}

for(c=j;c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1