《操作系统实验报告一处理机调度(共7页).docx》由会员分享,可在线阅读,更多相关《操作系统实验报告一处理机调度(共7页).docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验课程名称: 实验项目名称处理机调度实验成绩实验者专业班级组别同组者实验日期年 月 日第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)实验目的:掌握处理机调度的相关内容,对进程调度算法有深入理解。实验内容:模拟实现进程调度功能。实验要求:1、 任选一种高级语言实现;2、 选择1-2种调度算法;3、 能够输入进程的基本信息,如进程名、提交时间、预估运行时间等;4、 根据选择的调度算法显示进程调度顺序;5、 显示完成调度后每个进程的开始时间、完成时间呢、周转时间,带权周转时间;6、 计算平均周转时间和平均带权周转时间。二、 实验基本原理与设计(包括实验
2、方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)数据结构:一个作业的描述结构:struct WORKint num;/进程序号float startTim;/开始时间float upTim;/提交时间float offTim;/结束时间float costTim;/耗费时间长度float Ti;/周转时间float Tr;/带权周转时间;功能框图及功能说明:主函模块短进程优先算法模拟模块相关时间计算模块先入先出算法模拟模块输入模块 返回调用调用返回调用处理机调度函数调用模块调用返回返回输出模块功能说明:输入模块、输出模块:负责进程的输入及模拟结果的输出;处理机调度函数调用模块:选
3、择调用算法完成进程调度;先入先出算法模拟模块、短进程优先算法模拟模块:实际完成模拟调度功能;相关时间计算模块:计算开始时间、结束时间,周转时间,带权周转时间。三、主要仪器设备及耗材硬件:pc机;软件:windows2007旗舰版、VS 2010开发环境。第二部分:实验调试与结果分析(可加页)一、 实验源程序:# include using namespace std;struct WORKint num;/进程序号float startTim;/开始时间float upTim;/提交时间float offTim;/结束时间float costTim;/耗费时间长度float Ti;/周转时间f
4、loat Tr;/带权周转时间;void FIFO(WORK *workspace,int workNum);void SJF(WORK *workspace,int workNum);void SUM(WORK *workspace,int workNum,float *T,float *W);int main()int num;float upTim;float costTim;int workNum;cout请输入需要被调度的作业的数目:workNum;WORK *workspace=new WORKworkNum;cout请依次输入需要被调度的作业(输入格式:作业序号 作业提交时间(用
5、数字表示) 执行时间):numupTimcostTim & nworkNum)workspacen.num=num;workspacen.upTim=upTim;workspacen.costTim=costTim;n+;cin.clear();cin.sync();cout作业序号t作业提交时间t执行时间):endl;for(int i=0;iworkNum;i+)coutworkspacei.numttworkspacei.upTimttworkspacei.costTimendl;/*选择算法,执行算法,结果输出*/int cho=0;float * T=new float0,* W=n
6、ew float0;cout请选择调度算法:endl;cout0FIFOn1最短优先cho;switch(cho)case 0: FIFO(workspace,workNum); SUM(workspace,workNum,T,W);break;case 1: SJF(workspace,workNum); SUM(workspace,workNum,T,W);break;cout执行顺序t提交时间t执行时间t开始时间t结束时间endl; for(int i=0;iworkNum;i+)coutworkspacei.numttworkspacei.upTimttworkspacei.costT
7、imttworkspacei.startTimttworkspacei.offTimendl;cout平均周转时间:(*T)/workNumt平均带权周转时间:(*W)/workNumendl;system(PAUSE);return 0;void FIFO(WORK *workspace,int workNum)for(int i=0;iworkNum-1;i+) /按提交时间排序for(int j=0;jworkspacej+1.upTim) /大数沉底WORK temp;temp=workspacej+1;workspacej+1=workspacej;workspacej=temp;v
8、oid SJF(WORK *workspace,int workNum)floatMinUptime=0;/最早的提交时间FIFO(workspace,workNum);/先按提交时间排序 MinUptime=workspace0.upTim+workspace0.costTim;for(int i=0;iworkNum-1;i+) /按照最短的作业时间排序for(int j=1;jworkNum-1;j+)if(workspacej.upTimMinUptime&workspacej+1.upTimworkspacej+1.costTim) /提交时间大且耗时多的作业沉底WORK temp;
9、temp=workspacej+1;workspacej+1=workspacej;workspacej=temp;else MinUptime=workspacej.upTim+workspacej.costTim;/更新void SUM(WORK *workspace,int workNum,float *T,float *W)*T=0;*W=0;for(int i=0;iworkNum;i+)/计算开始时间、结束时间,周转时间,带权周转时间if(i=0)/计算第一个作业workspacei.startTim=workspacei.upTim;workspacei.offTim=works
10、pacei.upTim+workspacei.costTim;workspacei.Ti=workspacei.offTim-workspacei.upTim;workspacei.Tr=workspacei.Ti/workspacei.costTim;else/计算第一个作业基础上的其他作业相关时间if(workspacei-1.offTimworkspacei.upTim)workspacei.startTim=workspacei.upTim;else workspacei.startTim=workspacei-1.offTim;workspacei.offTim=workspacei
11、.costTim+workspacei.startTim; workspacei.Ti=workspacei.offTim-workspacei.upTim;workspacei.Tr=workspacei.Ti/workspacei.costTim;*T+=workspacei.Ti;/计算平均周转时间*W+=workspacei.Tr;/计算平均带权周转时间二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)测试用例一结果: 测试用例二结果:三、 实验心得通过本次实验进一步理解了处理机调度问题的处理算法,学习到算法适用的前提是作业提交成功。在实验编程过程中由于对一些概念理解不清楚导致实验结果出错,但通过调整修改得出正确结果如上。在实验过程中代码相对简介,输出界面直观整齐易于分析,但仍有缺陷待改进。专心-专注-专业