基于时间片轮转法调度算法模拟_第1页
基于时间片轮转法调度算法模拟_第2页
基于时间片轮转法调度算法模拟_第3页
基于时间片轮转法调度算法模拟_第4页
基于时间片轮转法调度算法模拟_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0 操作系统课程设计报告操作系统课程设计报告 课程设计题目:基于时间片轮转法调度算法模拟课程设计题目:基于时间片轮转法调度算法模拟 姓名:姓名: 学号:学号: 专业:计算机科学与技术专业:计算机科学与技术 班级班级: 指导教师指导教师:小辉:小辉 2013 年年 1 月月 11 日日1 目目 录录一一.课程设计目的与内容课程设计目的与内容 .1 二.任务任务分析分析.2三.概要分析.3四.详细设计.4五.运行结果.6六.总 结.7七七.附录附录.8八八.评分表评分表.112一一.课程设计目的与内容课程设计目的与内容 1.课程设计目的(1)在单处理器情况下按时间片轮转算法实现处理器调度,输出运行

2、动态变化过程。(2)通过算法的实现加深了解处理器调度的工作。 2.课程设计内容 输入实现处理器调度的几个进程信息,任意确定一组“要求运行时间” ,启动所设计的处理器调度程序,显示逐次被选中进程的进程名以及进程控制块的动态变化过程。二、任务分析二、任务分析 时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。实现的过程即运用指针指向某一个进

3、程,判断当前的进程是否是就绪状态“r” ,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至 0 时,则将该进程的状态设置为“e” 。然后,将指针指向下一个未运行完成的进程,重复判断,直至所有的进程都运行结束。3三、概要设计三、概要设计(1)所用数据结构及符号说明#includestdio.h#includeconio.h#includemalloc.h#includestring.h#define NULL 0typedef struct PCBchar name10; /进程名struct PCB *next; /

4、链指针int need_time; /要求运行时间int worked_time; /已运行时间char condition; /进程状态,只有“就绪”和“结束”两种状态int flag; /进程结束标志PCB;PCB *front,*rear; int N; /N 为进程数4(2)主程序的流程图: Y Y N Y(3)程序说明:处理器调度总是选择指针指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执进程是否r开始输入进程数 N输入各进程信息为每个进程创建 PCB 并初始化形成一个循环链队列指针指向循环链队列第一个进程运行时间+1 且剩余时间-1剩

5、余时间=0?将进程状态置为e(完成)所有进程是否完成指针指向队列中下个进程结束5行:已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。四、详细设计四、详细设计(1)首先每一个进程用一个进程控制块 PCB 来代表。进程控制块的格式为:进程名指针要求运行时间已运行时间状态其中,进程名作为进程的标识,如 Q1、Q2 等。指针进程按顺序排成循环链队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。要求运行时间假设进程需要运行的单位时间数。已运行时间假设进程已经运行的单位时间数,初始值为“0”。状态有两种状态,“就绪”和“结束”,初始

6、状态都为“就绪”,用“r”表示。当一个进程运行结束后,它的状态为“结束”,用“e”表示。(2)每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。(3)程序详细设计步骤:a.首先建立 PCB 的数据结构,为了便于正确输出,加上了进程结束标志flag。输入进程信息(包括进程名和要求运行的时间),并为每个进程创建一个 PCB 并初始化形成一个循环链队列,用函数 creatPCB()来实现。b.建立函数 judge()用来判断进程全部运行结束标志,即当所有进程的状态变为e(即完成状态)后,循环结束,表示所有进程都已运行成功。c.建立时间片轮转算法 creatProcess()对

7、进程进行轮转运行,首先指针s 指向第一个进程 PCB,即 s=front,判断该进程的状态是否为r(就绪状态),即 if(s-condition = r),若是则表示此进程尚未执行结束,则执行 s-worked_time+且 s-need_time-,if(s-need_time=0),则表示此进程已运行结束,将其状态置为结束,即 s-condition=e,并根据状态位输出完成信息,且以后不会再运行此进程。将指针指向下个进程,s=s-next,并判断所有进程是否已全部运行结束,没有则重复上面算法。当所有进程的状态位都变成e表示所有进程运行完成,则循环结束。d.建立主函数 main(),输入进

8、程数 N,调用初始化循环链队列函数6creatPCB()和时间片轮转算法 creatProcess(N),每次选中进程的进程名以及运行一次后进程队列的变化,实现处理器的调度。5 5、运行结果运行结果7六、六、实验总结实验总结在完成时间片轮转算法的实现过程中,我们遇到了一些问题,比如怎样运用循环队列,如何设计结构体等等,也积极配合并思考进行解决。整体来说,我们的算法虽然实现了体现进程动态运行变化的过程,但是相对而言比较简单。实验中,我们小组不断讨论对算法进行优化,使得运行结果看起来更容易理解,也达到了处理机调度的功能。做实验让我们对于时间片轮转的思想理解的更加透彻,巩固了理论知识的学习。实验心得

9、体会:首先,我们认为这次课程设计是对学习操作系统的一次综合考察,锻炼我们综合分析问题、解决问题的能力。初次得到课程设计的题目时,为程序本身的简单而窃喜过;实验过程中也出现了一些难题需要解决,为此去苦苦探索过。课程设计期间,几乎有几天我们完全投入进去了,就像是在做一个相当重要的项目一样的感觉。曾经跑过图书馆几次,只是为了一种新的想法得到实现,也曾多次登录网站浏览网页,为了弥补一些知识上的纰漏,为此曾洒下了真实的汗水。当我们的想法得到实现,又学会了新的知识的时候,心中满是欣喜,或许这是实践出真知的真实验证,有付出就有回报的真实写照吧。其次,我们感受了真诚的友谊。在实验中,遇到的问题是多方面的,而且

10、有那么一部分是以前学过的 C 问题,但是已经忘却或是以前没有真正的理解过。但是你会发现就在你的身边,会有那么一批人在背后热心的帮助你,让你身处困境却感到无限希望。这好像是人生的一种历程,风风雨雨中我们一起走过,然后为了一些坑坑洼洼彼此真诚的帮助过和无私的付出过。团队的协作和彼此心的交流让我们彼此丰厚起来,这也是我们成长中必不可失的重要部分。最后,我认识到了自己的不足。平心而论,以前真的没有认真的学习过,即使是在听课,可是后来却没有对学习中出现的问题而仔细分析过。得过且过,迷失了我前进的方向,而现在却又重新敞开了。不论是以后的学习还是工作,我想这都是很重要的,我们需要不断进步的动力。8七、附录七

11、、附录实验源程序如下:#includestdio.h#includeconio.h#includemalloc.h#includestring.h#define NULL 0typedef struct PCBchar name10; /进程名struct PCB *next; /链指针int need_time; /要求运行时间int worked_time; /已运行时间char condition; /进程状态,只有“就绪”和“结束”两种状态int flag; /进程结束标志PCB;PCB *front,*rear; int N; /N 为进程数void creatPCB() /为每个进

12、程创建一个 PCB 并初始化形成一个循环链队列 PCB *p,*l;l = (PCB *)malloc(sizeof(PCB);printf(Please enter process name and timen);scanf(%s%d,l-name,&l-need_time);l-condition = r; /进程初始状态为就绪l-worked_time = 0;l-next=NULL;l-flag=0;front=l;for(int i = 1;i name,&p-need_time);p-condition = r; p-worked_time = 0;p-flag=0

13、;l-next = p;l=l-next;9rear=l;rear-next=front;void output() /进程输出函数printf(name runtime needtime staten);for(int j=1;jname,front-worked_time,front-need_time,front-condition);front=front-next;printf(n);int judge(PCB *p) /判断所有进程运行结束int flag = 1;for(int i=0;icondition != e)flag = 0;break;p=p-next;return

14、flag;void creatProcess(int n) /时间片轮转算法PCB *s,*p;int i,j,flag1=0;s = (PCB *)malloc(sizeof(PCB);s=front;printf(n-n);output();printf(Press any key to continue.nn);getch(); /按任意键继续s=front;while(flag1 != 1)if(s-condition = r)s-worked_time+;s-need_time-;if(s-need_time=0)s-condition=e;output();printf(Press

15、 any key to continue.nn);getch();if(s-condition=e & s-flag=0)printf(进程%s 已经运行完成!nn,s-name);s-flag=1;10s=s-next;flag1=judge(s);printf(-n);void main()printf(Please enter process numbern);scanf(%d,&N);creatPCB();creatProcess(N);11东华理工大学信息工程学院课程设计评分表学生姓名: 班级: 学号:课程设计题目:基于时间片轮转法调度算法模拟项目内容满分实 评能结合所学课程知识、有一定的能力训练。符合选题要求(5 人一题)10选题工作量适中,难易度合理10能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论