操作系统时间片轮转法进行CPU调度.docx

上传人:b****3 文档编号:5455118 上传时间:2022-12-16 格式:DOCX 页数:12 大小:166.58KB
下载 相关 举报
操作系统时间片轮转法进行CPU调度.docx_第1页
第1页 / 共12页
操作系统时间片轮转法进行CPU调度.docx_第2页
第2页 / 共12页
操作系统时间片轮转法进行CPU调度.docx_第3页
第3页 / 共12页
操作系统时间片轮转法进行CPU调度.docx_第4页
第4页 / 共12页
操作系统时间片轮转法进行CPU调度.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统时间片轮转法进行CPU调度.docx

《操作系统时间片轮转法进行CPU调度.docx》由会员分享,可在线阅读,更多相关《操作系统时间片轮转法进行CPU调度.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统时间片轮转法进行CPU调度.docx

操作系统时间片轮转法进行CPU调度

目录

一、设计目的1

二、设计内容2

三、设计原理3

四、算法实现4

五、流程图5

六、源程序6

七、运行示例及结果分析11

八、心得体会13

九、参考资料14

时间片轮转法进行CPU调度

一、设计目的

进程调度是处理机管理的核心内容。

本设计要求用高级语言编写和调试一个简单的进程调度程序。

通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先权调度算法和时间片轮转调度算法的具体实施办法。

并通过课程设计,让我们更好的掌握操作系统的原理以及实现方法,加深对操作系统基础理论和重要算法的理解,加强我们自身的动手能力。

 

二、设计内容

在多道程序或多任务系统中,系统同时处于就绪状态的进程有若干个,为了使系统中的各进程能有条不紊的进行,选择某种调度策略,以选择一进程占用处理机因此使用时间片轮转算法模拟单处理机调度。

 

三、设计原理

系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。

时间片的大小从几MS到几百MS。

当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后再把处理机分配给就绪队列中的新的队首进程,同时也让他执行一个时间片。

这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。

换言之,系统能在给定时间内相应所有用户的请求。

 

四、算法实现

每个程序用一个进程控制块PCB来代表。

PCB代表:

进程名、链接指针、到达时间、估计运行时间和进程状态。

其中进程名既进程标识。

链接指针之处下一个到达进程的进程控制块地址,按照进程到达的顺序排队,统设置一个队头和队尾指针分别指向第一个和最后一个进程,新生成的进程放队尾。

设计者任意指定一个运行时间,进程创建时用户指定到达时间,调度时,总是选择到达时间最早的进程。

进程有就绪和完成状态,进程一创建就处于就绪状态,用R表示,一个程序运行结束时,就将其设置为完成状态,用C表示。

用户为每个程序设定一个要求运行时间和到达时间。

按照进程到达的先后顺序排成一个循环队列,再设一个队首指针指向第一个到达进程的首址。

进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示运行进程。

同时判断该进程剩余运行时间是否为零,不为零则等待下一轮的运行;若该进程的剩余运行时间为零,则该进程完成,状态为C,并退出循环队列。

若就绪队列不为空,则重复以上步骤直到所有进程都运行完为止。

 

五、流程图

六、源程序

#include

#include

#include

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>>p->pcb.arrtime>>p->pcb.runtime;

cout<

p->next=NULL;

p1=head;

p2=p1->next;

while(p2!

=NULL&&p2->pcb.arrtimepcb.arrtime)

{

p1=p2;

p2=p2->next;

}

p1->next=p;

p->next=p2;

f1=f1-1;

}

}

voidpcb_LinkList(intf2)

{

LinkListH;

ListNode*rear,*p,*q;

intT,t,time,m,n;

p=(ListNode*)malloc(sizeof(ListNode));

p=NULL;

H=p;

cout<<"请输入时间片大小:

";

cin>>T;

t=T;

H=head->next;

head->next=head->next->next;

rear=H;

rear->next=NULL;

time=H->pcb.arrtime;

while(f2!

=0)

{

n=0;

while(t!

=0)

{

t=t-1;

time=time+1;

if(head->next!

=NULL)

{

if(head->next->pcb.arrtime<=time)

{

if(H==NULL)

{

H=head->next;

head->next=head->next->next;

rear=H;

rear->next=NULL;

}

else

{

rear->next=head->next;

head->next=head->next->next;

rear=rear->next;

rear->next=NULL;

}

}

}

if(H!

=NULL)

{

H->pcb.runtime=H->pcb.runtime-1;

m=1;//该进程有被执行

n=n+1;

if(H->pcb.runtime==0)//该进程服务完,从执行队列中删除

{

cout<<"在第"<

cout<<"进程名"<pcb.name<<"运行了"<

完成"<<"完成时间:

"<

cout<

H=H->next;

f2=f2-1;

m=0;//新的队首未被执行;

n=0;

}

}

}

if(m==1)

{

cout<<"在第"<

cout<<"进程名"<pcb.name<<"运行了"<

正在执行"<

cout<

}

if(H==NULL)

{

if(head->next!

=NULL)time=head->next->pcb.arrtime;

}

else

{

if(H->next!

=NULL&&m==1&&n==T)//把未完成的进程插入到执行队列的队末

{

q=H;

H=H->next;

rear->next=q;

rear=rear->next;

rear->next=NULL;

}

}

t=T;

}

}

/******************菜单函数****************/

voidMenu()

{

/***************菜单选项************/

charmenu;

cout<<”-----------------------------------------------------------------”<

cout<<”||||”<

cout<<”||||”<

cout<<”||**欢迎使用时间片轮转算法系统**||”<

cout<<”||||”<

cout<<”||||”<

cout<<”||菜单选项:

||”<

cout<<”||||”<

cout<<”||时间片轮转调度(Y/y)||”<

cout<<”||||”<

cout<<”||退出(Q/q)||”<

cout<<”||||”<

cout<<”||班级:

08计本

(2)||”<

cout<<”||姓名:

蔡春雨||”<

cout<<”||学号:

080303201||”<

cout<<"-----------------------------------------------------------------"<

cout<<"请输入您的选择:

"<

cin>>X;

switch(X)//菜单选项

{

case'Y':

case'y':

start=1;

system("cls");

cout<<"****时间片轮转调度算法****"<

break;

case'q':

case'Q':

exit(0);

break;

default:

cout<<"输入错误!

按任意键退出!

"<

break;

}

}

voidmain()

{

system("colorF4");//改变背景色和字体颜色

Menu();

intf;

cout<<"请输入进程个数:

";

cin>>f;

create_insert_LinkList(f);

pcb_LinkList(f);

cout<<"运行完毕"<

cout<<"--------------谢谢您使用时间片轮转算法系统----------------------"<

cout<<"-------------------------蔡春雨---------------------------------"<

cout<<"-----------------------080303201--------------------------------"<

}

七、运行示例及结果分析

八、心得体会

为期一周半的课程设计结束了,这次课程设计是对学习《操作系统》的一次综合考察,锻炼我们综合分析问题、解决问题的能力。

试验过程中遇到好多的难题,比如在这一周半时间里有三门考试,都没有什么时间来做课程设计,考试结束都礼拜3了,其实只有礼拜四一天的时间。

一天的时间做一个课程设计也真是勉为其难。

这就不免会到网上寻求答案。

这次课程设计是用C++语言编写,C++已经有一年半没摸了,在试验过程中再次捧起C++的课本和资料。

在和同学的合作和自己努力下,终于把试验给搞定。

虽然还有代码看不明白。

但我相信如果给我一周半时间我肯定能把时间片轮转算法给搞定。

总的说来知识上的收获很是重要,精神上的丰收也是更加可喜的,让我知道了学无止境的道理。

我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。

挫折是一份财富,经历是一份拥有。

这次课程设计必将成为我人生旅途上一个非常美好的回忆。

 

九、参考资料

[1].汤小丹,梁红兵,哲凤屏,汤子瀛。

《计算机操作系统(第三版)》。

西安电子科技大学出版社,2007

[2].张丽芬,刘利雄,王全玉。

《操作系统实验教程》。

清华大学出版社,2006

[3].谭浩强。

《C++程序设计》。

清华大学出版社,2006

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

当前位置:首页 > 教学研究 > 教学计划

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

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