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