操作系统——短作业优先调度算法Word文档格式.docx
- 文档编号:18501762
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:6
- 大小:143.33KB
操作系统——短作业优先调度算法Word文档格式.docx
《操作系统——短作业优先调度算法Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统——短作业优先调度算法Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
(2)必须要考虑到作业的到达时间;
(3)最终能够计算每⼀个作业的周转时间、带权周转。
实验要求做先来先服务或者短作业优先都可以,这⾥我做的是抢占式的短作业优先算法,⼀些函数没有按着实验内容⾥给的函数来,但是实验要求的内容基本都实现了。
先看⼀下实验结果:
输⼊的数据是之前我们学校慕课上的⼀个题⽬的数据:
先显⽰作业的初始状态:
显⽰调度情况:
计算出的各个作业的周转时间和带权周转时间:
可以⾃⼰算⼀下,程序运⾏出来的结果是对的,我只测试了慕课上的样例,其他的样例没测,如有错误,欢迎指正。
代码如下:
#include<
bits/stdc++.h>
usingnamespacestd;
constintMAX=1e5;
#defineW"
waitting"
#defineR"
running"
#defineF"
finished"
structWORK
{
stringwork_nam;
e//作业名intserve_time;
//剩余服务时间intr_serve_time;
//服务时间intarrive_time;
//到达时间
stringwork_stat;
e//作业状态
intend_time;
//结束时间
intturnover_time;
//周转时间
};
WORKwork[MAX];
//作业
intn;
//作业数量
boolcmp_SJF(WORKx,WORK)y//排序函数
if(x.serve_time!
=y.serve_time)//服务时间不同时短作业优先
returnx.serve_time<
y.serve_time;
else//服务时间相同时先来先服务
returnx.arrive_time<
y.arrive_time;
}
boolcmp_arr_time(WORKx,WORK)y//按到达时间从⼩到⼤排序
intcount_work(intt)//计算某⼀时间有多少个作业进⼊
intcnt=0;
for(inti=1;
i<
=n;
+i+)
if(work[i].arrive_time<
=t)
++;
cnt
returncnt;
voidupdate_work(intnum,intc_time)//更新当前每个作业的状态
intt=0;
=num;
if(work[i].serve_time<
=0)//作业已经结束
[i]w.soerve_time=0;
[i]w.woorkrk_state=F;
elseif(work[i].serve_time>
0)//作业还没结束
=;
i
[i]w.soerve_time--;
[i]w.woorkrk_state=R;
t
break;
+i+)//更新状态
if(i!
if(work[i].work_state!
=F)[i].wworokr_kstate=W;
if(work[i].work_state==F&
&
work[i].end_time==-1)[i]w.eonrdk_time=c_time;
booljudge_over()//判断作业是否全部完成
+i+)if(work[i].work_state!
=F)
returnfalse;
returntrue;
intmain()
cou<
t<
"
请输⼊要调度的作业:
"
<
<
endl;
cou<
要调度的作业的数量:
;
ci>
n>
n;
c<
o<
ut"
作业名:
>
c>
inwork[i].work_name;
作业服务时间:
inwork[i].serve_time;
作业到达时间:
inwork[i].arrive_time;
w[io].rwkork_state=W;
w[io].reknd_time=-1;
w[io].rrk_serve_time=work[i].serve_time;
sort(work+1,work+1+n,cmp_arr_time);
//先按到达时间排序
作业初始状态:
作业名 <
到达时间 "
服务时间
<
当前状态
co<
u<
tsetw(8)<
work[i].work_name<
setw(16)
work[i].arrive_time<
setw(13)<
work[i].serve_time
setw(21)<
work[i].work_state<
intarrive_num=0;
//已到达的作业数量
intcurrent_time=0;
//当前时间
作业调度情况如下:
boolis_over=false;
while(!
is_over)
时刻
作业名
剩余服务时间
arrive_nu=mcount_work(current_time);
sort(work+1,work+1+arrive_num,cmp_SJF);
//排序
update_work(arrive_num,current_time);
=arrive_num;
oustetw(6)<
current_time<
work[i].work_name
setw(15)<
setw(15)<
setw(24)<
current_tim++e;
is_o=vejrudge_over();
c<
utendl;
各作业的周转时间和带权周转时间如下:
周转时间
带权周转时间
w[io].rtkurnover_time=work[i].end_time-work[i].arrive_time;
doublewight_time=1.0*work[i].turnover_time/work[i].r_serve_time;
//带权周转时间
utsetw(6)<
work[i].turnover_time<
setw(18);
c.poruetcision(4);
utwight_time<
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 作业 优先 调度 算法