हमें n प्रक्रियाओं की संख्या यानी P1, P2, P3, ……, Pn और उनके संगत बर्स्ट समय दिए गए हैं। कार्य FCFS CPU शेड्यूलिंग एल्गोरिथम का उपयोग करके औसत प्रतीक्षा समय और औसत टर्नअराउंड समय ज्ञात करना है।
प्रतीक्षा समय और टर्नअराउंड समय क्या है?
-
टर्नअराउंड समय एक प्रक्रिया प्रस्तुत करने और उसके पूरा होने के बीच का समय अंतराल है।
टर्नअराउंड समय =एक प्रक्रिया का पूरा होना - एक प्रक्रिया प्रस्तुत करना
-
वेटिंग टाइम टर्नअराउंड टाइम और बर्स्ट टाइम के बीच का अंतर है
वेटिंग टाइम =टर्नअराउंड टाइम - बर्स्ट टाइम
FCFS शेड्यूलिंग क्या है?
पहले आओ, पहले पाओ (एफसीएफएस) जिसे फर्स्ट इन, फर्स्ट आउट (फीफो) के रूप में भी जाना जाता है, सीपीयू शेड्यूलिंग एल्गोरिदम है जिसमें सीपीयू को तैयार कतार में कतारबद्ध क्रम में प्रक्रियाओं को आवंटित किया जाता है।
FCFS नॉन-प्रीमेप्टिव शेड्यूलिंग का पालन करता है, जिसका अर्थ है कि एक बार CPU को एक प्रक्रिया के लिए आवंटित कर दिया जाता है, यह CPU को तब तक नहीं छोड़ता जब तक कि प्रक्रिया समाप्त नहीं हो जाती या कुछ I/O रुकावट के कारण रुका हुआ हो।
उदाहरण
मान लीजिए, अनुक्रम में चार प्रक्रियाएं आ रही हैं जैसे कि पी 2, पी 3, पी 1 उनके संबंधित निष्पादन समय के साथ जैसा कि नीचे दी गई तालिका में दिखाया गया है। साथ ही, उनके आने का समय 0.
प्रक्रिया | आगमन क्रम | निष्पादन समय मिसे में |
---|---|---|
P1 | 3 | 15 |
P2 | 1 | 3 |
P3 | 2 | 3 |
सिस्टम में P1, P2 और P3 प्रक्रियाओं के प्रतीक्षा समय को दर्शाने वाला गैंट चार्ट
जैसा कि ऊपर दिखाया गया है,
प्रक्रिया P2 का प्रतीक्षा समय 0
. हैप्रक्रिया P3 का प्रतीक्षा समय 3
. हैप्रक्रिया P1 का प्रतीक्षा समय 6
. हैऔसत समय =(0 + 3 + 6) / 3 =3 मिसे.
चूंकि हमने आगमन का समय 0 लिया है इसलिए टर्न अराउंड समय और पूरा होने का समय समान होगा।
उदाहरण
Input-: processes = P1, P2, P3 Burst time = 5, 8, 12 Output-: Processes Burst Waiting Turn around 1 5 0 5 2 8 5 13 3 12 13 25 Average Waiting time = 6.000000 Average turn around time = 14.333333
एल्गोरिदम
Start Step 1-> In function int waitingtime(int proc[], int n, int burst_time[], int wait_time[]) Set wait_time[0] = 0 Loop For i = 1 and i < n and i++ Set wait_time[i] = burst_time[i-1] + wait_time[i-1] End For Step 2-> In function int turnaroundtime( int proc[], int n, int burst_time[], int wait_time[], int tat[]) Loop For i = 0 and i < n and i++ Set tat[i] = burst_time[i] + wait_time[i] End For Step 3-> In function int avgtime( int proc[], int n, int burst_time[]) Declare and initialize wait_time[n], tat[n], total_wt = 0, total_tat = 0; Call waitingtime(proc, n, burst_time, wait_time) Call turnaroundtime(proc, n, burst_time, wait_time, tat) Loop For i=0 and i<n and i++ Set total_wt = total_wt + wait_time[i] Set total_tat = total_tat + tat[i] Print process number, burstime wait time and turnaround time End For Print "Average waiting time =i.e. total_wt / n Print "Average turn around time = i.e. total_tat / n Step 4-> In int main() Declare the input int proc[] = { 1, 2, 3} Declare and initialize n = sizeof proc / sizeof proc[0] Declare and initialize burst_time[] = {10, 5, 8} Call avgtime(proc, n, burst_time) Stop
उदाहरण
#include <stdio.h> // Function to find the waiting time for all processes int waitingtime(int proc[], int n, int burst_time[], int wait_time[]) { // waiting time for first process is 0 wait_time[0] = 0; // calculating waiting time for (int i = 1; i < n ; i++ ) wait_time[i] = burst_time[i-1] + wait_time[i-1] ; return 0; } // Function to calculate turn around time int turnaroundtime( int proc[], int n, int burst_time[], int wait_time[], int tat[]) { // calculating turnaround time by adding // burst_time[i] + wait_time[i] int i; for ( i = 0; i < n ; i++) tat[i] = burst_time[i] + wait_time[i]; return 0; } //Function to calculate average time int avgtime( int proc[], int n, int burst_time[]) { int wait_time[n], tat[n], total_wt = 0, total_tat = 0; int i; //Function to find waiting time of all processes waitingtime(proc, n, burst_time, wait_time); //Function to find turn around time for all processes turnaroundtime(proc, n, burst_time, wait_time, tat); //Display processes along with all details printf("Processes Burst Waiting Turn around \n"); // Calculate total waiting time and total turn // around time for ( i=0; i<n; i++) { total_wt = total_wt + wait_time[i]; total_tat = total_tat + tat[i]; printf(" %d\t %d\t\t %d \t%d\n", i+1, burst_time[i], wait_time[i], tat[i]); } printf("Average waiting time = %f\n", (float)total_wt / (float)n); printf("Average turn around time = %f\n", (float)total_tat / (float)n); return 0; } // main function int main() { //process id's int proc[] = { 1, 2, 3}; int n = sizeof proc / sizeof proc[0]; //Burst time of all processes int burst_time[] = {5, 8, 12}; avgtime(proc, n, burst_time); return 0; }
आउटपुट
Processes Burst Waiting Turn around 1 5 0 5 2 8 5 13 3 12 13 25 Average Waiting time = 6.000000 Average turn around time = 14.333333