ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:117.62KB ,
资源ID:2569343      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2569343.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《操作系统B》进程调度综合性实验报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

《操作系统B》进程调度综合性实验报告.docx

1、操作系统B进程调度综合性实验报告计算机系综合性实验实 验 报 告 课程名称 操作系统B 实验学期 2010 至 2011 学年 第 二 学期学生所在系部 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计算机系制操作系统B课程综合性实验报告 开课实验室: 2011年 6 月9日实验题目进程调度算法程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1. 硬件设备:PC机一台2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C C+Java 等编程语言环境。三、实验

2、内容(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段: 进程标识数ID。 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。 进程已占用CPU时间CPUTIME。 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 进

3、程状态STATE。 队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数增加1。 进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。四、实验结果及分析1.实验设计说明动态优先权是指在创建进程时所赋予的优先权,是指可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。此程序可以对进程进行动态优先权调度,首先输入进程后,判断进程的优先权,优先权大的先执行,程序将

4、其放入运行队列,而其他进程则位于就绪队列,当一个时间片结束后,上一个时间运行的进程优先权则减3,而位于就绪队列的进程优先权加1,而完成的队列优先权不改变,运行进程的ALLTIME减去1,CPUTIME加1。当下一个时间片开始时,判断就绪队列中进程的优先权,优先权高者进入运行队列进行执行。这样直到所有进程的ALLTIME减为0,即所以进程运行完毕,程序结束。2.实验代码#include iostream.h#define M 10 /最多可以运行的进度数typedef struct int ID; /进程ID int PRIORITY; /进程优先级 int CPUTIME; /进程已占用cpu

5、时间 int ALLTIME; /还需占用的CPU时间 int STARTBLOCK; /进程的阻塞时间 int BLOCKTIME; /进程被阻塞的时间 int STATE; /进程状态 int REACH; /进程是否到达,0为到达 int TIME; /进程开始运行时间 PROCESS;/进程控制块PCBvoid main() int i,l,l1,flag=0,serverM,time1,max; int time; /时间片长度 int total=0; /运行时刻 int N; /进程数目 int turn=0; /进程周转时间 int wturn=0; /进程平均周转时间 PRO

6、CESS proM; /定义进程控制块 coutendlt欢迎使用“动态优先权调度算法”endlendl; cout程序中各个进程状态如下:endl; cout运行:0 阻塞:1 就绪:2 结束:3 未到达:4endl; coutN; couttime; cout请输入各进程初始状态:endl; coutID PRIORITY REACH ALLTIME STARTBLOCK BLOCKTIMEendl; /进程初始状态信息输入 for(i=0;iproi.IDproi.PRIORITYproi.REACH; cinproi.ALLTIMEproi.STARTBLOCKproi.BLOCKTI

7、ME; serveri=proi.ALLTIME; /服务时间设置 if(proi.REACH=0) /进程已经到达 proi.STATE=0; /初始状态下到达时即进入就绪队列 else proi.STATE=4; /初始状态下未到达 do /各个时间片时刻进程信息显示输出 coutendl当前时刻为:total; coutendl=各进程状态为=endl; coutID PRIORITY ALLTIME STARTBLOCK BLOCKTIME STATEendl; for(i=0;iN;i+) coutproi.ID proi.PRIORITY ; coutproi.ALLTIME pr

8、oi.STARTBLOCK ; coutproi.BLOCKTIME proi.STATEendl; total+=time;/当前时刻自加时间片时间 for(i=0;iN;i+)/阻塞状态 if(proi.STATE=4&proi.REACHtotal) /未到达或到达时间小于运行时间 proi.STATE=1; for(i=0;iN;i+) time1=proi.ALLTIME; if(proi.STATE=0)/运行状态 if(proi.ALLTIME=time) proi.ALLTIME=0; proi.STATE=3; /运行完 即结束状态 proi.TIME=total-time+

9、time1; else proi.ALLTIME-=time; /未运行完则所需的CPU时间减少 proi.STARTBLOCK-; /未运行完则阻塞时间减少一个时间片 if(proi.STARTBLOCK=0) /阻塞时间为0则进入阻塞队列 proi.STATE=1; proi.BLOCKTIME=time1; proi.STARTBLOCK=time1; proi.PRIORITY-=3; /优先数-3 proi.TIME=total; if(proi.STATE=1) /阻塞状态 proi.BLOCKTIME-; if(proi.BLOCKTIME=0) proi.STATE=2; pr

10、oi.TIME=total; if(proi.STATE=2) proi.PRIORITY+; /优先数加1 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&l!=l1) prol.STATE=0; /就绪状态 if(l1!=-1) prol1.STATE=2; /阻塞状态 /判断是否进程运行结束 flag=0;

11、for(i=0;iN;i+) if(proi.STATE!=3) /未结束 flag=1; break; if(flag=0) break; while(1);/循环执行 coutendl当前时刻:total; coutendl=各进程状态为=endl; coutID PRIORITY ALLTIME STARTBLOCK BLOCKTIME STATEendl; for(i=0;iN;i+) coutproi.ID proi.PRIORITY ; coutproi.ALLTIME proi.STARTBLOCK; cout proi.BLOCKTIME proi.STATE; coutend

12、l; coutendl各进程运行结束!endlendl; cout进程号 到达时间 结束时间 周转时间 带权周转时间endl; for(i=0;iN;i+) cout proi.ID proi.REACH ; coutproi.TIME proi.TIME-proi.REACH ; cout(float)(proi.TIME-proi.REACH)/serveriendl; turn+=proi.TIME-proi.REACH; /计算进程周转时间 wturn+=(proi.TIME-proi.REACH)/serveri; cout平均周转时间为:(float)turn/Nendl; cou

13、t平均周转时间为:(float)wturn/Nendl;3.实验结果(1)输入进程的初始状态(2)各进程运行“动态优先权算法”的过程 (3)运用“动态优先权算法”运行各进程的结果:4.实验结果分析 此程序可以对进程进行动态优先权调度,首先输入进程后,判断进程是否已到达,进程(2)到达则进入就绪队列,然后判断进入就绪队列的进程的优先权,首先运行进程(2),然后起ALLTIME减2,并且其优先权减3,;然后循环执行上述过程,若是继续执行上一过程的进程,则此进程优先数加1,而其他进入运行队列的进程的阻塞时间STARTBLOCK减1,当STARTBLOCK减为0时,此进程进入阻塞队列,而其优先数加1,

14、如此循环下去。 就在例子中,当运行到27时,进程1结束运行,则其周转时间即为:27-5(REACH)=22,所以其带全周转时间为:22/7(ALLTIME)。一次得出其他两个进程的周转及带权周转时间,并得出平均周转及带权周转时间,结果正确。5.实验心得本次综合实验,让我学到了很多东西。加深了对所学的进程调度算法的理解,尤其是对“高优先权优先调度算法”中的“动态优先权调度算法”的理解。在编码实现的过程中,也遇到了很多困难,对于动态优先权调度算法我已经基本掌握,但用编程语言实现起来却并不容易。通过图书馆借阅书籍、问同学等方式都最终基本解决。我觉得这样的综合实验很有必要,我们对于理论性知识的掌握,并

15、不能代表我们的实践动手能力好,通过这次综合实验,我认识到了理论和实践的差距,在以后的学习中,应该更注重实践环节,才能真正的提高自己的能力。对于以后的就业也是很有帮助的,为我们的以后找工作奠定基础。通过对该算法程序的编程实现,也让我对C程序以及C+程序编程语言进行了更深入的学习,巩固了编程语言的知识点与技能,提高了自己的编程能力。同时,我也发现了自己的很多不足,希望在以后的学习工作中,不断实践,不断地完善编程方法与编程技能的学习。教 师 评 价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年 月 日

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2