操作系统实验时间片轮转Word文档格式.docx
- 文档编号:3540132
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:9
- 大小:61.64KB
操作系统实验时间片轮转Word文档格式.docx
《操作系统实验时间片轮转Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验时间片轮转Word文档格式.docx(9页珍藏版)》请在冰点文库上搜索。
通过分配时间片的方式让进程获得处理机,若一个时间片未用完,正在运行的程序就已经完成,便将其从就绪队列删除,再调用队首进程,并分配时间片;
在一个时间片未用完时,中断程序就会启动,将进程送至就绪队列的尾部。
【数据结构和符号说明】
数据结构:
structPCD//定义结构体
{
charname;
//进程名
inta_time;
//到达时间
ints_time;
//服务时间
ints_time2;
intf_time;
//完成时间
floatt_time;
//周转时间
floatwt_time;
//带权周转时间
intstate;
//当前进程的状态
};
符号和函数说明
intCurrenttime=0;
//当前时间
PCDs[5];
//设置为5个进程
queue<
PCD>
q;
//进程队列
intturnover(PCD&
n)//求周转时间
floatwturnover(PCD&
n)//求带权周转时间
程序流程图:
程序:
#include<
iostream>
queue>
#defineMAX100
usingnamespacestd;
returnn.t_time=n.f_time-n.a_time;
}
returnn.wt_time=n.t_time/n.s_time;
intmain()
intt;
queue<
q=queue<
();
PCDs[5];
s[0].name='
A'
;
//初始化结构体数组
s[1].name='
B'
s[2].name='
C'
s[3].name='
D'
s[4].name='
E'
cout<
<
"
请输入五个进程的到达时间:
\n"
for(inti=0;
i<
=4;
i++)
{
s[i].name<
到达时间:
cin>
>
s[i].a_time;
s[i].state=i;
}
请输入五个进程的服务时间:
服务时间:
s[i].s_time;
s[i].s_time2=s[i].s_time;
请输入时间片的大小:
t;
5-1;
i++)//将ABCDE的到达时间升序排列
for(intj=0;
j<
j++)
if(s[j].a_time>
s[j+1].a_time)
swap(s[j],s[j+1]);
q.push(s[0]);
//将第一个进程入队列
for(inti=1;
5;
i++)//5个都入队列
while(s[i].a_time>
Currenttime+t)//当进程到达时间大于当前时间,执行队列中的进程
if(q.empty()==true)//到当前时间
Currenttime++;
//队列中无进程
if(q.empty()!
=true)//队列前面有进程
if(q.front().s_time-t<
=0)
Currenttime=Currenttime+q.front().s_time;
if(s[j].state==q.front().state)
s[j].f_time=Currenttime;
q.pop();
//队列中删除
else
Currenttime=Currenttime+t;
q.front().s_time-=t;
q.push(q.front());
//队头放入队尾
q.push(s[i]);
if(q.front().s_time<
=t)//如果有进程提前结束
//结束进程
if(s[j].state==q.front().state)//设置进程的序号,如果在队列中与进程控制块中匹配
//终止时间
//继续执行
//入队后队头放入队尾
while(q.empty()!
=true)//所有进程全部入队
=t)
if(s[i].state==q.front().state)//去进程控制块中寻找,改变结束时间
s[i].f_time=Currenttime;
"
到达时间"
服务时间"
完成时间"
周转时间"
带权周转时间"
endl;
s[i].a_time<
s[i].s_time2<
s[i].f_time<
turnover(s[i])<
wturnover(s[i])<
endl<
//cout是从后往前计算的
doublesum=0;
for(inti=0;
sum+=s[i].wt_time;
此算法平均带权周转时间为"
sum/5<
return0;
截图及其说明:
在先前定义的5个进程,取名ABCDE
输入时间片大小,当时间片为1时,输出如下结果,程序正确
输入时间片大小,当时间片为1时,输出如下
结果,程序正确。
输入时间片为4,截图如下,程序验证正确,此算法平均周转时间为2.7.
【小结或讨论】
1、当时间片的过大的时候,轮转调度算法便会退化为先来先服务算法。
2、就绪队列是先插入到来的队列,再将未完成的队列送至队尾。
3、一开始在写程序是,为考虑到进程到达时间与当前时间的关系,即进程到达时间大于当前时间时,要继续执行队列中的进程,最终加上了。
4、通过本次实验,我对于进程调度中的时间片轮转调度算法有了更加深入的了解,通过时间片轮转调度的方式,可以有效的提高CPU的利用率,并且可以保证服务时间较长的进程也会被调度完成。
5、编写程序时遇到的一个比较核心的问题就是在某一段时间内就绪进程队列中没有进程,而等待就绪进程队列中的进程都未就绪,这时需要将当前时间逐步加一以找寻到到达的进程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 时间 轮转