操作系统磁盘算法 2Word格式.docx
《操作系统磁盘算法 2Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统磁盘算法 2Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
先来先服务:
最短寻道时间优先:
扫描算法:
循环算法:
代码:
#include<
stdio.h>
math.h>
stdlib.h>
voidFCFS(intb[],intn,intinit)//先来先服务
{
inti,s,sum,t;
inta[20];
for(i=0;
i<
n;
i++)//数组赋值
a[i]=b[i];
s=init;
//当前磁道
sum=0;
i++)
{
t=abs(s-a[i]);
//绝对值
printf("
第%d次访问的磁道:
%d移动距离%d\n"
i+1,a[i],t);
sum+=abs(s-a[i]);
s=a[i];
}
printf("
平均寻道长度:
%f\n"
sum*1.0/n);
}
voidSSTF(intb[],intn,intk)//最短寻道法
inti,j,s,sum=0,p;
for(i=n-1;
i>
=0;
i--)
s=a[0];
p=0;
for(j=1;
j<
=i;
j++)//求最短值
if(abs(a[j]-k)<
abs(s-k))
{
s=a[j];
p=j;
}
a[p]=a[i];
%d移动距离:
%d\n"
n-i,s,abs(s-k));
sum+=abs(s-k);
k=s;
voidSCAN1(intb[],intn,intk)//扫描算法
inti,j,s,sum=0,p,biaoji;
biaoji=0;
for(j=0;
j++)
if(a[j]-k<
0)
biaoji=1;
p=j;
break;
if(biaoji==1)
s=a[p];
if(a[j]<
k&
&
k-a[j]<
k-s)
n-i,s,abs(k-s));
sum+=k-s;
else
s=a[0];
for(j=0;
if(a[j]-k<
=s-k)
{
s=a[j];
p=j;
}
a[p]=a[i];
printf("
sum+=abs(k-s);
voidSCAN2(intb[],intn,intk)
if(a[j]-k>
if(a[j]>
a[j]-k<
s-k)
sum+=s-k;
if(k-a[j]<
=k-s)
voidC_SCAN(intarray[],intm,intn)//循环算法
inttemp;
intk=0;
intnow,l,r,d;
inti,j,sum=0;
floatavg;
m;
for(j=i+1;
if(array[i]>
array[j])//对磁道号进行从小到大排列
temp=array[i];
array[i]=array[j];
array[j]=temp;
请输入当前的磁道号:
"
);
scanf("
%d"
&
now);
if(array[m-1]<
=now)//判断整个数组里的数是否都小于当前磁道号
{
CSCAN调度结果:
"
for(i=0;
{
%d"
array[i]);
//将磁道号从小到大输出
sum=now-array[0]+array[m-1];
//计算移动距离
elseif(array[0]>
=now)//判断整个数组里的数是否都大于当前磁道号
sum=array[m-1]-now;
else
while(array[k]<
now)//逐一比较以确定K值
k++;
l=k-1;
r=k;
*************循环算法**************\n"
0.移动臂由外向里1.移动臂由里向外\n"
***********************************\n"
请在下面输入您的选择:
scanf("
d);
if(d==0)
for(j=l;
j>
j--)
printf("
array[j]);
for(j=m-1;
=r;
sum=2*(array[m-1]-array[0])-array[r]+now;
}//磁道号减小方向
for(j=r;
r;
sum=2*(array[m-1]-array[0])+array[r-1]-now;
}//磁道号增加方向
avg=sum*1.0/m;
\n平均寻道长度:
%f\n"
avg);
voidmain()
inta[20]={55,58,39,18,90,160,150,38,184};
inti,n=9,k,k1,init;
/*printf("
请输入需要访问的磁道总数:
n);
*/
需要访问的磁道%d:
i+1,a[i]);
请输入指针所在磁道:
init);
k=1;
while(k)
*********************************************\n"
磁盘调度算法\n"
1.先来先服务(FCFS)2.最短寻道时间优先(SSTF)\n"
3.扫描算法(SCAN)4.循环算法(C-SCAN)\n"
k);
switch(k)
case1:
FCFS(a,n,init);
break;
case2:
SSTF(a,n,init);
case3:
k1=1;
while(k1)
*************扫描算法**************\n"
1.移动臂由里向外2.移动臂由外向里\n"
0.返回上一层\n"
scanf("
k1);
switch(k1)
case1:
SCAN1(a,n,init);
case2:
SCAN2(a,n,init);
case4:
C_SCAN(a,n,init);
default:
exit(0);