《磁盤調(diào)度算法(先來先服務(wù)最短尋道優(yōu)先)》由會員分享,可在線閱讀,更多相關(guān)《磁盤調(diào)度算法(先來先服務(wù)最短尋道優(yōu)先)(3頁珍藏版)》請在裝配圖網(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);//最 短尋道時間優(yōu)先
void choose(int a[],int n);//選擇排序
void FCFS(int a[],int m,int now){ //先來先服務(wù)算法實現(xiàn)
int i,b,sum=0;
printf("\n磁盤調(diào)度序列:\n\n");
printf("
2、(從%d磁道開始)\n",now);
printf(" \n");
printf("下一個訪問|移動距離\n");
for(i=0;i%d\t %d\n",a[i],b);
}
double d=sum*1.0/m;
printf("\n 平均尋道長度:%.2f\n\n",d);
}
void SSTF(int a[],int n,int now) 〃最短尋道時間優(yōu)先算法實現(xiàn)
{
int i,k,sum=0,b;
choose(a,n);
3、 〃對磁道序列進行排序
printf("\n\n");
printf("磁盤調(diào)度序列:\n\n");
printf("(從%d 磁道開始)\n",now);
printf(" \n");
printf("下一個訪問|移動距離\n");
if(a[0]>=now){ 〃當(dāng)前磁道號小于請求磁道號的最小值
for(i=0;i%d\t %d\n",now,b);
}
}
else if(a[n-1]<=now){ 〃當(dāng)前磁道號大于請求磁道號的最大值 for(i=0;i
4、 b=now-a[n-i-1];
sum+=b; now=a[n-i-1]; printf("-->%d\t %d\n",now,b);
}
else if(a[0]now){ 〃當(dāng)前磁道號介于請求磁道序列的最大與最小之間 for(i=0;i=now){
k=i;break;}//選擇第一個比當(dāng)前磁道號大的磁道號
int right=k;
int left=k-1;
while(left>=0&&right
5、a[left];
sum+=b; now=a[left];
printf("-->%d\t %d\n",now,b);
left--;
}
else{ //當(dāng)前磁道號與小于它的近
b=a[right]-now;
sum+=b; now=a[right];
printf("-->%d\t %d\n",now,b);
right++;
}
}
if(left<0){ 〃磁道序列左邊最小的磁道號已經(jīng)訪問,轉(zhuǎn)向右邊沒有訪問的
for(int j=right;j%d\t %
6、d\n",now,b);
}
}
else if(right==n){//磁道序列右邊最大的磁道號已經(jīng)訪問,轉(zhuǎn)向左邊沒有訪問的
for(int j=left;j>=0;j--){
b=now-a[j];
sum+=b; now=a[j];
printf("-->%d\t %d\n",now,b);
}
}
}
double d=sum*1.0/n;
printf("平均尋道長度:%.2f\n\n",d);
}
void choose(int a[],int n) 〃選擇排序?qū)崿F(xiàn)
{
int i,k,index,temp;
for(k=0;k
7、index=k;
for(i=k+1;i
8、f(" \n");
printf("1 .需要訪問的磁道總數(shù):");
scanf(" %d",&m);
printf(-\n2.需要訪問的磁道序列:\n");
for(i=0;i=0);