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;

最低0.47元/天 解锁文章
824

被折叠的 条评论
为什么被折叠?



