磁盘调度算法实验报告 2Word文件下载.docx

上传人:b****2 文档编号:13518150 上传时间:2022-10-11 格式:DOCX 页数:14 大小:109.71KB
下载 相关 举报
磁盘调度算法实验报告 2Word文件下载.docx_第1页
第1页 / 共14页
磁盘调度算法实验报告 2Word文件下载.docx_第2页
第2页 / 共14页
磁盘调度算法实验报告 2Word文件下载.docx_第3页
第3页 / 共14页
磁盘调度算法实验报告 2Word文件下载.docx_第4页
第4页 / 共14页
磁盘调度算法实验报告 2Word文件下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

磁盘调度算法实验报告 2Word文件下载.docx

《磁盘调度算法实验报告 2Word文件下载.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法实验报告 2Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。

磁盘调度算法实验报告 2Word文件下载.docx

intdirection;

//寻道方向

intNum;

//访问的磁道号数目

intstart;

//

(2)输出的形式;

intMoveDistance[MaxNumber]={0};

//移动距离

doubleAverageDistance=0;

//平均寻道长度

移动的序列!

(3)程序所能达到的功能;

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

(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。

开始磁道号:

100

磁道号方向:

内(0)和外

(1)

磁道号数目:

9

页面序列:

555839189016015038184

4、概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

intTrackOrder[MaxNumber];

intMoveDistance[MaxNumber]={0};

//开始磁道号

5、详细设计

实现程序模块的具体算法。

6、调试分析

(1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析;

在SCAN_CSAN算法中在访问不同的数组时没有注意到上一个磁道号和要访问的磁道号的大小比较导致结果不对,后来在分析结果中找出原因。

(2)算法的性能分析(包括基本操作和其它算法的时间复杂度和空间复杂度的分析)及其改进设想;

FCFS:

时间复杂度为O

(1)空间复杂度为:

O

(1)

SSTF:

时间复杂度为O(n^2)空间复杂度为:

SCAN_CSAN:

7、用户使用说明

程序的使用说明,列出每一步的操作步骤。

(1)输入开始磁道号

(2)输入访问磁道号总数

(3)输入访问磁道号序列序列

(4)选择算法

(5)选择方向

(6)得出结果

8、测试结果

9、存在问题

在求移动距离时,若调用C++的库函数求绝对值会更方便!

10、心得体会

首先要明确磁盘调度的原理,画出算法流程图!

这样在解决问题时更容易!

11、附录

程序源代码:

#include<

iostream.h>

#defineMaxNumber100

voidFCFS(intTrackOrder[MaxNumber],intMoveDistance[MaxNumber],

doubleAverageDistance,intstart,intNum)

{

inti,temp=start,sum=0;

cout<

<

"

移动顺序移动距离"

endl;

for(i=0;

i<

Num;

i++)

{

if(TrackOrder[i]>

temp)

MoveDistance[i]=TrackOrder[i]-temp;

else

MoveDistance[i]=temp-TrackOrder[i];

sum+=MoveDistance[i];

temp=TrackOrder[i];

TrackOrder[i]<

"

MoveDistance[i]<

}

AverageDistance=sum*1.0/Num;

平均寻道长度:

AverageDistance<

}

voidSSTF(intTrackOrder[MaxNumber],intMoveDistance[MaxNumber],

inttemp=start,sum=0,s,count=0,min;

intkind[MaxNumber]={0};

while(count<

Num)

for(inti=0;

if(kind[i]==0)

{

if(TrackOrder[i]>

min=TrackOrder[i]-temp;

min=temp-TrackOrder[i];

s=i;

break;

}

inttemp1;

for(i=0;

i++)//找出里此时磁道距离最近的磁道号

temp1=TrackOrder[i]-temp;

temp1=temp-TrackOrder[i];

if(temp1<

min&

&

kind[i]==0)

{

min=temp1;

MoveDistance[count]=min;

sum+=MoveDistance[s];

temp=TrackOrder[s];

TrackOrder[s]<

MoveDistance[s]<

kind[s]=1;

count++;

voidpaixu(inta[MaxNumber],intn,intTrackOrder[MaxNumber])//从小到大排序

intsym=0;

while(sym==0)

intkind=0;

for(inti=0;

n-1;

ints1=a[i];

ints2=a[i+1];

if(TrackOrder[s1]>

TrackOrder[s2])

{

ints=a[i+1];

a[i+1]=a[i];

a[i]=s;

kind=1;

}

}

if(kind==0)

sym=1;

}

voidSCAN_CSAN(intTrackOrder[MaxNumber],intMoveDistance[MaxNumber],

doubleAverageDistance,intstart,intNum,intdirection,intchioce)

intsum=0;

inta[MaxNumber],b[MaxNumber];

inttemp=start;

inti,num1=0,num2=0;

i++)//分类

temp)

a[num1]=i;

num1++;

b[num2]=i;

num2++;

paixu(a,num1,TrackOrder);

//将数组按从小到达排序

paixu(b,num2,TrackOrder);

ints;

if(direction==0)//访问方向向外

for(i=0;

num1;

i++)//先访问num1并从前往后访问

s=a[i];

MoveDistance[s]=TrackOrder[s]-temp;

temp=TrackOrder[s];

cout<

if(chioce==3)//SCAN算法

for(i=num2-1;

i>

=0;

i--)//再访问num2并且从后往前访问

s=b[i];

MoveDistance[s]=temp-TrackOrder[s];

else//CSAN算法

s=b[0];

cout<

for(i=1;

num2;

i++)//再访问num2并且从前往后访问

else//访问方向向内

for(i=num2-1;

i--)//先访问num2并且从后往前访问

if(c

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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