/*
Write a simulation program for disk scheduling using LOOK algorithm.
Accept total number of disk blocks, disk request string, direction of head
moment and current head position from the user. Display the list of request
in the order in which it is served. Also display the total number of head
moments.
*/
#include<stdio.h>
int ReqString[20],nor,nob,start,thm,min[10],max[10];
char direction;
int getmin()
{
int i,j=0;
for(i=0;i<nor;i++)
if(ReqString[i]<=start)
min[j++]=ReqString[i];
return j;
}
int getmax()
{
int i,j=0;
for(i=0;i<nor;i++)
if(ReqString[i]>start)
max[j++]=ReqString[i];
return j;
}
void sortd(int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(min[i] < min[j])
{
int t=min[i];
min[i]=min[j];
min[j]=t;
}
}
void sorta(int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(max[i] > max[j])
{
int t=max[i];
max[i]=max[j];
max[j]=t;
}
}
void main()
{
int i,j,k;
printf("\nEnter No.of Requests: ");
scanf("%d",&nor);
printf("\nEnter Requests:\n");
for(i=0;i<nor;i++)
{
printf("[%d]=",i);
scanf("%d",&ReqString[i]);
}
printf("\nEnter No.of Cylinders: ");
scanf("%d",&nob);
printf("\nEnter Start Block: ");
scanf("%d",&start);
printf("\nEnter Direction: ");
fflush(stdin);
direction = fgetc(stdin);
j=getmin();
sortd(j);
k=getmax();
sorta(k);
if(direction=='L')
{
for(i=0;i<j;i++)
{
printf("\n%d-%d",start,min[i]);
thm+=start-min[i];
start=min[i];
}
for(i=0;i<k;i++)
{
printf("\n%d-%d",start,max[i]);
thm+=max[i]-start;
start=max[i];
}
}
else if(direction=='R')
{
for(i=0;i<k;i++)
{
printf("\n%d-%d",start,max[i]);
thm+=max[i]-start;
start=max[i];
}
for(i=0;i<j;i++)
{
printf("\n%d-%d",start,min[i]);
thm+=start-min[i];
start=min[i];
}
}
printf("\nTotal Head Movement: %d",thm);
}
No comments:
Post a Comment