操作系统——短作业优先调度算法.docx

上传人:b****9 文档编号:5514259 上传时间:2022-12-17 格式:DOCX 页数:6 大小:143.33KB
下载 相关 举报
操作系统——短作业优先调度算法.docx_第1页
第1页 / 共6页
操作系统——短作业优先调度算法.docx_第2页
第2页 / 共6页
操作系统——短作业优先调度算法.docx_第3页
第3页 / 共6页
操作系统——短作业优先调度算法.docx_第4页
第4页 / 共6页
操作系统——短作业优先调度算法.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

操作系统——短作业优先调度算法.docx

《操作系统——短作业优先调度算法.docx》由会员分享,可在线阅读,更多相关《操作系统——短作业优先调度算法.docx(6页珍藏版)》请在冰豆网上搜索。

操作系统——短作业优先调度算法.docx

操作系统——短作业优先调度算法

操作系统——短作业优先调度算法

实验内容

模拟实现FCFS/SJF调度。

设置作业体:

作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运⾏,F——完成),作业间的链接指针;作业初始化:

由⽤户输⼊作业名、服务时间、到达时间进⾏初始化,同时,初始化作业的状态为W。

显⽰函数:

在作业调度前、调度中和调度后进⾏显⽰。

排序函数:

对等待状态的作业按照调度算法排序(不同的调度算法排序⽅式不同),注意考虑到达时间。

调度函数:

每次从等待队列队⾸调度已到达的适合的作业执⾏,状态变化。

当服务结束时,状态变为F。

删除函数:

撤销状态为F的作业。

实验要求

(1)测试数据可以随即输⼊或从⽂件中读⼊;

(2)必须要考虑到作业的到达时间;

(3)最终能够计算每⼀个作业的周转时间、带权周转。

实验要求做先来先服务或者短作业优先都可以,这⾥我做的是抢占式的短作业优先算法,⼀些函数没有按着实验内容⾥给的函数来,但是实验要求的内容基本都实现了。

先看⼀下实验结果:

输⼊的数据是之前我们学校慕课上的⼀个题⽬的数据:

先显⽰作业的初始状态:

显⽰调度情况:

计算出的各个作业的周转时间和带权周转时间:

可以⾃⼰算⼀下,程序运⾏出来的结果是对的,我只测试了慕课上的样例,其他的样例没测,如有错误,欢迎指正。

代码如下:

#include

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

else//服务时间相同时先来先服务

returnx.arrive_time

}

}

boolcmp_arr_time(WORKx,WORK)y//按到达时间从⼩到⼤排序

{

returnx.arrive_time

}

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;

for(inti=1;i<=num;+i+)

{

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;

}

}

for(inti=1;i<=n;+i+)//更新状态

{

if(i!

=t)

{

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()//判断作业是否全部完成

{

for(inti=1;i<=n;+i+)if(work[i].work_state!

=F)

returnfalse;

returntrue;

}

intmain()

{

cou

"<

";

ci>n>n;

for(inti=1;i<=n;+i+)

{

c

"<

c

"<

>c>inwork[i].work_name;

c

"<

>c>inwork[i].serve_time;

c

"<

>c>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);//先按到达时间排序

cou

"<

cou

<<"服务时间

<"<"当前状态

<"

for(inti=1;i<=n;+i+)

{

co

<

<

}

cou

intarrive_num=0;//已到达的作业数量

intcurrent_time=0;//当前时间

cou

"<

while(!

is_over)

{

c

<"<"作业名

<"<"到达时间 "

<<"剩余服务时间

<"<"当前状态

<"

arrive_nu=mcount_work(current_time);

sort(work+1,work+1+arrive_num,cmp_SJF);//排序

update_work(arrive_num,current_time);

for(inti=1;i<=arrive_num;+i+)

{

<

<

}

current_tim++e;

is_o=vejrudge_over();c

}

cou

"<

cou

<"<"周转时间

<"<"带权周转时间

<"

for(inti=1;i<=n;+i+)

{

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;//带权周转时间

c

c

}

return0;

}

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

当前位置:首页 > 初中教育 > 科学

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

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