हमें n प्रक्रियाओं की संख्या दी गई है अर्थात P1, P2, P3, ……,Pn उनके संगत बर्स्ट समय और प्रत्येक प्रक्रिया से जुड़ी प्राथमिकताओं के साथ। कार्य प्राथमिकता सीपीयू शेड्यूलिंग एल्गोरिदम का उपयोग करके औसत प्रतीक्षा समय, औसत टर्नअराउंड समय और प्रक्रिया निष्पादन का क्रम खोजना है।
प्रतीक्षा समय और टर्नअराउंड समय क्या है?
बदलाव का समय एक प्रक्रिया प्रस्तुत करने और उसके पूरा होने के बीच का समय अंतराल है।
टर्नअराउंड समय =एक प्रक्रिया का पूरा होना - एक प्रक्रिया प्रस्तुत करना
प्रतीक्षा समय टर्नअराउंड टाइम और बर्स्ट टाइम के बीच का अंतर है
वेटिंग टाइम =टर्नअराउंड टाइम - बर्स्ट टाइम
प्राथमिकता निर्धारण क्या है?
प्राथमिकता शेड्यूलिंग में, प्रत्येक प्रक्रिया 0-10 से लेकर प्राथमिकता से जुड़ी होती है, जहां पूर्णांक 0 सबसे कम प्राथमिकता का प्रतिनिधित्व करता है और 10 सर्वोच्च प्राथमिकता का प्रतिनिधित्व करता है। प्राथमिकताओं को दो तरह से परिभाषित किया जा सकता है अर्थात आंतरिक और बाह्य रूप से। साथ ही, प्राथमिकता शेड्यूलिंग या तो प्रीमेप्टिव या नॉन-प्रीमेप्टिव हो सकती है।
प्रीमेप्टिव प्रायोरिटी शेड्यूलिंग . में यदि नई आने वाली प्रक्रिया की प्राथमिकता निष्पादन के तहत एक प्रक्रिया की प्राथमिकता से अधिक है, तो शेड्यूलर सीपीयू को छोड़ देगा।
अनिवार्य प्राथमिकता शेड्यूलिंग में, अनुसूचक तैयार कतार के शीर्ष पर नई प्रक्रिया को कतारबद्ध करेगा।
प्राथमिकता शेड्यूलिंग एल्गोरिथम का उपयोग करने के नुकसान अनिश्चितकालीन अवरोध या भुखमरी है। कम प्राथमिकता वाली प्रक्रिया होगी जिसे उच्च प्राथमिकता वाली प्रक्रिया के कारण संसाधनों के लिए अनिश्चित काल तक प्रतीक्षा करनी पड़ सकती है जिससे भुखमरी की समस्या पैदा होगी।
उदाहरण
मान लें कि 4 प्रक्रियाएं हैं P1, P2, P3 और P4 उनके संबंधित बर्स्ट समय और प्रत्येक प्रक्रिया से जुड़ी प्राथमिकताएं हैं जहां 0 सबसे कम प्राथमिकता का प्रतिनिधित्व करता है और 10 सर्वोच्च प्राथमिकता का प्रतिनिधित्व करता है।
प्रक्रिया | फटने का समय | प्राथमिकता |
---|---|---|
P1 | 15 | 2 |
P2 | 13 | 0 |
P3 | 10 | 4 |
P4 | 11 | 1 |
नीचे दिए गए गैंट चार्ट का उपयोग करके कई प्रक्रियाओं को निष्पादित करने के अनुक्रम का प्रतिनिधित्व किया जाएगा
एल्गोरिदम
Start Step 1-> Make a structure Process with variables pid, bt, priority Step 2-> In function bool compare(Process a, Process b) Return (a.priority > b.priority) Step 3-> In function waitingtime(Process pro[], int n, int wt[]) Set wt[0] = 0 Loop For i = 1 and i < n and i++ Set wt[i] = pro[i-1].bt + wt[i-1] End Step 4-> In function turnarround( Process pro[], int n, int wt[], int tat[]) Loop For i = 0 and i < n and i++ Set tat[i] = pro[i].bt + wt[i] End Loop Step 5-> In function avgtime(Process pro[], int n) Declare and initialize wt[n], tat[n], total_wt = 0, total_tat = 0 Call function waitingtime(pro, n, wt) Call function turnarround(pro, n, wt, tat) Print “Processes, Burst time, Waiting time, Turn around time" Loop For i=0 and i<n and i++ Set total_wt = total_wt + wt[i] total_tat = total_tat + tat[i] End Loop Print values of “Processes, Burst time, Waiting time, Turn around time" Print Average waiting time, Average turn around time Step 6-> In function scheduling(Process pro[], int n) Call function sort(pro, pro + n, compare) Loop For i = 0 and i < n and i++ Print the order. End Loop Call function avgtime(pro, n) Step 7-> In function int main() Declare and initialize Process pro[] = {{1, 10, 2}, {2, 5, 0}, {3, 8, 1}} Declare and initialize n = sizeof pro / sizeof pro[0] Call function scheduling(pro, n) Stop
उदाहरण
#include<bits/stdc++.h> using namespace std; struct Process { int pid; // Process ID int bt; // CPU Burst time required int priority; // Priority of this process }; // sorting the Process acc. to the priority bool compare(Process a, Process b) { return (a.priority > b.priority); } void waitingtime(Process pro[], int n, int wt[]) { // Initial waiting time for a process is 0 wt[0] = 0; // calculating waiting time for (int i = 1; i < n ; i++ ) wt[i] = pro[i-1].bt + wt[i-1] ; } // Function to calculate turn around time void turnarround( Process pro[], int n, int wt[], int tat[]) { // calculating turnaround time by adding // bt[i] + wt[i] for (int i = 0; i < n ; i++) tat[i] = pro[i].bt + wt[i]; } //Function to calculate average time void avgtime(Process pro[], int n) { int wt[n], tat[n], total_wt = 0, total_tat = 0; //Function to find waiting time of all processes waitingtime(pro, n, wt); //Function to find turn around time for all processes turnarround(pro, n, wt, tat); //Display processes along with all details cout << "\nProcesses "<< " Burst time " << " Waiting time " << " Turn around 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]; cout << " " << pro[i].pid << "\t\t" << pro[i].bt << "\t " << wt[i] << "\t\t " << tat[i] <<endl; } cout << "\nAverage waiting time = " << (float)total_wt / (float)n; cout << "\nAverage turn around time = " << (float)total_tat / (float)n; } void scheduling(Process pro[], int n) { // Sort processes by priority sort(pro, pro + n, compare); cout<< "Order in which processes gets executed \n"; for (int i = 0 ; i < n; i++) cout << pro[i].pid <<" " ; avgtime(pro, n); } // main function int main() { Process pro[] = {{1, 10, 2}, {2, 5, 0}, {3, 8, 1}}; int n = sizeof pro / sizeof pro[0]; scheduling(pro, n); return 0; }
आउटपुट
Order in which processes gets executed 1 3 2 Processes Burst time Waiting time Turn around time 1 10 0 10 3 8 10 18 2 5 18 23 Average waiting time = 9.33333 Average turn around time = 17