




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告课程名称操作系统B实验学期XXXX至XXXX学年第X学期学生所在系部计算机系年级XXXX专业班级XXXXXX学生姓名XXXX学号任课教师XXX实验成绩计算机系制第 页年月日操作系统B课程综合性实验报告开课实验室:实验题目I进程调度算法模拟程序设计、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境硬件设备:PC机一台软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如CC+Java等编程语言环境。三、实验内容用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算
2、法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:typedefstructnodecharname10;进程的名字intround;一次分配CPU的时间片intcputime;/CPU已执行时间intneedtime;进程执行所需要的时间charstate;进程的状态,W-就绪态,R-执行态,F-完成态intcount;记录进程执行的次数structnode*next;队列指针PCB;主要算法:取得第一个就绪队列节点voidGetFirst()run=ready;if(ready!=N
3、ULL)run-state=R;ready=ready-next;run-next=NULL;将进程插入就绪片队列voidInsertTime(PCB*in)将进程插入到就绪队列尾部PCB*fst;fst=ready;if(ready=NULL)in-next=ready;ready=in;elsewhile(fst-next!=NULL)fst=fst-next;in-next=fst-next;fst-next=in;时间片轮转调度voidRoundRun()intflag=1;GetFirst();while(run!=NULL)Output。;while(flag)run-count+
4、;run-cputime+;run-needtime-;if(run-needtime=0)/进程执行完毕run-state=F;InsertFinish(run);flag=0;elseif(run-count=run-round)时间片用完run-state=W;run-count=0;计数器清零,为下次做准备InsertTime(run);flag=0;Run!=nullNYNFlag=lYYNNrun-count=run-roundY第4页run-needtime=0/输入进程数目/输出各队列进程信息4.流程图:界面显示flag=1;GetFirst();run-count+;run-
5、cputime+;run-needtime-;进程信息输入并初始化将进程插入就绪队列取就绪队列首节点将进程插入完成队列将进程插入就绪队列设标志flag=1结束开始第 页ItF程轮藪时间需變吁I司进程橫态计数語u2进程口|进程进程轮数n22議数N22議数N222cpu理432_时间-4434时问4364,一cpu时冋-42需夏时间1082需要时间&0Q1需要时间F进程伏态伸F进程伏态it进程伏态F2Z12粹数器Z1212.实验体会、本实验的难点是每执行一个时间片就让它排到队尾,也即重新排序,并从头开始调度执行!、时间片的工作流程是:时间片轮转的原则是系统将所有的就绪进程按照先来先服务的原则排成一
6、个队列,每次调度时,把CPU分配队首进程,并令其执行一个时间片,当执行完时,有一个计时器发出时钟中断请求,该进程停止,并被送到就绪队列的末尾,然后再把处理机分配就绪队列的队列进程,同时也让它执行个时间片。、通过亲手实验,对上述写的时间片的工作流程和原理有了更贴切的认识。另外本次实验遇到了很大的麻烦,其实大部分代码是借鉴网上的,但自己通过修改,来获取自己想要的,在自己的努力和同学的帮助下终于调试正确,很是高兴。评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:教师评价评价教师签名:年月曰附代码:#incl
7、ude#include#includetypedefstructnode/进程的名字/一次分配CPU的时间片/CPU已执行时间/进程执行所需要的时间进程的状态,W-就绪态,R-执行态,F-完成态/记录进程执行的次数/队列指针charname10;intround;intcputime;intneedtime;charstate;intcount;structnode*next;PCB;PCB*ready=NULL,*run=NULL,*finish=NULL;/定义三个队列,就绪队列,执行队列和完成队列intnum;voidGetFirst();/从就绪队列取得第一个节点voidOutput(
8、);/输出各队列信息voidInsertTime(PCB*in);/插入就绪片队列voidInsertFinish(PCB*in);/插入完成队列voidTimeCreate();/时间片输入函数voidRoundRun();voidmain()printf(n*/时间片轮转调度欢迎光临指导*n);printf(n*时间片轮转进程调度算法*n);printf(n*计科B082韩友*n);printf(n*200807014225*n);printf(n*2011年5月15日*n);printf(n请输入要创建的进程数目:n);scanf(%d,&num);getchar();/吸收回车符号Ti
9、meCreate();RoundRun();Output();voidGetFirst()/取得第一个就绪队列节点run=ready;if(ready!=NULL)run-state=R;ready=ready-next;run-next=NULL;voidOutput()/输出队列信息PCB*p;p=ready;printf(“进程轮数cpu时间需要时间进程状态计数器n);while(p!=NULL)printf(%st%dt%dt%dt%ct%dn,p-name,p-round,p-cputime,p-needtime,p-state,p-count);p=p-next;p=finish;
10、while(p!=NULL)printf(%st%dt%dt%dt%ct%dn,p-name,p-round,p-cputime,p-needtime,p-state,p-count);p=p-next;p=run;while(p!=NULL)printf(%st%dt%dt%dt%ct%dn,p-name,p-round,p-cputime,p-needtime,p-state,p-count);p=p-next;voidInsertTime(PCB*in)/将进程插入到就绪队列尾部PCB*fst;fst=ready;if(ready=NULL)in-next=ready;ready=in;elsewhile(fst-next!=NULL)fst=fst-next;in-next=fst-next;fst-next=in;voidInsertFinish(PCB*in)/将进程插入到完成队列尾部PCB*fst;fst=finish;if(finish=NULL)in-next=finish;fin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论