- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
处理机调度——优先级
南通大学操作系统实验课
实验报告
学 生 姓 名
所 在 院 系
专 业
学 号
指 导 教 师
南通大学
2014年 5 月 9 日
处理机管理
设计一个按优先级调度的算法实现处理机调度
一、实验目的
在多道程序或多任务系统中,系统中同时处于就绪状态的进程有若干个,也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用处理机。要求学生设计一个模拟单处理机调度的算法,以加深对处理机调度的概念理解。
二、实验要求
书写实验报告,包括:
(1)实验题目。
(2)程序中使用的数据结构及主要符号说明。
(3)程序流程图和带有注释的源程序。
(4)执行程序名,并打印程序运行时的初值和运行结果,其中包括:
①各进程控制块的初始状态。
②选中运行进程的名字、运行后各进程控制块状态以及每次调度时,就绪队列的进程排列顺序。
(5)通过实验后的收获与体会及对实验的改进意见和见解。
三、设计思想
(1)假设系统有3—5个进程,每个进程用一个进程控制块来代表。进程控制块的结构如图所示。进程的优先数、要求运行时间和估计运行时间由用户程序任意设定,且优先数越大,优先级越高。调度时,总是选择优先级最高的进程运行。
进程名 链接指针 进程的到达时间 进程的优先级 估计运行时间 进程状态 (2)为了调度方便,设计一个指针指向就绪队列的第一个进程。另外再设一个当前运行进程指针,指向当前正运行的进程。
(3)处理机调度时,总是选择已到达队列的优先级最高的进程运行。为了采用动态优先级调度,进程每运行一次,其优先级就减1。由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:优先数减1和估计运行时间减1.用这两个操作来模拟进程的一次运行。
(4)进程运行一次后,若剩余的运行时间不为0,且其优先级低于就绪队列的其他进程的优先级,则选择一个高优先级进程抢占CPU;若剩余运行时间为0,则把它的状态改为完成状态“F”,并撤出就绪队列。
(5)若就绪队列不空,则重复上述的步骤(3)(4),直到所有进程为完成状态。
(6)在所设计的程序中应有显示或打印语句,以显示或打印每次被选中进程的进程名字、运行一次后进程的变化以及就绪队列中的各进程排队情况等。
四、流程图: (1)主程序流程图:
(2) 子程序max_pri_process()流程图:
(3)子程序run()流程图:
五、运行结果
注:详细代码与详细结果见邮件。
六、总结与心得
一开始拿到这个题目,感觉无从下手。虽然理论上知道按优先级调度算法是什么样的,但实际要自己编写一个这样的程序感觉很茫然。好在老师提醒书上有另一种按时间片轮转法调度的程序示例,可以先调试运行那段程序,从中学习一下经验,这样自己做起来更方便些。于是我认真调试了书上的示例程序,总算有了一些思路。自己编写程序说简单也不简单,说复杂也不复杂,过程中遇到了大大小小的很多问题。我逐一对照系统提示的错误进行了修改,有不懂的地方就请教掌握得比较好的同学,终于将程序调试完成,结果还算令自己满意。
通过这次实验,我首先巩固了按时间片轮转法调度算法的知识,然后加深了对按优先级调度算法的理解,同时也提高了自己的编程能力。这次的实验过程让我更加深入地学习了多道程序和多任务系统以及处理机管理的知识。像这样理论结合实践,对我们的学习大有帮助,如果有时间,我会主动完成其他几种算法的编程,从而进一步提高自己,也会珍惜接下来每一次上机实践的机会,争取更上一层楼!
开 始
调用初始化子程序
调用运行子程序
结 束
i=i+1
return -1
结 束
return key
return -1
pcblist[key].state==F
max=pcblist[i].pri key=i
maxpcblist[i].pripcblist[i].state==R
pcblist[i].state==’r’
inum
i=0
定义i,key,max=100
开始
pcblist[max_pri_process()].state=r
j=0
max_pri_process()!=-1
jt
getchar()
show()
输出提示
j=j+1
t+=pcblist[j].runtime
jnum
j=0
定义i,j,t
开始
结 束
j=j+1
i=i+1
show() getchar()
pcblist[i].state=R
pcblist[i].state=F
pcblist[i].runtime==0
pcblist[i].pri-=1
文档评论(0)