下载

0下载券

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 最短作业优先(抢占和非抢占)

最短作业优先(抢占和非抢占).doc

最短作业优先(抢占和非抢占)

郭水善
2019-05-04 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《最短作业优先(抢占和非抢占)doc》,可适用于IT/计算机领域

最短作业优先(抢占和非抢占)一、流程图显示运行结果自动方式运行虚拟算法初始化创建若干进程手动方式(选取最短作业开始运行)同时运行??虚拟算法??创建新进程查看进程状态修改进程状态发生抢占或非抢占解析:在最开始我们先创建若干进程选择自动运行则在运行完后按顺序显示运行的结果。同理选择手动运行那么就是最先选择最短的作业开始运行其实当前进程并非一定在实际运行(改变自己的状态)只是一个虚拟的运行(虚拟最短作业优先运行算法)这时我们可以做其他的事情在做事之前先运行虚拟算法依照最短作业优先去改变相关进程的状态(进程可能就没有实际运行过被虚拟算法改变了状态(就绪、等待、终止))在做完相关事情之后再运行虚拟算法确定是否要发生最短作业的优先抢占。发生抢占的情况:包括人为终止抢占抢占根据以上的运行结构我们可以在这结构的基础上人为地设置进程状态就是改变进程状态这时就可以发生最短作业调度的抢占和非抢占式。我们可以进入查看进程状态看看运行的状况也可以进入修改进程状态修改相关进程状态让其发生最短作业的抢占或者进入创建进程创建一个新的进程这是也有可能实现最短作业优先的抢占。二、虚拟运行算法:从进程的结构分析进程里面有状态到达时间(取系统时间)结束时间(取系统时间)需要运行时间已运行时间等我们知道第一个最短作业运行的到达时间(开始运行的时间)就是创建的时间。在一个进程运行终止时要设好终止的时间、改变状态等属性这时进行进程间信息交换终止进程的时间交给下一个要运行的进程的到达时间这样不断下去就可以运行到最后一个进程时间交换当发生抢占调度时也是以上的情况运行。先在抢占之前就运行虚拟算法改变相关的进程状态发生引起抢占的事的时候就可以利用抢占来进行进程的切换。这样就能让CPU在有工作做时就不能空闲。直到把所有在就绪队列的进程运行完这是CPU可以休息了如果在CPU休息时有进程从等待进入就绪那么CPU就要继续开工。当我们运行完第一批输入的进程现在CPU在空转我们又创建了新进程这时新进程就在创建那一刻起开始运行了因为新进程创建好就进入了就绪的状态。下面为具体的算法:虚拟运行算法:PCB*run(PCB*first,PCB*cur)*运行函数,参数为头指针和当前运行的进程*{PCB*proPCB*currentprointicurrentpro=curif(currentpro==)returni=settime(currentpro)if(i)??*时间超出了*{pro=currentpro????while(){pro>state=pro>endtime=pro>arrivetime(double)pro>needtime*设置结束时间*printf("s>>havefinished!n",pro>name)currentpro=seize(first)*查找就绪队列的最短作业*if(currentpro==){??pro>cputime=pro>needtimebreak}currentpro>state=currentpro>cputime=currentpro>cputime(pro>cputimepro>needtime)currentpro>arrivetime=pro>endtime*把结束进程的时间交给新进程*pro>cputime=pro>needtimepro=currentproif(currentpro>cputime<currentpro>needtime)break??}returncurrentpro??}elsereturncurrentpro??}最短作业优先调度算法:PCB*seize(PCB*first)?*抢占调度,返回调度的进程*{PCB*pPCB*shotpro=longtimep=first*判断就绪队列里的最短作业??*if(p==)returnwhile()?*获取time初值*{if(p>state==||p>state==)??{time=p>needtimep>cputimeshotpro=pbreak}if(p>link==)return??p=p>link}p=firstwhile()?{if(p>state==||p>state==)??{if(time>p>needtimep>cputime){time=p>needtimep>cputime??shotpro=p??}}if(p>link==)breakp=p>link}*判断当前那个进程正在运行如果正在运行的进程不是最短作业则抢占*returnshotpro}结果分析:由于此程序的不确定因素较多我们考虑方面做的可能不是很全面导致程序在运行其间出现一些异常这也是在所难免的。暂时未解决的问题:其他的一些想不到的因素存在要在实际应用中才能发现。因为本程序开发时间有限实际调试次数较少。创新点:c语言程序基于DOS环境是单线程工作。故要在DOS真正模仿在实际应用中的最短作业优先调度(抢占式)是难实现的。本程序在DOS环境下实现了进程运行与程序操作的模拟同步进行。主要是应用虚拟运行算法计算某个时候该谁占用CPU和谁已经终止了。利用虚拟运行可以实现一种虚拟的同步操作。附件:请看源代码。作者:?赖官铨

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/8

VIP

意见
反馈

免费
邮箱

2o18特马大全资料免费