使用动态优先权的进程调度算法的模拟实验_第1页
使用动态优先权的进程调度算法的模拟实验_第2页
使用动态优先权的进程调度算法的模拟实验_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、使用动态优先权的进程调度算法的模拟实验1实验目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2实验内容(1)用C语言实现对N个进程采用动态优先权优先算法的进程调度;(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程标识数;进程优先数priority,并规定优先数越大的进程,其优先权越高;进程已占用的CPU时间cputime;进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;进程被阻塞的时间blicktime,表示已阻塞的进程

2、再等待blocktime个时间片后,将转换为就绪态;进程状态state;队列指针next,用来将PCB排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1.进程每运行一个时间片,优先数减3。(4)假设在调度前,系统中有5个进程,它们得初始状态如下ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:RUNNI

3、NGPROGiREADY_QUEUE-id1-id2BLOCK_QUEUE-id3-id4ID01234PRIORITYP0P1P2P3P4CPUTIMEC0C1C3C4C5ALLTIMEA0A1A2A3A4STARTBLOCKT0T1T2T3T4BLOCKTIMEB0B1B2B3B4STATES0S1S2S3S44代码#include#include#ineludetypedefstructnodeintid;intpriority;intcputime;intalltime;intstartblock;intblocktime;charstate10;structnode*next;PCB

4、;/进程标识数/进程优先数,优先数越大优先级越高/进程已占用的CPU时间/进程还需占用的CPU时间/进程的阻塞时间/进程被阻塞的时间/进程状态/队列指针PCB*CreatQueue(intnum)/创建一个就绪队列inti;/i为循环计数器PCB*head,*temp1,*temp2,*temp3;/head为就绪队列的头指针,temp1为创建进程结点的指针,temp2、temp3分别为比较结点的前驱结点和比较结点for(i=0;iid,&temp1-priority,&temp1-cputime,&temp1-alltime,&temp1-startblock,&temp1-blocktim

5、e,temp1-state);if(i=0)/如果创建的是第一个结点head=temp1;head-next=NULL;continue;if(head-prioritypriority)/如果创建结点中所保存的数比头结点所保存的数要大,则直接把该结点插入到头结点之前temp1-next=head;head=temp1;continue;temp2=head;temp2为比较结点的直接前驱结点temp3为比较的结点temp2为比较结点的直接前驱结点temp3为比较的结点temp3=temp2-next;while(temp3!=NULL&temp3-priority=temp1-priorit

6、y)/实现查找的功能temp2=temp3;temp3=temp2-next;temp2-next=temp1;temp1-next=temp3;returnhead;PCB*lnsertQueue(PCB*head,PCB*run)/在就绪队列中插入一个结点PCB*temp1,*temp2;temp1和temp2分别为比较结点的前驱和比较结点if(head=NULL)/如果就绪队列为空head=run;head-next=NULL;elseif(head-prioritynext=head;head=run;elsetemp仁head;/tempi为比较结点的直接前驱结点temp2=temp

7、1-next;temp2为比较的结点while(temp2!=NULL&temp2-priority=run-priority)/实现查找的功能temp1=temp2;temp2=temp1-next;tempi-next=run;run-next=temp2;returnhead;main()intnum;intalltime=0;intnum;intalltime=0;num为进程的个数/用来保存所有进程需要占用的CPU时间PCB*head;/head为就绪队列的头指针PCB*run=NULL;/run为执行进程结点的指针PCB*block=NULL;/block为阻塞进程的结点PCB*t

8、emp;printf(”请输入进程的个数:”);scanf(%d,&num);head=CreatQueue(num);getchar();temp=head;while(temp!=NULL)alltime+=temp-alltime;temp=temp-next;while(alltime0)if(head!=NULL)run=head;/把就绪队列中的第一个进程取出来执行head=head-next;/就绪队列的头指针指向下一个结点strcpy(run-state,run);/状态改为执行run-next=NULL;/*显示状态*/printf(RUNNINGPROG:%dn,run-i

9、d);/显示执行进程printf(READY_QUEUE:);/显示就绪进程temp=head;while(temp!=NULL)printf(-%d,temp-id);temp=temp-next;printf(n);printf(BLOCK_QUEUE:);/显示阻塞进程if(block!=NULL)printf(%d,block-id);printf(n);printf(”=:=n);printf(IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATEn);printf(%d%d%d%d%d%d%sn,run-id,run-priority,ru

10、n-cputime,run-alltime,run-startblock,run-blocktime,run-state);temp=head;while(temp!=NULL)printf(%d%d%d%d%d%d%sn,temp-id,temp-priority,temp-cputime,temp-alltime,temp-startblock,temp-blocktime,temp-state);temp=temp-next;if(block!=NULL)printf(%d%d%d%d%d%d%s,block-id,block-priority,block-cputime,block-a

11、lltime,block-startblock,block-blocktime,block-state);printf(n);printf(”=n);/*显示状态*/*改变优先数*/run-priority-=3;temp=head;while(temp!=NULL)temp-priority+=1;temp=temp-next;/*改变优先数*/*改变执行进程的有关参数run-cputime+=1;run-alltime-=1;if(run-alltime!=O)/执行进程的优先数减3/就绪进程的优先数加1*/执行进程的已占用CPU时间加1II还需要的CPU时间减1if(run-startb

12、lock0)run-startblock-=1;if(run-startblock0)run-startblock-=1;II如果该进程会被阻塞II执行完一个时间片后,开始阻塞的时间减if(run-startblock=0)if(run-startblock=0)II如果阻塞的时间到了block=run;II执行转阻塞strcpy(block-state,b);II状态转阻塞alltime-;printf(n);continue;strcpy(run-state,r);/状态转就绪head=lnsertQueue(head,run);/执行转就绪run=NULL;/*改变执行进程的有关参数*/

13、alltime-;else/*显示状态*/printf(RUNNINGPROG:n”);printf(READY_QUEUE:n);printf(BLOCK_QUEUE:);if(block!=NULL)printf(%d,block-id);/显示执行进程/显示就绪进程/显示阻塞进程printf(n);printf(”=n);printf(IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATEn);if(block!=NULL)printf(%d%d%d%d%d%d%s,block-id,block-priority,block-cputime,bl

14、ock-alltime,block-startblock,block-blocktime,block-state);printf(n);printf(=、n);/*显示状态*/*改变阻塞进程的有关参数if(block!=NULL)block-blocktime-=1;*/如果有阻塞进程/被阻塞的时间减1if(block-blocktime=0)/如果被阻塞的时间到了strcpy(block-state,r);/状态转就绪/阻塞转就绪head=InsertQueue(head,block);block=NULL;/*改变阻塞进程的有关参数*/getchar();5运行结果输入5个进程,分别是第二

15、次运行的进程是进程同时下一个进程(进程04进程,运行结果可以看到第一次运行进程1,优先数为38。1,优先数为35,cpu时间占用为1,进程所需时间为2,1)的优先数+1。D:CodeC_CodeXtestXtet,3.exe.=1回輕RUNNINGPROGi2READV.QUEUE1-3-0-4BLOCK.QUEUE:IDPRIORITYCPUTinEALLIIMESTfiRTBLOCKBLOCKTIMESTATE23206-19run13221-1&3*B31&3-10readj?=M11a323ready4264-10readj?RUNNINGPROG:1REABV_QUEUE:-3-2-

16、0-4BLOCK.QUEUE:IDPRIORITYCHITIHEALLIIHESTARTBLOCKBLOCKTIHESTfiTE13321-1flrun33203-10readih22915-10r0120323reader4304-10readifRUNNINGPROG:3REfiDV_QUEUE:-2-0-4E:LOCK_QUEUE:IDPRIORITYCPUTINEftLLTIMESTARTBLOCKHL0CKT1HESTATE.i33Q3-1&run2301S-10r0136323readj4404-10readv第三次运行进程2,优先数32,cpu占用时间将+1,所需时间将-1。同时

17、下一个进程(进程1)优先数+1,。第四次运行进程1,优先数33,cpu占用时间2+1,所需时间将-1。同时下一个进程(进程3)优先数+1,第四次运行进程1完毕,所需时间为0。进程1运行完毕。第五次运行进程3,优先数33,cpu占用时间0将+1,所需时间3将-1。同时下一个进程(进程2)优先数+1。D:CodeC_Code.testte?t_3.ej3-4BLOCK.QUEUE:IDPRIOBITVCFUTIHEALLTIMESTfiRTBLOCKBLOCK!IMESTATE23115-19run.13012-1&3*0140323readj?45甘4-10readyRUNNINGPROG:3H

18、EfiMf.QUEUE:-2-0-4biLOCK.QUEUE:IDPRIORITYCFUTiriEALLTIMESTfiRTBLOCKBLOCKTIMESTATEg3112-1Qrun22924-1flr150323readih4604-10readyRUNNINGPROGt2READV_4UEUE:-3-BLOCICQUEUE:IDPRIORITVCFUTIHEALLTIMESIfiRTBLOCKBLOCKTIMESTATE22924-10run:t2821-10r16Q323readjyr4704-10ready第六次运行进程2,优先数31将-3,cpu占用时间同时下一个进程(进程3)优先

19、数+1。第七次运行进程3,优先数31将-3,cpu占用时间同时下一个进程(进程2)优先数+1。第八次运行进程2,优先数29将-3,cpu占用时间1将+1,所需时间1将+1,所需时间2将+1,所需时间5将-1。2将-1。4将-1。同时下一个进程(进程3)优先数+1。D:CodeC_Code.ej2-0-411LOCK_QUEUE:】DPflIORITCPUT1HEALLTIMETARTBLOCKBLOCK!1MESTATE3292110run22633-10r0176323read4804-10readyRUNNINGPROG:2IreapvEUE:-0-4Irlock.queue:ssB-4I

20、bLOCK.QUEUE:IDPRIORITVCPUTJHEALLIIMESTARTBLOCKBLOCKTIMESTATE22442-10runM190323readj41004-10ready第九次运行进程3,优先数29将-3,cpu占用时间2将+1,所需时间1将-1。同时下一个进程(进程2)优先数+1。第九次运行完毕,进程3的所需时间为0,进程3运行完毕。第十次运行进程2,优先数27将-3,cpu占用时间3将+1,所需时间3将-1。同时下一个进程(进程0)优先数+1。第十一次运行进程2,优先数24将-3,cpu占用时间4将+1,所需时间2将-1。同时下一个进程(进程0)优先数+1。Runni

21、ngprog:2REmUEUE冶BLOCK.QUEUE:IDPRIORITYCPUTIMEALLTIMESTfiRTBLOCKBLOCKTIMESTATE22151-10run0200m23ready411&4-1&FeadyRUNNINGPROG:0RERDV_qUEUE:-4BL0Ck_4UEUE!IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE0210323run41204-10readyRUNNINGPROG:0REfiDY.QUEUE:-4E:LOCK_QUEUE:IDPfllORlTVCPUTIMEALLTIMESTARTBLOCKU

22、LOCKT1HESTATE0181213run41304-10readyRUNNINGPAOGE4READV.QUEUE:BLOCK_QUEUE:0IDPRIORITYCPUTIHEALLIIMESIARTBLOCKBLOCKT1MESTfiTE41404-10run0IS2103b第十二次运行进程2,优先数21将-3,同时下一个进程(进程0)优先数+1。第十二次运行完毕,进程第十三次运行进程0,同时下一个进程(进程第十四次运行进程0,同时下一个进程(进程第十五次运行进程4,同时下一个进程(进程cpu占用时间5将+1,所需时间1将-12所需时间为优先数21将-3,4)优先数+1。优先数18将-

23、3,4)优先数+1。优先数14将-3,0)优先数+1。0,进程2运行完毕。0将+1,cpucpucpu占用时间占用时间占用时间所需时间3将-11将+1,0将+1,所需时间所需时间2将-14将-1RUNNINGPROG:4READV.QUEUE:B;LOCK_QUEUE:0IDPRIORITYCPUTinEALLIIMESTfiRTBLOCKBLOCKTIMESTfiTE13-19runB152102bRUNNINGPROG:4HiEADY.QUEUE:BLOCK_QUEUE:0IDPRIORITYCPUTIHEALLTIMESTARTBLOCKBLOCKTIMESTATE4822-1&run0

24、152101bRUNNINGPflOGiE)REfiDV.QUEUE:-4HILOCK.QUEUE:IDPRIORITYCPUTJHEALLTIMESTfiRTBLOCKBLOCKTIMESTATEB152100runP531LQrFANNINGPROG:4READVQUEUE:BLOCK-QUEUE:IDPRIORITYCPUTIMEALLTINEUARIBLOCKBLOCKT1MESTATE4631-1Qrun-第十六次运行进程4,优先数11将-3,cpu占用时间1将+1,所需时间3将-1。同时下一个进程(进程0)优先数+1。第十七次运行进程4,优先数8将-3,cpu占用时间2将+1,所需时间2将-1。同时下一个进程(进程0)优先数+1。第十八次运行进程0,优先数15将-3,cpu占用时间2将+1,所需时间1将-1。同时下一个进程(进程4)优先数+1。第十八次运行完毕,进程0所需时间为0,进程0运行完毕。第十九次运行进程4,优先数6将-3,cpu占用时间3将+1,所需时间1将-1。RUNNINGREADV.QUEUEi-MBLOCK.QUEUE:IDPRIORITYCPUTJHEALLTIMESTfiRT

温馨提示

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

评论

0/150

提交评论