时间片轮转课程设计剖析Word文档格式.docx

上传人:b****8 文档编号:22723455 上传时间:2023-02-05 格式:DOCX 页数:20 大小:385.26KB
下载 相关 举报
时间片轮转课程设计剖析Word文档格式.docx_第1页
第1页 / 共20页
时间片轮转课程设计剖析Word文档格式.docx_第2页
第2页 / 共20页
时间片轮转课程设计剖析Word文档格式.docx_第3页
第3页 / 共20页
时间片轮转课程设计剖析Word文档格式.docx_第4页
第4页 / 共20页
时间片轮转课程设计剖析Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

时间片轮转课程设计剖析Word文档格式.docx

《时间片轮转课程设计剖析Word文档格式.docx》由会员分享,可在线阅读,更多相关《时间片轮转课程设计剖析Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

时间片轮转课程设计剖析Word文档格式.docx

2、课程设计内容

用c/c++语言实现时间片轮转的进程调度模拟算法。

要求:

1.至少要有5个以上进程

2.进程被调度占有CPU后,打印出该进程正在运行的相关信息

提示:

时间片轮转调度算法中,进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。

在使用完一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。

1)进程运行时,只打印出相关提示信息,同时将它已经运行的时间片加1就可以了。

2)为进程设计出PCB结构。

PCB结构所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息等。

3、设计报告撰写格式要求:

1设计题目与要求2设计思想

3系统结构4数据结构的说明和模块的算法流程图

5使用说明书(即用户手册):

内容包含如何登录、退出、读、写等操作说明

6运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)

7自我评价与总结8附录:

程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释;

三、课程设计步骤及时间进度和场地安排

本课程设计将安排在第17周,现代教育技术中心。

具体安排如下:

时间

设计内容

第一天

下发任务书,学生查阅资料

第二天

系统设计和原型开发

第三天-第四天

系统功能实现

第五天

系统调试、测试、打包和验收

课程设计集中时间安排:

周次

星期一

星期二

星期三

星期四

星期五

第17周

第2-3节

第3-6节

地点

现教

四、课程设计考核及评分标准

课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、答辩情况等各因素。

具体评分标准如下:

(1)设计方案正确,具有可行性、创新性;

30分

(2)系统开发效果较好;

20分

(3)设计报告规范、课程设计报告质量高、参考文献充分20分

(4)课程设计答辩时,问题回答正确;

(5)态度认真、刻苦钻研、遵守纪律;

10分

按上述五项分别记分后求和,总分按五级制记载最后成绩。

优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)

1、实验概叙

1.1实验目的

弄明白时间片轮转的工作流程和原理,通过实验让自己更明白切身体会的深!

时间片轮转主要是解决处理机调度进程时的优化!

正确理解提高处理机的利用率及改善系统性能在很大程度上取决于处理机调度性能的好坏,在操作系统中调度的实质是一种资源分配,调度算法是指根据系统的资源分配策略规定的资源分配算法,对不同的系统和系统目标,应采用不的调度算法。

在多道程序或多任务系统中,系统同时处于就绪状态的进程有若干个。

也就是说能运行的进程数远远大于处理机个数。

为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用处理机。

通过本实验,加深对处理机调度的理解。

1.2实验原理

基于时间片轮转调度算法思想用C语言编程实现

1.3实验环境(使用的软件)

VisualC++6.0

2、实验思想及内容

2.1设计思想

按照时间片工作原理:

时间片轮转的原则是系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配对手进程,并令其执行一个时间片,当执行完时,有一个计时器发出时钟中断请求,该进程停止,并被送到就绪队列的末尾,然后再把处理机分配就绪队列的队列进程,同时也让它执行一个时间片!

2.2实验原理

2.3系统结构设计

时间片大小固定,由用户输入。

进程个数由用户输入。

每个进程用一个PCB表示。

PCB包括进程名,到达时间,运行时间,剩余时间,进程状态,链接指针。

其中,进程名,到达时间和运行时间由用户输入,剩余时间的初值等于运行时间。

为简单起见,进程状态设为三种:

就绪,运行和完成。

链接指针指向下一个进程的PCB;

按照进程到达的先后顺序排成一个队列。

设置一个队头指针指向队列中第一个进程,并设置一个队尾指针指向队列中的最后一个进程;

执行调度时,先选择队首的第一个进程运行。

另外设置一个指向当前运行进程的指针;

由于本实验是模拟实验,所以对选中进程并不实际启动运行,而只是执行:

被选中进程的状态置为运行态;

被选中进程的剩余时间减去时间片大小;

按照队列的顺序依次输出每个进程的进程名,到达时间,运行时间,剩余时间,进程状态。

用这三个操作来模拟进程的一次运行;

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

同时还应判断该进程的剩余时间是否为0。

如果不为0,则等待下一轮的运行;

如果该进程的剩余时间为0,则将该进程的状态置为完成态,并退出队列;

若处于就绪态的进程不为空,则重复第d步和第e步直到所有进程都运行完为止。

2.4算法流程图

2.5实验过程(实验步骤、记录、数据、分析)

测试用例1:

屏幕显示:

Pleaseinputtheprocessname,arrivetimeandruntime

输入:

121<

enter>

231<

322<

412<

511<

测试数据2:

112<

232<

312<

431<

测试数据3:

111<

222<

321<

3、结论(结果)

3.1测试数据1的运行结果(截图):

3.2测试数据2的运行结果(截图):

3.3测试数据3的运行结果(截图):

4、源程序代码:

#include"

stdio.h"

stdlib.h"

structstud

{

intname;

intarrive;

intrun;

intrest;

char*state;

structstud*next;

};

/*pcb结构体*/

structstud*create()

inta,i;

structstud*head,*rear,*p,*q,*t;

/*定义各个指针*/

head=rear=NULL;

printf("

Pleaseinputtheprocessnumber:

"

);

scanf("

%d"

&

a);

\nPleaseinputtheprocessname,arrivetimeandruntime:

\nForexample:

121\n"

for(i=0;

i<

a;

i++)

{

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

%d%d%d"

p->

name,&

arrive,&

run);

p->

rest=p->

run;

state="

ready"

;

if(rear==NULL)/*只有一个进程*/

head=p;

p->

next=NULL;

rear=p;

}

else

t=NULL;

q=head;

while(q&

&

q->

arrive<

arrive)

{t=q;

q=q->

next;

}

if(q==head)/*指向头进程的下一个进程*/

{p->

next=head;

elseif(t==rear)/*运行到最后一个进程*/

{rear->

next=p;

else

{t->

p->

next=q;

returnhead;

voidoutput(structstud*head)

structstud*p,*t,*r;

intslice;

Pleaseinputtheslice:

slice);

while(head!

=NULL)

r=p=head;

while(p!

{t=head;

rest-slice;

/*剩余时间减去时间片*/

running"

if(p->

rest<

0)/*剩余的时间用完了*/

rest=0;

\n**************************************\n"

name\tarrive\trun\trest\tstate\n"

while(t!

printf("

%d\t%d\t%d\t%d\t%s\n"

t->

name,t->

arrive,t->

run,t->

rest,t->

state);

t=t->

rest==0)/*判断是否删除结点*/

{if(p==head)

{head=p->

free(p);

p=head;

}/*删除头结点*/

{r->

next=p->

p=r->

r=p;

else

{r=p;

/*如果不删除头结点指针指向下一个,状态变为准备*/

p=p->

}

voidmain()

structstud*head;

head=create();

output(head);

5、小结

5.1实验中产生的错误及原因分析:

5.1.1程序运行不下去:

错误分析:

链表初始化排序过程中:

指针p=Null时,不能执行q->

arrive等命令;

错误解决方法:

将while(q->

arrive&

q)

改为:

while(q&

5.1.2进程运行时间大于时间片时,程序进入死循环:

当进程所需时间等于时间片时,运行结果正确:

进程运行时间大于时间片时,程序进入死循环:

进程所需剩余时间计算错误;

错误修改:

将while(p!

run-slice;

修改为:

while(p!

5.2实验的体会及收获:

通过这次试验,我对处理机的调度算法---基于时间片轮转调度算法思想有了更深的理解;

另外使我对链表的知识有了更深的理解,而且锻炼了我的思维能力,使我能更全面地思考问题,以后还需要多做些这方面的练习。

5.3实验还需改进之处:

为考虑进程所需时间小于时间片大小的情况,如:

进程运行完一次时间片时间中断后,但下一个进程的提交时间要迟很多,这时候就会浪费很多时间等待,这是该程序还需改进的地方。

另外,本实验中的RR算法的时间片大小固定,所以实际是属于基本轮转法,还有种是时间片长短是变化的,即改进轮转法。

在基本轮转法中,时间片大小的设置是关键。

时间片设得太短会导致过多的进程切换,降低了CPU效率;

而设得太长又可能引起对短的交互请求的响应变差。

据悉,通常,时间片的长度为几十毫秒到几百毫秒,而将时间片设为100毫秒通常是一个比较合理的折衷。

设计过程中质疑(或答辩)记载:

{设计报告书中的最后一页}

指导教师评语:

签名:

年月日

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

当前位置:首页 > 高等教育 > 文学

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

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