磁盘调度

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

题目8 磁盘调度

一、实验目的

1、对磁盘调度的相关知识作进一步的了解,明确磁盘调度的原理。

2、加深理解磁盘调度的主要任务。

3、通过编程,掌握磁盘调度的主要算法。

二、实验内容和要求

1、对于如下给定的一组磁盘访问进行调度:

2、要求分别采用先来先服务、最短寻道优先以及电梯调度方法进行调度。

3、要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。

4、假定当前读写头在90号,向磁道号增加的方向移动。

三、实验报告

1、程序中使用的数据结构及符号说明。

2、给出主要算法的流程图。

3、给出程序清单并附上注释。

4、给出测试数据和运行结果。

程序:

#include

#include

void main()

{

//请求服务到达 A B C D E F G H I J K //访问的磁道号30 50 100 180 20 90 150 70 80 10 160

//要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。

//假定当前读写头在号,向磁道号增加的方向移动。

//初始化

int track[N],track2[N+1];

int i ;

printf("请输入访问磁道序列:\n");

for (i=0;i

{

scanf("%d",&track[i]);

track2[i] = track[i] ;

}

//先来先服务

printf("先来先服务:");

for (i=0;i

{

printf("%d ",track[i]);

}

double s = abs(90-track[0]) ;

for (i=0;i<=N-2;i++)

{

s += abs(track[i]-track[i+1]) ;

}

printf("\n平均移动磁道数:%0.1lf\n\n",s/N);

//最短寻道优先

s = 0 ;

printf("最短寻道优先:");

int temp[N];

track2[N] = 90 ;

int k = N ; //当前磁道

int flag ; //标志

int min; //最小差值

int t ; //最小差值的数组下标

int j;

for (j=0 ; j

{

flag = 0;

for (i=0;i

{

if((i!=k)&&flag==0&& track2[i]!=-1)

min = abs(track2[i]- track2[k]);

t = i;

flag++;

}

if((i!=k)&&(track2[i]!=-1)&&(abs(track2[i]-track2[k]) < min ) )

{

min =abs(track2[i]-track2[k]);

t = i;

}

}

s += min ;

temp[j] = t ;

track2[k] = -1 ;

k = t ;

}

for(i=0;i

printf("%d ",track[temp[i]]);

printf("\n平均移动磁道数:%0.1lf\n\n",s/N);

//电梯调度方法

s = 0 ;

printf("电梯调度:");

for (i=0;i

{

for (j=0;j

{

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

{

t=track[j];track[j]= track[j+1];track[j+1]=t;

}

}

}

for (i=0;i

{

if (track[i]>90)

break;

}

for (j=i;j

printf("%d ",track[j]);

for(j=i-1;j>=0;j--)

printf("%d ",track[j]);

s = (track[N-1]-90)+(track[N-1]-track[0]);

printf("\n平均移动磁道数:%0.1lf",s/N);

printf("\n");

}

运行结果:

相关文档
最新文档