磁盘调度算法

//stu001.c 磁盘调度算法,程序模板,由学生完成缺失代码
//输出:SCAN:260,FCFS:810,SSTF:270
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
const int StartPos=90;
int  YuanShiSeq[]={30,50,100,180,20,90,150,70,80,10,160};   //11个元素
int  PaiXuSeq[]  ={10,20,30,50,70,80,90,100,150,160,180};   //11个元素

int SCAN()
{ //扫描算法
  int totaltracks=0;
  int curNum=StartPos;
  //请在begin end语句间补全程序语句实现扫描算法,算出总访问磁道数存入totaltracks变量 
  /*  begin ************************************************************** */
  //使用已经排好序的数组,可以简化计算
    // 找到开始位置的索引
     int direction = 1; 
    int startIndex = 0;
    while (PaiXuSeq[startIndex] < StartPos && startIndex < 11)
    {
        startIndex++;
    }

    // 先扫描右边
    for (int i = startIndex; i < 11; i++)
    {
        totaltracks += abs(curNum - PaiXuSeq[i]);
        curNum = PaiXuSeq[i];
    }

    // 再扫描左边
    for (int i = startIndex - 1; i >= 0; i--)
    {
        totaltracks += abs(curNum - PaiXuSeq[i]);
        curNum = PaiXuSeq[i];
    }
   
  /*   end  ************************************************************** */
  //程序输出总访问磁道数
  return totaltracks;
}
int FCFS()
{ //先来先服务 
  int totaltracks=0;
  int curNum=StartPos;
  //请在begin end语句间补全程序语句实现FCFS算法,算出总访问磁道数存入totaltracks变量 
  /*  begin ************************************************************** */
    for (int i = 0; i < 11; i++)
    {
        totaltracks += abs(curNum - YuanShiSeq[i]);
        curNum = YuanShiSeq[i];
    }
  
  /*   end  ************************************************************** */
  return totaltracks;
} 
int SSTF()
{ //最短寻道优先
  int totaltracks=0;
  int curNum=StartPos;
  int i=0;
  //假设当前curNum磁道大于所有的作业的当前磁道  
  //即curNum>PaiXuSeq[10]
  int little=10,big=11;
  //找出curNum磁道在PaiXuSeq[little]<=curNum<PaiXuSeq[big]的位置
  //curNum磁道与左右相等的情况下,优先磁道大的方向。如果优先磁道小的方向,最短寻道时间会不一样。
  //请在begin end语句间补全程序语句最短寻道优先算法,算出总访问磁道数存入totaltracks变量 
  /*  begin ************************************************************** */
    int visited[11] = {0};

    for (int i = 0; i < 11; ++i)
    {
        int minDistance = INT_MAX;
        int minIndex = -1;

        for (int j = 0; j < 11; ++j)
        {
            if (!visited[j])
            {
                int distance = abs(curNum - YuanShiSeq[j]);  // 使用 YuanShiSeq
                if (distance < minDistance)
                {
                    minDistance = distance;
                    minIndex = j;
                }
            }
        }

        // 标记为已访问
        visited[minIndex] = 1;

        // 更新总磁道数
        totaltracks += minDistance;
        curNum = YuanShiSeq[minIndex];  // 使用 YuanShiSeq
    }
    
  /*   end  ************************************************************** */ 
  return totaltracks;
}


int main()
{ 
  //为方便在线结果测试直接输出总磁道数
    printf("SCAN:%d,FCFS:%d,SSTF:%d",SCAN(),FCFS(),SSTF()); 
  return 0;
}

任怀泽别抄

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值