DATE: 15/11/2020
To implement disk scheduling using a menu driven program.
n
queue[i]
diff=abs(queue[j+1]-queue[j])
seek+=diff
read maximum range, max
read initial head position, head
read size of queue request, n
read queue of disk positions, temp
if(temp>=head)
queue1[temp1]=temp
temp1++
else
queue2[temp2]=temp
temp2++
if(queue[i]>queue1[j]
)
temp=queue1[i]
queue1[i]=queue1[j]
queue1[j]=temp
if(queue2[i]<queue2[j]
)
temp=queue2[i]
queue2[i]=queue2[j]
queue2[j]=temp
print total seek time, seek
print average seek time, avg
temp>=head
)
queue1[temp1]=temp
temp1++
queue2[temp2]=temp
temp2++
queue1[i]>queue1[j]
)
temp=queue1[i]
queue1[i]=queue1[j]
queue1[j]=temp
queue2[i]>queue2[j]
)
temp=queue2[i]
queue2[i]=queue2[j]
queue2[j]=temp
avg
#include <stdio.h>
#include<stdlib.h>
int fcfs();
int scan();
int cscan();
int main() {
int n;
while (1) {
printf("\\n\\nwhich algo do u want to use?");
printf("\\n1) FCFS\\n2) SCAN\\n3) CSCAN\\n4) EXIT\\n");
scanf("%d", & n);
switch (n) {
case 1:
fcfs();
break;
case 2:
scan();
break;
case 3:
cscan();
break;
case 4:
exit(0);
break;
default:
printf("Error!\\n");
printf("\\n");
}
}
return 0;
}
int fcfs() {
int queue[20], n, head, i, j, k, seek = 0, max, diff;
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", & queue[i]);
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);
printf("\\n");
return 0;
}
int scan() {
int queue[20], n, head, i, j, k, seek = 0, max, diff, temp, queue1[20], queue2[2 0],
temp1 = 0, temp2 = 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[temp1] = temp;
temp1++;
} else {
temp2++;
}
}
for (i = 0; i < temp1 - 1; i++) {
for (j = i + 1; j < temp1; j++) {
if (queue1[i] > queue1[j]) {}
}
}
for (i = 0; i < temp2 - 1; i++) {
queue2[temp2] = temp;
for (j = i + 1; j < temp2; j++) {
if (queue2[i] < queue2[j]) {}
}
temp = queue1[i];
queue1[i] = queue1[j];
queue1[j] = temp;
temp = queue2[i];
queue2[i] = queue2[j];
queue2[j] = temp;
}
for (i = 1, j = 0; j < temp1; i++, j++) queue[i] = queue1[j];
queue[i] = max - 1;
for (i = temp1 + 2, j = 0; j < temp2; i++, j++) queue[i] = queue2[j];
queue[i] = 0;
queue[0] = head;
for (j = 0; j <= n; 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); printf("\\n");
return 0;
}
int cscan() {
int queue[20], n, head, i, j, k, seek = 0, max, diff, temp, queue1[20], queue2[2 0],
temp1 = 0, temp2 = 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[temp1] = temp;
temp1++;
} else {
temp2++;
}
}
for (i = 0; i < temp1 - 1; i++) {
for (j = i + 1; j < temp1; j++) {
if (queue1[i] > queue1[j]) {}
}
queue2[temp2] = temp;
temp = queue1[i];
queue1[i] = queue1[j];
queue1[j] = temp;
}
for (i = 0; i < temp2 - 1; i++) {
for (j = i + 1; j < temp2; j++) {
if (queue2[i] > queue2[j]) {
temp = queue2[i];
queue2[i] = queue2[j];
queue2[j] = temp;
}
}
}
for (i = 1, j = 0; j < temp1; i++, j++) queue[i] = queue1[j];
queue[i] = max - 1;
queue[i + 1] = 0;
for (i = temp1 + 3, j = 0; j < temp2; i++, j++) queue[i] = queue2[j];
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);
printf("\\n");
return 0;
}