操作系统实验四磁盘调度算法实验报告.docx

上传人:b****8 文档编号:27976957 上传时间:2023-07-07 格式:DOCX 页数:20 大小:195.12KB
下载 相关 举报
操作系统实验四磁盘调度算法实验报告.docx_第1页
第1页 / 共20页
操作系统实验四磁盘调度算法实验报告.docx_第2页
第2页 / 共20页
操作系统实验四磁盘调度算法实验报告.docx_第3页
第3页 / 共20页
操作系统实验四磁盘调度算法实验报告.docx_第4页
第4页 / 共20页
操作系统实验四磁盘调度算法实验报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

操作系统实验四磁盘调度算法实验报告.docx

《操作系统实验四磁盘调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验四磁盘调度算法实验报告.docx(20页珍藏版)》请在冰豆网上搜索。

操作系统实验四磁盘调度算法实验报告.docx

操作系统实验四磁盘调度算法实验报告

实验四实验报告

实验源码:

#include"stdio.h"

#include

#include

inta[20];

inti,n,k,init,flag1=1;

//先来先服务

voidFCFS(inta[],intn,intinit)

{

inti,s,sum,temp=0;

intb[20];

for(i=0;i

b[i]=a[i];

s=init;

sum=0;

printf("\nFCFS调度结果:

\n");

for(i=0;i

{

//被访问的磁道号

printf("%3d\t",b[i]);

//计算移动距离

temp=abs(s-b[i]);

printf("%3d\n",temp);

sum+=temp;

s=b[i];

}

printf("平均寻道长度:

%.1f%%\n\n",sum*1.0/n);

}

//最短寻道法

voidSSTF(inta[],intn,intinit)

{

inti,j,s,sum=0,p,temp=0;

intb[20];

for(i=0;i

b[i]=a[i];

printf("\nSSTF调度结果:

\n");

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

{

s=b[0];

p=0;

for(j=0;j<=i;j++)

if(abs(b[j]-init)

{

s=b[j];

p=j;

}

b[p]=b[i];

//被访问的磁道号

printf("%3d\t",s);

//计算移动距离

temp=abs(s-init);

printf("%3d\n",temp);

sum+=temp;

init=s;

}

printf("平均寻道长度:

%.1f%%\n\n",sum*1.0/n);

}

//扫描算法

voidSCAN(inta[],intn,intinit)

{

inti,j,s,sum=0,p,biaoji,temp=0,k1;

intb[20];

for(i=0;i

b[i]=a[i];

printf("\n*****************SCAN扫描算法******************\n");

printf("1.移动臂向磁道号减少的方向2.移动臂向磁道号增加的方向\n");

printf("*******************************************************\n");

printf("请在下面输入您的选择:

");

scanf("%d",&k1);

switch(k1)

{

case1:

//磁道号减小方向

printf("\nSCAN(磁道号减少的方向)调度结果:

\n");

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

{

biaoji=0;

for(j=0;j<=i;j++)

if(b[j]-init<0)

{

biaoji=1;

p=j;

break;

}

if(biaoji==1)

{

s=b[p];

for(j=0;j<=i;j++)

if(b[j]

{

s=b[j];

p=j;

}

b[p]=b[i];

//被访问的磁道号

printf("%3d\t",s);

//计算移动距离

temp=init-s;

printf("%3d\n",temp);

sum+=temp;

init=s;

}

else

{

s=b[0];

for(j=0;j<=i;j++)

if(b[j]-init<=s-init)

{

s=b[j];

p=j;

}

b[p]=b[i];

//被访问的磁道号

printf("%3d\t",s);

//计算移动距离

temp=abs(init-s);

printf("%3d\n",temp);

sum+=temp;

init=s;

}

}

break;

case2:

//磁道号增加方向

printf("\nSCAN(磁道号增加方向)调度结果:

\n");

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

{

biaoji=0;

for(j=0;j<=i;j++)

if(b[j]-init>0)

{

biaoji=1;

p=j;

break;

}

if(biaoji==1)

{

s=b[p];

for(j=0;j<=i;j++)

if(b[j]>init&&b[j]-init

{

s=b[j];

p=j;

}

b[p]=b[i];

//被访问的磁道号

printf("%3d\t",s);

//计算移动距离

temp=s-init;

printf("%3d\n",temp);

sum+=s-init;

init=s;

}

else

{

s=b[0];

for(j=0;j<=i;j++)

if(init-b[j]<=init-s)

{

s=b[j];

p=j;

}

b[p]=b[i];

//被访问的磁道号

printf("%3d\t",s);

//计算移动距离

temp=abs(init-s);

printf("%3d\n",temp);

sum+=temp;

init=s;

}

}

break;

default:

printf("\n请输入1-2之间的整数!

\n");

break;

}

printf("平均寻道长度:

%.1f%%\n\n",sum*1.0/n);

}

//循环算法

voidCSCAN(inta[],intn,intinit)

{

inttemp;

intk=1;

intl,r,d;

intb[20];

inti,j,sum=0;

intinit_temp=init;

for(i=0;i

b[i]=a[i];

for(i=0;i

{

for(j=i+1;j

{

if(b[i]>b[j])//对磁道号进行从小到大排列

{

temp=b[i];

b[i]=b[j];

b[j]=temp;

}

}

}

if(b[n-1]<=init)//判断整个数组里的数是否都小于当前磁道号

{

printf("\nCSCAN调度结果:

\n");

for(i=0;i

{

//被访问的磁道号

printf("%3d\t",b[i]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[i]));

init_temp=b[i];

}

sum=init-b[0]+b[n-1];//计算移动距离

}

elseif(b[0]>=init)//判断整个数组里的数是否都大于当前磁道号

{

printf("\nCSCAN调度结果:

\n");

for(i=0;i

{

//被访问的磁道号

printf("%3d\t",b[i]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[i]));

init_temp=b[i];

}

sum=b[n-1]-init;//计算移动距离

}

else

{

while(b[k]

{

k++;

}

l=k-1;

r=k;

printf("\n*************循环算法**************\n");

printf("1.移动臂向磁道号减少的方向2.移动臂向磁道号增加的方向\n");

printf("***********************************\n");

printf("请在下面输入您的选择:

");

scanf("%d",&d);

printf("\nCSCAN调度结果:

\n");

switch(d)

{

case1:

//磁道号减小方向

for(j=l;j>=0;j--)

{

//被访问的磁道号

printf("%3d\t",b[j]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[j]));

init_temp=b[j];

}

for(j=n-1;j>=r;j--)

{

//被访问的磁道号

printf("%3d\t",b[j]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[j]));

init_temp=b[j];

}

sum=2*(b[n-1]-b[0])-b[r]+init;//计算移动距离

break;

case2:

//磁道号增加方向

for(j=r;j

{

//被访问的磁道号

printf("%3d\t",b[j]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[j]));

init_temp=b[j];

}

for(j=0;j

{

//被访问的磁道号

printf("%3d\t",b[j]);

//计算移动距离

printf("%3d\n",abs(init_temp-b[j]));

init_temp=b[j];

}

sum=2*(b[n-1]-b[0])+b[r-1]-init;//计算移动距离

break;

default:

printf("\n请输入1-2之间的整数!

\n");

break;

}

printf("\n平均寻道长度:

%.1f%%\n\n",sum*1.0/n);

}

}

voidDataInput()

{

printf("请输入需要访问的磁道总数:

");

scanf("%d",&n);

printf("\n");

for(i=0;i

{

printf("需要访问的磁道%d:

",i+1);

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

}

printf("\n");

printf("请输入指针所在磁道:

");

scanf("%d",&init);

printf("\n");

system("cls");

//显示需要访问的磁道

printf("需要访问的磁道序列为:

");

for(i=0;i

{

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

}

printf("\n");

}

 

voidmain()

{

DataInput();

intmenu=-1;

while(true)

{

printf("\n*********************************************\n");

printf("磁盘调度算法\n");

printf("*********************************************\n");

printf("**\n");

printf("1.先来先服务(FCFS)2.最短寻道时间优先(SSTF)\n");

printf("3.扫描算法(SCAN)4.循环算法(CSCAN)\n");

printf("5.退出(EXIT)\n");

printf("0.返回上一层(RETURN)\n");

printf("**\n");

printf("*********************************************\n");

printf("请在下面输入您的选择:

");

scanf("%d",&menu);

switch(menu)

{

case1:

FCFS(a,n,init);

break;

case2:

SSTF(a,n,init);

break;

case3:

SCAN(a,n,init);

break;

case4:

CSCAN(a,n,init);

break;

case5:

exit(0);

break;

case0:

system("cls");

DataInput();

break;

default:

break;

}

if(menu!

=1&&menu!

=2&&menu!

=3&&menu!

=4&&menu!

=5&&menu!

=0){

system("cls");

printf("\n请输入0-5之间的整数!

\n");

continue;

}

}

}

实验结果截图:

程序运行:

输入相关数据:

进入选择算法界面:

先来先服务算法:

最短寻道时间优先算法:

扫描算法:

向磁道号减少的方向:

向磁道号增加的方向:

循环算法:

向磁道号减少的方向:

向磁道号增加的方向:

 

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

当前位置:首页 > 高等教育 > 艺术

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

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