05操作系统实验_磁盘管理实验要点

  • 格式:doc
  • 大小:737.50 KB
  • 文档页数:17

下载文档原格式

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

广州大学学生实验报告

(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)

一、实验目的

要求模拟先来先服务法(First-Come, First-Served,FCFS),最短寻道时间优先法(Shortest Seek Time First, SSTF),电梯法(SCAN),循环扫描算法(CSCAN)四种磁盘调度算法,输入为一组请求访问磁道序列,输出为每种调度算法的磁头移动轨迹和移动的总磁道数。

二、实验内容

编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:

1、先来先服务算法(FCFS)

2、最短寻道时间优先算法(SSTF)

3、扫描算法(SCAN)

4、循环扫描算法(CSCAN)

三、实验设备

带Linux操作系统的电脑一台。

四、实验过程原始数据记录

实验代码:

#include

#include

#include

#include

using namespace std;

const int MaxNumber=100;

int TrackOrder[MaxNumber];//磁盘访问序列

int MoveDistance[MaxNumber];//磁头每次移动的距离

double AverageDistance;//平均寻道长度

bool direction;//SCAN和CSCAN算法的磁头移动方向

int M;//开始磁道号

int N;//磁道个数

void inputData()

{

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

cin>>N;

cout<<"\n请输入磁盘访问顺序(此部分由文件读入)。"<

fstream fin("F://磁盘调度文件.txt");

for(int i=0;i

fin>>TrackOrder[i];

cout<<"\n请输入开始磁盘号M: ";

cin>>M;

}

void showData()

{

cout<<"\n===============================显示配置信息

=============================\n";

cout<<"\n输入磁道个数N为:"<

cout<<"\n磁盘访问序列为: ";

for(int i=0;i

cout<

cout<

}

void FCFS()

{

int i,j;

int sum=0;

float avg;

int Fcfs[MaxNumber];

int sumArray[MaxNumber];

for(i=0;i

Fcfs[i]=TrackOrder[i];

//sum=0;

sumArray[0]=abs(M-Fcfs[0]);

//cout<<"FCFS磁盘调度算法:"<

cout<<"\n从"<

cout<<"被访问的下一个磁道号: ";

for(i=0;i

cout<

cout<

cout<<"对应移动距离(磁道数): "<

for(i=0,j=1;j

{

sumArray[j]=abs(Fcfs[j]-Fcfs[i]);

cout<

}

for(i=0;i

sum=sum+sumArray[i];

avg=(float)sum/N;

cout<<"\n总寻道长度:"<

cout<<"\n平均寻道长度:"<

void SSTF()

{

int i,j;

int k=1;

int s=0;

int temp;

int l,r;

int sum=0;

float avg=0;

int Sstf[MaxNumber];

int sumArray[MaxNumber];

int Mnow;

Mnow=M;

for(i=0;i

Sstf[i]=TrackOrder[i];

//sum=0;

//sumArray[0]=abs(M-Fcfs[0]);

for(i=0;i

{

for(j=i+1;j

{

if(Sstf[i]>Sstf[j])//将磁道号从小到大排序

{

temp=Sstf[i];

Sstf[i]=Sstf[j];

Sstf[j]=temp;

}

}

}

//cout<<"SSTF磁盘调度算法:"<

cout<<"\n从"<

cout<<"被访问的下一个磁道号: ";

if(Sstf[N-1]<=Mnow)//若被访问的下一个最大的磁道号不大于当前的磁道号{

for(i=N-1,s=0;i>=0;i--,s++)

{

cout<

sumArray[s]=Mnow-Sstf[i];

sum+=Mnow-Sstf[i];

Mnow=Sstf[i];

}

}

else

{

if(Sstf[0]>=Mnow)

{

for(i=0,s=0;i

{