使用动态优先权的进程调度算法的模拟

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

使用动态优先权的进程调度算法的模拟1、实验目的通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2、实验内容(1)用C语言来实现对N个进程采用动态优先算法的进程调度;(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:进程标识符id进程优先数priority,并规定优先数越大的进程,其优先权越高;进程已占用的CPU时间cputime;进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态进程状态state;队列指针next,用来将PCB排成队列(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1进程每运行一个时间片,优先数减3。(4)假设在调度前,系统中有5个进程,它们的初始状态如下:ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STARTBLOCK2-1-1-1-1BLOCKTIME30000STATEREADYREADYREADYREADYREADY(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:RUNNINGPROG:iREADY_QUEUE:-id1-id2BLOCK_QUEUE:-id3-id4==================================ID01234PRIORITYP0P1P2P3P4CPUTIMEC0C1C2C3C4ALLTIMEA0A1A2A3A4STARTBLOCKT0T1T2T3T4BLOCKTIMEB0B1B2B3B4STATES0S1S2S3S43、思考题(1)在实际的调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?一、实验目的通过动态优先权算法的模拟加深进程概念和进程调度过程的理解,并学习撰写规范的科学研究报告。二、实验环境及设备(一)实验地点:实C三楼机房、宿舍(二)主要仪器设备:PC机、RedFlagLinux和Windows7操作系统、g++和VC++6.0环境三、实验内容1.对N个进程采用动态优先权算法的进程调度;2.每个用来标识进程的进程控制块PCB用结构描述,包括以下字段:进程标识数ID,进程优先数PRIORITY,进程以占用的CPU时间CPUTIME,进程还需占用的CPU时间ALLTIME,进程状态STATE等。3.优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1,进程每运行一个时间片优先数减3。4.设置调度前的初始状态。5.将每个时间片内的进程情况显示出来。四、调试分析程序首先设置一个struct,模拟操作系统的PCB数据结构,并初始化。PCB有ID、PRIORITY、CPUTIME、ALLTIME、STATE五个字段,其中STATE有两个状态,0为未完成,1为完成。首先,程序会调用maxp()函数找出优先权PRIORITY最大的进程ID,如果有若干个进程的PRIORITY相同,则程序会选择还需时间ALLTIME最少的进程,取出ID作为下一个时间片要执行的进程。当前进程执行完后,程序会调用change()函数修改进程的各个字段,未执行的进程呆一个时间片优先权PRIORITY就+1,刚执行完的进程优先权PRIORITY就-3,并且已经执行的CPU时间CPUTIME增加1,还需CPU时间ALLTIME减少1。如果一个进程还需CPU时间ALLTIME为0,说明该进程完成了,状态STATE就修改为1,表示进程已经完成了,同时优先权变为0或者更低的数值,表示该进程不能再执行了。程序每运行一个时间片,就调用display()函数将所有进程的字段显示出来。如果所有程序的状态都为1了,表示所有进程都执行完了,程序将退出。五、实验结果===============================================================ID01234PRIORITY93830290CPUTIME00000ALLTIME33634STATE00000RUNNINGPROG:1===============================================================ID01234PRIORITY103531301CPUTIME01000ALLTIME32634STATE00000RUNNINGPROG:1===============================================================ID01234PRIORITY113232312CPUTIME02000ALLTIME31634STATE00000RUNNINGPROG:1===============================================================ID01234PRIORITY12033323CPUTIME03000ALLTIME30634STATE01000RUNNINGPROG:2===============================================================ID01234PRIORITY13030334CPUTIME03100ALLTIME30534STATE01000RUNNINGPROG:3===============================================================ID01234PRIORITY14031305CPUTIME03110ALLTIME30524STATE01000RUNNINGPROG:2===============================================================ID01234PRIORITY15028316CPUTIME03210ALLTIME30424STATE01000RUNNINGPROG:3===============================================================ID01234PRIORITY16029287CPUTIME03220ALLTIME30414STATE01000RUNNINGPROG:2===============================================================ID01234PRIORITY17026298CPUTIME03320ALLTIME30314STATE01000RUNNINGPROG:3===============================================================ID01234PRIORITY1802709CPUTIME03330ALLTIME30304STATE01010RUNNINGPROG:2===============================================================ID01234PRIORITY19024010CPUTIME03430ALLTIME30204STATE01010RUNNINGPROG:2===============================================================ID01234PRIORITY20021011CPUTIME03530ALLTIME30104STATE01010RUNNINGPROG:2===============================================================ID01234PRIORITY2100012CPUTIME03630ALLTIME30004STATE01110RUNNINGPROG:0===============================================================ID01234PRIORITY1800013CPUTIME13630ALLTIME20004STATE01110RUNNINGPROG:0===============================================================ID01234PRIORITY1500014CPUTIME23630ALLTIME10004STATE01110RUNNINGPROG:0===============================================================ID01234PRIORITY000015CPUTIME33630ALLTIME00004STATE11110RUNNINGPROG:4===============================================================ID01234PRIORITY000012CPUTIME33631ALLTIME00003STATE11110RUNNINGPROG:4===============================================================ID01234PRIORITY00009CPUTIME33632ALLTIME00002STATE11110RUNNINGPROG:4===============================================================ID01234PRIORITY00006CPUTIME33633ALLTIME00001STATE11110RUNNINGPROG:4===============================================================ID01234PRIORITY00000CPUTIME33634ALLTIME00000STATE11111RUNNINGPROG:0Pressanykeytocontinue从上面的执行结果知道,进程的执行顺序为:1-1-1-2-3-2-3-2-3-2-2-2-0-0-0-4-4-4-4六、实验源程序//使用动态优先权的进程调度算法的模拟#includestdio.h#includeiostream.hinti;//循环值intj;//未执行完的进程数即还在阻塞或就绪队列中的进程数ints;//优先权数intm;//最大priority的id即应该被调用的id号structpcb{intid;intp;//priority优先权intcputime;intalltime;intstate;//0——就绪1——完成};structpcbpro[5]={{0,9,0,3,0},{1,38,0,3,0},{2,30,0,6,0},{3,29,0,3,0},{4,0,0,4,0}};intmaxp()//求出最大priority所在进程的id{s=pro[0].p;intmaxpriority=pro[0].p;intminalltime=pro[0].alltime;m=pro[0].id;for(i=1;ij;i++){if(pro[i].pmaxpriority){maxpriority=pro[i].p;//max为最大的优先权数minalltime=pro[i].p;m=pro[i].id;//最大p的id}elseif(pro[i].p==maxpriority){if(pro[i].alltimemi

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功