




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一实验目的:通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。二实验内容:(1)用VC+语言实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段: 进程标识数ID。 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。 进程已占用CPU时间CPUTIME。 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程
2、再等待BLOCKTIME个时间片后,将转换成就绪状态。 进程状态STATE。 队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数增加1。 进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。三设计思路和方法: 本程序通过结构体来实现计算机的控制模组,由此构造一个PCB结构体,即为进程控制块结构体,以此来记录当前进程的状态情况,包括PCB、调度信息、控制信息和处理机状态。运用
3、C语言模拟调度算法,对构建的PCB进程进行调度和运行,以此来实现进程调度过程仿真,完成本实验的实验目标与要求。四主要数据结构和算法:数据结构包括:PCB结构体包含进程信息的顺序表结构: typedef struct int ID;/ 定义进程标识数 int PRIORITY;/定义进程优先数 int CPUTIME;/ 定义进程已占用CPU时间 int ALLTIME;/ 定义进程还需占用的CPU时间 int STARTBLOCK;/ 定义进程的阻塞时间 int BLOCKTIME;/ 定义进程被阻塞的时间 int STATE;/0-运行 1-阻塞 2-就绪 3-结束 4-未到达 int RE
4、ACH;/定义到达时间 int TIME;/定义进程推进时刻 PROCESS;算法:优先权=(等待时间+要求服务时间)/要求服务时间Rp=(等待时间+要求服务时间)/要求服务时间 =相应时间/要求服务时间计算机CPU将进程按照优先级的高低来排列,并规定一个时间片,当时间片用完后,CPU中断当前任务,下一优先级最高的进程。调度运行完成后的进程,其优先权会降低,同时,所有进程的优先级随着时间的增加或是进程的推进而增加。随着时间的推进,所有程序都会有运行的机会,以此来完成用户的要求。五程序代码和输出1、程序代码如下#include iostream.h#include windows.h/#defi
5、ne N 3typedef structint ID;/ 定义进程标识数int PRIORITY;/定义进程优先数int CPUTIME;/ 定义进程已占用CPU时间int ALLTIME;/ 定义进程还需占用的CPU时间int STARTBLOCK;/ 定义进程的阻塞时间int BLOCKTIME;/ 定义进程被阻塞的时间int STATE;/0-运行 1-阻塞 2-就绪 3-结束 4-未到达int REACH;/定义到达时间int TIME;/定义进程推进时刻PROCESS;void textcolor (int color) SetConsoleTextAttribute (GetStd
6、Handle (STD_OUTPUT_HANDLE), color );void main()int i,time,max,l,l1,time1,flag=0,total=0,N,server10,sum=0;PROCESS pro10;textcolor(13);cout注意:本程序中状态代表如下endl0-运行 1-阻塞 2-就绪 3-结束 4-未到达endlendl;textcolor(15);coutN;couttime;cout请输入各进程初始状态:endl;coutID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIMEendl;for(i=0;
7、iproi.IDproi.PRIORITYproi.REACH;/输入第i个进程的进程标识数、优先数、到达时间cinproi.ALLTIMEproi.STARTBLOCKproi.BLOCKTIME;/输入第i个进程还需占用的CPU时间、阻塞时间、被阻塞的时间serveri=proi.ALLTIME;/令serveri等于第i个进程还需占用的CPU时间if(proi.REACH=0) proi.STATE=0;/如果第i个进程的到达时间等于零,那么令其进程状态等于0else proi.STATE=4;/否则,令其进程状态等于4docoutendl当前时刻为:total;textcolor(12
8、);coutendl=各进程状态为=endl;textcolor(15);coutID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEendl;for(i=0;iN;i+)coutproi.ID proi.PRIORITY proi.CPUTIME ;coutproi.ALLTIME proi.STARTBLOCK proi.BLOCKTIME proi.STATE;coutendl;total+=time;/当前时刻加上时间片长度for(i=0;iN;i+)if(proi.STATE=4&proi.REACHtotal)/如果第i个进程
9、未到达且到达时间小于当前时刻,则运行下列程序proi.STATE=1;/则阻塞第i个进程for(i=0;iN;i+)time1=proi.ALLTIME;/令time1等于第i个进程的还需占用CPU的时间if(proi.STATE=0)/如果第i个进程正在运行,则运行下列程序if(proi.ALLTIME=time)/如果第i个进程还需占用CPU的时间小于等于时间片长度,则proi.CPUTIME+=time1;/第i个进程已经占用的CPU时间加上time1,即加上第i个进程还需占用CPU的时间proi.ALLTIME=0;/ 令第i个进程还需占用的CPU时间为0proi.STATE=3;/结
10、束第i个进程proi.TIME=total-time+time1;/ 令第i个进程的推进时刻变为当前时刻减去时间片长度加上其还需占用CPU的时间else/否则proi.CPUTIME+=time;/ 第i个进程已经占用的CPU时间加上时间片长度proi.ALLTIME-=time;/ 第i个进程还需占用的CPU时间减去时间片长度proi.STARTBLOCK-;/第i个进程的阻塞时间减一if(proi.STARTBLOCK=0)/如果第i个进程的阻塞时间等于0proi.STATE=1;/则阻塞第i个进程proi.BLOCKTIME=time1;/令第i个进程被阻塞的时间等于其还需占用CPU的时
11、间proi.STARTBLOCK=time1;/令第i个进程的阻塞时间等于其还需占用CPU的时间proi.PRIORITY-=3;/ 第i个进程的优先数减三proi.TIME=total;/ 令第i个进程的进程推进时刻等于当前时刻if(proi.STATE=1)/如果第i个进程处于阻塞状态,则proi.BLOCKTIME-;/第i个进程被阻塞的时间逐一递减if(proi.BLOCKTIME=0) proi.STATE=2;/如果第i个进程被阻塞的时间等于0,则proi.TIME=total;/ 令第i个进程的进程推进时刻等于当前时刻if(proi.STATE=2)/如果第i个进程处于就绪状态,
12、则proi.PRIORITY+;/令第i个进程的优先数加一proi.TIME=total; /令第i个进程的进程推进时刻等于当前时刻max=-100;/令max=-100l1=-1;/l1=-1l=-1;/l=-1for(i=0;imax&(proi.STATE=0|proi.STATE=2)/如果第i个进程的优先级大于max且第i个进程的进程状态等于0或第i个进程的进程状态等于2,则l=i;/令l=imax=proi.PRIORITY;/令max等于第i个进程的优先数if(proi.STATE=0) l1=i;/如果第i个进程正在运行,则令l1=iif(l!=-1&l!=l1) prol.S
13、TATE=0;/如果l不等于-1且l不等于l1,则进程l的进程状态等于0if(l1!=-1&(prol.PRIORITY prol1.PRIORITY)) prol1.STATE=2;/如果l1不等于-1,且进程l的优先数大于进程l1的优先数,则令进程l1处于就绪状态flag=0;for(i=0;iN;i+)if(proi.STATE!=3)/如果第i个进程未结束 flag=1;/则令flag等于1break;/退出循环if(flag=0) break;/如果flag等于0,则退出循环while(1);coutendl当前时刻:total;textcolor(12);coutendl=各进程状
14、态为=endl;textcolor(15);coutID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEendl;for(i=0;iN;i+)coutproi.ID proi.PRIORITY proi.CPUTIME ;coutproi.ALLTIME proi.STARTBLOCK proi.BLOCKTIME proi.STATE;coutendl;coutendl各进程运行结束!endl;cout进程号 到达时间 结束时间 周转时间 带权周转时间endl;textcolor(10);for(i=0;iN;i+)cout proi.
15、ID proi.REACH proi.TIME proi.TIME-proi.REACH (float)(proi.TIME-proi.REACH)/serveriendl;/带全周转时间等于第i个进程的推进时刻与第i个进程的到达时刻的差sum+=proi.TIME-proi.REACH;/sum等于sum加上第i个进程的推进时刻与第i个进程的到达时刻的差cout平均周转时间为:(float)sum/Nendl;/输出平均周转时间,平均周转时间等于sum/Ntextcolor(15);2输入请输入进程数:3请设置时间片长度:4请输入各进程初始状态:ID PRIORITY REACH ALLTI
16、ME STARTBLOCK BLOCKTIME4 7 5 9 3 61 6 8 4 6 73 5 7 5 6 83输出结果当前时刻为:0=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 6 41 6 0 4 6 7 43 5 0 5 6 8 4当前时刻为:4=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 6 41 6 0 4 6 7 43 5 0 5 6 8 4当前时刻为:8=各进程状态为=ID PRIOR
17、ITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 5 11 6 0 4 6 7 43 5 0 5 6 7 1当前时刻为:12=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 4 11 6 0 4 6 6 13 5 0 5 6 6 1当前时刻为:16=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 3 11 6 0 4 6 5 13 5 0 5 6
18、5 1当前时刻为:20=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 2 11 6 0 4 6 4 13 5 0 5 6 4 1当前时刻为:24=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 7 0 9 3 1 11 6 0 4 6 3 13 5 0 5 6 3 1当前时刻为:28=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 8 0 9 3
19、 0 01 6 0 4 6 2 13 5 0 5 6 2 1当前时刻为:32=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 5 4 5 2 0 01 6 0 4 6 1 13 5 0 5 6 1 1当前时刻为:36=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 2 8 1 1 0 21 7 0 4 6 0 03 6 0 5 6 0 2当前时刻为:40=各进程状态为=ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE4 3 8 1 1 0 21 7 4 0 6 0 33 7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度文化娱乐产业股权转让及代持合作协议
- 2025年教师实习合同协议样本:数学与科学教育教师实习协议
- 2025辽宁大连长兴控股集团有限公司及所属公司招聘9人笔试参考题库附带答案详解
- 教学技术与艺术知到智慧树章节测试课后答案2024年秋西南大学
- 健美操知到智慧树章节测试课后答案2024年秋武汉学院
- 2025宁夏中汇化工有限公司招聘8人笔试参考题库附带答案详解
- 2025中国建材集团有限公司招聘14人笔试参考题库附带答案详解
- 2024辽宁盘锦市政建设集团社会招聘31人查看职位笔试参考题库附带答案详解
- 2025年上半年六盘水六枝特区事业单位及招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年保山市消防救援支队防火监督科招聘消防文员4名易考易错模拟试题(共500题)试卷后附参考答案
- 售后服务流程图
- 建筑地基处理技术规范JGJ79-2012
- 印象主义、后印象主义课件
- 《中华传统文化》第1课-炎黄始-华夏悠远教学课件
- 日常监督检查表
- 队列训练教程ppt课件(PPT 86页)
- 第三章-农村公共管理组织课件
- 注塑员工培训
- JMP操作简要培训
- 胜利油田压驱技术工艺研究进展及下步工作方向
- 研究生复试汇报ppt
评论
0/150
提交评论