时间片轮转法进行CPU调度Word格式文档下载.docx
《时间片轮转法进行CPU调度Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《时间片轮转法进行CPU调度Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
用户为每个程序设定一个要求运行时间和到达时间。
按照进程到达的先后顺序排成一个循环队列,再设一个队首指针指向第一个到达进程的首址。
进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示运行进程。
同时判断该进程剩余运行时间是否为零,不为零则等待下一轮的运行;
若该进程的剩余运行时间为零,则该进程完成,状态为C,并退出循环队列。
若就绪队列不为空,则重复以上步骤直到所有进程都运行完为止。
五、流程图
六、源程序
#include<
stdio.h>
stdlib.h>
iostream.h>
charX;
intstart;
typedefstruct{
charname[20];
intarrtime;
intruntime;
}DataType;
typedefstructnode{
DataTypepcb;
structnode*next;
}ListNode;
typedefListNode*LinkList;
LinkListhead;
voidcreate_insert_LinkList(intf1)
{
ListNode*p,*p1,*p2;
p=(ListNode*)malloc(sizeof(ListNode));
head=p;
p->
next=NULL;
while(f1>
0)
{
p=(ListNode*)malloc(sizeof(ListNode));
cout<
<
"
请输入以下数据:
\n"
;
cout<
进程名到达时间运行时间:
cin>
>
p->
pcb.name>
pcb.arrtime>
pcb.runtime;
endl;
p->
p1=head;
p2=p1->
next;
while(p2!
=NULL&
&
p2->
pcb.arrtime<
pcb.arrtime)
{
p1=p2;
p2=p2->
}
p1->
next=p;
next=p2;
f1=f1-1;
}
}
voidpcb_LinkList(intf2)
LinkListH;
ListNode*rear,*p,*q;
intT,t,time,m,n;
p=NULL;
H=p;
请输入时间片大小:
cin>
T;
t=T;
H=head->
head->
next=head->
next->
rear=H;
rear->
time=H->
pcb.arrtime;
while(f2!
=0)
n=0;
while(t!
{
t=t-1;
time=time+1;
if(head->
next!
=NULL)
{
if(head->
=time)
{
if(H==NULL)
{
H=head->
rear=H;
rear->
}
else
{
rear->
rear=rear->
}
}
if(H!
H->
pcb.runtime=H->
pcb.runtime-1;
m=1;
//该进程有被执行
n=n+1;
if(H->
pcb.runtime==0)//该进程服务完,从执行队列中删除
cout<
在第"
time-n<
秒"
进程名"
H->
pcb.name<
运行了"
n<
状态:
完成"
完成时间:
time<
H=H->
f2=f2-1;
m=0;
//新的队首未被执行;
n=0;
}
if(m==1)
cout<
正在执行"
if(H==NULL)
=NULL)time=head->
else
m==1&
n==T)//把未完成的进程插入到执行队列的队末
q=H;
H=H->
rear->
next=q;
rear=rear->
t=T;
/******************菜单函数****************/
voidMenu()
{
/***************菜单选项************/
charmenu;
”-----------------------------------------------------------------”<
cout<
”||||”<
”||**欢迎使用时间片轮转算法系统**||”<
”||菜单选项:
||”<
”||时间片轮转调度(Y/y)||”<
”||退出(Q/q)||”<
”||班级:
08计本
(2)||”<
”||姓名:
蔡春雨||”<
”||学号:
080303201||”<
-----------------------------------------------------------------"
请输入您的选择:
X;
switch(X)//菜单选项
case'
Y'
:
y'
start=1;
system("
cls"
);
****时间片轮转调度算法****"
break;
q'
Q'
exit(0);
break;
default:
输入错误!
按任意键退出!
voidmain()
system("
colorF4"
//改变背景色和字体颜色
Menu();
intf;
请输入进程个数:
f;
create_insert_LinkList(f);
pcb_LinkList(f);
运行完毕"
--------------谢谢您使用时间片轮转算法系统----------------------"
-------------------------蔡春雨---------------------------------"
-----------------------080303201--------------------------------"
}七、运行示例及结果分析
八、心得体会
为期一周半的课程设计结束了,在实践中我才真正的彻底了解了时间片轮转法的真正含义,发现原来课上听懂的到了实践中才发现那也是表面的,还好课程设计让我更加深入的了解了它,这也告诉我平时课上学习的东西应该在课后多加实践才能深入理解。
这次课程设计不仅让我操作系统课程得到了提升,更让我更多的了解了其他语言,让我发现学好一门语言是非常重要的。
也让我看到了团队合作的重要性和培养了我的细心和耐心,这对于程序的开发是很重要的。
而这次课程设计最让我遗憾的是没有合理安排好时间,之前花在研究和修改代码上的时间太多了,以至于没能完成最终的前台界面的设计,这也算是对我以后的课程设计的一个警告吧。
九、参考资料
[1].汤小丹,梁红兵,哲凤屏,汤子瀛。
《计算机操作系统(第三版)》。
西安电子科技大学出版社,2007
[2].张丽芬,刘利雄,王全玉。
《操作系统实验教程》。
清华大学出版社,2006