磁盘调度算法实验报告 (2)

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

磁盘调度算法

学生姓名:

学生学号:

专业班级:

指导老师:

2013年6月20日

1、实验目的:

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

2、问题描述:

设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

3、需求分析

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

通过已知开始磁道数、访问磁道总数、磁道号访问序列、访问方向及访问方式得到访问序列及移动距离和平均移动距离!

(1)输入的形式;

int TrackOrder[MaxNumber];//被访问的磁道号序列 int direction;//寻道方向

int Num;//访问的磁道号数目

int start;//

(2)输出的形式;

int MoveDistance[MaxNumber]={0};//移动距离

double AverageDistance=0;//平均寻道长度

移动的序列!

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

模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

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

开始磁道号:100

磁道号方向:内(0)和外(1)

磁道号数目:9

页面序列:55 58 39 18 90 160 150 38 184

4、概要设计

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

int TrackOrder[MaxNumber];//被访问的磁道号序列int MoveDistance[MaxNumber]={0};//移动距离

double AverageDistance=0;//平均寻道长度

int direction;//寻道方向

int Num;//访问的磁道号数目

int start;//开始磁道号

5、详细设计

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

6、调试分析

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

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

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

FCFS:时间复杂度为O(1)空间复杂度为:O(1)

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

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

7、用户使用说明

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

(1)输入开始磁道号

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

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

(4)选择算法

(5)选择方向

(6)得出结果

8、测试结果

9、存在问题

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

10、心得体会

首先要明确磁盘调度的原理,画出算法流程图!这样在解决问题时更容易!

11、附录

程序源代码:

#include

#define MaxNumber 100

void FCFS(int TrackOrder[MaxNumber],int MoveDistance[MaxNumber], double AverageDistance,int start,int Num)

{

int i,temp=start,sum=0;

cout<<"移动顺序移动距离"<

for(i=0;i

{

if(TrackOrder[i]>temp)

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

else

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

sum+=MoveDistance[i];

temp=TrackOrder[i];

cout<

}

cout<

AverageDistance=sum*1.0/Num;

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

}

void SSTF(int TrackOrder[MaxNumber],int MoveDistance[MaxNumber], double AverageDistance,int start,int Num)

{

int temp=start, sum=0,s,count=0,min;

int kind[MaxNumber]={0};

cout<<"移动顺序移动距离"<

while(count

{

for(int i=0;i

{

if(kind[i]==0)

{

if(TrackOrder[i]>temp)

min=TrackOrder[i]-temp;

else

min=temp-TrackOrder[i];

s=i;

break;

相关文档
最新文档