下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 进程调度实验

进程调度实验.doc

进程调度实验

张三
2017-10-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《进程调度实验doc》,可适用于高等教育领域

进程调度实验实验一进程调度实验一、目的要求用高级语言编写和调试一个进程调度程序以加深对进程的概念及进程调度算法的理解。二、例题:设计一个有N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加来表示。如果运行一个时间片后进程的已占用CPU时间已达到所需要的运行时间则撤消该进程如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间也就是进程还需要继续运行此时应将进程的优先数减(即降低一级)然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB以便进行检查。重复以上过程直到所要进程都完成为止。调度算法的流程图如下图所示。进程调度源程序如下:jingchendiaoducpp#include"stdioh"#include<stdlibh>#include<conioh>#definegetpch(type)(type*)malloc(sizeof(type))#defineDstructpcb{*定义进程控制块PCB*charname进程名charstate进程状态WaitingorRuningintsuper进程优先数intntime进程需要运行时间intrtime进程已用CPU时间structpcb*link}*ready=D,*ptypedefstructpcbPCBsort()*建立对进程进行优先级排列函数*{PCB*first,*secondintinsert=if((ready==D)||((p>super)>(ready>super)))*优先级最大者,插入队首*{p>link=readyready=p}else*进程比较优先级,插入适当的位置中*{first=readysecond=first>linkwhile(second!=D){if((p>super)>(second>super))*若插入进程比当前进程优先数大,*{*插入到当前进程前面*p>link=secondfirst>link=psecond=Dinsert=}else*插入进程优先数最低,则插入到队尾*{first=first>linksecond=second>link}}if(insert==)first>link=p}}input()*建立进程控制块函数*{inti,numclrscr()*清屏*printf("n请输入进程号")scanf("d",num)for(i=i<numi){printf("n进程号Nod:n",i)p=getpch(PCB)printf("n输入进程名:")scanf("s",p>name)printf("n输入进程优先数:")scanf("d",p>super)printf("n输入进程运行时间:")scanf("d",p>ntime)printf("n")p>rtime=p>state='w'Waitingp>link=Dsort()*调用sort函数*}}intspace(){intl=PCB*pr=readywhile(pr!=D){lpr=pr>link}return(l)}disp(PCB*pr)*建立进程显示函数,用于显示当前进程*{printf("nqnametstatetsupertndtimetruntimen")printf("|st",pr>name)printf("|ct",pr>state)printf("|dt",pr>super)printf("|dt",pr>ntime)printf("|dt",pr>rtime)printf("n")}check()*建立进程查看函数*{PCB*prprintf("n****当前正在运行的进程是:s",p>name)*显示当前运行进程*disp(p)pr=readyprintf("n****当前就绪队列状态为:n")*显示就绪队列状态*while(pr!=D){disp(pr)pr=pr>link}}destroy()*建立进程撤消函数(进程运行结束,撤消进程)*{printf("n进程s已完成n",p>name)free(p)}running()*建立进程就绪函数(进程运行时间到,置就绪状态*{(p>rtime)if(p>rtime==p>ntime)destroy()*调用destroy函数*else{(p>super)p>state='w'sort()*调用sort函数*}}main()*主函数*{intlen,h=charchinput()len=space()while((len!=)(ready!=D)){ch=getchar()hprintf("nTheexecutenumber:dn",h)p=readyready=p>linkp>link=Dp>state='R'Runingcheck()running()printf("n按任一键继续")ch=getchar()}printf("nn进程已经完成n")ch=getchar()三(实验题:、编写并调试一个模拟的进程调度程序采用“最高优先数优先”调度算法对五个进程进行调度。“最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。静态优先数是在创建进程时确定的并在整个进程运行期间不再改变。动态优先数是指进程的优先数在创建进程时可以给定一个初始值并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少。或者进程等待的时间超过某一时限时增加其优先数的值等等。、编写并调试一个模拟的进程调度程序采用“轮转法”调度算法对五个进程进行调度。轮转法可以是简单轮转法、可变时间片轮转法或多队列轮转法。简单轮转法的基本思想是:所有就绪进程按FCFS排成一个队列总是把处理机分配给队首的进程各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还未完成就把它送回到就绪队列的末尾把处理机重新分配给队首的进程。直至所有的进程运行完毕。

用户评价(0)

关闭

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

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

提示

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

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/8

进程调度实验

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利