磁盘调度实验报告

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

操作系统实验报告课程名称:计算机操作系统

实验项目名称:磁盘调度实验时间:

班级:姓名:学号:

实验目的:

对操作系统的磁盘调度基础理论和重要算法的理解,加强动手能力。

实验环境:

PC机 win7 Visual C++

实验内容:

编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度,要求设计主界面以灵

活选择某算法,且以下算法都要实现:

1、先来先服务算法(FCFS)

2、最短寻道时间优先算法(SSTF)

3、扫描算法(SCAN)

4、循环扫描算法(CSCAN)

实验过程:

1.依次输入8个磁道数:123 45 31 67 20 19 38,并以0 结束

2.选择调度算法:

(1)先来先服务算法(FCFS)

(2)最短寻道时间优先算法(SSTF)

成绩:

指导教师(签名):

(3)扫描算法(SCAN)

(4)循环扫描算法(CSCAN)

实验心得:

通过本次实验,学习了解磁盘调度的工作原理及四种调度方法的工作原理,并且在当中

发现了自己的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

附录:

#include

#include

#include

#include

#define maxsize 1000

/*********************判断输入数据是否有效**************************/

int decide(char str[]) //判断输入数据是否有效

{

int i=0;

while(str[i]!='\0')

{

if(str[i]<'0'||str[i]>'9')

{ return 0;

break;

}

i++;

}

return i;

}

/******************将字符串转换成数字***********************/

int trans(char str[],int a) //将字符串转换成数字

{

int i;

int sum=0;

for(i=0;i

{ sum=sum+(int)((str[i]-'0')*pow(10,a -i-1));

}

return sum;

} /*********************冒泡排序算法**************************/

int *bubble(int cidao[],int m)

{

int i,j;

int temp;

for(i=0;i

for(j=i+1;j

{

if(cidao[i]>cidao[j])

{

temp=cidao[i];

cidao[i]=cidao[j];

cidao[j]=temp;

}

}

cout<<" 排序后的磁盘序列为:";

for( i=0;i

{

cout<

}

cout<

return cidao;

}

/*********************先来先服务调度算法**************************/

void FCFS(int cidao[],int m) //磁道号数组,个数为m

{

int now;//当前磁道号

int sum=0; //总寻道长度

int j,i;

int a;

char str[100];

float ave; //平均寻道长度

cout<<" 磁盘请求序列为:";

for( i=0;i

{

cout<

}

cout<

cout<<" 请输入当前的磁道号:";

B: cin>>str; //对输入数据进行有效性判断

a=decide(str);

if(a==0)

{

cout<<"输入数据的类型错误,请重新输入!"<

goto B;

}

else

now=trans(str,a); //输入当前磁道号sum+=abs(cidao[0]-now);

cout<<" 磁盘扫描序列为:";

for( i=0;i

cout<

}

for(i=0,j=1;j

{

sum+=abs(cidao[j]-cidao[i]);

ave=(float)(sum)/(float)(m);

}

cout<

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

/**********************最短寻道时间优先调度算法********************/ void SSTF(int cidao[],int m)

{

int k=1;

int now,l,r;

int i,j,sum=0;

int a;

char str[100];

float ave;

cidao=bubble(cidao,m); //调用冒泡排序算法排序

cout<<" 请输入当前的磁道号:";

C: cin>>str; //对输入数据进行有效性判断

a=decide(str);

if(a==0)

{

cout<<" 输入数据的类型错误,请重新输入!"<

goto C;

}

else

now=trans(str,a); //输入当前磁道号

if(cidao[m-1]<=now) //若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务

{ cout<<" 磁盘扫描序列为:";

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

cout<

sum=now-cidao[0];

}

if(cidao[0]>=now) //若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务

{

cout<<" 磁盘扫描序列为:";

for(i=0;i

cout<

sum=cidao[m-1]-now;

相关文档
最新文档