还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验二作业调度实验题目
1、编写并调试一个单道解决系统的作业等待模拟程序作业调度算法:分别采用先来先服务(FCFS)最短作业优先(SJF)的调度算法
(1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选
(2)最短作业优先算法是以进入系统的作业所提出的“执行时间”为标准总是优先选取执行时间最短的作业二.实验目的本实验规定用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三.实验过程〈一〉单道解决系统作业调度1)单道解决程序作业调度实验的源程序:zuoye.c执行程序zuoye.exe2)实验分析
1、由于在单道批解决系统中,作业一投入运营,它就占有计算机的一切资源直到作业完毕为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素
2、每个作业由一个作业控制块JCB表达JCB可以包含如下信息:作业名、提交时间、所需的运营时间、所需的资源、作业状态、链指针等等作业的状态可以是等待W(Wait)、运营R(Run)和完毕F(Finish)三种状态之一每个作业的最初状态elseifp-needtimemin-needtimemin=p;p=p-next;whilep!=NULL;ifiden{i—;//printf\ntime=%d:\tnoJCBsubmib...wait...time;times++;iftimes100{printf\nruntimeistooIong...errorz,;getch;e1se{runningminm;//调用running函数}}//forfina1;〃调用running函数voidfefsintm〃先来先服务算法intiiden;systemcls;inita1;fori=0;in;i++p=ready;iden=l;do{ifp-state==W*p-reachtime=timesiden=0ifidenp=p-next;}whilep!=NULLiden;ifidon{i——;printf〃\n没有满足规定的进程,需等待”;times++;iftimes100{printf\n时间过长;getch;}e1se{runningpm;〃调用running函数final;//调用running函数}voidmuneO{intm;system〃c1s〃;printfz/\n\n\t\t***火*****************************************\t\t\n;Printf\t\t\t\t作业调度演示\n;printf\t\t^********************************************\t\Printf*\n\n\n\t\t\tl.先来先服务算法.;printf\n\t\t\t
2.最短作业优先算法.;printfC\n\t\t\t
3.响应比高者优先算法;printf°\
0.退出程序.;PrintfC\n\n\t\t\t\t选择所要操作:;scanf*%d*m;switchmcase1:fcfsm;getchO;systemc1s;mune;break;case2:sjfm:getch;systemcis*;mune;break;case3:hrnm;getch;systemcls;mune;break;case0:systemcis;break;defau1t:printf〃选择错误,重新选择getchO;systemcIs;muneO;main//主函数inize;muneO;5调试结果i.选择操作的界面程课件计算机操作系统联作系统实验八作业调度\zuoye.exe,作业调度演示.先来先服务算法..最短企业优先算法..响应居意者优先萱法4战出程序.选择所要操作:
2.输入操作初始信息:c「E:\课程课件计算机》
3.先来先服务算法作业调度结果(调度顺序a-b-c-d-e)作业e正在运行,估计其运行情况:开始运时刻14完成时刻18阿苣时间:
14.000000带校周转时间
3.500000ehasbeenFinishedpressanykeytocontinue...作业已经全部定成?5个作业的壬均周转时间是
9.0000005个作业的半域带校周转时间是
2.
8000004.最短作业优先算法作业调度结果(调度顺序a-d-b-e-c)ehasbeenFinishedpressanykeytocontinue...时间是
8.400000周转时间是
2.380000总是等待此
3、对每种调度算法都规定打印每个作业开始运营时刻、完毕时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间3)流程图初始化所有的JCB调度队首的作业投入运行,(更改队百指针,使傕业的状态为R.记住作业开始运行的时刻starttime等等计茂并打印运行作业»的完成时刻finishtime周转时间cycletime带权周转时间cltime完成时间=开始运行时间+需要运行时间周转时间:=完成时间-到达时间带权周转时间:周转时间/需要运行时间三.高响应比算法
④#inc1udestdio.httincludestd1ib.httincludeconio.h#definegetpchtypetype*mallocsizeoftype#defineNULL0intn;inttimes=0;charname
[10];intreachtime;intstarttime;intneedtime;floatsuper;intfinishtime;f1oateyeletimc;floatcltime;charstate;structjcb*next;*ready=NULL*p*q;typedefstructjcbJCB;voidinize//初始化界面{printf\n\n\t\t*********************************************\t\t\n;printfC\t\t\t\t实验二作业调度\n;printf\t\t*********************************************\t\t\n;printfC\n\n\n\t\t\t\t\t计算机学院软件四班\n;printf\t\t\t\t\t蓝小花\n”;printfv\t\t\t\t\t\nz,;printf〃\t\t\t\t\t完毕日期2023年11月17号”;printf\n\n\n\t\t请输入任意键进入演示过程\n;getch;voidinital〃建立作业控制块队列,先将其排成先来先服务的模式队列{inti;printf\n输入作业数:;scanf%d”n;fori=0;in;i++p=gctpchJCB;printf\n输入作业名“;scanf%s”p-name;getch;p—reachtime=i;printf作业默认到达时间:%di;printf\n输入作业要运营的时间”;seanf,z%d”p-needtime;p—state=/W;p-next=NULL;ifready==NULLready=q=p;else{q-next=p;q=P;voiddisp(JCB*qintm)〃显示作业运营后的周转时间及带权周转时间等(if(m==3)〃显示高响应比算法调度作业后的运营情况(Printf(\n作业%s正在运营,估计其运营情况:\n”q-name);printf(〃开始运营时刻%d\nq—starttime);printf(完毕时刻:%d\n,zq-finishtime);printf(周转时间%f\n”q—cycletime);printf(带权周转时间:q—c1time);printf(相应比%f\n”q-super);getch();)else//显示先来先服务最短作业优先算法调度后作业的运营情况(printf(\n作业%s正在运营,估计其运营情况\nq—name);printf(“开始运营时亥q-starttime);printf(完毕时刻:%d\n”q-finishtime);printf(周转时间:%f\n”q-cycletime);printf(带权周转时间%f\nq-cltime);getch()voidrunningJCB*pintm〃运营作业{ifp==ready//先将要运营的作业从队列中分离出来ready=p-next;p-next=NULL;elseq=ready;whileq-next!=pq=q-next;q-next=p—next;p—starttime=times;〃计算作业运营后的完毕时间,周转时间等等p-state=,R;p-finishtime=p-starttime+p-needtime;p-cycletime=fIoatp-finishtime—p—reachtime;p-c1time=floatp-cycietime/p-needtime;Tl+=p—cycletime;T2+=p-c1time;disppm;〃调用disp函数,显示作业运营情况times+=p-needtime;p-state=F;printf\n%shasbeenfinished!\npressanykeytocontinue...\nMp-name;freep;//释放运营后的作业getch;voidsuper//计算队列中作业的高响应比JCB*padv;padv=ready do{ifpadv-state==,W*padv-reachtime=timespadv-supor=f1oattimes-padv-reachtime+padv-ncedtime/padv-needtimepadv=padv-next;whilepadv!=NULL;voidfinal〃最后打印作业的平均周转时间,平均带权周转时间f1oatst;t=T1/n;s=T2/n;getch;printf作业已经所有完毕!〃;Pn%d个作业的平均周转时间是%f”nt;printf(\n%d个作业的平均带权周转时间是%九\n\n\nns);voidhrnintm//高响应比算法JCB*min;intiiden;systeni〃c1s;inital;fori=0;in;i++p=min=ready;iden=l;super;do{ifp-state==/W*p-reachtime=timesifidenmin=p;iden=0;e1seifp—supermin-supermin=p;p=p-next;}whilep!=NULL;ifideni—;times++;//printf\ntime=%d:\tnoJCBsubmib...wait...time;iftimes1000{printf\nruntimoistoolong...crror...;gotch;elserunningminm;〃调用running函数}//forfinal;〃调用running函数}voidsjfintm//最短作业优先算法{JCB*min;intiiden;systemcis;initai;fori=0;in;i++p=min=ready;idon=l;do{ifp—state==,W*p—reachtime=timesifiden{。