天津理工大学 操作系统实验3:磁盘调度算法的实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告学院(系)名称:计算机与通信工程学院

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

#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; //----磁道数。

int N; //-----提出磁盘I/O申请的进程数

int SortOrder[MaxNumber]; //----排序后的序列

bool Finished[MaxNumber];

void Inith()

{

cout<<"请输入磁道数:";

cin>>M;

cout<<"请输入提出磁盘I/O申请的进程数:";

cin>>N;

cout<<"请依次输入要访问的磁道号:";

for(int i=0;i

cin>>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; //--------将BeginNum赋给temp作为寻道时的当前所在磁道号

for(int i=0;i

{

MoveDistance[i]=abs(TrackOrder[i]-temp); //-------计算移动磁道数

temp=TrackOrder[i]; //-------寻到后,将此道作为当前所在磁道号,赋给temp

FindOrder[i]=TrackOrder[i]; //-----寻好的赋给寻好序列}

}

//========SSTF,最短寻道法=============================

void SSTF()

{

int temp,n;

int A=M;

temp=BeginNum; //--------将BeginNum赋给temp作为寻道时的当前所在磁道号

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; //-------将已经寻找到的Finished赋值为true

MoveDistance[i]=A; //-------寻道长度

temp=TrackOrder[n]; //-------当前寻道号。

A=M; //-----重置A值

FindOrder[i]=TrackOrder[n]; //----寻好的赋给寻好序列

}

}

//=====================SCAN,扫描算法========================== 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);

temp=SortOrder[j];

FindOrder[N-1-j]=SortOrder[j];

}

}

else //-------选择向里

相关文档
最新文档