




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
欢迎共阅欢迎共阅欢迎共阅实验概述:【实验目的及要求】理解并掌握处理机调度算法【实验原理】基于先来先服务调度和最短作业优先调度算法思想用C语言编程实现【实验环境】(使用的软件)VisualC++6.0实验内容:本实验模拟在单处理机情况下处理机调度,用C语言编程实现先来先服务和最短作业优先调度算法。【实验方案设计】FCFS流程图:SJF流程图:试验总设计流程图:输入选择数以选择调度算法报错继续输数先按提交时间排序按照提交时间排序1FCFS算法2SJF算法其他数进程等待时间=进程开始运行时间-进程提交时间(即进程处于就绪态时间)输入选择数以选择调度算法报错继续输数先按提交时间排序按照提交时间排序1FCFS算法2SJF算法其他数输入作业个数、输入作业个数、作业号、提交时间、运行时间再按最短运行时间排序计算各作业参数:开始时间,结束时间再按最短运行时间排序计算各作业参数:开始时间,结束时间等待时间,周转时间并输出并输出计算各作业参数:计算各作业参数:开始时间,结束时间等待时间,周转时间并输出【实验过程】(实验步骤、记录、数据、分析)测试用例1:屏幕显示:Pleaseinputthetotalnumberofjobs输入:4<回车>屏幕显示:Pleaseinputjobnumber,submittimeandruntime输入:19.00.2<回车>28.50.5<回车>38.01.0<回车>49.10.1<回车>屏幕显示:Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJF.输入:3<回车>屏幕显示:Youhaveinputawrongnumber,pleaseinputagain.输入:1<回车>屏幕输出结果:submitrunstartingfinalwaitturnaround38.01.08.09.00.01.028.50.59.09.50.51.019.00.29.59.70.50.749.10.19.79.80.60.7屏幕显示:Theaverageturnaroundtimeis0.85Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJF,or0toexit.测试数据二:submitrun160.5250.936.30.1FCFS和SJF算法结果一样:submitrunstartingfinalwaitturnaround250.955.900.9160.566.500.536.30.16.56.60.20.3Theaverageturnaroundtimeis0.567测试数据三:submitrun150.224.20.335.10.345.20.1FCFS:submitrunstartingfinalwaitturnaround24.20.34.24.500.3150.255.200.235.10.35.25.50.10.445.20.15.55.60.30.4Theaverageturnaroundtimeis0.325SJF:submitrunstartingfinalwaitturnaround24.20.34.24.500.3150.255.200.245.20.15.25.300.135.10.35.35.60.20.5Theaverageturnaroundtimeis0.275源程序:#include"stdio.h"#include"stdlib.h"#include"string.h"#defineM50structsjf{ intjobnumber; floatsubmittime; floatruntime; floatstarttime; floatfinishtime; floatwaittime; floatturnaroundtime;}temp;staticstructsjfst[M];voidinput(structsjf*p,intN){ inti; printf("Pleaseinputthejobnumber,submittimeandruntime:\nForexmple:18.52.0\n"); for(i=0;i<N;i++) { scanf("%d%f%f",&p[i].jobnumber,&p[i].submittime,&p[i].runtime);}}voidprint(structsjf*p,intN){ intk; floath,g; printf("runorder:"); printf("%d",p[0].jobnumber);for(k=1;k<N;k++)printf("-->%d",p[k].jobnumber);printf("\nTheprocess'sinformation:\n");printf("\njobnum\tsubmit\trun\tstart\tfinal\twait\tturnaround\n");for(k=0;k<N;k++){ h+=p[k].turnaroundtime;printf("%d\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t\n",p[k].jobnumber,p[k].submittime,p[k].runtime,p[k].starttime,p[k].finishtime,p[k].waittime,p[k].turnaroundtime);}g=h/N;printf("\nTheaverageturnaroundtimeis%-.2f\n",g);}/*按提交时间从小到大排序*/voidsort1(structsjf*p,intN){inti,j;for(i=0;i<N;i++)for(j=0;j<=i;j++)if(p[i].submittime<p[j].submittime){temp=p[i];p[i]=p[j];p[j]=temp;}}/*运行*/voiddeal(structsjf*p,intN){ intk; for(k=0;k<N;k++) { if(k==0) { p[k].starttime=p[k].submittime; p[k].finishtime=p[k].submittime+p[k].runtime; } else { if(p[k].submittime>p[k-1].finishtime) { p[k].starttime=p[k].submittime; p[k].finishtime=p[k].submittime+p[k].runtime; } else { p[k].starttime=p[k-1].finishtime; p[k].finishtime=p[k-1].finishtime+p[k].runtime; } } } for(k=0;k<N;k++) { p[k].turnaroundtime=p[k].finishtime-p[k].submittime; p[k].waittime=p[k].starttime-p[k].submittime;}}voidsort2(structsjf*p,intN){ intnext,m,n,k,i; floatmin; sort1(p,N); for(m=0;m<N;m++) { i=0; if(m==0) p[m].finishtime=p[m].submittime+p[m].runtime; else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; } for(n=m+1;n<N;n++) { if(p[n].submittime<=p[m].finishtime)/*判断内存中每次完成之后又多少到达的进程*/ i++; } min=p[m+1].runtime; next=m+1; for(k=m+1;k<m+i;k++)/*找出到达后的进程中运行时间最小的进程*/ { if(p[k+1].runtime<min) { min=p[k+1].runtime; next=k+1; } } temp=p[m+1]; p[m+1]=p[next]; p[next]=temp; }deal(p,N);print(p,N); }voidmain(){ intN,i; printf("Pleaseinputthetotalnumberofjobs:"); scanf("%d",&N); input(st,N);loop2: printf("Whatkindofalgorithmdoyouwant?Pleaseinput1toselectFCFS,or2toselectSJFor0toexit:");loop: scanf("%d",&i); if(i==0) exit(1); elseif(i==1) { sort1(st,N); deal(st,N); print(st,N); gotoloop2; } elseif(i==2){ sort2(st,N); gotoloop2;}else{ printf("Youhaveinputawrongnumber,pleaseinputagain:"); gotoloop;}}【结论】(结果)测试1:测试二:测试三:【小结】实验中产生的错误及原因分析:测试用例1的结果:错误1:错误解决方式:主要是子函数sort2()中出的错:i的作用域,程序修改:将原来:intnext,m,n,k,i=0; floatmin; sort1(p,N); for(m=0;m<N;m++) {改为:intnext,m,n,k,i; floatmin; sort1(p,N); for(m=0;m<N;m++) { i=0;测试用例2的结果:错误1:错误原因:未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:解决方法:将原来的:else { p[m].finishtime=p[m-1].finishtime+p[m].runtime; }修改为:else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; }测试用例3的结果:错误1:错误分析:同2一样,未在子函数sort()中未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:解决方法:将原来的: else p[m].finishtime=p[m-1].finishtime+p[m].runtime;修改为:else { if(p[m].submittime>p[m-1].finishtime) { p[m].finishtime=p[m].submittime+p[m].runtime; } else p[m].finishtime=p[m-1].finishtime+p[m].runtime; }实验的体会及收获:通过这次试验,我对处理机的调度算法特别是FCFS和SJF有了更深的理解,而且锻炼了我的思维能力,使我能更全面地思考问题,以后还需要多做些这方面的练习。试验不足之处:试验未考虑同一时间提交多个进程的情况,如:测试数据:submitrun170.227.20.5370.1结果应该是:FCFS:submitrunstartfinalwaitturnaround170.27.07.50.00.5370.17.57.60.50.627.20.57.67.80.40.6Theaverageturnaroundtimeis0.57.SJF:Jobnumsubmitrunstartingfinalwaitturnaround370.17.07.10.00.1170.57.17.60.10.62
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 帕金森居家护理实务指南
- 辐照机构质量协议书
- 辅导机构加盟协议书
- 车辆使用调度协议书
- 代理批发或销售协议书
- Brand KPIs for shoes Johnston Murphy in the United States-外文版培训课件(2025.2)
- 超市加盟合同协议书
- 青蟹买卖合同协议书
- kva箱变技术协议书
- 农村房基地转让协议书
- 稿件修改说明(模板)
- 速冻食品生产许可证审查细则
- 2023年清华大学考博英语真题及答案详解
- 心肺复苏中国专家共识解读
- 道路工程施工水泥混凝土路面施工课件
- 胸痛单元建设课件
- DB41-T 2322-2022水资源公报数据库设计规范
- 外科经典换药术培训课件
- 营养与健康教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件合集
- 新胶工割胶技术培训
- 挂篮安装细则
评论
0/150
提交评论