C-SCAN Disk Scheduling Algorithm क्या है ? with Source Code

दोस्तों Disk Scheduling Algorithm Applications द्वारा आने वाले सभी Data Access Request को पूरा करने के लिए अलग अलग तरह के ऐल्गरिदम use करता है, जिनमे से C-SCAN भी एक है (दूसरे है FCFS, SSTF, SCAN इत्यादि )।

आइए जानते है की C-SCAN ऐल्गरिदम क्या है ?

C-SCAN (जिसे Circular SCAN ऐल्गरिदम के नाम से भी जाना जाता है ) वह SCAN ऐल्गरिदम का एक Modified Version है , जो डिस्क Head की Running Time को कम करने मे मदद करता है । यह Requests को आधिक Uniformly पूरा करके SCAN की inefficiency को खतम करता है ।

Hard DIsk (C-SCAN Algorithm)

SCAN (Elevator) Algorithm की तरह, C-SCAN भी अपने सभी request को पूरा करने के लिए एक end से दूसरे end तक जाता है । लेकिन जैसे ही हेड दूसरे end पर पहुचता है तो तुरंत बिना किसी Request को पूरा करे ही Starting मे वापस आजता है और फिर starting से Servicing Start कर देता है । इसलिए C-SCAN को Circular Elevator Algorithm के रूप मे भी जाना जाता है ।

SCAN और C-SCAN मे क्या अंतर है ?

काफी बार हम लोग एक दुविधा मे फस जाते है की SCAN और C-SCAN दोनों मे से किस ऐल्गरिदम को इस्तेमाल किया जाए ? दोनों ऐल्गरिदम मे कुछ basic Difference है जिसके आधार पे दोनों मे अंतर करना आसान है और ये चुनना भी की किस ऐल्गरिदम का इस्तेमाल किया जाए :-

SCAN vs C-SCAN
Responsive Table
SCANC-SCAN
Head Movement
  • SCAN Algorithm – मे हेड अपनी Current Direction मे pending Request को पूरा करते हुए आगे बदता है । फिर Direction Change करके, return Journey मे बची हुई सभी pending Request को पूरा करता है । जैसे की एक Lift करती है ।
  • C-SCAN मे भी हेड अपनी Current Direction मे pending Request को पूरा करता है । फिर सीधा डिस्क के opposite end मे पहुच जाता है (बिना किसी request को पूरा किए) और फिर वहा से नए Request को पूरा करता है ।.
Waiting Time
  • SCAN Algorithm मे Centre Track पर Request को अधिक समय तक Wait करना पड़ता है ।.
  • C-SCAN Algorithm मे सभी Tracks पर Request के लिए Waiting Time काफी कम रहता है।
Overall
  • SCAN algo simple है, परंतु waiting Time बढ़ जाता है ।
  • अगर Request डिस्क के Starting पे केंद्रित हो तो SCAN प्रायप्त हो सकता है ।
  • C-SCAN Algo Complex है, लेकिन यह data access के लिए आने वाली Request के Waiting Time को कम करता है ।
  • अगर Minimum या Average Time Important है तो C-SCAN एक बेहतर चुनाव हो सकता है ।

लाभ : Advantage of Circular Elevator

  • यह ऐल्गरिदम जब भी Work Load ज्यादा होता है तो बेहतर perform करता है ।
  • इसका response time ज्यादा अच्छा है दूसरे किसी ऐल्गरिदम के मुकाबले ।

नुकसान: Disadvantage of Circular Elevator

  • SCAN ऐल्गरिदम की तुलना मे C-SCAN का seek Movement (खोज बिन का समय) अधिक है ।
  • ये कभी कभी बिल्कुल track के अंत मे मोजूद Request के लिए सही से कार्य नहीं करता ।
  • pending Request आने पर हेड को बिल्कुल एंड मे jump करना पड़ता है जो कभी कभी बिल्कुल अनावश्यक होता है ।

Pseudocode (Algorithm) of C-SCAN

  1. Start करे:
    • हेड की Position Initialize करे (हम यह 0 से शुरुआत कर रहे है)।
    • Data की grid range को निधारित करे ।
    • Starting Direction Initialize करे (e.g. Upward)।
  2. Program को Execute करे :
    • सबसे पहले हेड की मोजूदा position प्राप्त करें ।
    • Defined Direction मे बढ़ते हुए position की जांच करें ।
      • यदि data मिल जाता है तो उसे देखें, Print करें या Record करें ।
    • End position पर पहुचने पर :
      • Data के next review हेड को initial position पे लोटें।
    • Initial Position पर पहुचने के बाद ।:
      • Data के next Review के लिए farthest Position पे जाए ।
    • Program end.
  3. ध्यान दे :
    • जैसे ही positions की boundaries पर पहुंचे, directions को change करें ।
    • Data के positions को बदलते समय, time और speed का ध्यान रखे।
    • Data के status और duration organize करें, ताकि सही समय पर access किया जा सकें।

उदाहरण:

सोचिए कि हमारे पास एक डिस्क है जिसमें ट्रैक 0 से लेकर 199 तक नंबर किए गए हैं। पहले, डिस्क हेड 50 ट्रैक पर है, और यह ऊपर की ओर चल रहा है। हमारे पास ट्रैक 30, 70, 90, 120, 150, और 180 पर डेटा है।

C-SCAN Algorithm kya hai
  1. Start करे:
    • initial Position: 50
    • Data Track: 30, 70, 90, 120, 150, 180
    • Starting Direction: Upward
  2. Program को Execute करे :
    • Disk Head 50 पर है।
    • यह data की जांच करते हुए ऊपर की ओर चलता है:
      • Track 70 पर data मिला, इसे record करें या print करें ।
      • Track 90 पर data मिला, इसे record करें या print करें ।
      • Track 120 पर data मिला, इसे record करें या print करें ।
      • Track 150 पर data मिला, इसे record करें या print करें ।
      • Track 180 पर data मिला, इसे record करें या print करें ।
    • Track 199 पर पहुचने के बाद, वापस 0 पर लोटे ।
    • अगले Data की जांच करते हुए Track 30 पर जाए (Farthest Track) ।

C-SCAN Source Code in C

#include <stdio.h>
#include <stdlib.h>

#define SIZE 8
#define DISK_SIZE 200

void cscan(int arr[], int head) {
    int seek_count = 0;
    int distance, cur_track;
    int left[SIZE], right[SIZE];
    int left_size = 0, right_size = 0;
    int seek_sequence[SIZE * 2]; // Maximum possible size

    // Appending end values which have to be visited before reversing the direction
    left[left_size++] = 0;
    right[right_size++] = DISK_SIZE - 1;

    // Tracks on the left of the head will be serviced once the head comes back to the beginning (left end).
    for (int i = 0; i < SIZE; i++) {
        if (arr[i] < head)
            left[left_size++] = arr[i];
        if (arr[i] > head)
            right[right_size++] = arr[i];
    }

    // Sorting left and right arrays
    qsort(left, left_size, sizeof(int), compare);
    qsort(right, right_size, sizeof(int), compare);

    // First service the requests on the right side of the head.
    for (int i = 0; i < right_size; i++) {
        cur_track = right[i];
        // Appending current track to seek sequence
        seek_sequence[i] = cur_track;

        // Calculate absolute distance
        distance = abs(cur_track - head);

        // Increase the total count
        seek_count += distance;

        // Accessed track is now new head
        head = cur_track;
    }

    // Once reached the right end, jump to the beginning.
    head = 0;

    // Adding seek count for head returning from DISK_SIZE - 1 to 0
    seek_count += (DISK_SIZE - 1);

    // Now service the requests again which are left.
    for (int i = 0; i < left_size; i++) {
        cur_track = left[i];

        // Appending current track to seek sequence
        seek_sequence[right_size + i] = cur_track;

        // Calculate absolute distance
        distance = abs(cur_track - head);

        // Increase the total count
        seek_count += distance;

        // Accessed track is now the new head
        head = cur_track;
    }

    printf("Total number of seek operations = %d\n", seek_count);
    printf("Seek Sequence is:\n");

    for (int i = 0; i < right_size + left_size; i++) {
        printf("%d\n", seek_sequence[i]);
    }
}

// Driver code
int main() {
    // Request array
    int arr[SIZE] = {176, 79, 34, 60, 92, 11, 41, 114};
    int head = 50;

    printf("Initial position of head: %d\n", head);
    cscan(arr, head);

    return 0;
}

// inspired from GeeksforGeeks

Output

Initial position of head: 50
Total number of seek operations = 315
Seek Sequence is:
60
79
92
114
176
199
0
11
34
41

निष्कर्ष

दोस्तों जैसा की हमने जाना की C-scan (Circular Elevator) Algorithm क्या है ? और साथ ही इसके source code को समझा। C-SCAN (Circular Elevator) Algorithm एक डिस्क scheduling ऐल्गरिदम का एक हिस्सा है जो हमे data को एक part से दूसरे part मे ले जाता है और यह SCAN algorithm का एक modified version है । इसलिए इसमे Waiting time भी कम है जिस कारण Response Time बहुत बढ़िया है ।

दोस्तों आपको यह पोस्ट कैसा लगा कमेन्ट करके अवश्य बताएगा और अगर कोई सवाल हो या कुछ सुझाव हो तो भी आप हमे कमेन्ट मे बता सकते है । धन्यवाद !

How useful was this post?

Click on a star to rate it!

Average rating 4.9 / 5. Vote count: 16

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Leave a Comment