磁盘寻道算法实验报告.docx

上传人:b****1 文档编号:15022199 上传时间:2023-06-29 格式:DOCX 页数:12 大小:15.82KB
下载 相关 举报
磁盘寻道算法实验报告.docx_第1页
第1页 / 共12页
磁盘寻道算法实验报告.docx_第2页
第2页 / 共12页
磁盘寻道算法实验报告.docx_第3页
第3页 / 共12页
磁盘寻道算法实验报告.docx_第4页
第4页 / 共12页
磁盘寻道算法实验报告.docx_第5页
第5页 / 共12页
磁盘寻道算法实验报告.docx_第6页
第6页 / 共12页
磁盘寻道算法实验报告.docx_第7页
第7页 / 共12页
磁盘寻道算法实验报告.docx_第8页
第8页 / 共12页
磁盘寻道算法实验报告.docx_第9页
第9页 / 共12页
磁盘寻道算法实验报告.docx_第10页
第10页 / 共12页
磁盘寻道算法实验报告.docx_第11页
第11页 / 共12页
磁盘寻道算法实验报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

磁盘寻道算法实验报告.docx

《磁盘寻道算法实验报告.docx》由会员分享,可在线阅读,更多相关《磁盘寻道算法实验报告.docx(12页珍藏版)》请在冰点文库上搜索。

磁盘寻道算法实验报告.docx

磁盘寻道算法实验报告

磁盘寻道算法实验报告

操作系统实验报告四[实验

题目]磁盘调度算法SSTF、SCAN、C-SCAN[实验目的]通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易理解,使磁盘调度的特点更简单明了,能使使用者加深对最短寻道时间优先算法、扫描算法以及循环扫描算法的理解。

[实验内容]编程实现如下内容:

1.

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

扫描算法(SCAN)(又叫电梯调度算法);3.

循环扫描算法(CSCAN)

代码如下:

#define_CRT_SECURE_NO_WARNINGS#include#include#include#include

/_最短寻道时间函数SSTF_/voidSSTF(inta[],intn){

inttemp;

intnow;

intsum=0,i,j,k=0;

//冒泡排序法对磁道号进行排序

printf(“排序后的磁道分布:

\n”);

for(i=0;i

for(j=i+1;j

if(a[i]>a[j]){

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

printf(“%d\t”,a[i]);

if(i%10==9){

printf(“\n”);

}

}

printf(“\n”);

printf(“请输入当前磁道号:

\n”);

scanf(“%d”,;now);

if(a[0]>=now){

printf(“当前访问的磁道%d\n”,a[0]);

for(i=0;i

printf(“当前访问的磁道:

\t%d\n”,a[i+1]);

}

sum=a[n-1]-now;

printf(“移动的总磁道数:

%d\n”,sum);

}

elseif(a[n-1]<=now){

printf(“当前访问的磁道:

%d\n”,a[n-1]);

for(j=n-1;i

printf(“当前访问的磁道:

\t%d\n”,a[j-1]);

}

sum=now-a[0];

printf(“移动的总磁道数:

%d\n”,sum);

}

else{

while(a[k]

k++;

}

j=k-1;

i=0;

while((j>=0);;(k

i++;

if(now-a[j]>=a[k]-now){

printf(“当前访问的磁道:

\t%d\n”,a[k]);

sum+=a[k]-now;

now=a[k];

k++;

}

else{

printf(“当前访问的磁道:

\t%d\n”,

a[j]);

sum+=now-a[j];

now=a[j];

j--;

}

}

if(k>n-1){

for(intt=j;t>0;t--){

i++;

if(t==j){

printf(“当前访问的磁道:

\t%d\n”,a[j]);

}

else{

printf(“当前访问的磁道:

\t%d\n”,a[t+1]);

}

}

sum+=a[n-1]-a[0];

}

if(j<0){

for(intt=k;t

i++;

if(t==k){

printf(“当前访问的磁道:

\t%d\n”,a[k]);

}

else{

printf(“当前访问的磁道:

\t%d\n”,a[t]);

}

}

sum+=a[n-1]-a[0];

}

}

printf(“经过的总磁道数为:

%d\n”,sum);

printf(“移动的平均磁道数:

%.2lf\n”,1.0_sum/n);

printf(“请再次输入你想使用的方法:

\n”);

}/_扫描算法_/voidSCAN(inta[],intn){

inttemp;

intnow;

intsum=0,i,j,k=0;

//冒泡排序法对磁道号进行排序

printf(“排序后的磁道分布:

\n”);

for(i=0;i

for(j=i+1;j

if(a[i]>a[j]){

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

printf(“%d\t”,a[i]);

if(i%10==9){

printf(“\n”);

}

}

printf(“\n请输入当前磁道号:

\n”);

scanf(“%d”,;now);

if(a[0]>=now){

printf(“当前访问的磁道:

%d\n”,a[0]);

for(i=0;i

printf(“当前访问的磁道:

\t%d\n”,a[i+1]);

}

sum=a[n-1]-now;

printf(“移动的总磁道数:

%d\n”,sum);

}

elseif(a[n-1]<=now){

printf(“当前访问的磁道:

%d\n”,a[n-1]);

for(j=n-1;i

printf(“当前访问的磁道:

\t%d\n”,

a[j-1]);

}

sum=now-a[0];

printf(“移动的总磁道数:

%d\n”,sum);

}

else{

intd;

while(a[k]

k++;

}

j=k-1;

printf(“请输入当前磁头移动的方向(0向内,1向外):

\n”);

scanf(“%d”,;d);

if(d==1){

for(intt=k;t

printf(“当前访问的磁道:

\t%d\n”,a[t]);

sum+=a[t]-now;

now=a[t];

}

for(intt=j;t>=0;t--){

printf(“当前访问的磁道:

\t%d\n”,a[t]);

}

sum+=a[n-1]-a[0];

}

elseif(d==0){

for(intt=j;t>=0;t--){

printf(“当前访问的磁道:

\t%d\n”,a[t]);

sum+=now-a[t];

now=a[t];

}

for(intt=k;t

printf(“当前访问的磁道:

\t%d\n”,a[t]);

}

sum+=a[n-1]-a[0];

}

else{

printf(“输入错误,重新回到选择算法界面!

\n”);

}

}

printf(“经过的总磁道数为:

%d\n”,sum);

printf(“移动的平均磁道数:

%.2lf\n”,1.0_sum/n);

printf(“请再次输入你想使用的方法:

\n”);}/_循环扫描算法_/voidCSCAN(inta[],intn){

inttemp;

intnow;

intsum=0,i,j,k=0;

//冒泡排序法对磁道号进行排序

printf(“排序后的磁道分布:

\n”);

for(i=0;i

for(j=i+1;j

if(a[i]>a[j]){

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

printf(“%d\t”,a[i]);

if(i%10==9){

printf(“\n”);

}

}

printf(“\n请输入当前磁道号:

\n”);

scanf(“%d”,;now);

if(a[0]>=now){

printf(“当前访问的磁道:

%d\n”,a[0]);

for(i=0;i

printf(“当前访问的磁道:

\t%d\n”,a[i+1]);

}

sum=a[n-1]-now;

printf(“移动的总磁道数:

%d\n”,sum);

}

elseif(a[n-1]<=now){

printf(“当前访问的磁道:

%d\n”,a[n-1]);

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

printf(“当前访问的磁道:

\t%d\n”,a[j-1]);

}

sum=now-a[0];

printf(“移动的总磁道数:

%d\n”,sum);

}

else{

intd;

while(a[k]

k++;

}

j=k-1;

printf(“请输入当前磁头移动的方向(0向内,1向外):

\n”);

scanf(“%d”,;d);

if(d==1){

inti=0;

for(intt=k;t

printf(“当前访问的磁道:

\t%d\n”,a[t]);

sum+=a[t]-now;

now=a[t];

}

for(intt=0;t

printf(“当前访问的磁道:

\t%d\n”,

a[t]);

}

sum+=a[n-1]-a[0]+a[j]-a[0];

}

elseif(d==0){

for(intt=j;t>=0;t--){

printf(“当前访问的磁道:

\t%d\n”,

a[t]);

sum+=now-a[t];

now=a[t];

}

for(intt=n-1;t>=k;t--){

printf(“当前访问的磁道:

\t%d\n”,

a[t]);

}

sum+=a[n-1]-a[0]+a[n-1]-a[k];

}

else{

printf(“输入错误,重新回到选择算法界面!

\n”);

}

}

printf(“经过的总磁道数为:

%d\n”,sum);

printf(“移动的平均磁道数:

%.2lf\n”,1.0_sum/n);

printf(“请再次输入你想使用的方法:

\n”);}/_

主函数_/intmain{

intn;//磁道数

intcontrol=1;//控制处理的方式

printf(“请输入要处理的磁道数:

\n”);

scanf(“%d”,;n);

intc[1000];

printf(“随机生成磁道号:

\n”);

srand((unsigned)time(NULL));

//srand((unsigned)time(NULL));

for(inti=0;i

c[i]=(rand%100)+1;

printf(“%d\t”,c[i]);

if(i%10==9){

printf(“\n”);

}

}

printf(“\n数据生成成功!

\n”);

printf(“\n”);

printf(“算法选择\n”);

printf(“2.最短寻道时间算法\n”);

printf(“3.扫描算法\n”);

printf(“4.循环扫描算法\n”);

printf(“0.退出程序\n”);

printf(“\n”);

/_算法选择_/

printf(“请输入你想使用的方法:

\n”);

while(control){

scanf(“%d”,;control);

switch(control){

case0:

break;

case2:

SSTF(c,n);

break;

case3:

SCAN(c,n);

break;

case4:

CSCAN(c,n);

break;

default:

printf(“选项错误!

重新选择!

”);

break;

}

}

printf(“程序退出成功,谢谢使用!

”);

system(“pause”);

return0;}

[实验结果]

[心得体会]通过本次试验,我清楚的理解到了磁盘扫描算法;最短寻道算法、循环算法、扫描算法。

在理论理解的基础上又加深了一个层次,但是在到吗过程中还是有很大的欠缺,我会在以后的学习过程中好好的弥

补代码里的错误,提高编写代码的能力。

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

当前位置:首页 > 经管营销 > 公共行政管理

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

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