《磁盤調(diào)度算法(先來先服務(wù)最短尋道優(yōu)先)》由會員分享,可在線閱讀,更多相關(guān)《磁盤調(diào)度算法(先來先服務(wù)最短尋道優(yōu)先)(3頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、磁盤調(diào)度算法(先來先服務(wù)/最短尋道優(yōu)先)#include#include#includevoid FCFS(int a,int m,int now);/先 來先服務(wù)void SSTF(int a,int n,int now);/最 短尋道時間優(yōu)先void choose(int a,int n);/選擇排序void FCFS(int a,int m,int now) /先來先服務(wù)算法實(shí)現(xiàn)int i,b,sum=0;printf(n磁盤調(diào)度序列:nn);printf(從d磁道開始)n,now);printf(n);printf(下一個訪問|移動距離n);for(i=0;i%dt %dn,ai,b)
2、;double d=sum*1.0/m;printf(n 平均尋道長度:.2fnn,d);void SSTF(int a,int n,int now)最短尋道時間優(yōu)先算法實(shí)現(xiàn)int i,k,sum=0,b;choose(a,n);對磁道序列進(jìn)行排序printf(nn);printf(磁盤調(diào)度序列:nn);printf(從d 磁道開始)n,now);printf(n);printf(下一個訪問|移動距離n);if(a0=now)當(dāng)前磁道號小于請求磁道號的最小值for(i=0;i%dt %dn,now,b);else if(an-1=now) 當(dāng)前磁道號大于請求磁道號的最大值 for(i=0;i%
3、dt %dn,now,b);else if(a0now) 當(dāng)前磁道號介于請求磁道序列的最大與最小之間 for(i=0;i=now)k=i;break;/選擇第一個比當(dāng)前磁道號大的磁道號int right=k;int left=k-1;while(left=0&rightn)if(now-aleft%dt %dn,now,b);left-;else/當(dāng)前磁道號與小于它的近b=aright-now;sum+=b; now=aright;printf(-%dt %dn,now,b);right+;if(left0) 磁道序列左邊最小的磁道號已經(jīng)訪問,轉(zhuǎn)向右邊沒有訪問的for(int j=right;
4、j%dt %dn,now,b);else if(right=n)/磁道序列右邊最大的磁道號已經(jīng)訪問,轉(zhuǎn)向左邊沒有訪問的for(int j=left;j=0;j-)b=now-aj;sum+=b; now=aj;printf(-%dt %dn,now,b);double d=sum*1.0/n;printf(平均尋道長度:.2fnn,d);void choose(int a,int n)選擇排序?qū)崿F(xiàn)int i,k,index,temp;for(k=0;kn;k+)index=k;for(i=k+1;in;i+)if(aiaindex)index=i;temp=aindex;aindex=ak;ak=temp;printf(-排序之后的磁道序列:n);for(i=0;in;i+)printf(%d ,ai);void main()主函數(shù)int i,m,h,now,b,sum=0,a20;printf(輸入磁盤調(diào)度的基本信息n);printf(- 1.磁道請求總數(shù)2.磁道請求序列3.當(dāng)前磁道號n);printf( n);printf(1 .需要訪問的磁道總數(shù):);scanf( %d,&m);printf(-n2.需要訪問的磁道序列:n);for(i=0;i=0);