11级操作系统-进程模拟调度实验报告_第1页
11级操作系统-进程模拟调度实验报告_第2页
11级操作系统-进程模拟调度实验报告_第3页
11级操作系统-进程模拟调度实验报告_第4页
11级操作系统-进程模拟调度实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《操作系统》实验报告单班级10计算机科学与技术(1)班学号姓名实验时间星期五实验地点H527实验题目进程调度模拟程序设计说明:仅作参考,请勿雷同一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作二、实验要求设计一个按优先数调度算法或时间片轮转法实现处理器调度。1.给出进程调度的算法描述(基于动态优先级和时间片轮转调度算法的描述)。2.用C语言设计一个对n个并发进程进行调度的程序,每个进程由一个进程控制块(PCB)结构表示,该进程控制块应包括下述信息:进程标识ID、进程优先数PRIORITY(并规定优先数与优先权成正比)、时间片数CHIP、进程已经占用CPU的时间CPUTIME,进程还需要运行的时间ALLTIME(当进程运行完毕时,其值为0)、进程的状态STATE等(为简化起见。设每个进程处于运行R(run)、就绪W(ready)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。),以及进程队列指针NEXT(用来将PCB排成队列)等,可按照调度算法的不同而增删。3.调度程序应当包含2种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。4.程序应能显示或打印各种进程状态和参数变化情况,便于观察。即要显示每个时间片内各进程的情况,并且指出运行进程及就绪和阻塞队列中的内容三、实验内容及主要步骤1.按优先数调度算法(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为:进程名指向下一个进程的指针要求运行时间优先数状态获得cpu时间已消耗cpu时间计数器其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。要求运行时间——假设进程需要运行的单位时间数。优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“W”表示,当一个进程运行结束后,它的状态为“结束”,用“F”表示。获得cpu时间 ——模拟cpu分配给进程的时间片已消耗cpu时间——进程运行已消耗的时间计数器——计算进程已运行的时间(2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。(3)为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。(4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“3”优先数-3要求运行时间-1来模拟进程的一次运行。(5)进程运行一次后,若要求运行时间0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(F),且退出队列。(6)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7)在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(8)为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。2.时间片轮转法(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式为:进程名指向下一个进程的指针要求运行时间优先数状态获得cpu时间已消耗cpu时间计数器其中,进程名——作为进程的标识,假设五个进程的进程名分别为S1,S2,S3。指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。要求运行时间——假设进程需要运行的单位时间数。优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“W”表示,当一个进程运行结束后,它的状态为“结束”,用“F”表示。获得cpu时间 ——模拟cpu分配给进程的时间片已消耗cpu时间——进程运行已消耗的时间计数器——计算进程已运行的时间(2)每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。(3)把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。(4)处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:已运行时间+1来模拟进程的一次运行,表示进程已经运行过一个单位的时间。(5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(F)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。(6)若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为“结束”状态。(7)在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进程队列的变化。(8)为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中的进程名以及进程控制块的动态变化过程。3.数据结构程序中进程可用PCB表示,其类型描述如下:typedefstructnode{charname[10];/*nameoftheprocess*/intprio;/*priorityoftheprocess*/intround;/*timegiven*/intcputime;/*timeused*/intneedtime;/*timedneeded*/intcount;/*counter*/charstate;/*stateoftheprocess'R':running,'W':waiting,'F':finish*/structnode*next;/*pointertonextprocess*/}PCB;structPCB*ready=NULL,//ready队列队首指针*tail=NULL,//ready队列队尾指针*finish=NULL,//finish队列队首指针*run=NULL;//run队列队首指针四、程序运行部分结果截图Ubuntu6.10vi编译器编译采用优先级优先算法调度进程结果采用时间片轮转算法调度结果五、实验程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>/*processstruct*/typedefstructnode{charname[10];/*nameoftheprocess*/intprio;/*priorityoftheprocess*/intround;/*timegiven*/intcputime;/*timeused*/intneedtime;/*timedneeded*/intcount;/*counter*/charstate;/*stateoftheprocess'R':running,'W':waiting,'F':finish*/structnode*next;/*pointertonextprocess*/}PCB;PCB*finish,*ready,*tail,*run;/*pointertothreeprocessSqueue,tailpointtotheendofreadySqueue*/intN;/*thenumberofprocess*//*function:putthefirstprocessinreadySqueueintorunningvoidfirstin(void)*/voidfirstin(void){if(ready!=NULL){run=ready;ready=ready->next;run->state='R';run->next=NULL;}else{run=NULL;}}/*function:outputthetypeoftheprocessCallingvoidprt1(chara)a=='p':priority,=='r':timeround*/voidprt1(chara){if((a=='P')||(a=='p')){printf("namecputimeneedtimeprioritystate\n");}else{printf("namecputimeneedtimecountroundstate\n");}}/*function:outputinformationofoneprocessvoidprt2(chara,PCB*p)chara:a=='p':priority=='r':timeroundPCB*p:ppointtotheprocessSqueuetobeoutputed*/voidprt2(chara,PCB*p){if(a=='P'||a=='p'){printf("%s,%d,%d,%d,%c\n",p->name,p->cputime,p->needtime,p->prio,p->state);}else{printf("%s,%d,%d,%d,%d,%c\n",p->name,p->cputime,p->needtime,p->count,p->round,p->state);}}/*function:outputinformationofalltheprocessSqueuevoidprt(charalgo)charalgo:algo=='p':priority,=='r':timeround*/voidprt(charalgo){PCB*p;prt1(algo);//outputthetypeif(run!=NULL)//iftherunningpointernotequalNULL,outputtheprocess'sinformation{prt2(algo,run);}p=ready;while(p!=NULL){prt2(algo,p);//outputtheinformationofthereadySqueuep=p->next;}p=finish;while(p!=NULL){prt2(algo,p);//outputtheinformationofthefinishSqueuep=p->next;}}/*function:Prioritymethodinsertaprocessintoasuqeuevoidinsert1(PCB*q)*/voidinsert1(PCB*q){PCB*p,*s,*r;intb;s=q;p=ready;r=p;b=1;if(s->prio>=ready->prio){s->next=ready;ready=s;}else{while((p!=NULL)&&b){if(p->prio>=s->prio){r=p;p=p->next;}else{b=0;}}s->next=p;r->next=s;}}/*function:timeroundinsertoprocessintoasqueuevoidinsert2(PCB*q)*/voidinsert2(PCB*q){tail->next=q;tail=q;q->next=NULL;}/*function:prioritymethodinitializationvoidpcreate_task(charalgo)*/voidpcreate_task(charalgo,intn){PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;for(i=0;i<n;i++){p=(PCB*)malloc(sizeof(PCB));printf("Enterthenameofprocess%d:",i);scanf("%s",&na);getchar();printf("Enterthetimeofprocess%d:",i);scanf("%d",&time);getchar();strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='W';p->prio=time;if(ready==NULL){ready=p;ready->next=NULL;}else{insert1(p);}}printf("Outputthewaitingprocessesinformation\n");prt(algo);firstin();}/*function:timeroundinitializationvoidrcreate_task(charalgo)*/voidrcreate_task(charalgo,intn){PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;for(i=0;i<n;i++){p=(PCB*)malloc(sizeof(PCB));printf("Enterthenameofprocessi:",i);scanf("%s",&na);getchar();printf("Enterthetimeofprocessi:",i);scanf("%d",&time);getchar();strcpy(p->name,na);p->cputime=0;p->needtime=time;p->count=0;p->state='W';p->round=2;if(ready!=NULL){insert2(p);}else{p->next=ready;ready=p;tail=p;}}printf("Outputthewaitingprocessesinformation\n");prt(algo);run=ready;ready=ready->next;run->state='R';}/*function:prioritymethodcallingvoidpriority(charalgo)charalgo:typesign:'P':priority'R':timeround*/voidpriority(charalgo){while(run!=NULL){run->cputime+=1;run->needtime-=1;run->prio-=3;if(run->needtime==0){run->next=finish;finish=run;run->state='F';run=NULL;firstin();}else{if((ready!=NULL)&&(run->prio<ready->prio)){run->state='W';insert1(run);run=NULL;firstin();}}//prt(algo);}prt(algo);}/*function:timeroundcallingvoidroundrun(charalgo)*/voidroundrun(charalgo){while(run!=NULL){run->cputime=run->cputime+1;run->needtime=run->needtime-1;run->count=run->count+1;if(run->needtime==0){run-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论