• 大小: 6KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: 磁盘调度  

资源简介

(1) 实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。 (2) 设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。 (3) 选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include 
#include
#define disknum  20
#define INF 0x7fffffff
/*
(1) 实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。
(2) 设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。
(3) 选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。

 这个确实是最简单的,不过刚开始想生成不同的随机数,有点麻烦,就没有做了
*/
using namespace std;

void FCFS(int begin int disk[])
{
    cout<    cout<<“***********************FCFS 算法***************************\n“;
    int len =  0;
    int sum = 0 temp = begin;
    cout<<“磁道访问顺序为:“<    while(len < disknum)
    {
        cout<        sum += abs(temp - disk[len]);
        temp =  disk[len];
        len++;
    }
    cout<    cout<<“移动的磁道总数为: “<}


struct val
{
    int item;
    int min;
    int temp ;
}; // 获取临时最近的下标和值和距离
val getClose(int num int disk[] int len  val v)
{
    int array[len] min = INF item = 0;
    for(int i = 0 ; i < len; i++)
    {
        array[i] = abs(num - disk[i] );
        if(array[i] < min)
        {
            min = array[i];
            item = i;
        }

    }
    v.item = item;
    v.min = min;
    v.temp = disk[item];
    return v;
}
void SSTF(int begin int disk[])
{
    cout<    cout<<“***********************SSTF 算法***************************\n“;
    int len = disknum i  sum = 0 temp = begin;
      int arr[len];
      for( int j = 0; j < len; j++)
        arr[j] = disk[j];
     cout<<“磁道访问顺序为:“<     while(len != 0)
     {
         val v;
         v = getClose(temp arr len  v);
        // cout<         cout<         sum = sum + v.min;
         temp = v.temp;
         for( i = v.item + 1; i < len ;i++)
             arr[ i - 1] = arr[i];
         len--;
     }
    cout<    cout<<“移动的磁道总数为: “<
}

void SCAN(int begin int disk[])
{
    cout<    cout<<“***********************SCAN 算法***************************\n“;
    int arr[disknum] ;
    int len = disknum i  sum = 0 temp = begin;
    for( i = 0; i < len; i++ )
      arr[i] = disk[i];
    sort(arr arr + len less());
    val v = getClose(begin arr len v);
    cout<<“磁道访问顺序为:“<    for( i = v.item; i < len; i++ )  //假定沿着磁道号增加的顺序移动
    {
        cout<        sum += abs(temp - arr[i]);
        temp = arr[i];
    }
    for ( i = v.item - 1; i >= 0; i-- )
    {
        cout<        sum += abs(temp - arr[i]);
        temp = arr[i];
    }
    cout<    cout<<“移动的磁道总数为: “<
}
void CSCAN(int begin int disk[])
{
    cout<

评论

共有 条评论