操作系统实验六磁盘调度算法正确C代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

#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>TrackOrder[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;

for(int i=0;i

{

for(int j=0;j

{ if(abs(TrackOrder[j]-temp)

{

A=abs(TrackOrder[j]-temp);

n=j;

else continue;

}

Finished[n]=true;

MoveDistance[i]=A;

temp=TrackOrder[n];

A=M;

FindOrder[i]=TrackOrder[n];

}

}

〃=====================SCA N 扫描算法========================== void SCAN() {

int m,n,temp;

temp=BeginNum;

Sort();

cout<<" 请选择开始方向:1-- 向外;0--- 向里: ";

cin>>m;

if(m==1)

direction=true;

else if(m==0)

direction=false;

else

cout<<" 输入错误!";

for(int i=0;i

{

if(SortOrder[i]

continue;

else

{

n=i;

break;

}

}

if(direction==true)

{

for(int i=n;i

{

MoveDistance[i-n]=abs(SortOrder[i]-temp); temp=SortOrder[i];

FindOrder[i-n]=SortOrder[i];

}

for(int j=n-1;j>=0;j--)

{

MoveDistance[N-1-j]=abs(SortOrder[j]-temp);

相关文档
最新文档