操作系统时间片轮转法进行CPU调度Word下载.docx
《操作系统时间片轮转法进行CPU调度Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统时间片轮转法进行CPU调度Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
按照进程到达的先后顺序排成一个循环队列,再设一个队首指针指向第一个到达进程的首址。
进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示运行进程。
同时判断该进程剩余运行时间是否为零,不为零则等待下一轮的运行;
若该进程的剩余运行时间为零,则该进程完成,状态为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--------------------------------"
七、运行示例及结果分析
八、心得体会
为期一周半的课程设计结束了,这次课程设计是对学习《操作系统》的一次综合考察,锻炼我们综合分析问题、解决问题的能力。
试验过程中遇到好多的难题,比如在这一周半时间里有三门考试,都没有什么时间来做课程设计,考试结束都礼拜3了,其实只有礼拜四一天的时间。
一天的时间做一个课程设计也真是勉为其难。
这就不免会到网上寻求答案。
这次课程设计是用C++语言编写,C++已经有一年半没摸了,在试验过程中再次捧起C++的课本和资料。
在和同学的合作和自己努力下,终于把试验给搞定。
虽然还有代码看不明白。
但我相信如果给我一周半时间我肯定能把时间片轮转算法给搞定。
总的说来知识上的收获很是重要,精神上的丰收也是更加可喜的,让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆。
九、参考资料
[1].汤小丹,梁红兵,哲凤屏,汤子瀛。
《计算机操作系统(第三版)》。
西安电子科技大学出版社,2007
[2].张丽芬,刘利雄,王全玉。
《操作系统实验教程》。
清华大学出版社,2006
[3].谭浩强。
《C++程序设计》。
清华大学出版社,2006
..