磁盤調(diào)度算法先來先服務最短尋道優(yōu)先
磁盤調(diào)度算法(先來先服務 / 最短尋道優(yōu)先) #include #include #include void FCFS(int a,int m,int now);/ 先來先服務 void SSTF(int a,int n,int now);/ 最短尋道時間優(yōu)先 void choose(int a,int n);/ 選擇排序 void FCFS(int a,int m,int now) / 先來先服務算法實現(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); double d=sum*1.0/m; printf(n 平均尋道長度: %.2fnn,d); void SSTF(int a,int n,int now) / 最短尋道時間優(yōu)先算法實現(xiàn) int i,k,sum=0,b; choose(a,n); / 對磁道序列進行排序 printf(nn); printf( 磁盤調(diào)度序列: nn); printf(” (從 d磁道開始)n,now); printf( - n); printf( 下一個訪問 | 移動距離 n); if(a0=now) / 當前磁道號小于請求磁道號的最小值 for(i=0;i%dt %dn,now,b); else if(an-1=now) / 當前磁道號大于請求磁道號的最大值 for(i=0;i%dt %dn,now,b); else if(a0now) / 當前磁道號介于請求磁道序列的 最大與最小之間 for(i=0;i=now) k=i;break;/ 選擇第一個比當前磁道號大的磁道號 int right=k; int left=k-1; while(left=0&rightn) if(now-aleft%dt %dn,now,b); left-; else / 當前磁道號與小于它的近 b=aright-now; sum+=b; now=aright; printf(-%dt %dn,now,b); right+; void choose(int a,int n) / 選擇排序實現(xiàn) if(left0) / 磁道序列左邊最小的磁道號已經(jīng)訪問, 轉向右邊 沒有訪問的 for(int j=right;j%dt %dn,now,b); else if(right=n)/ 磁道序列右邊最大的磁道號已經(jīng)訪問,轉 向左邊沒有訪問的 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); printf( 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)度的基本信息 printf( 1. 磁道請求總數(shù) 2. 磁道請求序列 3. - n); 當前磁道號 n); printf(1. 需要訪問的磁道總數(shù): ); scanf( %d,&m); printf(n2. 需要訪問的磁道序列: n); for(i=0;i=0); n);