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

下载本文档

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

文档简介

=====WORD完整版----可编辑----专业资料分享使用动态优先权的进程调度算法的模拟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->id4ID01234PRIORITYP0P1P2P3P4CPUTIMEC0C1C2C3C4ALLTIMEA0A1A2A3A4STARTBLOCKT0T1T2T3T4BLOCKTIMEB0B1B2B3B4STATES0S1S2S3S43、思考题(1)在实际的调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?一、实验目的通过动态优先权算法的模拟加深进程概念和进程调度过程的理解,并学习撰写规范的科学研究报告。二、 实验环境及设备实验地点:实C三楼机房、宿舍主要仪器设备:PC机、RedFlagLinux和Windows?操作系统、g++和VC++6.0环境三、 实验内容对N个进程采用动态优先权算法的进程调度;每个用来标识进程的进程控制块PCB用结构描述,包括以下字段:进程标识数ID,进程优先数PRIORITY,进程以占用的CPU时间CPUTIME,进程还需占用的CPU时间ALLTIME,进程状态STATE等。优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1,进程每运行一个时间片优先数减3。设置调度前的初始状态。将每个时间片内的进程情况显示出来。四、 调试分析程序首先设置一个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:1ID01234PRIORITY103531301CPUTIME01000ALLTIME32634STATE00000RUNNINGPROG:1ID01234PRIORITY113232312CPUTIME02000ALLTIME31634STATE00000RUNNINGPROG:1ID01234PRIORITY12033323CPUTIME03000ALLTIME30634STATE01000RUNNINGPROG:2

ID01234PRIORITY13030334CPUTIME03100ALLTIME30534STATE01000RUNNINGPROG:3ID01234PRIORITY14031305CPUTIME03110ALLTIME30524STATE01000RUNNINGPROG:2ID01234PRIORITY15028316CPUTIME03210ALLTIME30424STATE01000RUNNINGPROG:3ID01234PRIORITY16029287CPUTIME03220ALLTIME30414STATE01000RUNNINGPROG:2ID01234PRIORITY17026298CPUTIME03320ALLTIME30314STATE01000RUNNINGPROG:3ID01234PRIORITY1802709CPUTIME03330ALLTIME30304STATE01010RUNNINGPROG:2ID01234PRIORITY19024010CPUTIME03430ALLTIME30204STATE01010RUNNINGPROG:2ID01234PRIORITY20021011CPUTIME03530ALLTIME30104STATE01010RUNNINGPROG:2ID01234PRIORITY2100012CPUTIME03630ALLTIME30004STATE01110ID01234PRIORITY1800013CPUTIME13630ALLTIME20004STATE01110RUNNINGPROG:0ID01234PRIORITY1500014CPUTIME23630ALLTIME10004STATE01110RUNNINGPROG:0ID01234PRIORITY000015CPUTIME33630ALLTIME00004STATE11110RUNNINGPROG:4ID01234PRIORITY000012CPUTIME33631ALLTIME00003STATE11110RUNNINGPROG:4ID01234PRIORITY00009CPUTIME33632ALLTIME00002STATE11110RUNNINGPROG:4ID01234PRIORITY00006CPUTIME33633ALLTIME00001STATE11110RUNNINGPROG:4ID01234PRIORITY00000CPUTIME33634ALLTIME00000STATE11111RUNNINGPROG:0Pressanykeytocontinue从上面的执行结果知道,进程的执行顺序为:1->1->1->2->3->2->3->2->3->2->2->2->0->0->0->4->4->4->4六、实验源程序〃使用动态优先权的进程调度算法的模拟#include<stdio.h>#include<iostream.h>inti; //彳循环值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;i<j;i++){if(pro[i].p>maxpriority){maxpriority=pro[i].p; //max为最大的优先权数minalltime=pro[i].p;m=pro[i].id; //最大p的id}elseif(pro[i].p==maxpriority){if(pro[i].alltime>minalltime){minalltime=pro[i].alltime;m=pro[i].id;}}}returnm;}voidchange(){maxp();intx; //得到m现在的数组编号for(i=0;i<j;i++){if(1!=pro[i].state)〃完成执行一个时间片优先权加1〃完成执行一个时间片优先权加1的操作for(i=0;i<j;i++)if(pro[i].id==m)x=i;pro[x].cputime++;pro[x].p=pro[x].p-4;pro[x].alltime—;if(pro[x].alltime==0){pro[x].state=1;pro[x].p=0;}}voiddisplay(){cout<<〃===============================================================\n〃;cout<<"ID〃<<〃\t〃;for(i=0;i<j;i++){cout.width(10);cout<<pro[i].id;}cout<<endl<<"PRIORITY";for(i=0;i<j;i++){cout.width(10);cout<<pro[i].p;}cout<<endl<<"CPUTIME";for(i=0;i<j;i++){cout.width(10);cout<<pro[i].cputime;}cout<<endl<<"ALLTIME";for(i=0;i<j;

温馨提示

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

评论

0/150

提交评论