用C++模拟磁盘调度算法

1、首先假设磁盘磁道数为1500,磁头初始位置可任意设置。 2、用随机数生成函数产生“磁道号”序列(即磁盘请求的位置),共产生400个。其中50%位 于0~499,25%分布在500~999,25%分布在1000~1499。具体的产生方法可参考“题目一 页面 置换算法的模拟实现及命中率对比”。 3、计算及比较每种磁盘调度算法下的磁头移动道数。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

// 磁盘调度算法枚举
enum DiskSchedulingAlgorithm {
    FCFS,
    SSTF,
    SCAN,
    CSCAN
};

// 定义磁盘请求结构体
struct DiskRequest {
    int trackNumber; // 磁道号
    bool visited;    // 是否被访问过

    DiskRequest(int track) : trackNumber(track), visited(false) {}
};

// 计算磁道间的距离
int distance(int track1, int track2) {
    return abs(track1 - track2);
}

// 先来先服务 (FCFS) 算法
int FCFSf(const vector<DiskRequest>& requests, int initialPosition) {
    int totalMovement = 0;
    int currentTrack = initialPosition;
    if(requests[0].trackNumber!=currentTrack){
        cout << currentTrack << "->";
    }

    for (const auto& request : requests) {
        cout << request.trackNumber << "->";
        totalMovement += distance(currentTrack, request.trackNumber);
        currentTrack = request.trackNumber;
    }
    cout << "end" << endl;
    cout << endl;
    cout << endl;
    cout << endl;
    return totalMovement;
}

// 最短寻道时间优先 (SSTF) 算法
int SSTFf(vector<DiskRequest> requests, int initialPosition) {
    int totalMovement = 0;
    int currentTrack = initialPosition;
    int sum=0;
    vector<DiskRequest> sortedRequests;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoloMari

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值