《2014进程调度算法模拟演示.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程调度算法模拟演示 一、设计目的 进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数目时,就必须依照某种策略决定哪些进程优先占用处理器。 本实验模拟在单处理器情况下的进程调度,目的是加深对进程调度工作的理解,掌握不同调度算法的优缺点。 二、设计内容 设计一个按先来先服务,算法时间片轮转法,优先数调度算法实现处理器调度的程序。 三、开发环境 windows环境,VC6.0平台。 四、分析设计 1、实验原理 进程是程序在处理机上的执行过程。进程存在的标识是进程控制块(PCB),所谓系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管理。进程任务完成,由系统收回其PCB,该进程便消亡。每个进程可有三个状态:运行状态、就绪状态和完成状态。因此设计三个链队列,finish为完成队列的头指针,ready为就绪队列的头指针,tail为循环轮转法中的就绪队列的尾指针。因为每一时刻,CPU只能运行一个进程,所以运行队列只有一个run指针指向当前运行的进程。考虑到处理的方便,将它们设为全局变量。 (1)优先调度算法 优先调度算法要为每一个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先权的进程。常用的算法有静态优先权法和动态优先权法。本程序采用了动态优先权法,使进程的优先权随时间而改变。初始的进程优先数取决于进程运行所需的时间,时间大,则优先数低,所以采取了将进程优先数定位一个较大的数(50)减去进程运行所需要的时间,随着进程的运行优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优先数的大小从高到低排序,这样,每次取队头进程即可。 (2)时间片轮转算法 时间片轮转算法是将所有进程按先来先服务的规则排成一个队列,把CPU分配给就绪队列的队首进程,并规定它执行一定时间,称此时间间隔为时间片。当时间片完时,剥夺该进程的执行,将它送至就绪队列的末尾,并把处理机分配给就绪队列的新队首进程,同样也让它执行一个时间片。这样,就绪队列中的所有进程均可获得一个时间片的处理机运行,直到所有进程全部执行完毕。 (3)先来先服务算法 先来先服务调度算法是按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务算法是一种不可抢占的算法,先进入就绪队列的进程,先被处理机运行,一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某种事件而不能继续运行时才释放处理机。 2、程序结构 (1)进程控制块结构 typedef struct node { char name[10]; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int arrivetime; /*进程到达时间*/ int starttime; /*进程开始时间*/ int finishtime; /*进程完成时间*/ int servicetime; /*进程服务时间*/ float turnaroundtime; /*进程周转时间*/ float weightedturnaroundtime; /*进程带权周转时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/ }PCB; 2.main()主函数 首先确定选用的调度算法,用switch()选择语句来实现,然后输入进程数目,根据选用的调度算法调用相应的函数创建进程和执行调度算法。 3.create1()、create2()和create3()创建进程函数 创建进程函数的功能即创建进程控制块(PCB),并将此PCB链入就绪队列中。 create1()是按照优先数调度算法创建进程,用户输入进程标识符na以及进程所需的时间time,因为是用链表,所以申请空间存放进程PCB信息,进程的初始状态设定为“W”(就绪状态),优先数为50-time(也可以是其他数),目的是所需时间短的优先数高。将每个进程的PCB调用函数insert1()按照优先数大小从高到低排到就绪队列中。 create2()是按照时间片轮转调度算法创建进程,用户输入进程标识符na以及进程所需的时间time,申请空间存放进程PCB的信息,进程的初始状态设为“W”(就绪

文档评论(0)

trlv311 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档