欢迎来到天天文库
浏览记录
ID:38629747
大小:179.50 KB
页数:11页
时间:2019-06-16
《操作系统综合性实验报告-进程调度(含代码)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、XXXXXX计算机系综合性实验实验报告课程名称操作系统B实验学期XXXX至XXXX学年第X学期学生所在系部计算机系年级XXXX专业班级XXXXXX学生姓名XXXX学号XXXXXXXXXXXX任课教师XXX实验成绩计算机系制第10页《操作系统B》课程综合性实验报告开课实验室:年月日实验题目进程调度算法模拟程序设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1.硬件设备:PC机一台2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程
2、序开发环境,如CC++Java等编程语言环境。三、实验内容1.用C语言(或其它语言,如Java)编程实现对N个进程采用某种进程调度算法(如动态优先权调度算法、先来先服务算法、短进程优先算法、时间片轮转调度算法)调度执行的模拟。2.每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:typedefstructnode{charname[10];//进程的名字intround;//一次分配CPU的时间片intcputime;//CPU已执行时间intneedtime;//进程执行所需要的时间charstate;//进程的状态
3、,W-就绪态,R-执行态,F-完成态intcount;//记录进程执行的次数structnode*next;//队列指针}PCB;第10页3.主要算法:(1)取得第一个就绪队列节点voidGetFirst(){run=ready;if(ready!=NULL){run->state='R';ready=ready->next;run->next=NULL;}}(2)将进程插入就绪片队列voidInsertTime(PCB*in)//将进程插入到就绪队列尾部{PCB*fst;fst=ready;if(ready==NULL){in->ne
4、xt=ready;ready=in;}else{while(fst->next!=NULL){fst=fst->next;}in->next=fst->next;fst->next=in;}}第10页(3)时间片轮转调度voidRoundRun(){intflag=1;GetFirst();while(run!=NULL){Output();while(flag){run->count++;run->cputime++;run->needtime--;if(run->needtime==0)//进程执行完毕{run->state='F'
5、;InsertFinish(run);flag=0;}elseif(run->count==run->round)//时间片用完{run->state='W';run->count=0;//计数器清零,为下次做准备InsertTime(run);flag=0;}}flag=1;GetFirst();}}第10页4.流程图:开始界面显示输入进程数目进程信息输入并初始化将进程插入就绪队列设标志flag=1取就绪队列首节点Run!=nullN结束输出各队列进程信息YFlag=1Nrun->count++;run->cputime++;run-
6、>needtime--;run->cputime++;run->needtime--;Yrun->needtime==0run->count==run->roundrun->roundrun->roundYNN将进程插入完成队列将进程插入就绪队列YFlag=0第10页四、实验结果及分析1.程序运行截图:第10页2.实验体会(1)、本实验的难点是每执行一个时间片就让它排到队尾,也即重新排序,并从头开始调度执行!(2)、时间片的工作流程是:时间片轮转的原则是系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配队首进
7、程,并令其执行一个时间片,当执行完时,有一个计时器发出时钟中断请求,该进程停止,并被送到就绪队列的末尾,然后再把处理机分配就绪队列的队列进程,同时也让它执行一个时间片。(3)、通过亲手实验,对上述写的时间片的工作流程和原理有了更贴切的认识。另外本次实验遇到了很大的麻烦,其实大部分代码是借鉴网上的,但自己通过修改,来获取自己想要的,在自己的努力和同学的帮助下终于调试正确,很是高兴。教师评价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整实验结果正确文字流畅报告规范题解正确其他:评价教师签
8、名:年月日第10页附代码:#include#include#includetypedefstructnode{charname[10];//进程的名
此文档下载收益归作者所有