ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:439.09KB ,
资源ID:11759227      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11759227.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程调度模拟程序课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进程调度模拟程序课程设计.docx

1、进程调度模拟程序课程设计操作系统课程设计报告专业: 计算机科学与技术 班级: 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进程调度模拟程序 第一章 课程设计目

2、的 深入掌握进程调度的概念原理和实现方法,理解操作系统进程管理中进行进程调度的过程和编程方法,掌握先来先服务调度算法和最高优先数优先的调度算法,创建进程控制块PCB。理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。进程调度是处理机管理的核心内容。本次课程设计用C语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会最高优先数优先与按时间片轮转调度结合算法的优缺点。第二章 课程设计要求 编写一个进程调度程序,允许多个进程并行执行。 1、进程调度算法:采用最高优先数优先与按时间片轮转调度结合算法。 2、每个进程有一个进程控制块(PCB)表示。进程控制块可以包

3、含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 3、进程的优先数及需要的运行时间可在运行时输入,进程的到达时间为输入进程的时间。 4、进程的运行时间以时间片为单位进行计算。 5、每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 6、就绪进程获得 CPU后都只能运行一个时间片。 7、如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪

4、队列等待CPU。 8、每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。第三章 设计思想3.1 基本概念 优先级调度算法:按照进程的优先级大小来调度。使高优先级进程或线程得到优先的处理的调度策略称为优先级调度算法。进程的优先级可以由系统自动地按一定原则赋给它,也可由系统外部来进行安排。本次课程设计是自己给定进程的优先级。 但在许多采用优先级调度的系统中,通常采用动态优先数策略。即一个进程的优先级不是固定的,往往是随许多因素的变化而变化。尤其随作业(进程)的等待时间,已使用的处理器时间或其他系统资源的使用情况而定,以防止低

5、优先级进程或线程长期饥饿现象发生 时间片轮转算法: 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。时间片轮转算法主要用于处理器调度。采用此算法的系统,其进程就绪队列往往按进程到达的时间来排序。进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先进先出原则调度,但一旦进程占有处理器仅使用一个时间片,在使用

6、完一个时间片后,进程还没有完成其运行,它也必须释放出(被抢占)处理器给下一个就绪的进程。而被抢占的进程返回到就绪队列的末尾重新排队等候再次运行。 进程调度程序选择一个就绪状态的进程,使之在处理器上运行,每个进程的状态信息用数据结构(进程控制块PCB)表示,进程的调度采用最高优先数优先和按时间片轮转相结合的调度算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。进程的状态:运行状态R(Run):进程正在处理器上运行。就绪状态W(Wait):一个进程获得了除处理器外的一切所需资源,一旦得到处理器即可运行。完成状态F(Finish):一个进程一旦完成,就停

7、止运行。3.2 进程控制块描述进程的状态信息,用结构体定义typedef struct process char name10; /进程名 int priority; /优先数 Time ReachTime; /到达时间 Time NeedTime; /需要运行时间 Time UsedTime; /已用时间 char state; /进程状态PCB; /进程控制块图1 进程调度模拟程序模块图3.3 算法思想 定义结构体PCB描述进程的进程控制块,定义数组PCB pcbMax存放进程进程调度程序调用face()函数选择所要进行的操作。输入1则增加进程并调度进程;输入2则打印进程,输入0则任务结束

8、;增加进程,调用AddProcess()函数,将输入的进程存放在数组pcbMax中;打印进程,调用print()函数,在该函数中首先调用sort()函数对进程按优先级和先来先服务排序,然后显示输出排序后的进程。进程调度,调用attemper()函数,调度优先级最高的进程分配给CPU使之运行一个时间片,进程优先级排序,调用sort()函数,按照先来先服务和优先级排序,使排序完最优先运行的进程存放在pcb0中。第四章 详细设计4.1 程序设计流程图 图2 程序设计流程图4.2 程序各模块功能介绍 进程优先级排序sort( )函数:函数用冒泡法排序,首先按到达时间排序,使到达时间最早(即pcbn.R

9、eachTime最小)的进程被交换到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所示。

10、图3 sort( )函数流程图 打印进程print( )函数:先调用sort()排序函数对进程进行排序,排序完再打印输出进程主要代码如下: sort();printf(n 进程名 优先级 到达时间 需要时间 已用时间 进程状态 n); for (i=0;in;i+)printf(%8s%8d%8d%10d%10d%10cn,pcbi.name,pcbi.priority,pcbi.ReachTime,pcbi.NeedTime,pcbi.UsedTime,pcbi.state); 进程调入AddProcess()函数:增加进程函数,输入要添加的进程的进程控制块的信息,并依次存放在数组PCB p

11、cbMax中,每加入一个进程后判断是否还要继续增加进程,若是则继续循环的执行操作主要代码如下: do printf(n请输入进程名); scanf(%s,pcbn.name);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&

12、ch!=n); while (ch=Y|ch=y); 打印进程print( )函数和进程调入函数AddProcess()函数的流程图如图4和图5所示。 图 4 print( )函数流程图 图 5 AddProcess()函数流程图 进程调入attemper( )函数:调度排完序后存放在pcb0中的进程,分配给该进程CPU,使之运行一个时间片,然后比较进程的剩余时间(pcb0.NeedTime-pcb0.UsedTime)是否小于时间片的大小pTime,若是,则该进程调度完成,进程处于完成状态,若非,则已用时间加上一个时间片,进程处于就绪状态继续等待运行,然后调用print( )函数打印输出当前

13、进程的状态并排序,直至所有进程处于完成状态后结束运行。主要代码如下: 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

14、所示。 图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所示。 图7 face( )函数流程图 m

15、ain( )函数:首先设置时间片的大小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);函数

16、间的关系: 1)sort( )函数嵌套在print()函数中调用 2)调用AddProcess()函数前必须先调用print()函数对进程进行排序并打印。Main()函数的流程图如图8所示。 图8 main( )函数流程图第五章 运行结果及分析5.1 程序调试此次课程设计进程调度模拟程序是用C编写的程序,运行环境是Microsoft Visual C+6.0。在VC+6.0中的编写的程序如图9所示。图 9 vc+6.0中调试程序5.2 运行结果首先设置时间片大小,然后根据提示,选择1创建进程,输入进程的名称,该进程的优先级,该进程需要的运行时间。然后依次创建三个进程,详细信息如图10所示。图

17、10 创建三个进程的详细信息点击回车键,运行创建的三个进程,运行过程如图11所示。图 11 三个进程的运行过程上述创建的三个进程运行完以后,还可以继续创建新的进程继续运行。如图12所示。图 12 新创建进程的运行过程5.3 结果分析运行程序后,首先根据提示设置时间片大小为10,然后顺序创建三个进程llg,lly,llt,它们的优先级依次为5,8,4,需要运行的时间为20,10,16,程序默认三个进程到达的时间依次为0,1,2。运行进程,首先比较优先级大小,选择进程lly运行,其进程状态为R(运行),其运行一个时间片时间以后,该进程运行完成,优先级减变为-100(程序默认),然后其进程状态变为F

18、(完成);再选择llg进程运行,首先其进程状态从W(等待)变为R(运行),然后运行一个时间片时间以后,该进程还没运行完成,其优先级减1变为4,相比llt进程,他们具有相同的优先级,所以继续运行llg进程,再运行一个时间片以后,该进程运行完成,其优先级变为-100(程序默认),其进程状态从R(运行)变为F(完成);最后运行llt进程,首先它的进程状态运行一个时间片以后,换没结束,再运行6以后运行结束,其优先级变为-100(程序默认),其进程状态从R(运行)变为F(完成)。至此,创建的三个进程运行完毕,换可以创建新的进程运行,如图12所示。第六章 总结通过此次课程设计,我掌握进程调度的相关知识,特

19、别是结和最高优先级优先算法和按时间轮转算法有了新的认识。课程设计和平时的实验课比较起来有很大的差距,实验课只是将这一章中的一部分内容练习操作一遍,而课程设计需要的是他们综合起来的东西,这要更难一些。此次课程设计主要遇到的困难就是,最高级优先数优先算法和按时间片轮转法的算法的结合,经过查阅资料和自己多次的调试,终于使编写的程序达到了预期的效果。总体来说我认为操作系统这门学科在计算机科学当是中非常重要的。这次操作系统的课程设计收获颇丰,复习了许多东西,也从新学会了许多东西。我想这也许就是课程设计的最终目的吧。参考文献1刘振安、刘燕君著.C+程序设计课程设计.北京: 机械工业出版社,20042美Abraham Silberschatz, Peter Baer Galvin, Greg Gagne 著. 郑扣根 译. 操作系统概念(第六版). 北京: 高等教育出版社,20043陈向群,向勇 等. Windows操作系统原理(第二版). 北京:机械工业出版社,2004.4Mark E.Russinovich, David A. Solomon. Microsoft Windows Internals 20055Jhnson M.Hart. Windows System,3rd Edition. Addsion wesley Profession.2004

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1