Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

राउंड रॉबिन शेड्यूलिंग के लिए सी प्रोग्राम

हमें n प्रक्रियाओं के साथ उनके संबंधित बर्स्ट समय और समय क्वांटम के साथ दिया गया है और कार्य औसत प्रतीक्षा समय और औसत टर्नअराउंड समय का पता लगाना और परिणाम प्रदर्शित करना है।

राउंड रॉबिन शेड्यूलिंग क्या है?

राउंड रॉबिन एक सीपीयू शेड्यूलिंग एल्गोरिथम है जिसे विशेष रूप से टाइम शेयरिंग सिस्टम के लिए डिज़ाइन किया गया है। यह एक परिवर्तन के साथ FCFS शेड्यूलिंग एल्गोरिथम की तरह है कि राउंड रॉबिन प्रक्रियाओं में क्वांटम समय आकार के साथ बंधे होते हैं। समय की एक छोटी इकाई को टाइम क्वांटम या टाइम स्लाइस के रूप में जाना जाता है। समय की मात्रा 10 से 100 मिलीसेकंड तक हो सकती है। सीपीयू तैयार कतार को दिए गए समय स्लाइस के साथ प्रक्रियाओं को निष्पादित करने के लिए एक गोलाकार कतार के रूप में मानता है। यह प्रीमेप्टिव दृष्टिकोण का अनुसरण करता है क्योंकि प्रक्रियाओं के लिए निश्चित समय आवंटित किया जाता है। इसका एकमात्र नुकसान संदर्भ स्विचिंग का ओवरहेड है।

गणना करने के लिए हमें क्या चाहिए?

समापन समय प्रक्रिया को इसके निष्पादन को पूरा करने के लिए आवश्यक समय है

बदलाव का समय एक प्रक्रिया प्रस्तुत करने और उसके पूरा होने के बीच का समय अंतराल है।

टर्नअराउंड समय =एक प्रक्रिया का पूरा होना - एक प्रक्रिया प्रस्तुत करना

वेटिंग टाइम टर्नअराउंड टाइम और बर्स्ट टाइम के बीच का अंतर है

वेटिंग टाइम =टर्नअराउंड टाइम - बर्स्ट टाइम

उदाहरण

हमें 3 प्रक्रियाओं P1, P2 और P3 के साथ उनके संगत बर्स्ट समय 24, 3 और 3 के साथ दिया गया है

<थेड>
प्रक्रिया फटने का समय
P1 24
P2 3
P3 3

चूंकि समय क्वांटम 4 मिलीसेकंड का होता है, प्रक्रिया P1 को पहले 4 मिलीसेकंड मिलते हैं, लेकिन इसके निष्पादन को पूरा करने के लिए इसे 20 मिलीसेकंड की आवश्यकता होती है, लेकिन पहली बार क्वांटम के बाद CPU इसे छोड़ देगा और CPU को अगली प्रक्रिया P2 को आवंटित किया जाएगा। जैसा कि तालिका में दिखाया गया है, प्रक्रिया P2 को अपने निष्पादन को पूरा करने के लिए केवल 3 मिलीसेकंड की आवश्यकता होती है, इसलिए CPU को 4 मिलीसेकंड के बजाय केवल 3 मिलीसेकंड की समय मात्रा के लिए आवंटित किया जाएगा।

राउंड रॉबिन शेड्यूलिंग के लिए सी प्रोग्राम

गैंट चार्ट का उपयोग करके, औसत प्रतीक्षा समय की गणना नीचे दी गई है -

औसत प्रतीक्षा समय =17/3 =5.66 मिलीसेकंड

एल्गोरिदम

Start
Step 1-> In function int turnarroundtime(int processes[], int n, int bt[], int wt[], int tat[])
   Loop For i = 0 and i < n and i++
      Set tat[i] = bt[i] + wt[i]
   return 1
Step 2-> In function int waitingtime(int processes[], int n, int bt[], int wt[], int quantum)
Declare rem_bt[n]
   Loop For i = 0 and i < n and i++
      Set rem_bt[i] = bt[i]
      Set t = 0
   Loop While (1)
      Set done = true
   Loop For i = 0 and i < n and i++
      If rem_bt[i] > 0 then,
         Set done = false
      If rem_bt[i] > quantum then,
         Set t = t + quantum
         Set rem_bt[i] = rem_bt[i] - quantum
      Else
         Set t = t + rem_bt[i]
         Set wt[i] = t - bt[i]
         Set rem_bt[i] = 0
      If done == true then,
   Break
Step 3->In function int findavgTime(int processes[], int n, int bt[], int quantum)
   Declare and initialize wt[n], tat[n], total_wt = 0, total_tat = 0
   Call function waitingtime(processes, n, bt, wt, quantum)
   Call function turnarroundtime(processes, n, bt, wt, tat)
   Print "Processes Burst Time Waiting Time turnaround time "
   Loop For i=0 and i<n and i++
   Set total_wt = total_wt + wt[i]
   Set total_tat = total_tat + tat[i]
   Print the value i+1, bt[i], wt[i], tat[i]
   Print "Average waiting time = total_wt / n
   Print "Average turnaround time =total_tat / n
Step 4-> In function int main()
   Delcare and initialize processes[] = { 1, 2, 3}
   Declare and initialize n = sizeof processes / sizeof processes[0]
   Declare and initialize burst_time[] = {8, 6, 12}
   Set quantum = 2
   Call function findavgTime(processes, n, burst_time, quantum)

उदाहरण

#include <stdio.h>
// Function to calculate turn around time
int turnarroundtime(int processes[], int n,
int bt[], int wt[], int tat[]) {
   // calculating turnaround time by adding
   // bt[i] + wt[i]
   for (int i = 0; i < n ; i++)
   tat[i] = bt[i] + wt[i];
   return 1;
}
// Function to find the waiting time for all
// processes
int waitingtime(int processes[], int n,
int bt[], int wt[], int quantum) {
   // Make a copy of burst times bt[] to store remaining
   // burst times.
   int rem_bt[n];
   for (int i = 0 ; i < n ; i++)
   rem_bt[i] = bt[i];
   int t = 0; // Current time
   // Keep traversing processes in round robin manner
   // until all of them are not done.
   while (1) {
      bool done = true;
      // Traverse all processes one by one repeatedly
      for (int i = 0 ; i < n; i++) {
         // If burst time of a process is greater than 0
         // then only need to process further
         if (rem_bt[i] > 0) {
            done = false; // There is a pending process
            if (rem_bt[i] > quantum) {
               // Increase the value of t i.e. shows
               // how much time a process has been processed
               t += quantum;
               // Decrease the burst_time of current process
               // by quantum
               rem_bt[i] -= quantum;
            }
            // If burst time is smaller than or equal to
            // quantum. Last cycle for this process
            else {
               // Increase the value of t i.e. shows
               // how much time a process has been processed
               t = t + rem_bt[i];
               // Waiting time is current time minus time
               // used by this process
               wt[i] = t - bt[i];
               // As the process gets fully executed
               // make its remaining burst time = 0
               rem_bt[i] = 0;
            }
         }
      }
      // If all processes are done
      if (done == true)
         break;
   }
   return 1;
}
// Function to calculate average time
int findavgTime(int processes[], int n, int bt[],
int quantum) {
   int wt[n], tat[n], total_wt = 0, total_tat = 0;
   // Function to find waiting time of all processes
   waitingtime(processes, n, bt, wt, quantum);
   // Function to find turn around time for all processes
   turnarroundtime(processes, n, bt, wt, tat);
   // Display processes along with all details
   printf("Processes Burst Time Waiting Time turnaround time\n");
   // Calculate total waiting time and total turn
   // around time
   for (int i=0; i<n; i++) {
      total_wt = total_wt + wt[i];
      total_tat = total_tat + tat[i];
      printf("\t%d\t\t\t%d\t\t\t%d\t\t\t%d\n",i+1, bt[i], wt[i], tat[i]);
   }
   printf("Average waiting time = %f", (float)total_wt / (float)n);
   printf("\nAverage turnaround time = %f\n", (float)total_tat / (float)n);
   return 1;
}
// main function
int main() {
   // process id's
   int processes[] = { 1, 2, 3};
   int n = sizeof processes / sizeof processes[0];
   // Burst time of all processes
   int burst_time[] = {8, 6, 12};
   // Time quantum
   int quantum = 2;
   findavgTime(processes, n, burst_time, quantum);
   return 0;
}

आउटपुट

राउंड रॉबिन शेड्यूलिंग के लिए सी प्रोग्राम


  1. सी++ प्रोग्राम फॉर शॉर्टेस्ट जॉब फर्स्ट (एसजेएफ) शेड्यूलिंग (नॉन-प्रीमेप्टिव)

    प्रक्रिया को देखते हुए, क्रमशः एक प्रक्रिया का फटने का समय और एक क्वांटम सीमा; काम शॉर्टेस्ट जॉब फर्स्ट शेड्यूलिंग नॉन-प्रीमेप्टिव पद्धति का उपयोग करके प्रतीक्षा समय, टर्नअराउंड समय और उनके संबंधित औसत समय को ढूंढना और प्रिंट करना है। सबसे छोटा कार्य पहले शेड्यूलिंग क्या है? सबसे छोटा जॉब फर्स्ट

  1. सी++ प्रोग्राम फॉर प्रायोरिटी शेड्यूलिंग

    हमें n प्रक्रियाओं की संख्या दी गई है अर्थात P1, P2, P3, ……,Pn उनके संगत बर्स्ट समय और प्रत्येक प्रक्रिया से जुड़ी प्राथमिकताओं के साथ। कार्य प्राथमिकता सीपीयू शेड्यूलिंग एल्गोरिदम का उपयोग करके औसत प्रतीक्षा समय, औसत टर्नअराउंड समय और प्रक्रिया निष्पादन का क्रम खोजना है। प्रतीक्षा समय और टर्नअराउं

  1. आसान समय-निर्धारण के लिए सर्वश्रेष्ठ समय क्षेत्र परिवर्तक

    एक ऐसी दुनिया में जो पहले से कहीं अधिक दूर से काम कर रही है, एक-दूसरे के टाइमज़ोन को जानना पहले से कहीं अधिक महत्वपूर्ण हो गया है। कई कार्यकर्ता जीएमटी, पीडीटी, पीएसटी और अन्य समय-क्षेत्र के योगों से खुद को परिचित करना शुरू कर रहे हैं। सहकर्मियों का दुनिया भर में फैलना जितना अच्छा है, यह थोड़ा समस्य