短作业优先调度Word格式.docx
- 文档编号:20811731
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:10
- 大小:114.91KB
短作业优先调度Word格式.docx
《短作业优先调度Word格式.docx》由会员分享,可在线阅读,更多相关《短作业优先调度Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
我想到的方法就是排序,不断选择需要运行时间最短的作业,接着进行数据输入计算输出等,遍历全部数据并完成调度。
四、主要的数据结构
structProcess_struct{
charname[MaxNum];
//进程名称
intarrivetime;
//到达时间
intservertime;
//开始运行时间
intfinishtime;
//运行结束时间
intruntime;
//运行时间
intrunflag;
//调度标志
intorder;
//运行次序
doubleweightwholetime;
//周转时间
doubleaveragewt_FCFS,averagewt_SJF;
//平均周转时间
doubleaveragewwt_FCFS,averagewwt_SJF;
//平均带权周转时间
}pro[MaxNum];
五、算法流程图
10
是
否
六、运行与测试
用书上数据对程序进行测试,结果如下:
另外随便添加一些数据进行测试,结果如下:
代码实现:
#include<
iostream>
windows.h>
#defineMaxNum100
usingnamespacestd;
structProcess_struct{
intN;
//实际进程个数
intSJF();
//短作业优先函数
intSJF()
{
inttemp_time=0;
inti=0,j;
intnumber,temp_counter;
//进程编号,当前已执行进程个数
floatrun_time;
intmin=0;
run_time=pro[i].runtime;
j=1;
while((j<
N)&
&
(pro[i].arrivetime==pro[j].arrivetime))//判断是否有两个进程同时到达
if(pro[j].runtime>
pro[i].runtime){
i=j;
}
j++;
for(j;
j<
N;
j++)
{while((j<
(pro[i].arrivetime>
pro[j].arrivetime))//选出第一个到达的进程
min=j;
}}
number=min;
//对第一个到达的进程赋值,计算
pro[number].servertime=pro[number].arrivetime;
pro[number].finishtime=pro[number].servertime+pro[number].runtime;
pro[number].runflag=1;
temp_time=pro[number].finishtime;
pro[number].order=1;
temp_counter=1;
while(temp_counter<
N)
for(j=0;
j++)
if((pro[j].arrivetime<
=temp_time)&
(!
pro[j].runflag))
run_time=pro[j].runtime;
number=j;
break;
j++)//选出最短的运行时间(最短作业)
if(pro[j].runtime<
run_time)
pro[number].servertime=temp_time;
//对最短作业进行赋值,计算
temp_counter++;
pro[number].order=temp_counter;
}
return0;
intinput();
//进程参数输入
intoutput();
//调度结果输出
voidmain()
intoption;
printf("
\n***********************************************\n"
);
主菜单\n"
***********************************************\n\n"
1使用短作业优先\n\n"
0退出\n\n"
输入你想进行的操作:
"
scanf("
%d"
&
option);
\n"
switch(option){
case0:
运行结束。
case1:
对进程用短作业优先调度。
\n\n"
input();
SJF();
output();
点击任意键键继续..."
getchar();
intinput()//进程参数输入
请输入进程个数:
N);
FILE*f;
charbuf[100];
char*p;
if(NULL==(f=fopen("
F:
\\1111.txt"
"
r"
)))//打开文件
{
fprintf(stderr,"
Cannotopenfile:
1111.txt"
return1;
inti=0,n=0;
while
(1)//导入数据
if(n==N)break;
if(NULL==fgets(buf,100,f))break;
if('
\n'
==buf[0])continue;
//空行继续
p=buf;
sscanf(p,"
%c%d%d"
pro[n].name,&
pro[n].arrivetime,&
pro[n].runtime);
n++;
pro[n].servertime=0;
pro[n].finishtime=0;
pro[n].weightwholetime=0;
pro[n].order=0;
pro[n].runflag=0;
fclose(f);
intoutput()//调度结果输出
inti;
floatturn_round_time=0,f1,w=0;
进程名称到达运行开始运行结束执行顺序周转带权周转\n"
for(i=0;
i<
i++)
pro[i].weightwholetime=pro[i].finishtime-pro[i].arrivetime;
f1=pro[i].weightwholetime/pro[i].runtime;
turn_round_time+=pro[i].weightwholetime;
w+=f1;
%4s%8d%5d%7d%7d%7d%8.2f%7.2f\n"
pro[i].name,pro[i].arrivetime,pro[i].runtime,pro[i].servertime,pro[i].finishtime,pro[i].order,pro[i].weightwholetime,f1);
average_turn_round_timer=%1.2f\n"
turn_round_time/N);
weight_average_turn_round_timer=%1.2f\n"
w/N);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 优先 调度
![提示](https://static.bdocx.com/images/bang_tan.gif)