




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本课程设计以Windows操作系统为实验平台,进行源代码分析和修改。通过该 课程设计,使学生掌握 Win dows操作系统各部分结构、实现机理和各种典型算法; 系统地了解操作系统的设计和实现思路,运用内核开发环境实现对内核的修改,培 养学生的系统设计能力,并了解操作系统的发展动向和趋势。二、实验内容1 分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。2 画出程序的基本结构框图和流程图。3 对程序的每一部分要有详细的设计分析说明。4 源代码格式要规范。5设计合适的测试用例,对得到的运行结果要有分析。6设计中遇到的问题,设计的心得体会。7 按期提交完整的程序代码、可执行程序和课
2、程设计报告。三、实验步骤1、任务分析:时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的 时间。算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。 时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数 据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时 间和进程的状态以及指针的信息。实现的过程即运用指针指向某一个进程,判断当 前的进程是否是就绪状态“ r ”,如果是,则为该进程分配一个时间片,同时,已运 行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的 时间减少至0时,则将该进程的状态设置为“ e
3、”。然后,将指针指向下一个未运行 完成的进程,重复判断,直至所有的进程都运行结束。2、概要设计:(1)所用数据结构及符号说明typedef struct PCB char n ame10;先建立PCB的数据结构,为了便于正确输出,加上了进程结束标志 flag。输入 进程信息(包括进程名和要求运行的时间),并为每个进程创建一个PCB并初始化形成一个循环链队列,用函数creatPCB()来实现。b. 建立函数judge()用来判断进程全部运行结束标志,即当所有进程的状态变 为e(即完成状态)后,循环结束,表示所有进程都已运行成功。c. 建立时间片轮转算法creatProcess ()对进程进行轮转
4、运行,首先指针s指向第一个进程PCB即s=front,判断该进程的状态是否为r (就绪状态),即 if(s-condition = r),若是则表示此进程尚未执行结束,则执行 s-worked_time+ 且 s-need_time- ,if(s-need_time=0) ,J则表示此进程已运行 结束,将其状态置为结束,即s-co nditio n=e,并根据状态位输出完成信息,且以后不会再运行此进程。将指针指向下个进程,s=s-next,并判断所有进程是否已全部运行结束,没有则重复上面算法。当所有进程的状态位都变成e表示所有进程运行完成,则循环结束。d. 建立主函数main(),输入进程数N
5、,调用初始化循环链队列函数creatPCB()和时间片轮转算法creatProcess(N),每次选中进程的进程名以及运行一次后进程队 列的变化,实现处理器的调度。4、调试分析:a.调试过程中遇到的问题及解决方案开始运行到Q5运行完成后显示错误,如下图所示:原因:经检查程序发现语句 if(s-c on ditio n=e )pri ntf(”进程%s已经运行完成! nn,s-name);有错误,因为当某个进程运行完成后,其状态标志已修改为e,所以再次循环运行未完成的进程时,当运行到此句时仍会将前面已完成 的进程重新输出一遍完成信息,导致输出错误。解决方案:为每个进程加上一个结束标志 flag,
6、并赋初值为0,当进程运行完 成后,将flag 改为1,再将后面输 出改为if(s-co nditio n=e|s-flag=0 )pri ntf(进程 sE经运行完成! nn,s- name);s-flag=0;,这样在前面进程运行完成输出后,后面再循环时就不会重新输出一遍了。b改进设想:本实验较简单,但还不够完善,如未实现插入进程功能,即进程 在运行过程中可以插入其他的进程再运行。还有未进行进程优先级判别,本实验默 认进程的优先级按输入的先后顺序从大到小排列的,还有其他功能等,希望在以后 的实验中逐步完善。5、测试结果:a.首先输出五个进程的初始状态b开始从进程Q1开始按时间片轮转运行进程,
7、Q4先运行完成c. 接着 Q1 运行完成d. 接着Q5运行完成e. 再Q3运行完成f. 最后Q2运行完成四、实验总结 因在早期的时间片轮转法中,系统将所有的就绪进程按照先来先服务的原则排 成一个队列,每次调度是,把 CPU分配给队首进程,并令其执行一个时间片。当执 行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然 后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。在 时间片轮转算法中,时间片的大小对系统性能有很大的影响。如果选择很小的时间 片将有利于短作业,因为它能较快地完成,但会频繁的发生中断、进程上下文的切 换,从而增加系统的开销;反之,如果选择
8、太长时间片,使得每个进程都能在一个 时间片内完成,所以,一般定为时间片略大于一次典型地交互所需要的时间。在完成时间片轮转算法的实现过程中,我们遇到了一些问题,比如怎样运用循 环队列,如何设计结构体等等,也积极配合并思考进行解决。整体来说,我们的算 法虽然实现了体现进程动态运行变化的过程,但是相对而言比较简单。实验中,我 们小组不断讨论对算法进行优化,使得运行结果看起来更容易理解,也达到了处理 机调度的功能。做实验让我们对于时间片轮转的思想理解的更加透彻,巩固了理论 知识的学习。实验心得体会:首先,我们认为这次课程设计是对学习操作系统的一次综 合考察,锻炼我们综合分析问题、解决问题的能力。初次得
9、到课程设计的题目时, 为程序本身的简单而窃喜过; 实验过程中也出现了 一些难题需要解决,为此去苦苦探索过。课程设计期间,几乎有几天我们完全投入 进去了,就像是在做一个相当重要的项目一样的感觉。曾经跑过图书馆几次,只是 为了一种新的想法得到实现,也曾多次登录网站浏览网页,为了弥补一些知识上的 纰漏,为此曾洒下了真实的汗水。当我们的想法得到实现,又学会了新的知识的时 候,心中满是欣喜,或许这是实践出真知的真实验证,有付出就有回报的真实写照 吧。其次,我们感受了真诚的友谊。在实验中,遇到的问题是多方面的,而且有那么 一部分是以前学过的C问题,但是已经忘却或是以前没有真正的理解过。但是你会 发现就在你
10、的身边,会有那么一批人在背后热心的帮助你,让你身处困境却感到无 限希望。这好像是人生的一种历程,风风雨雨中我们一起走过,然后为了一些坑坑 洼洼彼此真诚的帮助过和无私的付出过。团队的协作和彼此心的交流让我们彼此丰 厚起来,这也是我们成长中必不可失的重要部分。最后,我认识到了自己的不足。平心而论,以前真的没有认真的学习过,即使是 在听课,可是后来却没有对学习中出现的问题而仔细分析过。得过且过,迷失了我 前进的方向,而现在却又重新敞开了。不论是以后的学习还是工作,我想这都是很 重要的,我们需要不断进步的动力。总的说来知识上的收获很是重要,精神上的丰收也是更加可喜的,让我知道了学 无止境的道理。我们每
11、一个人永远不能满足于现有的成就,人生就像在爬山,一座 山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课 程设计必将成为我人生旅途上一个非常美好的回忆。五、源程序实验源程序如下:# nclude#i nclude#i nclude#i nclude#defi ne NULL 0 typedef struct PCBchar name10;/进程名struct PCB *n ext; /链指针int n eed_time; /要求运行时间int worked_time; /已运行时间char con diti on; /进程状态,只有就绪和结束两种状态int flag;/P
12、CB;进程结束标志PCB *fron t,*rear; int N; /N 为进程数void creatPCB() /为每个进程创建一个PCB并初始化形成一个循环链队列PCB *p,*l;I = (PCB *)malloc(sizeof(PCB);printf(请输入各进程名和要求运行时间n);sca nf(%s%d,l-n ame,&I-n eed_time);l-co ndition = r; /进程初始状态为就绪l-worked_time = 0;l- next=NULL;l-flag=0;fron t=l;for(int i = 1;i n ame,&p-n eed_time);p-c
13、 on diti on = r;p-worked_time = 0;p-flag=0;l-n ext = p;l=l-n ext;rear=l;rear- n ext=fr ont;void output() /进程输出函数printf( 进程名已运行时间需要时间状态n);for(i nt j=1;j name,fron t-worked_time, front-n eed_time, fron t-c on diti on);front=front-n ext;prin tf(n);int judge(PCB *p) /判断所有进程运行结束int flag = 1;for(int i=O;i
14、c on diti on != e)flag = 0;break;p=p-n ext;retur n flag;void creatProcess(i nt n) /时间片轮转算法PCB *s,*p;int i,j,flag 仁0;s = (PCB *)malloc(sizeof(PCB);s=front;printf(nn);output();printf(请按任意键继续nn);getch(); /按任意键继续s=front;while(flag1 != 1)if(s-c on diti on = r)s-worked_time+;s-n eed_time-;if(s-n eed_time=0)s-c on d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旋耕机维修协议书
- 五星酒店线上推广行业跨境出海项目商业计划书
- 高硼硅陶瓷奶泡壶行业跨境出海项目商业计划书
- 高效能汽车冷却系统企业制定与实施新质生产力项目商业计划书
- 夫妻冷静期协议书
- 环保型氟硅防水涂料行业深度调研及发展项目商业计划书
- 大蚕房租用协议书
- 空调杀菌清洗剂行业跨境出海项目商业计划书
- 接送园转让协议书
- 高速铁路列车智能诊断行业深度调研及发展项目商业计划书
- 昆虫生态学 第三章种群生态学课件
- 2025届天津市和平区第二十中学数学八下期末复习检测模拟试题含解析
- 政府委托经营协议书
- 江苏省南通市通州区、如东县2025届九年级下学期中考一模化学试卷(含答案)
- (高清版)DG∕TJ 08-2243-2017 市属高校建筑规划面积标准
- 良渚文化课件
- 股权无偿划转协议书
- 食品配送服务质量保障措施
- (统编2024版)七下语文期末专题总复习课件(共6个专题)新教材
- 【MOOC答案】《电力电子学》(华中科技大学)章节作业期末慕课答案
- 用人施工合同协议书
评论
0/150
提交评论