操作系统实验报告四磁盘调度算法.docx

上传人:b****7 文档编号:8792006 上传时间:2023-02-01 格式:DOCX 页数:11 大小:107.07KB
下载 相关 举报
操作系统实验报告四磁盘调度算法.docx_第1页
第1页 / 共11页
操作系统实验报告四磁盘调度算法.docx_第2页
第2页 / 共11页
操作系统实验报告四磁盘调度算法.docx_第3页
第3页 / 共11页
操作系统实验报告四磁盘调度算法.docx_第4页
第4页 / 共11页
操作系统实验报告四磁盘调度算法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

操作系统实验报告四磁盘调度算法.docx

《操作系统实验报告四磁盘调度算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告四磁盘调度算法.docx(11页珍藏版)》请在冰豆网上搜索。

操作系统实验报告四磁盘调度算法.docx

操作系统实验报告四磁盘调度算法

操作系统实验报告四

[实验题目]

磁盘调度算法SSTF、SCAN、C-SCAN

[实验目的]

通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易理解,使磁盘调度的特点更简单明了,能使使用者加深对最短寻道时间优先算法、扫描算法以及循环扫描算法的理解。

[实验内容]

编程实现如下内容:

 1.最短寻道时间优先算法(SSTF); 

2.扫描算法(SCAN)(又叫电梯调度算法);

3.循环扫描算法(CSCAN)

代码如下:

#include

#include

#include

usingnamespacestd;

constintMaxNumber=100;

intTrackOrder[MaxNumber];

intMoveDistance[MaxNumber];//----移动距离;

intFindOrder[MaxNumber];//-----寻好序列。

doubleAverageDistance;//-----平均寻道长度

booldirection;//-----方向true时为向外,false为向里

intBeginNum;//----开始磁道号。

intM;//----磁道数。

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

intSortOrder[MaxNumber];//----排序后的序列

boolFinished[MaxNumber];

voidInith()

{

cout<<"请输入磁道数:

";

cin>>M;

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

";

cin>>N;

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

";

for(inti=0;i

cin>>TrackOrder[i];

for(intj=0;j

MoveDistance[j]=0;

cout<<"请输入开始磁道号:

";

cin>>BeginNum;

for(intk=0;k

Finished[k]=false;

for(intl=0;l

SortOrder[l]=TrackOrder[l];

}

//=====================排序函数,将各进程申请的磁道按从小到大排列=================

voidSort()

{//------冒泡排序

inttemp;

for(inti=N-1;i>=0;i--)

for(intj=0;j

{

if(SortOrder[j]>SortOrder[j+1])

{

temp=SortOrder[j];

SortOrder[j]=SortOrder[j+1];

SortOrder[j+1]=temp;

}

}

}

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

voidSSTF()

{

inttemp,n;

intA=M;

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

for(inti=0;i

{

for(intj=0;j

{

if(abs(TrackOrder[j]-temp)

{

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

n=j;

}

elsecontinue;

}

Finished[n]=true;//-------将已经寻找到的Finished赋值为true

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

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

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

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

}

}

//=====================SCAN,扫描算法==========================

voidSCAN()

{

intm,n,temp;

temp=BeginNum;

Sort();//------排序

cout<<"请选择开始方向:

1--向外;0---向里";//------选择扫描方向

cin>>m;

if(m==1)

direction=true;

elseif(m==0)

direction=false;

else

cout<<"输入错误";

for(inti=0;i

{

if(SortOrder[i]

continue;

else

{

n=i;

break;

}

}

if(direction==true)//------选择向外

{

for(inti=n;i

{

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

temp=SortOrder[i];

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

}

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

{

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

temp=SortOrder[j];

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

}

}

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

{

for(inti=n-1;i>=0;i--)

{

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

temp=SortOrder[i];

FindOrder[N-i-4]=SortOrder[i];

}

for(intj=n;j

{

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

temp=TrackOrder[j];

FindOrder[j]=SortOrder[j];

}

}

}

//=================CSCAN,循环扫描算法=======================

voidCSCAN()

{

intm,n,temp;

temp=BeginNum;

Sort();

cout<<"请选择开始方向:

1--向外;0---向里";

cin>>m;

if(m==1)

direction=true;

elseif(m==0)

direction=false;

else

cout<<"输入错误";

for(inti=0;i

{

if(SortOrder[i]

continue;

else

{

n=i;

break;

}

}

if(direction==true)

{

for(inti=n;i

{

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

temp=SortOrder[i];

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

}

for(intj=0;j

{

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

temp=SortOrder[j];

FindOrder[N-n+j]=SortOrder[j];

}

}

else

{

for(inti=n-1;i>=0;i--)

{

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

temp=SortOrder[i];

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

}

for(intj=N-1;j>=n;j--)

{

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

temp=SortOrder[j];

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

}

}

}

//========计算平均寻道时间==============

voidCount()

{

intTotal=0;

for(inti=0;i

{

Total+=MoveDistance[i];

}

AverageDistance=((double)Total)/((double)N);

}

voidShow()

{

cout<<"================从"<

cout<

for(inti=0;i

{

cout<

}

cout<

"<

cout<

}

intmain()

{

inty=1;

ints;

Inith();

while(y)

{

cout<<"请选择寻道方式:

1--SSTF;2--SCAN;3--CSCSN;";

cin>>s;

switch(s)

{

case1:

SSTF();Count();Show();break;

case2:

SCAN();Count();Show();break;

case3:

CSCAN();Count();Show();break;

}

cout<<"是否继续选择寻道算法?

1--是;2--否";

intp;

cin>>p;

y=p;

}

return0;

}

[实验结果]

[心得体会]

通过模拟常见的几种磁盘寻道算法,通过计算平均寻道的长度,我们可以很直观的了解到不同寻道算法的效率,以加深对最短寻道时间以及电梯等磁盘调度算法的理解。

让我们更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解。

而且通过实验操作让我加深了对理论知识掌握。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1