下载此文档

惠州学院操作系统实验五模板.doc


文档分类:论文 | 页数:约45页 举报非法文档有奖
1/45
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/45 下载此文档
文档列表 文档介绍
惠州学院操作系统-实验五实验五实验目的理解PCB理解进程的并发执行理解进程的FCFS、动态优先权和时间片轮转三种调度算法,并模拟实现这三种算法实验器材 微型计算机、fedora版本的Linux系统实验内容PCB在本设计中的基本结构Typedefstructnode{Charname[10];/*进程标识符*/Floatprin;/*进程的优先级*/Intround;/*进程轮转的时间片*/Intneedtime;/*进程还需要的cpu时间*/Intwaittime;/*进程进入系统后等待cpu的时间*/Charstate;/*进程的状态*/Structnode*next;/*链接指针*/}PCB设计三个队列:就绪、完成、运行,其中运行队列中应该只有一个进程。创建进程,就是用户输入进程的标识符和运行所需时间,系统为其生成一个PCB,存放进程的信息,将新生成的PCB插入就绪队列。进程任务结束,系统将其PCB插入完成队列,该进程就消亡。任务1:动态优先权调度算法模拟:优先权=1+等待时间/需要服务时间----最高响应比优先(1)输入一批作业的进程标识和估计运行时间,将其PCB插入就绪队列(2)当就绪队列非空、CPU空闲时,计算出每个就绪进程的优先权(3)将优先权最高的进程从就绪队列移入运行队列,状态改为运行(模拟进程调度)(4)在屏幕上输出当前所有进程的状态和优先权信息(已完成进程不显示)(5)让运行进程执行足够的服务时间(6)将运行进程移入完成队列(7)提示能够输入新的作业,如果有新作业输入,则转向(1),否则转向(2)(8)如果就绪队列为空,则结束程序框图如下:程序源代码如下:#include<>#include<>typedefstructnode{ charname[10]; //进程标识符 floatprin; //进程的优先级 intround; //进程轮转的时间片 intneedtime; //进程还需要当CPU时间 intwaittime; //进程进入系统后等待当CPU的时间 charstate; //进程当状态 structnode*next; //链接指针}PCB;PCB*readyQueue=NULL,*runningQueue=NULL,*finishedQueue=NULL,*finishedQueueTail=NULL,*readyQueueTail=NULL,pcbPool[10];intpoolSize=0;voidcreatePro(); //根据进程标识和估计运行时间,将其PCB插入就绪队列voidreadyQueueNotNull(); //当就绪队列非空、CPU空闲时,计算每个就绪进程当优先权voidinsertRunningQueue(); //将优先权最高当进程从就绪队列移入运行队列,状态改为运行voiddisplayQueue(); //将所有非结束进程的状态和优先权信息显示在屏幕voidrunPro(); //让运行进程执行足够的服务时间voidaddNewPro(); //提示能够输入新的进程intmain(intargc,charconst*argv[]){ createPro(); while(readyQueue!=NULL) { readyQueueNotNull(); insertRunningQueue(); displayQueue(); runPro(); puts(""); addNewPro(); } puts("Bye"); return0;}voidcreatePro(){ charname[10]; charstop='y'; intneedtime,i=0; while(stop=='y') { //获取用户输入进程名 puts("Pleaseinputtheprocessname:"); scanf("%s",name); strcpy(pcbPool[i].name,name); //获取用户输入进程需要时间 puts("Pleaseinputtheneedoftime:"); scanf("%d",&needtime); pcbPool[i].needtime=needtime; pcbPool[i].state='0'; pcbPool[i].next=NULL; pcbPool[i].prin=; pcbPool[i].waittime=0; if(i==0) { readyQueue=&pcbPool[0]; readyQueueTail=&pcbPool[0]; }else{ readyQueueTail->next=&pcbPool[i]; readyQueueTail=&pcbPool[i]; } if(i++>9) break; p

惠州学院操作系统实验五模板 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息