欢迎来到天天文库
浏览记录
ID:52170286
大小:1.24 MB
页数:24页
时间:2020-03-23
《惠州学院操作系统-实验五.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验五1、实验目的1.理解PCB2.理解进程的并发执行3.理解进程的FCFS、动态优先权和时间片轮转三种调度算法,并模拟实现这三种算法2、实验器材微型计算机、fedora版本的Linux系统3、实验内容PCB在本设计中的基本结构Typedefstructnode{Charname[10];/*进程标识符*/Floatprin;/*进程的优先级*/Intround;/*进程轮转的时间片*/Intneedtime;/*进程还需要的cpu时间*/Intwaittime;/*进程进入系统后等待cpu的时间*/Charstate;/*进程的状态*/Struct
2、node*next;/*链接指针*/}PCB设计三个队列:就绪、完成、运行,其中运行队列中应该只有一个进程。创建进程,就是用户输入进程的标识符和运行所需时间,系统为其生成一个PCB,存放进程的信息,将新生成的PCB插入就绪队列。进程任务结束,系统将其PCB插入完成队列,该进程就消亡。任务1:动态优先权调度算法模拟:优先权=1+等待时间/需要服务时间----最高响应比优先(1)输入一批作业的进程标识和估计运行时间,将其PCB插入就绪队列(2)当就绪队列非空、CPU空闲时,计算出每个就绪进程的优先权(3)将优先权最高的进程从就绪队列移入运行队列,状态改为
3、运行(模拟进程调度)(4)在屏幕上输出当前所有进程的状态和优先权信息(已完成进程不显示)(5)让运行进程执行足够的服务时间(6)将运行进程移入完成队列(7)提示可以输入新的作业,如果有新作业输入,则转向(1),否则转向(2)(8)如果就绪队列为空,则结束程序框图如下:程序源代码如下:#include#includetypedefstructnode{charname[10];//进程标识符floatprin;//进程的优先级intround;//进程轮转的时间片intneedtime;//进程还需要当CPU时间i
4、ntwaittime;//进程进入系统后等待当CPU的时间charstate;//进程当状态structnode*next;//链接指针}PCB;PCB*readyQueue=NULL,*runningQueue=NULL,*finishedQueue=NULL,*finishedQueueTail=NULL,*readyQueueTail=NULL,pcbPool[10];intpoolSize=0;voidcreatePro();//根据进程标识和估计运行时间,将其PCB插入就绪队列voidreadyQueueNotNull();//当就绪队列非
5、空、CPU空闲时,计算每个就绪进程当优先权voidinsertRunningQueue();//将优先权最高当进程从就绪队列移入运行队列,状态改为运行voiddisplayQueue();//将所有非结束进程的状态和优先权信息显示在屏幕voidrunPro();//让运行进程执行足够的服务时间voidaddNewPro();//提示可以输入新的进程intmain(intargc,charconst*argv[]){createPro();while(readyQueue!=NULL){readyQueueNotNull();insertRunning
6、Queue();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("Pleaseinputthene
7、edoftime:");scanf("%d",&needtime);pcbPool[i].needtime=needtime;pcbPool[i].state='0';pcbPool[i].next=NULL;pcbPool[i].prin=0.0f;pcbPool[i].waittime=0;if(i==0){readyQueue=&pcbPool[0];readyQueueTail=&pcbPool[0];}else{readyQueueTail->next=&pcbPool[i];readyQueueTail=&pcbPool[i];}if(i
8、++>9)break;puts("Doyouwanttoinputmoreprocess(yorn):");
此文档下载收益归作者所有