操作系统实验六磁盘调度算法正确C代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统》实验报告
【实验题目】:磁盘调度算法
【实验目的】
通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先
服务FCFS最短寻道时间优先SSTF SCAf和循环SCAN算法的实现方法。【实验内容】
问题描述:
设计程序模拟先来先服务FCFS最短寻道时间优先SSTF SCAN 和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。
程序要求如下:
1)利用先来先服务FCFS最短寻道时间优先SSTF SCAr和循环SCAN 算法模拟磁道访问过程。
2)模拟四种算法的磁道访问过程给出每个磁道访问的磁头移动距离。
3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAr和循环SCAN算法有效),算法选择1-FCFS 2-SSTF, 3-SCAN,4- 循环SCAN。
4)输出:每种算法的平均寻道长度。
实验要求:
1) 上机前认真复习磁盘调度算法,熟悉FCFS SSTF SCAN和循
环SCAN算法的过程;
2) 上机时独立编程、调试程序;
3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图) 。
实验代码:
#include
#include
using namespace std;
const int MaxNumber=100;
int TrackOrder[MaxNumber];
int MoveDistance[MaxNumber];// 移动距离
int FindOrder[MaxNumber];// 寻好序列
double AverageDistance;// 平均寻道长度
bool direction;// 方向true 时为向外,false 为向里
int BeginNum;// 开始磁道号
int M=500;// 磁道数
int N;// 提出磁盘I/O 申请的进程数
int SortOrder[MaxNumber];// 排序后的序列
bool Finished[MaxNumber];
void Inith()
{
cout<<" 请输入提出磁盘I/O 申请的进程数: ";
cin>>N;
cout<<" 请依次输入要访问的磁道号:";
for(int i=0;i
for(int j=0;j MoveDistance[j]=0; cout<<" 请输入开始磁道号:"; cin>>BeginNum; for(int k=0;k Finished[k]=false; for(int l=0;l SortOrder[l]=TrackOrder[l]; } //===================== 排序函数,将各进程申请的磁道按从小到大排列 void Sort() { int temp; for(int i=N-1;i>=0;i--) for(int j=0;j { if(SortOrder[j]>SortOrder[j+1]) { temp=SortOrder[j]; SortOrder[j]=SortOrder[j+1]; SortOrder[j+1]=temp; } } } //============FCFS, 先来先服务================================= void FCFS() { int temp; temp=BeginNum; for(int i=0;i { MoveDistance[i]=abs(TrackOrder[i]-temp); temp=TrackOrder[i]; FindOrder[i]=TrackOrder[i]; } } //========SSTF, 最短寻道法============================= void SSTF() { int temp,n; int A=M; temp=BeginNum;