您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第5章-与设备管理有关的操作系统算法实践作业
第5章与设备管理有关的操作系统算法实践作业参照“强化实践能力培养课程内容”中“磁盘移臂调度算法实践能力培养考核选例”程序编写一个能演示“最短寻找时间优先算法Sstf”的程序。该程序能分析出“最短寻找时间优先算法”在响应任意给定的一组磁盘请求序列时磁头移动的过程,即能统计和报告出“最短寻找时间优先算法”下磁头响应请求的顺序、移臂的总量和掉头的次数。答:实验代码及说明#includestdio.h#includestdlib.hvoidCopyL(intSour[],intDist[],intx);//数组Sour复制到数组Dist,复制到x个数voidSetDI(intDiscL[]);//随机生成磁道数voidPrint(intPri[],intx);//打印输出数组PrivoidDelInq(intSour[],intx,inty);//数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)voidSSTF(intHan,intDiscL[]);//最短寻道时间优先算法(SSTF)voidPaiXu();//寻道长度由低到高排序voidPri();intNAll=0;intBest[5][2];//用作寻道长度由低到高排序时存放的数组intLimit=0;//输入寻找的范围磁道数iintJage;floatAver=0;intmain(){inti;intDiscLine[10];//声明准备要生成的随机磁道号的数组intHand;//磁道数intCon=1;intn;while(Con==1){Jage=0;printf(\n请输入初始的磁道数(0n65536):);scanf(%d,&Hand);printf(\n+输入寻找的范围:);scanf(%d,&Limit);if(Limit65536){printf(超出范围!);}else{printf(*********************************************\n);printf(****************磁盘调度算法******************\n);printf(*********************************************\n);printf(*2.最短寻道时间优先算法(SSTF)*\n);printf(*********************************************\n);scanf(%d,&n);if(n==0)exit(0);printf(\n);switch(n){case2:SetDI(DiscLine);//随机生成磁道数SSTF(Hand,DiscLine);//最短寻道时间优先算法(SSTF)break;}printf(\n\n+是否继续(按0结束,按1继续)?);scanf(%5d,&Con);}}}//数组Sour复制到数组Dist,复制到x个数voidCopyL(intSour[],intDist[],intx){inti;for(i=0;i=x;i++){Dist[i]=Sour[i];}}//打印输出数组PrivoidPrint(intPri[],intx){inti;for(i=0;i=x;i++){printf(%5d,Pri[i]);}}//随机生成磁道数voidSetDI(intDiscL[]){inti;for(i=0;i=9;i++){DiscL[i]=rand()%Limit;//随机生成10个磁道号}printf(+需要寻找的磁道号:);Print(DiscL,9);//输出随机生成的磁道号printf(\n);}//数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)voidDelInq(intSour[],intx,inty){inti;for(i=x;iy;i++){Sour[i]=Sour[i+1];x++;}}//最短寻道时间优先算法(SSTF)voidSSTF(intHan,intDiscL[]){inti,j,k,h,All;intTemp;//Temp是计算移动的磁道距离的临时变量intRLine[10];//将随机生成的磁道数数组Discl[]复制给数组RLine[]intMin;All=0;//统计全部的磁道数变量k=9;//限定10个的磁道数CopyL(DiscL,RLine,9);//复制磁道号到临时数组RLineprintf(\n+按照SSTF算法磁道的访问顺序为:);for(i=0;i=9;i++){Min=64000;for(j=0;j=k;j++)//内循环寻找与当前磁道号最短寻道的时间的磁道号{if(RLine[j]Han)//如果第一个随机生成的磁道号大于当前的磁道号,执行下一句Temp=RLine[j]-Han;//求出临时的移动距离elseTemp=Han-RLine[j];//求出临时的移动距离if(TempMin)//如果每求出一次的移动距离小于Min,执行下一句{Min=Temp;//Temp临时值赋予Minh=j;//把最近当前磁道号的数组下标赋予h}}All=All+Min;//统计一共移动的距离printf(%5d,RLine[h]);Han=RLine[h];DelInq(RLine,h,k);//每个磁道数向前移动一位k--;}Best[Jage][1]=All;//Best[][1]存放移动磁道数Best[Jage][0]=2;//Best[][0]存放算法的序号为:2Jage++;//排序序号加1Aver=((float)All)/10;//求平均寻道次数printf(\n+移动磁道数:%5d,All);printf(\n+平均寻道长度:*%0.2f*,Aver);}voidPaiXu(){inti,j,Temp;for(i=0;i5;i++){for(j=0;j4;j++){if(Best[j][1]Best[j+1][1])//如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句{Temp=Best[j+1][1];//从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序Best[j+1][1]=Best[j][1];Best[j][1]=Temp;Temp=Best[j+1][0];//将每个算法的序号用冒泡法排序Best[j+1][0]=Best[j][0];Best[j][0]=Temp;}}}}
本文标题:第5章-与设备管理有关的操作系统算法实践作业
链接地址:https://www.777doc.com/doc-3646018 .html