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

上传人:b****1 文档编号:10540932 上传时间:2023-05-26 格式:DOCX 页数:11 大小:16.17KB
下载 相关 举报
操作系统实验六磁盘调度算法正确C 代码.docx_第1页
第1页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第2页
第2页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第3页
第3页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第4页
第4页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第5页
第5页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第6页
第6页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第7页
第7页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第8页
第8页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第9页
第9页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第10页
第10页 / 共11页
操作系统实验六磁盘调度算法正确C 代码.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《操作系统实验六磁盘调度算法正确C 代码.docx》由会员分享,可在线阅读,更多相关《操作系统实验六磁盘调度算法正确C 代码.docx(11页珍藏版)》请在冰点文库上搜索。

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

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

《操作系统》实验报告

【实验题目】:

磁盘调度算法

【实验目的】

通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。

【实验内容】

问题描述:

设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。

假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

程序要求如下:

1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。

2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。

3)输入:

磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

4)输出:

每种算法的平均寻道长度。

实验要求:

1)上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程;

2)上机时独立编程、调试程序;

3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。

实验代码:

#include

#include

#include

usingnamespacestd;

constintMaxNumber=100;

intTrackOrder[MaxNumber];

intMoveDistance[MaxNumber];//移动距离

intFindOrder[MaxNumber];//寻好序列

doubleAverageDistance;//平均寻道长度

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

intBeginNum;//开始磁道号

intM=500;//磁道数

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

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

boolFinished[MaxNumber];

voidInith()

{

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;

}

}

}

//============FCFS,先来先服务=================================

voidFCFS()

{

inttemp;

temp=BeginNum;

for(inti=0;i

{

MoveDistance[i]=abs(TrackOrder[i]-temp);

temp=TrackOrder[i];

FindOrder[i]=TrackOrder[i];

}

}

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

voidSSTF()

{

inttemp,n;

intA=M;

temp=BeginNum;

for(inti=0;i

{

for(intj=0;j

{

if(abs(TrackOrder[j]-temp)

{

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

n=j;

}

elsecontinue;

}

Finished[n]=true;

MoveDistance[i]=A;

temp=TrackOrder[n];

A=M;

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<

for(inti=0;i

{

cout<

}

cout<

"<

cout<

}

intmain()

{

inty=1;

ints;

Inith();

while(y)

{

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

1--FCFS;2--SSTF;3--SCAN;4--CSCSN:

";

cin>>s;

switch(s)

{

case1:

FCFS();Count();Show();break;

case2:

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

case3:

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

case4:

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

}

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

1--是;0--否:

";

intp;

cin>>p;

y=p;

}

exit;

return0;

}

结果截图:

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2