时间片轮转调度算法实验报告.docx
- 文档编号:24529328
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:19
- 大小:381.52KB
时间片轮转调度算法实验报告.docx
《时间片轮转调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《时间片轮转调度算法实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
时间片轮转调度算法实验报告
实验概述:
【实验目的及要求】用C语言编程实现时间片轮转调度算法
【实验原理】
基于时间片轮转调度算法思想用C语言编程实现
【实验环境】(使用的软件)
VisualC++6.0实验内容:
本实验模拟在单处理机情况下处理机调度,用C语言编程实现先来先服务和最短作业优先调度算法。
【实验方案设计】
时间片大小固定,由用户输入。
进程个数由用户输入。
a.每个进程用一个PCB表示。
PCB包括进程名,到达时间,运行时间,剩余时间,进程状态,链接指针。
其中,进程名,到达时间和运行时间由用户输入,剩余时间的初值等于运行时间。
为简单起见,进程状态设为三种:
就绪,运行和完成。
链接指针指向下一个进程的PCB;
b.按照进程到达的先后顺序排成一个队列。
设置一个队头指针指向队列中第一个进程,并设置一个队尾指针指向队列中的最后一个进程;
c.执行调度时,先选择队首的第一个进程运行。
另外设置一个指向当前运行进程的指针;
d.由于本实验是模拟实验,所以对选中进程并不实际启动运行,而只是执行:
被选中进程的状态置为运行
态;被选中进程的剩余时间减去时间片大小;按照队列的顺序依次输出每个进程的进程名,到达时间,运行时间,剩余时间,进程状态。
用这三个操作来模拟进程的一次运行;
e.进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针,
以指示应运行进程。
同时还应判断该进程的剩余时间是否为0。
如果不为
0,则等待下一轮的运行;如果该进程的剩余时间为0,则将该进程的状态置为完成态,并
退出队列;
f.若处于就绪态的进程不为空,则重复第d步和第e步直到所有进程都运行完为止。
【实验过程】(实验步骤、记录、数据、分析)测试用例1:
屏幕显示:
Pleaseinputtheprocessname,arrivetimeandruntime输入:
121
232
343
屏幕显示:
Pleaseinputtheslice
1venter〉
屏幕输出结果:
name
arrive
run
rest
state
1
2
1
0
running
2
3
2
2
ready
3
4
3
3
ready
name
arrive
run
rest
state
2
3
2
1
running
3
4
3
3
ready
name
arrive
run
rest
state
2
3
2
1
ready
3
4
3
2
running
name
arrive
run
rest
state
2
3
2
0
running
3
4
3
2
ready
name
arrive
run
rest
state
3
4
3
1
running
name
arrive
run
rest
state
3
4
3
0
running
测试数据
2:
231
123
542测试数据3:
【结论】
I(结果)
测试数据1的运行结果(截图):
D:
\wncZOlC4\CYuYan-bin\v/yvtempexe
测试数据2的运行结果:
PleaSeinput
thePrOCeSSname
FOr
example:
12
1
2
1
1
3
1
2
PleaSeinpUt
the
slice:
1
erd•二二j
\wiAc20104\CYuYan'-bin\;VwtemPeX
Pl^aSeinputthePrOCeSSnumber:
3
arrivetimeandruntime:
name
arrive
run
rest
State
1
2
3
2
running
2
3
1
L
ready
1
4
2
2
ready
***
name
arrive
run
rest
State
2
3
2
ready
name
arrive
run
rest
State
1
2
3
2
ready
2
3
1
O
running
L
4
2
2
leady
J"J"J"J.J"J"J"J"J"J"J"J—J"J"J"J"J"J"J"J—J"J"
/¥f\/V/V/V■、■、/\/\■、/V/¥/\/V/\f\f\■、■、/\/\■、/V/¥/\/V/\f\f\■、■、/\
running
running
ready
j"亠■=J*J*j.j.j.j.j.j.j.j.j.j.j.J.j.j.j.j.j.j.j.j.j.j.J*j.
/V/VYT"/V/%/V/V/V/V/V/V/V/V/V■、/V/V/%/V/V/V/V/V/V/V/V/V■、/V/%/V
兴****
ame
arriverun
2
4
rest
Statereadyrunning
ame
arriverun
rest
State
2
running
)
voidoutput(structstud*head)'structstud*p5*t,*r;intslice;
printf(nPleaseinputtheslice:
11);scanf(n%dH,&slice);while(head!
=NULL)
while(p! =NULL) {t=head; p->rest=p->rest・slice;p->state=”running”;if(p->rest<0) p->rest=0; printf(H\n ************************************ printf(Hname\tarrive\trun\trest\tstate\nn);while(t! =NULL) state); printf(H%d\t%d\t%d\t%d\t%s\nH,t->name,t->arrive,->run,t->rest,t->t=t->next; if(p->rest==0)/*判断是否删除结点7{if(p==head) {head=p->next; free(p); P=head;}/*删除头结点7 else {r->next=p->next;p=r->next;r=p;} else {r=P; p->state=”ready”;p=p->next; > } } } voidmain() {structstud*head;head=create();output(head); ) 【小结】 实验中产生的错误及原因分析: 1、程序运行不下去: 错误分析: 链表初始化排序过程中: 指针P=Null时,不能执行q・>arrive等命令;错误解 决方法: 将while(q->arrive {t=q; q=q->next;} 改为: while(q&&q->arrive {t=q; q=q->next;} 2、进程运行时间大于时间片时,程序进入死循环: 当进程所需时间等于时间片时,运行结果正确: D*: \winc20104\CYuYan\b Pleaseinput the processnumber: 2 PleaseinputForexample: 121 131 Pleaseinput the 12 the state state running continue rest0 rest0 1 runningready processname,arrivetimeandruntime: 1 slice: 1 卄**************卄**********#+******** name 1 1 arrive 2 3 run 1 1 name 1 arriverun 31 Pressanv ■ 进程运行时间大于时间片时,程序进入死循环: (■O: \winc2OlO4\CYuYen\bin\w^temp name 2 arrive 1 run 2 杓*********水*水************水******* name 9 arriverun 12 ame ame ame am已 arrive 1 arrive 1 arrive 1 *: {o|a4ofc**寧*************************字客** arriverun 12 水**水**水****生************************* 9 2 run 2 run 2 ********************************卄*** run 2 卓******************字眾卓**+: ********申*审* *#*#*#***亦********#*****#*#*****于***** state 1 running state running state running state running state running state running rest 1 rest 1 rest 1 rest 1 rest 1 错误分析: 进程所需剩余时间计算错误;错误修改: 将while(p! =NULL) {t=head; p・>rest=p->ruslice;p・>state='*running”; 修改为: while(p! =NULL) {t=head; p・>rest=p->rest・slice; p->state-’running”;错误3: 测试数据: 121313Slice=2结果为: 3 13 -6155 running 厶 1 21 -6155 ready •J••••|•••j••.•».••j••了••J•*j•*»••.•■丫••丫••.••4••j••J•*A•*|*-|**.*****j*■••4*•J*■丫*•丫•*g******j**j* name arriverun rest state 3 13 -6155 ready 11 21 -6157 running 11・-L*■、★、▼/ Il^p»•flpt•flreeHp»^p»•np**T*•tF»•¥<•Rn»^T9•T**T^•nF® |name arriverun rest state 3 13 -6157 running 1 21 -6157 ready 11^-^**^**^r^^*-Ar■"•丄・■—丄-・2•-丄"Ar*^L* ii°T*•! *9^T9•^p»^T'* name arriverun rest state 3 13 -6157 ready 1 21 -6159 running 11•1••i*•lu» 11^TT® name arriverun rest state 3 13 -6159 running 1 21 -6159 ready / r»► 1% 即进入死循环。 当进程所需时间小于时间片时,应立即跳出进程就绪对列。 错误修改: /houtput()子函数中p->rest=p->rest-slice; 后面加上一个语句: if(p->rest<0) p->rest=0; 实验运行结果为: 实验的体会及收获: 通过这次试验,我对处理机的调度算法…基于时间片轮转调度算法思想有了更深的理解;另 外使我对链表的知识有了更深的理解,而且锻炼了我的思维能力,使我能更全面地思考问题,以后还需要多做些这方面的练习。 实验还需改进之处: 为考虑进程所需时间小于时间片大小的情况,如: 进程运行完一次时间片时间中断后,但下一个进程的提交时间要迟很多,这时候就会浪费很多时间等待,这是该程序还需改进的地方。 另外,本实验中的RR算法的时间片大小固定,所以实际是属于基本轮转法,还有种是时间片长短是变化的,即改进轮转法o在基本轮转法中,时间片大小的设置是尖键。 时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又 可能引起对短的交互请求的响应变差。 据悉,通常,时间片的长度为几十毫秒到几百毫秒,而将时间片设为100毫秒通常是一个比较合理的折衷。 指导教师评语及成绩: 评语: 成绩: 指导教师签名: 批阅日期: 实验报告说明 1-实验项目名称: 要用最简练的语言反映实验的内容。 要求与实验指导书中相一致。 2•实验类型: 一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。 3•实验目的与要求: 目的要明确,要抓住重点,符合实验指导书中的要求。 4•实验原理: 简要说明本实验项目所涉及的理论知识。 5•实验环境: 实验用的软硬件环境(配置)。 6・实验方案设计(思路、步骤和方法等): 这是实验报告极其重要的内容。 概括整个实验过程。 对于操作型实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。 对于设计型和综合型实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。 对于创新型实验,还应注明其创新点、特色。 7•实验过程(实验中涉及的记录、数据、分析): 写明具体上述实验方案的具体实施,包括实验过程中的记录、数据和相应的分析。 8・结论(结果): 即根据实验过程中所见到的现象和测得的数据,做出结论。 9・小结: 对本次实验的心得体会、思考和建议。 10・指导教师评语及成绩: 指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值。 实验报告将记入实验成绩;每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间 轮转 调度 算法 实验 报告