动态优先权进程调度算法模拟实验报告资料.doc

上传人:scccc 文档编号:14063980 上传时间:2022-02-01 格式:DOC 页数:14 大小:170.50KB
返回 下载 相关 举报
动态优先权进程调度算法模拟实验报告资料.doc_第1页
第1页 / 共14页
动态优先权进程调度算法模拟实验报告资料.doc_第2页
第2页 / 共14页
动态优先权进程调度算法模拟实验报告资料.doc_第3页
第3页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《动态优先权进程调度算法模拟实验报告资料.doc》由会员分享,可在线阅读,更多相关《动态优先权进程调度算法模拟实验报告资料.doc(14页珍藏版)》请在三一文库上搜索。

1、郑州轻工业学院实验报告实验名称动态优先权进稈调度算法模拟课程名称计算机操作系统专业班级:学 号:指导教师:学生姓名:成 绩:实验日期:一、实验目的:通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。二、实验内容:(1) 用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态 优先权调度)的调度。(2) 每个用来标识进程的进程控制块 PCB可用结构来描述,包括以下字段:进程标识数ID。进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。

2、进程的阻塞时间STARTBLOCK,表示当进程再运行 STARTBLOCK个时间片后,进 程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待 BLOCKTIME个时间片 后,将转换成就绪状态。进程状态STATE。队列指针NEXT,用来将PCB排成队列。(3) 优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加 1。进程每运行一个时间片,优先数减 3。(4) 为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出 来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5) 分析程序运行的结果,谈一下自己的认识。三、设计思路和方法

3、通过VC+程序模拟动态优先权程序调度算法,主要思路和方法就是,通过结构体模拟计算机的控制模组,构造一个 PCB结构体即进程控制块结构体,用来记录当前进程的 的相关状态信息,包括进程标识符、处理机状态、进程调度信息、进程控制信息。并通过 C+语言模拟计算机的相关调度算法,对构建的 PCB进程进行模拟调度和运行,从而实 现用计算机对进程的调度过程进行过程仿真。四、数据结构和算法数据结构:1. 包含PCB信息的结构体2. 包含进程信息的顺序表结构算法:优先权=(等待时间+要求服务时间”要求服务时间Rp=(等待时间+要求服务时间”要求服务时间=相应时间/要求服务时间系统将所有就绪队列按优先级高低排成一

4、个队列,每次调度时,将CPU分配给优先级最高的进程,并令其执行一个时间片,而后中断,寻找并运行下一个优先级最高 的进程。而所有进程的优先权在随进程的推进或随其等待时间的增加而增加,而被调 度之后的程序则降低一定的优先级,从而使所有进程都有运行的机会,从而保证系统 能在给定的时间内响应所有用户的请求。五、程序代码和输出1程序代码如下#i nclude iostream.h#i nclude wi ndows.h#defi ne N 3 typedef struct int ID;int PRIORITY;int CPUTIME;int ALLTIME;int STARTBLOCK;int BLO

5、CKTIME;int STATE;/。-运行1-阻塞2-就绪3-结束4-未到达int REACH;int TIME;PROCESS;void textcolor (int color)SetC on soleTextAttribute (GetStdHa ndle (STD_OUTPUT_HANDLE), color );void mai n()int i,time,max,l,l1,time1,flag=0,total=0,N,server10,sum=0;PROCESS pro10; textcolor(13);coutvv注意:本程序中状态代表如下endlvv0-运行 1-阻塞 2-就绪

6、 3-结束 4- 未到达N;coutvv请设置时间片长度cin time; coutvv请输入各进程初始状态:endl;coutproi.IDproi.PRIORITYproi.REACH;cin proi.ALLTIMEproi.STARTBLOCKproi.BLOCKTIME;serveri=proi.ALLTIME;if(proi.REACH=0) proi.STATE=0;else proi.STATE=4;docoutvvendlvv当前时刻为:vvtotal;textcolor(12);coutvve ndlvv=各 进 程 状 态 为=vve ndl;textcolor(15);

7、coutvvID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIMESTATEvve ndl;vvproi.PRIORITYvvvvproi.STARTBLOCKvvfor(i=0;ivN;i+) coutvvproi.IDvvvvproi.CPUTIMEvv;coutvvproi.ALLTIMEvvvvproi.BLOCKTIMEvvvvproi.STATE;coutvve ndl;total+=time;if(proi.STATE=4&proi.REACHtotal) proi.STATE=1; for(i=0;iN;i+)time仁proi.ALL

8、TIME;if(proi.STATE=0) if(proi.ALLTIME=time) proi.CPUTIME+=time1; proi.ALLTIME=0;proi.STATE=3; proi.TIME=total-time+time1; else proi.CPUTIME+=time; proi.ALLTIME-=time; proi.STARTBLOCK-; if(proi.STARTBLOCK=0) proi.STATE=1; proi.BLOCKTIME=time1; proi.STARTBLOCK=time1;proi.PRIORITY-=3; proi.TIME=total;i

9、f(proi.STATE=1) proi.BLOCKTIME-; if(proi.BLOCKTIME=0) proi.STATE=2; proi.TIME=total;if(proi.STATE=2) proi.CPUTIME+=time; proi.PRIORITY+; proi.TIME=total; max=-100; l1=-1;l=-1;for(i=0;imax&(proi.STATE=0|proi.STATE=2) l=i; max=proi.PRIORITY;if(proi.STATE=0) l1=i;if(l!=-1 &I!=I1) prol.STATE=0;if(l1!=-1

10、) prol1.STATE=2;flag=0;for(i=0;iN;i+)if(proi.STATE!=3)flag=1;break;if(flag=0) break;while(1);coutendlvv当前时刻:vvtotal;进 程 状 态 为textcolor(12);coute ndlvve ndl;textcolor(15);coutID PRIORITYSTATEe ndl;for(i=0;iN;i+)coutvproi.IDvvproi.CPUTIMEvcoutproi. ALLTIMEvvvproi.BLOCKTIMEvproi.STATE;coutvve ndl;coutv

11、vendlvv各进程运行结束!endl;coutvv进程号到达时间结束时间周转时间textcolor(10);for(i=0;ivN;i+)coutvvvvproi.IDvvvvproi.TIMEvvCPUTIME ALLTIMESTARTBLOCK BLOCKTIMEvvproi.PRIORITYvvvproi.STARTBLOCKv带权周转时间endl;vvproi.REACHvvvproi.TIME-proi.REACHvvv(float)(proi.TIME-proi.REACH)/serverive ndl; sum+=proi.TIME-proi.REACH;cout平均周转时间为

12、:v(float)sum/Nvendl;textcolor(15);2输入注意:本程序中状态代表如下0-运行 1-阻塞 2-就绪 3-结束 4-未到达请输入进程数:5请设置时间片长度:4请输入各进程初始状态:ID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIME1 2 3 0 1 42 6 4 0 3 12 0 3 4 5 22 1 2 4 3 41 5 2 4 5 33输出结果当前时刻为:0=各进程状态为=IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME STATE12001442600314200452421043

13、441504534当前时刻为:4IDPRIORITYCPUTIME-各进程状态ALLTIME为:STARTBLOCKBLOCKTIME STATE12001312600314200451121043311504521当前时刻为:8=各进程状态为=IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME STATE12001212700300210450221043211504511当前时刻为:12=各进程状态为=IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME STATE1200111270030322045022104311

14、1604500当前时刻为:16=各进程状态为=IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME STATE13001002700303230450222043021600503当前时刻为:20IDPRIORITYCPUTIME-=各进程状态ALLTIME为:STARTBLOCKBLOCKTIME STATE13001032700303240450023043021600503当前时刻为:24IDPRIORITYCPUTIME-=各进程状态ALLTIME为:STARTBLOCKBLOCKTIME STATE13001032700303240050324043

15、001600503当前时刻:28=各进程状态为=IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIME STATE13001032700303240050324003031600503各进程运行结束!进程号到达时间结束时间周转时间带权周转时间1316131.#INF24841.#INF2324215.252228266.51216143.5平均周转时间为:15.6六、遇到问题和体会本次试验感觉难度比较大,有很多生疏的指令。但在老师和同学的帮助下都解决了。 总体上还是对进程概念和进程调度过程有了一个更深的理解。在这次试验中也暴露出自己不少的缺点,希望以后试验中可以

16、改正!本文利用C语言对动态优先权的进程调度算法进行了设计和模拟实现。程序可实现动态的进行各个进程相关信息的录入,如CPUTIME、ALLTIME、STARTBLOCK、BLOCKTIME等信息。并充分考虑了进程在执行过程中可能发生的多种情况,更好的体现了进程的就绪态、执行态、阻塞态三者之间的关系以及相互的转换。 程序的运行过程清 晰的体现了动态优先权的调度算法的执行过程,有利于加深对算法的理解和掌握。由于抢 占式调度算法与硬件密切相关,由软件实现非常困难,所以本程序实现的是非抢占式的动 态优先权进程调度算法。抢占式的动态优先权进程调度算法的模拟实现有待于进一步研 究。郑州轻工业学院 实 验 报 告

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1