进程调度

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

淮海工学院计算机工程学院实验报告书课程名:操作系统原理A题目:进程调度班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日一、目的与要求进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用Java或C/C++语言编写一个进程调度模拟程序,至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。通过本实验可加深对进程调度算法的理解。二、实验内容1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2、模拟调度程序至少使用先来先服务、短进程优先、最高优先权优先或时间片轮转法四种算法中的两种算法来实现进程调度。3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。三、实验步骤流程图:(1)短作业优先算法流程图:NYNY开始按到达时间对进程从小到大排序是否还有进程未被调度未被调度程序中是否有提交时间小于上一个进程完成时间的进程对进程按运行时间大小排序选出被调进程并计算各参数《操作系统原理A》实验报告-2-(2)高响应比优先算法流程图:YNNYYN四、测试数据与实验结果输出各参数开始找到第一个还未执行作业当前作业是最后一个作业和下一个还未执行的作业相比较当前作业被执行前到达当前作业取较早到和高响应比的进程当前作业取响应比较高一个当前作业取较早到达一个同时到达返回这一次要执行进程《操作系统原理A》实验报告-3-1.高响应比优先算法截图:结果:《操作系统原理A》实验报告-4-2.短进程优先算法截图:结果:《操作系统原理A》实验报告-5-五、结果分析与实验体会结果分析:(1)短作业优先调度算法:从后备队列中选择运行时间最短的作业将其调入内存运行。所以,最先执行的是进程A,A执行结束后,进程BCD都已到达,所以选择最短的作业执行,因此,执行的顺序是A—D—B—E—C。根据公式:周转时间=结束时间-等待时间,得出各进程的周转时间:TA=4,TB=8,TC=16,TD=3,TE=9。平均周转时间:T=8根据公式:带权周转时间=周转时间/服务时间,得出:WA=1,WB=2.67,WC=3.2,WD=1.5,WE=2.25。平均带权周转时间=2.124。(2)高响应比优先调度算法:0时刻,进程A先到达,所以A先执行,4时刻,BCDE都到达,根据公式:响应比=(1+等待时间/服务时间),得出B的响应比最高,所以接下来进程B执行;进程B在7时刻执行结束,然后算出进程DCE的响应比,得出进程D的响应比较高,所以接下来进程D执行,以此类推,得出进程执行顺序为:A—B—D—C—E。根据公式:周转时间=结束时间-等待时间,得出各进程的周转时间:TA=4,TB=6,TC=12,TD=6,TE=14。平均周转时间:T=8.4根据公式:带权周转时间=周转时间/服务时间,得出:WA=1,WB=2,WC=2.4,WD=3,WE=3.5。平均带权周转时间=2.38。《操作系统原理A》实验报告-6-实验体会:通过本次试验,我对操作系统中进程调度有了更进一步的了解,加深了对进程调度算法的理解。同时,在实验中也遇到许多问题,比如两个算法的执行顺序的排列,通过查阅相关资料,画出了流程图,从而解决了问题。通过这次试验让我知从道理论到实践还有很大差距,在本次实验中也有许多做的不足的地方有待改正,在以后的学习过程中不仅要掌握好理论知识,更应多实践,理论与实践结合!附录(代码):#includestdio.h#includestring.h#includestdlib.h#includedos.h#includetime.h#includeconio.h/************************************高优先权优先*****************************************/typedefcharstring[10];/*//定义string为含有10个字符元素的字符数组类型*/structtask{stringname;/*作业号*/intarrTime;/*作业到达时间*/intserTime;/*作业要求服务时间*/intwaiTime;/*等待时间*/intbegTime;/*开始运行时间*/intfinTime;/*结束运行时间*/floatturTime;/*周转时间*/floatwTuTime;/*带权周转时间*/intpriority;/*优先权*/intfinish;/*是否已经完成*/}JCB[10];intnum;voidinput(){inti;system(cls);printf(\n请输入作业数量:);scanf(%d,&num);for(i=0;inum;i++)《操作系统原理A》实验报告-7-{printf(\n请输入第%d个作业:\n,i+1);printf(作业名称:);scanf(%s,JCB[i].name);printf(到达时间:);scanf(%d,&JCB[i].arrTime);printf(服务时间:);scanf(%d,&JCB[i].serTime);JCB[i].priority=0;JCB[i].finish=0;}}intHRN(intpre){intcurrent=1,i,j;/*优先权=(等待时间+服务时间)/服务时间*/for(i=0;inum;i++){JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime;/*等待时间=上一个作业的完成时间-到达时间*/JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;}for(i=0;inum;i++){if(!JCB[i].finish){current=i;/*找到第一个还没完成的作业*/break;}}for(j=i;jnum;j++)/*和后面的作业比较*/{if(!JCB[j].finish)/*还没完成(运行)*/{if(JCB[current].arrTime=JCB[pre].finTime)/*如果作业在上一个作业完成之前到达*/{if(JCB[j].arrTime=JCB[pre].finTime&&JCB[j].priorityJCB[current].priority)current=j;/*找出到达时间在上一个作业完成之前,优先权高的作业*/}else/*如果作业是在上一个作业完成之后到达*/{if(JCB[j].arrTimeJCB[current].arrTime)current=j;/*找出比较早到达的一个*/《操作系统原理A》实验报告-8-if(JCB[j].arrTime==JCB[current].arrTime)/*如果同时到达*/if(JCB[j].priorityJCB[current].priority)current=j;/*找出服务时间比较短的一个*/}}}returncurrent;/*返回当前作业*/}voidruning(inti,inttimes,intpre,intstaTime,intendTime){if(times==0){JCB[i].begTime=JCB[i].arrTime;JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;JCB[i].turTime=JCB[i].serTime;JCB[i].wTuTime=1;staTime=JCB[i].begTime;}else{if(JCB[i].arrTimeJCB[pre].finTime)JCB[i].begTime=JCB[i].arrTime;elseJCB[i].begTime=JCB[pre].finTime;JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;JCB[i].wTuTime=JCB[i].turTime/JCB[i].serTime;}if(times==num-1)endTime=JCB[i].finTime;JCB[i].finish=1;}voidprint(inti,inttimes){if(times==0){printf(名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n);}printf(%9s%9d%9d%9d%9d%9.2f%9.2f\n,JCB[i].name,JCB[i].arrTime,JCB[i].serTime,JCB[i].begTime,JCB[i].finTime,JCB[i].turTime,JCB[i].wTuTime);}voidcheck(){inti;《操作系统原理A》实验报告-9-intstaTime,endTime,sumTurTime=0,sumWTuTime=0,aveTurTime,aveWTuTime;intcurrent=0,times=0,pre=0;JCB[pre].finTime=0;for(i=0;inum;i++){JCB[i].finish=0;}staTime,endTime,sumTurTime=0,sumWTuTime=0,aveTurTime,aveWTuTime;current=0;times=0;pre=0;JCB[pre].finTime=0;printf(-------------------------------------------------------------------------\n);for(i=0;inum;i++){JCB[i].finish=0;}staTime,endTime,sumTurTime=0,sumWTuTime=0,aveTurTime,aveWTuTime;current=0;times=0;pre=0;JCB[pre].finTime=0;printf(\n--HRRN-----------------------------------------------------------------\n);for(times=0;timesnum;times++){current=HRN(pre);runing(current,times,pre,staTime,endTime);print(current,times);pre=current;}for(i=0;inum;i++){sumTurTime+=JCB[i].turTime;sumWTuTime+=JCB[i].wTuTime;}aveTurTime=sumTurTime/num;aveWTuTime=sumWTuTime/num;printf(平均周转时间=%.2f\n,aveTurTime);printf(平均带权周转时间=%.2f\n,aveWTuTime);printf(-------------------------------------------------------------------------\n);}/****************************短进程优先算法《操作系统原理A》实验报告-10-***********************************/#includeiostreamusingnamespacestd;#defineMaxNum100structProcess_struct{intNumber;//进程编号charName[MaxNum];//进程名称intArrivalTime;//到达时间intServiceTime;//开始运行时间intFinishTime;//运行结束时间intWholeTime;//运行时间intrun_flag;//调度标志intorder;

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功