




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.操作系统课程设计报告专业: 计算机科学与技术 班级: 09计本班 学 号姓 名成绩200981010118刘利刚题目名称: 进程调度模拟程序 完成日期: 2012年6月20日 甘肃政法学院计算机科学学院目 录第一章 课程设计目的3第二章 课程设计要求3第三章 设计思想43.1 基本概念43.2 进程控制块53.3 算法思想5第四章 详细设计64.1 程序设计流程图64.2 程序各模块功能介绍6第五章 运行结果及分析145.1 程序调试145.2 运行结果155.3 结果分析17第六章 总结17参考文献18进程调度模拟程序 第一章 课程设计目的 深入掌握进程调度的概念原理和实现方法,理解操作系统进程管理中进行进程调度的过程和编程方法,掌握先来先服务调度算法和最高优先数优先的调度算法,创建进程控制块PCB。理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。进程调度是处理机管理的核心内容。本次课程设计用C语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会最高优先数优先与按时间片轮转调度结合算法的优缺点。第二章 课程设计要求 编写一个进程调度程序,允许多个进程并行执行。 1、进程调度算法:采用最高优先数优先与按时间片轮转调度结合算法。 2、每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 3、进程的优先数及需要的运行时间可在运行时输入,进程的到达时间为输入进程的时间。 4、进程的运行时间以时间片为单位进行计算。 5、每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 6、就绪进程获得 CPU后都只能运行一个时间片。 7、如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 8、每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。第三章 设计思想3.1 基本概念 优先级调度算法:按照进程的优先级大小来调度。使高优先级进程或线程得到优先的处理的调度策略称为优先级调度算法。进程的优先级可以由系统自动地按一定原则赋给它,也可由系统外部来进行安排。本次课程设计是自己给定进程的优先级。 但在许多采用优先级调度的系统中,通常采用动态优先数策略。即一个进程的优先级不是固定的,往往是随许多因素的变化而变化。尤其随作业(进程)的等待时间,已使用的处理器时间或其他系统资源的使用情况而定,以防止低优先级进程或线程长期饥饿现象发生 时间片轮转算法: 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。时间片轮转算法主要用于处理器调度。采用此算法的系统,其进程就绪队列往往按进程到达的时间来排序。进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先进先出原则调度,但一旦进程占有处理器仅使用一个时间片,在使用完一个时间片后,进程还没有完成其运行,它也必须释放出(被抢占)处理器给下一个就绪的进程。而被抢占的进程返回到就绪队列的末尾重新排队等候再次运行。 进程调度程序选择一个就绪状态的进程,使之在处理器上运行,每个进程的状态信息用数据结构(进程控制块PCB)表示,进程的调度采用最高优先数优先和按时间片轮转相结合的调度算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。进程的状态:运行状态R(Run):进程正在处理器上运行。就绪状态W(Wait):一个进程获得了除处理器外的一切所需资源,一旦得到处理器即可运行。完成状态F(Finish):一个进程一旦完成,就停止运行。3.2 进程控制块描述进程的状态信息,用结构体定义typedef struct process char name10; /进程名int priority; /优先数Time ReachTime; /到达时间Time NeedTime; /需要运行时间Time UsedTime; /已用时间char state; /进程状态PCB; /进程控制块进程调度模拟程序进程调入AddProcess()函数打印进程print()函数进程调度attemper()函数选择操作face()函数进程优先级排序sort()函数图1 进程调度模拟程序模块图3.3 算法思想 定义结构体PCB描述进程的进程控制块,定义数组PCB pcbMax存放进程进程调度程序调用face()函数选择所要进行的操作。输入1则增加进程并调度进程;输入2则打印进程,输入0则任务结束;增加进程,调用AddProcess()函数,将输入的进程存放在数组pcbMax中;打印进程,调用print()函数,在该函数中首先调用sort()函数对进程按优先级和先来先服务排序,然后显示输出排序后的进程。进程调度,调用attemper()函数,调度优先级最高的进程分配给CPU使之运行一个时间片,进程优先级排序,调用sort()函数,按照先来先服务和优先级排序,使排序完最优先运行的进程存放在pcb0中。第四章 详细设计4.1 程序设计流程图设置时间片选择是结束进程增加进程打印进程继续增加否结束打印进程优先级排序进程调度完成真开始 图2 程序设计流程图4.2 程序各模块功能介绍 进程优先级排序sort( )函数:函数用冒泡法排序,首先按到达时间排序,使到达时间最早(即pcbn.ReachTime最小)的进程被交换到pcb0中,再按优先级排序,使具有最高优先级(即pcbn.priority最大)的进程被交换到pcb0中。相同优先级的进程只按到达时间排序 。主要代码如下:for (i=0;i=i;j-) if (pcbj+1.ReachTimepcbj.ReachTime) temp=pcbj; pcbj=pcbj+1; pcbj+1=temp; for (i=0;i=i;j-) if (pcbj+1.prioritypcbj.priority) temp=pcbj;pcbj=pcbj+1;pcbj+1=temp; 进程优先级排序Sort()函数的流程图如图3所示。开始i=0j=n-2i=0pcbj+1.prioritypcbj.priorityj=n-2pcbj+1.ReachTime=ij=j-1j=iNYi=i+1Ni=i+1in-1NYin-1NY结束 图3 sort( )函数流程图 打印进程print( )函数:先调用sort()排序函数对进程进行排序,排序完再打印输出进程主要代码如下: sort();printf(n 进程名 优先级 到达时间 需要时间 已用时间 进程状态 n);for (i=0;in;i+)printf(%8s%8d%8d%10d%10d%10cn,,pcbi.priority,pcbi.ReachTime,pcbi.NeedTime,pcbi.UsedTime,pcbi.state); 进程调入AddProcess()函数:增加进程函数,输入要添加的进程的进程控制块的信息,并依次存放在数组PCB pcbMax中,每加入一个进程后判断是否还要继续增加进程,若是则继续循环的执行操作主要代码如下: do printf(n请输入进程名); scanf(%s,);printf(请输入进程的优先级); scanf(%d,&pcbn.priority); printf(请输入进程需要的时间); scanf(%d,&pcbn.NeedTime); pcbn.ReachTime=n; pcbn.UsedTime=0; pcbn.state=W; n+;printf(还要继续增加进程吗,是(Y),否(N); do ch=getchar(); while(ch!=Y&ch!=N&ch!=y&ch!=n);while (ch=Y|ch=y); 打印进程print( )函数和进程调入函数AddProcess()函数的流程图如图4和图5所示。开始开始输入pcbn 进程信息sort()排序n=n+1i=0继续增加进程输出pcbi进程信息ch=getchar()i=i+1YYch!=Y&ch!=N&ch!=y&ch!=ninNN结束ch=Y|ch=yYN结束 图 4 print( )函数流程图 图 5 AddProcess()函数流程图 进程调入attemper( )函数:调度排完序后存放在pcb0中的进程,分配给该进程CPU,使之运行一个时间片,然后比较进程的剩余时间(pcb0.NeedTime-pcb0.UsedTime)是否小于时间片的大小pTime,若是,则该进程调度完成,进程处于完成状态,若非,则已用时间加上一个时间片,进程处于就绪状态继续等待运行,然后调用print( )函数打印输出当前进程的状态并排序,直至所有进程处于完成状态后结束运行。主要代码如下: do if (pcb0.NeedTime-pcb0.UsedTime)pTime) pcb0.UsedTime+=pTime; /已用时间加时间片 pcb0.priority-;/优先级减一 pcb0.state=W; else pcb0.UsedTime=pcb0.NeedTime; /已用时间等于需要时间 pcb0.priority=-1000;/优先级置为零 pcb0.state=F;/完成进程,将状态置为完成 print(); while(pcb0.state!=F); 进程调入attemper( )函数流程图如图6所示。 开始(pcb0.NeedTime-pcb0.UsedTime)pTimeNYpcb0.UsedTime=pcb0.NeedTimepcb0.priority=-1000pcb0.state=Fpcb0.UsedTime+=pTimepcb0.prioritypcb0.state=Wprint() 打印pcb0.state!=FNY结束 图6 attemper( )函数流程图 选择操作face( )函数:函数打印所能进行的操作以供选择。输入1则是增加进程后调度进程,输入2则是打印进程,输入0则是任务结束。主要代码如下:char choose; printf(n增加进程并调度进程,请按1); printf(n打印进程,请按2); printf(n任务结束, 请按0); printf(n请选择:);do choose=getchar(); while(choose!=1&choose!=2&choose!=0); return choose; 选择操作face( )函数流程图如图7所示。开始增加进程并调度进程,请按1打印进程,请按2任务结束, 请按0 请选择:choose=getchar()choose!=1&choose!=2&choose!=0YNreturn choose结束 图7 face( )函数流程图 main( )函数:首先设置时间片的大小pTime,然后调用face()函数选择要进行的操作,choose=1则增加进程并调度,choose=2则打印进程,choose=0则任务结束。主要代码如下:char choose; n=0; /初始化进程数为0 printf(设置时间片的大小:); scanf(%d,&pTime); choose=face();do if (choose=1) AddProcess(); print(); attemper(); if (choose=2) print(); if (choose=0) return; choose=face(); while(1);函数间的关系: 1)sort( )函数嵌套在print()函数中调用 2)调用AddProcess()函数前必须先调用print()函数对进程进行排序并打印。Main()函数的流程图如图8所示。开始n=0;设置时间片的大小pTimechoose=face()choose= =1YNNYAddProcess();print();attemper();choose= =2returnprint();真 图8 main( )函数流程图第五章 运行结果及分析5.1 程序调试此次课程设计进程调度模拟程序是用C编写的程序,运行环境是Microsoft Visual C+6.0。在VC+6.0中的编写的程序如图9所示。图 9 vc+6.0中调试程序5.2 运行结果首先设置时间片大小,然后根据提示,选择1创建进程,输入进程的名称,该进程的优先级,该进程需要的运行时间。然后依次创建三个进程,详细信息如图10所示。图 10 创建三个进程的详细信息点击回车键,运行创建的三个进程,运行过程如图11所示。图 11 三个进程的运行过程上述创建的三个进程运行完以后,还可以继续创建新的进程继续运行。如图12所示。图 12 新创建进程的运行过程5.3 结果分析运行程序后,首先根据提示设置时间片大小为10,然后顺序创建三个进程llg,lly,llt,它们的优先级依次为5,8,4,需要运行的时间为20,10,16,程序默认三个进程到达的时间依次为0,1,2。运行进程,首先比较优先级大小,选择进程lly运行,其进程状态为R(运行),其运行一个时间片时间以后,该进程运行完成,优先级减变为-100(程序默认),然后其进程状态变为F(完成);再选择llg进程运行,首先其进程状态从W(等待)变为R(运行),然后运行一个时间片时间以后,该进程还没运行完成,其优先级减1变为4,相比llt进程,他们具有相同的优先级,所以继续运行llg进程,再运行一个时间片以后,该进程运行完成,其优先级变为-100(程序默认),其进程状态从R(运行)变为F(完成);最后运行llt进程,首先它的进程状态运行一个时间片以后,换没结束,再运行6以后运行结束,其优先级变为-100(程序默认),其进程状态
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫生课件结尾
- 医生素质面试题及答案
- 2024年助理广告师考试详尽介绍试题及答案
- 2024广告设计师沟通能力考核试题及答案
- 诚信演讲面试题目及答案
- 材料质检面试题目及答案
- 澳航面试题目及答案
- 曼谷广告面试题及答案
- 检验员职业素养提升的建议试题及答案
- 2024年广告设计师行业规范试题及答案
- 2024年烟台海阳市卫生健康局所属事业单位招聘工作人员真题
- 2025四川巴中市国有资本运营集团有限公司招聘17人笔试参考题库附带答案详解
- 2025神农科技集团有限公司第一批校园招聘17人(山西)笔试参考题库附带答案详解
- (快手、抖音、淘宝)主播兼职合同10篇
- 餐饮行业合伙经营协议书
- 学术型硕士学位(毕业)论文评阅意见书
- 心脏超声切面示意
- 2022年1月浙江高考英语应用文与读后续写范文汇总(素材)
- DB37∕T 4281-2020 场(厂)内专用机动车辆使用安全风险分级管控和事故隐患排查治理体系建设实施指南
- 保洁服务详细方案(完整版)
- 孔明灯(Lantern)3.4使用指南课件
评论
0/150
提交评论