⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cipandiaodu.c

📁 模拟磁盘调度算法系统的设计 能够模拟FCFS、最短寻道时间、电梯算法三个磁盘调度算法;
💻 C
字号:
#include"stdio.h"
#include"stdlib.h"
#define maxsize 100

void FCFS(int shuzu[],int m)/*先来先服务函数*/
{    int sum=0,j,i,n;
     printf("please input the current disk number: ");
     scanf("%d",&n);
     for( i=0;i<m;i++)
        {   printf("---->%d  ",shuzu[i]);  }
     sum=abs(n-shuzu[0]);
     for(i=0,j=1;j<m;i++,j++)
        {    sum+=abs(shuzu[j]-shuzu[i]);   }
    printf("\n the sum of move:%d ",sum);/*输出磁头臂移动总数*/
}

void Order(int array[],int m)
{  int i,j,temp;
	for(i=0;i<m-1;i++)
      for(j=i;j<m;j++)
         {   if(array[i]>array[j])
                 {  temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                  }
         }
}/*排序*/

void SSTF(int array[],int m)/*最短寻道时间优先函数*/
{   int temp,k=0, now,l,r,i,j,sum=0;
    Order(array, m);
    printf("please input the current disk number: ");
    scanf("%d",&now);
   if(array[m-1]<=now )
      {  sum+=now-array[m-1];
         for(i=m-1;i>=0;i--)
           {   	printf("---->%d  ",array[i]);
                if(i>0)    sum+=array[i]-array[i-1];
           }
      }           /*如果磁头大于所有数*/
   else
      if(array[0]>=now)
        {   sum+=array[0]-now;
            for(i=0;i<m;i++)
              {   	printf("---->%d  ",array[i]);
                    if(i<m-1)   sum+=array[i+1]-array[i];
              }
         }        /*如果磁头小于所有数*/
      else
         {   while(array[k]<now)
                {    k++;   }      /*判断磁头的位置*/
             i=k-1;
             r=k;
            while((i>=0)&&(r<m))
                {  if((now-array[i])<=(array[r]-now))
                      {  printf("---->%d  ",array[i]);
                         sum+=now-array[i];
                         now=array[i];
                         i--;
                       }
                    else
                      {   printf("---->%d  ",array[r]);
                          sum+=array[r]-now;
                          now=array[r];
                           r++;
                       }
                }
           if(i==-1)
              {   sum+=array[r]-array[0];
                  for(j=r;j<m;j++)
                    {  printf("---->%d  ",array[j]);
                       if(j<m-1)
                       sum+=array[j+1]-array[j];
                     }
  
               }
            else
              {   sum+=array[m-1]-array[i];
                  for(j=i;j>=0;j--)
                     {  printf("---->%d  ",array[j]);
                         if(j>0)  sum+=array[j]-array[j-1];
                      }

               }
    }
 printf("\nthe sum of move: %d  ",sum);/*输出磁头臂移动总数*/
 }


void Elevator(int array[],int m) /*电梯算法*/
{   int temp,k=0,now,l,r,d ,i,j,sum=0;
    Order(array, m);
    printf("please input the current disk number: ");
    scanf("%d",&now);
   if(array[m-1]<=now)
      {  sum=now-array[m-1];
         for(i=m-1;i>=0;i--)
           {   printf("---->%d  ",array[i]);
               if(i>0)   sum+=array[i]-array[i-1];
            }
      }/*如果磁头大于所有数*/
  else
     if(array[0]>=now)
       {   sum=array[0]-now;
           for(i=0;i<m;i++)
             { 	printf("---->%d  ",array[i]);
                if(i<m-1)     sum+=array[i+1]-array[i];
             }
       }/*如果磁头小于所有数*/
     else
       {  while(array[k]<now)
            {  k++;  }/*判断磁头的位置*/
          l=k-1;
          r=k;
          printf("please input the current direction of move(0 is inside,1 is outside): ");
          scanf("%d",&d);/*输入磁头臂移动方向*/
        if(d==0)
           {    sum=now-array[l];
                for(j=l;j>=0;j--)
                   {     printf("---->%d  ",array[j]);
                         if(j>0)     sum+=array[j]-array[j-1];
                    }
                sum+=array[r]-array[0];
                for(j=r;j<m;j++)
                   {     printf("---->%d  ",array[j]);
                         if(j<m-1)     sum+=array[j+1]-array[j];
                   }
            }
        else
           {    sum=array[r]-now;
                for(j=r;j<m;j++)
                  {    printf("---->%d  ",array[j]);
                       if(j<m-1)     sum+=array[j+1]-array[j];
                  }
                sum+=array[m-1]-array[l];
                for(j=l;j>=0;j--)
                  {    printf("---->%d  ",array[j]);
                       if(j>0)     sum+=array[j]-array[j-1];
                  }
            }
  }
  printf("\nthe sum of move: %d ",sum);/*输出磁头臂移动总数*/
 
}

void main()
{   int c,n, cidao[maxsize], i=0, count,shuzu[maxsize];
    printf("please input the work's count:");
    scanf("%d",&count);     /*输入请求队列的个数*/
    printf("\nplease input %d figures",count);
    printf("\nplease input the disk required queue:\n");
    for(;i<count;i++)
      {	scanf("%d",&cidao[i]);  
        shuzu[i]=cidao[i];
      }   /*输入磁盘请求队列*/
    for(i=0;i<count;i++)
      {   printf("%5d",cidao[i]);  }
    while(1)
      {   printf("\n_____________________________________________________________________");
          printf("\nthe system menu:\n");
          printf("1. FCFS    2. SSTF     3. Elevator      4.exit\n");
          printf("please choose:");
          scanf("%d",&c);
          switch(c)
             {    case 1: FCFS(shuzu,count);  break;
                  case 2:  SSTF(cidao,count);  break;
                  case 3:  Elevator(cidao,count);  break;
                  case 4:  exit(0);
                  default:  break;
             }
       }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -