欢迎来到天天文库
浏览记录
ID:10295655
大小:102.50 KB
页数:10页
时间:2018-07-06
《进程调度实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2008-2009学年第2学期操作系统课程上机实验报告实验一进程调度程序模拟一、实验目的了解实验中进程调度时怎么进行的,按照调度的方式不同进程的执行顺序不同,有的算法适合短作业,有的适合高优先权等等。二、程序设计过程1、数据结构设计name;//进程名ReachT;//到达时间NeedT;//进程需要的时间FinishT;//进程的结束时间zhzh;//周转时间dqzhzh;//带权周转时间state;//进程状态PCB是进程的数组三、实验结果及分析1)程序运行情况左图,先来先服务执行结果图,右图短作业优先执行结果2)程序执行结果说明对先来先服务是按服务时间到达的先后来调度的,所以
2、执行的顺序是按照到达时间从小到大的顺序执行的为0,1,2,4,8,12,16,31,42,43,对应的进程名字3,2,1,5,9,8,6,0,7,4如左图所示。对于短作业是先按照到达时间来排序,然后第一个到达的先执行因为别的程序还没有到达,从第二个开始就要看到达时间和作业的长短,作业短的先执行,如到达时间是31,2,1,0,43,4,16,42,12,8,第一个到达的是3所以先执行,然后结束时间是25,所以从25以前的时间中找到作业最短的执行。四、实验收获和体会通过实验将以前只会做题的过程转化为程序执行的过程,体会到了程序的执行过程,而且是随机产生的时间不是人为的控制,所以对进程调
3、度的理解加深了,还巩固了以前学过的数据结构,和C语言的随机数的生成。五、程序源代码typedefstructprocess{intname;intReachT;intNeedT;intFinishT;intzhzh;floatdqzhzh;intstate;}PCB;PCBpcb[10];intc=45;inti,j;voidaddp(){for(i=0;i<10;i++){pcb[i].name=i;pcb[i].ReachT=rand()%c;pcb[i].NeedT=rand()%c;pcb[i].FinishT=0;pcb[i].state=0;}printf("nam
4、e-reacht-needt-finisht-state");第10页共10页2008-2009学年第2学期操作系统课程上机实验报告for(i=0;i<10;i++){printf("%4d%8d%5d%7d%5d",pcb[i].name,pcb[i].ReachT,pcb[i].NeedT,pcb[i].FinishT,pcb[i].state);}}//显示初始化时的进程状况sortofddshj(){PCBtemp;//设立一个中间变量,用来存放交换变量是的中间存放单元for(j=10;j>0;j--)for(i=0;i5、chT>pcb[i+1].ReachT)//将到达时间按照从小到大的时间排序{temp=pcb[i];pcb[i]=pcb[i+1];pcb[i+1]=temp;}}}sortofneedtime(){PCBtemp;//用来存放交换两个变量时的中间变量for(j=8;j>0;j--)for(i=1;ipcb[i+1].NeedT)//作业按照从小到大的顺序排序{temp=pcb[i];pcb[i]=pcb[i+1];pcb[i+1]=temp;}}}finish(){floatsum1,sum2;//sum1为周转时间的总和,s6、um2为带全周转时间的总和pcb[0].FinishT=pcb[0].ReachT+pcb[0].NeedT;//第一个的结束时间=它到达的时间+它的服务时间pcb[0].state=1;//第一个结束后就将状态置1pcb[0].zhzh=pcb[0].FinishT-pcb[0].ReachT;//它的周转时间是结束时间减去到大时间pcb[0].dqzhzh=(float)pcb[0].zhzh/(float)pcb[0].NeedT;//带权周转时间=周转时间/服务时间for(i=1;i<10;i++){pcb[i].FinishT=pcb[i-1].FinishT+pcb[i7、].NeedT;//除了第一个的到达时间是上一个的到达时间pcb[i].zhzh=pcb[i].FinishT-pcb[i].ReachT;//除了第一个的进程外周转时间pcb[i].dqzhzh=(float)pcb[i].zhzh/(float)pcb[i].NeedT;//带权周转时间=周转时间/服务时间pcb[i].state=1;}//进程结束后就将结束标志置1printf("name-reacht-needt-finisht-zhouzhuan-dai
5、chT>pcb[i+1].ReachT)//将到达时间按照从小到大的时间排序{temp=pcb[i];pcb[i]=pcb[i+1];pcb[i+1]=temp;}}}sortofneedtime(){PCBtemp;//用来存放交换两个变量时的中间变量for(j=8;j>0;j--)for(i=1;ipcb[i+1].NeedT)//作业按照从小到大的顺序排序{temp=pcb[i];pcb[i]=pcb[i+1];pcb[i+1]=temp;}}}finish(){floatsum1,sum2;//sum1为周转时间的总和,s
6、um2为带全周转时间的总和pcb[0].FinishT=pcb[0].ReachT+pcb[0].NeedT;//第一个的结束时间=它到达的时间+它的服务时间pcb[0].state=1;//第一个结束后就将状态置1pcb[0].zhzh=pcb[0].FinishT-pcb[0].ReachT;//它的周转时间是结束时间减去到大时间pcb[0].dqzhzh=(float)pcb[0].zhzh/(float)pcb[0].NeedT;//带权周转时间=周转时间/服务时间for(i=1;i<10;i++){pcb[i].FinishT=pcb[i-1].FinishT+pcb[i
7、].NeedT;//除了第一个的到达时间是上一个的到达时间pcb[i].zhzh=pcb[i].FinishT-pcb[i].ReachT;//除了第一个的进程外周转时间pcb[i].dqzhzh=(float)pcb[i].zhzh/(float)pcb[i].NeedT;//带权周转时间=周转时间/服务时间pcb[i].state=1;}//进程结束后就将结束标志置1printf("name-reacht-needt-finisht-zhouzhuan-dai
此文档下载收益归作者所有