天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx

上传人:b****6 文档编号:12785267 上传时间:2023-06-08 格式:DOCX 页数:12 大小:22.83KB
下载 相关 举报
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第1页
第1页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第2页
第2页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第3页
第3页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第4页
第4页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第5页
第5页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第6页
第6页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第7页
第7页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第8页
第8页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第9页
第9页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第10页
第10页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第11页
第11页 / 共12页
天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx

《天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx》由会员分享,可在线阅读,更多相关《天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx(12页珍藏版)》请在冰点文库上搜索。

天津理工大学 操作系统实验3磁盘调度算法的实现之欧阳法创编.docx

天津理工大学操作系统实验3磁盘调度算法的实现之欧阳法创编

实验报告

时间:

2021.03.09

创作:

欧阳法

学院(系)名称:

计算机与通信工程学院

姓名

王远志

学号

20135632

专业

计算机科学与技术

班级

2013级3班

实验项目

实验二:

磁盘调度算法的实现

课程名称

操作系统

课程代码

0668036

实验时间

2015年12月11日第5-8节

实验地点

软件实验室7-219

批改意见

成绩

 

教师签字:

实验内容:

1.本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。

2.实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和NStepSCAN算法。

3.设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。

4.选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。

5.按算法的寻道效率进行排序,并对各算法的性能进行分析比较。

 

实验要求:

1.详细描述实验设计思想、程序结构及各模块设计思路;

2.详细描述程序所用数据结构及算法;

3.明确给出测试用例和实验结果;

4.为增加程序可读性,在程序中进行适当注释说明;

5.认真进行实验总结,包括:

设计中遇到的问题、解决方法与收获等;

6.实验报告撰写要求结构清晰、描述准确逻辑性强;

7.实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。

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

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

}

}

}

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

voidFCFS()

{

inttemp;

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

for(inti=0;i

{

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

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

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

}

}

//========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--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--是;2--否";

intp;

cin>>p;

y=p;

}

return0;

}

实验结果:

FCFS方式:

Sstf方式:

SCAN方式:

4.CSCSN

时间:

2021.03.09

创作:

欧阳法

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

当前位置:首页 > 自然科学 > 物理

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

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