设计1进程调度算法的模拟_第1页
设计1进程调度算法的模拟_第2页
设计1进程调度算法的模拟_第3页
设计1进程调度算法的模拟_第4页
设计1进程调度算法的模拟_第5页
已阅读5页,还剩36页未读, 继续免费阅读

下载本文档

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

文档简介

1、设计1进程调度算法的模拟一、设计目的1、通过编程实现进程调度算法的模拟,了解进程调度的过程,理解进程调度各方法的特点。二、设计要求1用语言来实现对n个进程采用不同调度算法的进程调度。2每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3。进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2

2、:阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。3优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。2)进程每运行一个时间片,优先数减34.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。三、设计说明开始初始化PCB,输入进程信息FCFS算法,按照进程先后顺序输出SJS算法,按照ALLTIME从小到大依次输出优先级算法,按照优先从大到小输出,进程执行依次P-3,就绪队列中的进程P+1RR算法,按照时间片依次执行进程,ALLTIME=4.结束1FCFS模块1.1功能对于先到达的进程优先分配CP

3、U,按照先来先服务的原则依次执行各进程。数据结构typedefstructPCBintID;/进程优先数,用于标示不同的进程intPriority;/进程优先级intCPUTime;进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4intALLTime;/进程总共需要运行时间AlltimeintStatus;/用于表示进程状态,0:就绪态;1:运行态;2:阻塞态PCB;算法voidFCFS()Node*p=head-next;while(p!=NULL)cout执行进程data.lD;p=p-next;coutendl;cout所有进程都执行完成next!=NULL)pmin=h

4、ead2-next;for(p=head2-next;p!=NULL;p=p-next)if(pmin-data.ALLTimep-data.ALLTime)pmin=p;cout执行剩余区间长度最短的进程endldata.ID;for(p=head2;p!=NULL;p=p-next)if(p-next=pmin)p-next=p-next-next;free(pmin);printf(n);printf(所有进程都执行完成。nn);3SearchMaxPRI模块功能按照优先级从高到低依次执行程序数据结构p返回优先级最大进程;p返回优先级最大进程;q0指向q的前一个进程,便于删除进程;q用于

5、遍历链表算法voidSearchMaxPRI(intm)Node*p=head-next;Node*q=head-next;Node*q0=head;while(q!=NULL)if(q-data.ALLTime=0)cout进程已执行完成endldata.ID;n-;q0-next=q0-next-next;free(q);q=q0-next;elseif(q-data.Priorityp-data.Priority)p=q;q0=q0-next;q=q-next;if(n0)action(p);按照轮转的次序分配给每个程序一定的时间执行,执行完成后执行后面的进程,依次循环执行直到所有进程执

6、行完成。数据结构算法voidRR(intm)Node*p;while(head1-next!=NULL)p=head1-next;Node*prep=head1;Node*q;while(p!=NULL)cout执行进程一个时间片data.ID;for(q=head1;q-next!=NULL;q=q-next)if(q-next=p)p-data.ALLTime-=4;p-data.CPUTime+=4;if(p-data.ALLTime=0)cout进程已执行完成dataD;prep-next=prep-next-next;free(p);p=prep-next;elseprep=prep

7、-next;p=p-next;coutendl;cout进入下一次轮转endl;coutvv所有进程都执行完成endl;四、运行结果及分析广-i花左EziCodeBjocLjincheng3iircheng尼xe调eImgii一/T-,1413迟调eImgii一/T-,1413迟,rfefe逆索的ES矩籍蔓雯艮调一;-r:亠蔺Icllcl值区区区sffs请鞘入丟绅进程数,进程GFUrii-wALlTiiiKStilus1507021M4H31Q7G成-JL片片In_0-一、n抑L一井工工MB-TJrl-悝J入有ProccasrcbLumcl0CoxB)1cxccu1;iuri;ixnc21G.

8、Byd3Freisan屮keyLutuiratliiuc-L该程序实现了进程调度的四种不同调度算法下的调度顺序的输出情况。五、总结通过该程序的实现,对进程的调度有了更多的了解,对于不同的系统和系统目标,通常采用不同的调度算法。有的算法适用于为数众多的短作业调度,有的算法为系统合理的响应时间提供了保证。调度算法的选择的合适和否很重要。源代码:#include#include#include#include#include#defineTRUE1#defineFALSE0#defineOK1typedefstructPCBintID;intPriority;intCPUTime;intALLTim

9、e;intStatus;PCB;typedefPCBDt;typedefstructNodeDtdata;structNode*next;Node;Node*head=(Node*)malloc(sizeof(Node);Node*head1=(Node*)malloc(sizeof(Node);Node*head2=(Node*)malloc(sizeof(Node);intn;voidcreate(intn)inti=1;srand(int)time(0);head-next=NULL;Node*q=head;cout优先数优先级CPUTimeAllTimeStatusendl;while

10、(idata.ID=i;p-data.CPUTime=0;p-data.Status=0;p-data.Priority=rand()%10+1;p-data.ALLTime=rand()%8+1;coutdata.IDdata.Prioritydata.CPUTimedata.CPUTimedata.ALLTimedata.Statusnext=NULL;q-next=p;q=q-next;i+;Node*p0=head1;head1-next=NULL;for(q=head-next;q!=NULL;q=q-next)Node*r=(Node*)malloc(sizeof(Node);r-

11、data.ID=q-data.ID;r-data.CPUTime=q-data.CPUTime;r-data.Status=q-data.Status;r-data.Priority=q-data.Priority;r-data.ALLTime=q-data.ALLTime;p0-next=r;r-next=NULL;p0=p0-next;Node*p1=head2;head2-next=NULL;for(q=head-next;q!=NULL;q=q-next)Node*k=(Node*)malloc(sizeof(Node);k-data.ID=q-data.ID;k-data.CPUTi

12、me=q-data.CPUTime;k-data.Status=q-data.Status;k-data.Priority=q-data.Priority;k-data.ALLTime=q-data.ALLTime;p1-next=k;k-next=NULL;p1=p1-next;voidFCFS()Node*p=head-next;while(p!=NULL)cout执行进程data.lD;p=p-next;coutendl;cout所有进程都执行完成next!=NULL)pmin=head2-next;for(p=head2-next;p!=NULL;p=p-next)if(pmin-da

13、ta.ALLTimep-data.ALLTime)pmin=p;coutvv执行剩余区间长度最短的进程vvendlvvpmin-data.ID;for(p=head2;p!=NULL;p=p-next)if(p-next=pmin)p-next=p-next-next;free(pmin);coutendl;coutvv所有进程都执行完成next;while(q!=NULL)coutdata.lDv执行一个时间片的进程data.Priority=q-data.Priority+1;elseq-data.Priority=q-data.Priority-3;if(q-data.ALLTime4)

14、q-data.ALLTime-=4;elseq-data.ALLTime=0;q-data.Status=1;q=q-next;voidSearchMaxPRl(intm)Node*p=head-next;Node*q=head-next;Node*q0=head;while(q!=NULL)if(q-data.ALLTime=0)coutdata.ID进程已执行完成next=q0-next-next;free(q);q=q0-next;elseif(q-data.Priorityp-data.Priority)p=q;q0=q0-next;q=q-next;if(n0)action(p);v

15、oidRR(intm)Node*p;while(head1-next!=NULL)p=head1-next;Node*prep=head1;Node*q;while(p!=NULL)coutdata.ID执行进程一个时间片next!=NULL;q=q-next)if(q-next=p)p-data.ALLTime-=4;p-data.CPUTime+=4;if(p-data.ALLTime=0)coutdata.ID进程已执行完成next=prep-next-next;free(p);p=prep-next;elseprep=prep-next;p=p-next;coutendl;cout进入

16、下一次轮转endl;cout所有进程都执行完成endl;intmain()cout请输入系统进程数:n;intm=n;if(n=0)cout此时没有就绪进程endl;elsecreate(n);coutendl;cout先来先服务调度endl;FCFS();coutendl;cout最短作业优先调度endl;SJF();coutendl;coutvv优先权的分时调度next!=NULL)SearchMaxPRI(m);cout所有进程都执行完成endl;coutendl;cout轮转法调度endl;RR(m);设计2模拟银行家算法一、设计目的1通过对银行家算法的模拟,理解银行家算法的实现过程,

17、了解系统解决死锁的方法二、设计要求1、编程序模拟银行家算法2、能体现算法的全过程三、设计说明1.bank模块功能利用银行家算法,给系统分配资源,避免死锁。数据结构TypedefstructRESOURCEintavailableR;/系统可用资源数intallocationWR;/M个进程已经得到N类资源的资源量intneedWR;/M个进程还需要N类资源的资源量intrequestR;/请求资源个数RESOURCE算法inti=0,j=0;charchoice=Y;while(choice=Y|choice=y)i=-1;while(i=M)coutendli;if(i=M)cout进程号不

18、存在,重新输入!endl;cout请输入进程i申请各类资源的数量:endl;for(j=0;jrequestj;if(requestjneedij)coutvvendlvv进程i申请的资源数大于进程i还需要j类资源的数量!;cout若继续执行系统将处于不安全状态!availablej)coutendl进程i申请的资源数大于系统可用VVjVV类资源的数量!;cout继续执行系统将处于不安全状态!endl;choice=N;break;if(choice=Y|choice=y)distribute(i);if(check()restore(i);print();elseprint();elseco

19、utendl;coutchoice;2.check模块2.1功能检查资源分配后系统是否处于安全状态。2.2数据结构TypedefstructRESOURCEintavailableR;/系统可用资源数intallocationWR;/M个进程已经得到N类资源的资源量intneedWR;/M个进程还需要N类资源的资源量intrequestR;/请求资源个数RESOURCE算法intworkR,finishW;inti,j;for(j=0;jN;j+)workj=availablej;for(i=0;iM;i+)finishi=FALSE;for(i=0;iM;i+)for(j=0;jN;j+)i

20、f(finishi=FALSE&needij=workj)workj=worki+allocationij;finishi=TRUE;for(i=0;iM;i+)if(finishi=FALSE)coutendl;cout系统不安全!资源申请失败!endl;coutendl;return1;elsecout系统安全,分配成功!endl;return0;四、运行结果及分析resourccAt*C30urccB入各涯兔己经占据的各矣资涕的僉鱼:1H巨吉钟资浜可利用数和资师欽S资原丄:5令原2:g行二二|益=二-.:行匹:底抑人蜜遁翠;甲iWJS.=2M:劇阿7加炉:9申家耳决演示4耳?2muju占

21、衣资谒迪讨了声明的赤L需汛ip?軒输人311Igg|一|回ngla进专输人诩请刍去资務橄豪分配成功?诲注欽7涼“8暮矍初备源可刑用數晏負湧欽5资51:4帘沖2:6各说程話铸要的资源数野reaourccArcsourceBrcaourccCCXw124rmtutdThr、T*进迸送5re&uurceC11tR号卡善爭的资源数気=L闵.;讲稈0丘请柱P窃裤单应壬洁貞s企资IrJT的肿1r:s-_retidutcrC.已专丹当的洽片办ri!suljruERexiJuircrHPz亡吃曲ireturned杠oceciitfiaritJtt4.4Ia?w*skfniijiSytommit.iibuh通过

22、实验结果可知银行家算法中,当进程申请的资源大于声明所需的最大资源或者大于系统当前可用的资源时,系统将处于不安全状态,资源分配失败,从而防止了死锁的产生。五、总结通过该算法的模拟可知银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。源代码:#include#include#include#defineFALSE0#defineTRUE1#defineW10#defineR10intallresourceW;int

23、maxWR;intavailableR;intallocationWR;intneedWR;intrequestR;intM;intN;voidprint()inti,j;coutvv各种资源总量:endl;coutvv资源vvjvv:vvallresourcejvvendl;coutvv目前各种资源可利用数量:endl;for(j=0;jN;j+)coutvv资源vvjvv:vvavailablejvvendl;coutvv各进程还需要的资源数量:endlvvendl;coutvvresourceAvvresourceBvvresourceCvvendl;for(i=0;ivM;i+)cou

24、tvv进程vvivv:;for(j=0;jvN;j+)coutvvneedijvv;coutvvendl;coutvv各进程已经得到的资源量:vvendlvvendl;coutvvresourceAvvresourceBvvresourceCvvendl;for(i=0;ivM;i+)for(j=0;jN;j+)coutallocationijcoutendl;voiddistribute(intl)/分配资源intj;for(j=0;jN;j+)availablej=availablej-requestj;allocationlj=allocationlj+requestj;needlj=n

25、eedlj-requestj;voidrestore(intl)/恢复资源intj;availablej=availablej+requestj;allocationlj=allocationlj-requestj;needlj=needlj+requestj;intcheck()intworkR,finishW;inti,j;for(j=0;jN;j+)workj=availablej;for(i=0;iM;i+)finishi=FALSE;for(i=0;iM;i+)for(j=0;jN;j+)if(finishi=FALSE&needij=workj)workj=worki+alloca

26、tionij;finishi=TRUE;for(i=0;iM;i+)if(finishi=FALSE)coutendl;cout系统不安全!资源申请失败!endl;coutendl;return1;elsecout系统安全,分配成功!endl;return0;voidbank()inti=0,j=0;charchoice=Y;while(choice=Y|choice=y)i=-1;while(i=M)coutendli;if(i=M)cout进程号不存在,重新输入!endl;cout请输入进程i申请各类资源的数量:endl;for(j=0;jrequestj;if(requestjneedi

27、j)coutendl进程i申请的资源数大于进程i还需要j类资源的数量!;cout若继续执行系统将处于不安全状态!availablej)coutendl进程i申请的资源数大于系统可用j类资源的数量!;cout继续执行系统将处于不安全状态!endl;choice=N;break;if(choice=Y|choice=y)distribute(i);if(check()restore(i);print();elseprint();elsecoutendl;Y/Ncoutchoice;intmain()vvendl;:vvendl;inti=0,j=0,p;coutt银行家算法演示coutendlM;

28、coutN;coutvv请输入各类资源总数:;for(i=0;iallresourcei;coutvv输入各进程所需要的各类资源的最大数量for(i=0;imaxij;if(maxijallresourcej)coutendl占有资源超过了声明的该资源总数,请重新输入allresourcej);coutvv输入各进程已经占据的各类资源的数量:endl;for(i=0;iM;i+)for(j=0;jallocationij;if(allocationijmaxij)coutvvendlvv占有资源超过了声明的最大资源,请重新输入maxij);for(j=0;jN;j+)p=allresourcej;for(i=0;iM;i+)p=p-allocationij;availablej=p;if(availablej0)availablej=0;for(i=0;iM;i+)for(j=0;jN;j+)needij=maxij-allocationij;print();bank();磁盘调度算法磁盘调度算法设计3一、设计目的1、通过对磁盘调度算法的实现,了解磁盘调度的算法已经其寻道时间、设计要求编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度1先来先服务算法

温馨提示

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

评论

0/150

提交评论