磁盘调度5个算法代码C语言
时间: 2023-10-02 13:11:03 浏览: 40
以下是五种磁盘调度算法的 C 语言示例代码:
1. 先来先服务算法(FCFS)
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,head,seek=0,diff;
printf("Enter the number of requests : ");
scanf("%d",&n);
int req[n];
printf("Enter the requests : ");
for(i=0;i<n;i++)
scanf("%d",&req[i]);
printf("Enter the initial head position : ");
scanf("%d",&head);
printf("\nSeek Sequence : ");
for(i=0;i<n;i++)
{
diff=abs(head-req[i]);
seek+=diff;
head=req[i];
printf("%d ",req[i]);
}
printf("\nTotal Seek Time : %d",seek);
return 0;
}
```
2. 最短寻道时间优先算法(SSTF)
```c
#include<stdio.h>
#include<stdlib.h>
int min(int a,int b)
{
return a>b?b:a;
}
int main()
{
int n,i,j,k,head,seek=0,diff,minn,index;
printf("Enter the number of requests : ");
scanf("%d",&n);
int req[n],visited[n];
printf("Enter the requests : ");
for(i=0;i<n;i++)
{
visited[i]=0;
scanf("%d",&req[i]);
}
printf("Enter the initial head position : ");
scanf("%d",&head);
printf("\nSeek Sequence : ");
for(i=0;i<n;i++)
{
minn=1000000;
for(j=0;j<n;j++)
{
if(visited[j]==0)
{
diff=abs(head-req[j]);
if(diff<minn)
{
minn=diff;
index=j;
}
}
}
visited[index]=1;
seek+=minn;
head=req[index];
printf("%d ",req[index]);
}
printf("\nTotal Seek Time : %d",seek);
return 0;
}
```
3. 扫描算法(SCAN)
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,head,seek=0,diff,minn,index;
printf("Enter the number of requests : ");
scanf("%d",&n);
int req[n],visited[n];
printf("Enter the requests : ");
for(i=0;i<n;i++)
{
visited[i]=0;
scanf("%d",&req[i]);
}
printf("Enter the initial head position : ");
scanf("%d",&head);
printf("\nSeek Sequence : ");
int left=0,right=199;
for(i=head;i>=left;i--)
{
for(j=0;j<n;j++)
{
if(req[j]==i && visited[j]==0)
{
visited[j]=1;
printf("%d ",req[j]);
seek+=abs(head-req[j]);
head=req[j];
}
}
}
printf("%d ",left);
seek+=abs(head-left);
head=left;
for(i=left+1;i<=right;i++)
{
for(j=0;j<n;j++)
{
if(req[j]==i && visited[j]==0)
{
visited[j]=1;
printf("%d ",req[j]);
seek+=abs(head-req[j]);
head=req[j];
}
}
}
printf("\nTotal Seek Time : %d",seek);
return 0;
}
```
4. 循环扫描算法(C-SCAN)
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,head,seek=0,diff,minn,index;
printf("Enter the number of requests : ");
scanf("%d",&n);
int req[n],visited[n];
printf("Enter the requests : ");
for(i=0;i<n;i++)
{
visited[i]=0;
scanf("%d",&req[i]);
}
printf("Enter the initial head position : ");
scanf("%d",&head);
printf("\nSeek Sequence : ");
int left=0,right=199;
for(i=head;i<=right;i++)
{
for(j=0;j<n;j++)
{
if(req[j]==i && visited[j]==0)
{
visited[j]=1;
printf("%d ",req[j]);
seek+=abs(head-req[j]);
head=req[j];
}
}
}
for(i=left;i<head;i++)
{
for(j=0;j<n;j++)
{
if(req[j]==i && visited[j]==0)
{
visited[j]=1;
printf("%d ",req[j]);
seek+=abs(head-req[j]);
head=req[j];
}
}
}
printf("%d ",right);
seek+=abs(head-right);
head=right;
for(i=right-1;i>=head;i--)
{
for(j=0;j<n;j++)
{
if(req[j]==i && visited[j]==0)
{
visited[j]=1;
printf("%d ",req[j]);
seek+=abs(head-req[j]);
head=req[j];
}
}
}
printf("\nTotal Seek Time : %d",seek);
return 0;
}
```
5. 最短电梯优先算法(LOOK)
```c
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,head,seek=0,diff,minn,index;
printf("Enter the number of requests : ");
scanf("%d",&n);
int req[n],visited[n];
printf("Enter the requests : ");
for(i=0;i<n;i++)
{
visited[i]=0;
scanf("%d",&req[i]);
}
printf("Enter the initial head position : ");
scanf("%d",&head);
printf("\nSeek Sequence : ");
int left=-1,right=n;
for(i=0;i<n;i++)
{
if(req[i]<head)
left=i;
else
{
right=i;
break;
}
}
while(left>=0 || right<n)
{
if(left>=0 && right<n)
{
if(abs(head-req[left])<abs(head-req[right]))
{
printf("%d ",req[left]);
seek+=abs(head-req[left]);
head=req[left];
left--;
}
else
{
printf("%d ",req[right]);
seek+=abs(head-req[right]);
head=req[right];
right++;
}
}
else if(left>=0)
{
printf("%d ",req[left]);
seek+=abs(head-req[left]);
head=req[left];
left--;
}
else if(right<n)
{
printf("%d ",req[right]);
seek+=abs(head-req[right]);
head=req[right];
right++;
}
}
printf("\nTotal Seek Time : %d",seek);
return 0;
}
```