基于扫描的磁盘调度算法c语言
时间: 2023-07-26 12:23:13 浏览: 103
磁盘调度算法 c语言
5星 · 资源好评率100%
以下是一个简单的基于扫描的磁盘调度算法的C语言实现:
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int queue[20],j,n,head,seek=0,max,diff,temp,queue1[20],queue2[20],i,j1=0,j2=0;
float avg;
printf("Enter the max range of disk:\n");
scanf("%d",&max);
printf("Enter the initial head position:\n");
scanf("%d",&head);
printf("Enter the size of queue request:\n");
scanf("%d",&n);
printf("Enter the queue of disk positions to be read:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&temp);
if(temp>=head)
{
queue1[j1]=temp;
j1++;
}
else
{
queue2[j2]=temp;
j2++;
}
}
for(i=0;i<j1-1;i++)
{
for(j=i+1;j<j1;j++)
{
if(queue1[i]>queue1[j])
{
temp=queue1[i];
queue1[i]=queue1[j];
queue1[j]=temp;
}
}
}
for(i=0;i<j2-1;i++)
{
for(j=i+1;j<j2;j++)
{
if(queue2[i]<queue2[j])
{
temp=queue2[i];
queue2[i]=queue2[j];
queue2[j]=temp;
}
}
}
for(i=1,j=0;j<j1;i++,j++)
{
queue[i]=queue1[j];
}
queue[i]=max;
for(i=j1+2,j=0;j<j2;i++,j++)
{
queue[i]=queue2[j];
}
queue[i]=0;
queue[0]=head;
for(j=0;j<=n+1;j++)
{
diff=abs(queue[j+1]-queue[j]);
seek+=diff;
printf("Disk head moves from %d to %d with seek %d\n",queue[j],queue[j+1],diff);
}
printf("Total seek time is %d\n",seek);
avg=seek/(float)n;
printf("Average seek time is %f\n",avg);
return 0;
}
```
输入磁盘的最大范围、初始磁头位置、磁盘请求队列等信息,程序将按照基于扫描的磁盘调度算法进行磁盘读取操作,并输出磁头移动的路径和总的寻道时间和平均寻道时间。
阅读全文