Introduction to C-SCAN disk scheduling :
Circular SCAN (C-SCAN) scheduling is a variant of SCAN designed to provide a more uniform wait time. Circular-SCAN The algorithm is an improved version of the SCAN Algorithm.Different Types of Disk Scheduling Algorithm:
Here are some steps followed to use C-SCAN Algorithm: -
- Like SCAN, C-SCAN moves the head from one end of the disk to the other, servicing requests along the way.
- After reaching the other end, the head reverses its direction.
- It then returns to the starting end without servicing any request in between.
- This process repeats time and again until the scanning is completed.
The C-SCAN scheduling algorithm essentially Treats the cylinders as a circular list that wraps around from the final cylinder to the first one.
Here are Some Advantages:-
- The waiting time for the cylinders just visited by the head is reduced as compared to the SCAN Algorithm.
- It provides uniform waiting time and better response time.
Here are Some Disadvantages:-
- It causes more seek movements as compared to SCAN Algorithm.
- It causes the head to move till the end of the disk even if there are no requests to be serviced.
Also Read: Disk Scheduling For Shortest Seek Time First (SSTF)
C Program for C-SCAN Disk Scheduling Algorithm
#include <stdio.h>#include <math.h>int main(){int queue[20], n, head, i, j, k, seek = 0, max, diff, temp, queue1[20],queue2[20], 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{queue2[temp2] = temp;temp2++;}}for (i = 0; i < temp1 - 1; i++){for (j = i + 1; j < temp1; j++){if (queue1[i] > queue1[j]){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;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);return 0;}
Post A Comment:
0 comments so far,add yours