磁盤調度

#include
#include <math.h>


void fcfs(int f[],int );
void sstf(int m[],int );
void scan(int d[],int);
void cscan(int e[],int);
void sort(int a[],int);


int main()
{
     printf("模擬磁盤移臂調度程序\n");
     printf("***********************************************\n");
     printf("***********************************************\n");
     int now=53;
     printf("start: %d\n",now);






     int a[]={98, 183, 37, 122, 14, 124, 65, 67};
     fcfs(a,now);
     int aa[]={98, 183, 37, 122, 14, 124, 65, 67};
     sstf(aa,now);
    //  int aaa[]={98, 183, 37, 122, 14, 124, 65, 67};
    //  scan(aaa,now);
     int aaaa[]={98, 183, 37, 122, 14, 124, 65, 67};
     cscan(aaaa,now);


     return 0;
}


void fcfs(int f[],int fnow){//先來先服務
     int s=0,i;
     printf("先來先服務尋道順序爲:");
     for(i=0;i<8;i++)
          {
               s=s+fabs(f[i] - fnow);
               printf("%d ",f[i]);
               fnow = f[i];
          }
     printf("\nFCFS和爲:%d\n",s);
}


void sstf(int m[],int mnow){//最短尋道時間優先
     int n,k,tmp,x,sum=0;
     printf("最短尋道時間優先服務順序:");
     for(n=0;n<8;n++){
          tmp = fabs(m[0]-mnow);
          x = 0;
          for(k=1;k<8-n;k++){
               if(fabs(m[k]-mnow)<tmp){
                    x = k;
                    tmp = fabs(m[k]-mnow);
               }
          }
          printf("%d ",m[x]);
               sum =sum +tmp;
               mnow = m[x];
               for(k=0;k<8-x-n;k++){
                    m[x+k]=m[x+k+1];
               }
     }
     printf("\nSSTF道數和爲:%d\n",sum);
}


// void scan(int d[],int dnow){//掃描算法
//      int x,y,sum=0;
//      printf("掃描服務順序:");
//      sort(d,8);
//      for(x = 0; x < 8; x++){
//           if(d[x] > dnow){
//                y = x;
//                break;
//           }
//      }
//      for(x = y; x < 8; x++){
//           printf("%d ",d[x]);
//           sum = sum + fabs(dnow-d[x]);
//      }
//      for(x = y-1;x>=0;x--){
//           printf("%d ",d[x]);
//           sum = sum + fabs(dnow-d[x]);
//      }
//      printf("\nSCAN道數和爲:%d\n",sum);
// }


void cscan(int e[],int enow){//循環掃描
     int x,y,sum =0;
     sort(e,8);
     printf("循環掃描順序爲:");
     for(x = 0; x < 8; x++){
          if(e[x] <= enow){
               y = x;
               break;
          }
     }
     for(x = y; x < 8; x++ ){
          printf("%d ",e[x]);
          sum = sum + fabs(enow-e[x]);
          enow = e[x];
     }
     for(x = 0;x < y; x++){
          printf("%d ",e[x]);
          sum = sum + fabs(enow-e[x]);
          enow = e[x];
     }
     printf("\n電梯算法道數和爲:%d\n",sum);


}


void sort(int a[],int n){
    int i,j,tmp;
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(a[j]>a[j+1]){
                tmp=a[j+1];
                a[j+1]=a[j];
                a[j]=tmp;                //做數據交換位置處理
         }
     }
   }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章