操作系统SSTF磁盘调度算法

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

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

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

资源描述

//SSTF磁盘调度算法#includestdio.h#includestdlib.h#includeiostream.hint*bubble(intcidao[],intm){inti,j;inttemp;for(i=0;im;i++)//使用冒泡法按从小到大顺序排列for(j=i+1;jm;j++){if(cidao[i]cidao[j]){temp=cidao[i];cidao[i]=cidao[j];cidao[j]=temp;}}cout排序后的磁盘序列为:;for(i=0;im;i++)//输出排序结果{coutcidao[i];}coutendl;returncidao;}voidSSTF(intcidao[],intm){intk=1;intnow,l,r;inti,j,sum=0;floatave;cidao=bubble(cidao,m);//调用冒泡排序算法排序while(1){cout请输入当前的磁道号:;cinnow;if(cidao[m-1]=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务{cout磁盘扫描序列为:;for(i=m-1;i=0;i--)coutcidao[i];sum=now-cidao[0];}if(cidao[0]=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{cout磁盘扫描序列为:;for(i=0;im;i++)coutcidao[i];sum=cidao[m-1]-now;}if(nowcidao[0]&&nowcidao[m-1])//若当前磁道号大于请求序列中最小者且小于最大者{cout磁盘扫描序列为:;while(cidao[k]now)//确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。{k++;l=k-1;r=k;while((l=0)&&(rm))//当前磁道在请求序列范围内{if((now-cidao[l])(cidao[r]-now))//选择与当前磁道最近的请求给予服务{coutcidao[l];sum+=now-cidao[l];now=cidao[l];l=l-1;}elseif((now-cidao[l])==(cidao[r]-now)){coutcidao[l];sum+=now-cidao[l];now=cidao[l];l=l-1;}else{coutcidao[r];sum+=cidao[r]-now;now=cidao[r];r=r+1;}}if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道{for(j=r;jm;j++){coutcidao[j];}sum+=cidao[m-1]-cidao[0];}else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道{for(j=l;j=0;j--){coutcidao[j];}sum+=cidao[m-1]-cidao[0];}}ave=(float)(sum)/(float)(m);coutendl;cout平均寻道长度:aveendl;}}}intmain(){inta,b,N;intcidao[10];cout请输入进程数量:;cinN;cout请输入N个磁道号:;for(a=0;aN;a++){cinb;cidao[a]=b;}SSTF(cidao,N);}

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

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

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

×
保存成功