在此代码的基础上实现SSTF磁盘调度算法
时间: 2024-02-16 18:03:14 浏览: 17
在这个代码中已经有了先来先服务和扫描算法的实现,我们可以在这个基础上添加SSTF算法的实现。
SSTF算法的实现思路是选取离当前磁道最近的磁道进行调度。具体实现过程如下:
1. 输入当前磁道号和磁道数,以及每个磁道的号码。
2. 初始化一个bool类型数组,表示每个磁道是否已经被访问过。
3. 在每次访问前,循环遍历磁道,找到距离当前磁道最近的未被访问过的磁道,将其标记为已访问,然后将其加入调度队列。
4. 循环遍历调度队列,计算每个磁道移动的距离,并统计总移动距离。
5. 输出调度队列和平均移动距离。
下面是SSTF算法的实现代码:
```
void SSTF()
{
int a[100],b[100],c[100];
int x,n,i,j,k,t,nearest;
float sum,avarge;
bool visited[100]={false};
printf("输入当前磁道号:\n");
scanf("%d",&n);
printf("输入磁道数:\n");
scanf("%d",&x);
for(i=0;i<=x-1;i++)
{
printf("输入第%d个磁道号:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<x;i++)
{
nearest=-1;
for(j=0;j<x;j++)
{
if(!visited[j] && (nearest==-1 || abs(a[j]-n)<abs(a[nearest]-n)))
{
nearest=j;
}
}
visited[nearest]=true;
c[i]=a[nearest];
n=a[nearest];
}
for(i=0,sum=0;i<=x-1;i++)
{
if(0==i)
b[i]=fabs(c[i]-n);
else
b[i]=fabs(c[i]-c[i-1]);
sum+=b[i];
}
avarge=sum/x;
printf("\n被访问的下一个磁道号\t移动距离\n");
for(i=0;i<=x-1;i++)
printf("\t%d\t\t %d\n",c[i],b[i]);
printf("avarge = %f\n",avarge);
}
```
通过这个代码,我们就可以实现SSTF算法的磁盘调度了。