Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

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


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

शॉर्टेस्ट जॉब फर्स्ट शेड्यूलिंग क्या है?

शॉर्टेस्ट जॉब फर्स्ट शेड्यूलिंग वह जॉब या प्रोसेस शेड्यूलिंग एल्गोरिदम है जो नॉन-प्रीमेप्टिव शेड्यूलिंग अनुशासन का पालन करता है। इसमें, शेड्यूलर वेटिंग कतार से उस प्रक्रिया का चयन करता है जिसका पूरा होने का समय सबसे कम होता है और उस जॉब या प्रोसेस को CPU आवंटित करता है। शॉर्टेस्ट जॉब फर्स्ट FIFO एल्गोरिदम से अधिक वांछनीय है क्योंकि SJF अधिक इष्टतम है क्योंकि यह औसत प्रतीक्षा समय को कम करता है जिससे थ्रूपुट बढ़ता है।

टर्नअराउंड समय, प्रतीक्षा समय और पूर्णता समय क्या है?

  • पूर्णता समय वह समय है जो प्रक्रिया को अपना निष्पादन पूरा करने के लिए आवश्यक होता है
  • टर्नअराउंड समय एक प्रक्रिया के सबमिशन और उसके पूरा होने के बीच का समय अंतराल है।

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

  • प्रतीक्षा समय टर्नअराउंड समय और बर्स्ट समय का अंतर है

    प्रतीक्षा समय = टर्नअराउंड समय - बर्स्ट समय

उदाहरण

हमें प्रक्रियाओं P1, P2, P3, P4 और P5 दिए गए हैं जिनके संबंधित बर्स्ट समय नीचे दिए गए हैं

प्रक्रियाबर्स्ट समय
P14
P22
P38
P41
P59

चूंकि प्रक्रिया P4 का बर्स्ट समय सभी प्रक्रियाओं में न्यूनतम है इसलिए इसे पहले CPU आवंटित किया जाएगा। उसके बाद, P2 कतारबद्ध होगा फिर P1, P3 और P5।

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

औसत प्रतीक्षा समय गैंट चार्ट के आधार पर गणना की जाती है। P1 को 3 के लिए इंतजार करना पड़ता है, P2 को 1 के लिए, P3 को 7 के लिए, P4 को 0 के लिए और P5 को 15 के लिए। तो, उनका औसत प्रतीक्षा समय होगा −

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

एल्गोरिदम

शुरुआत चरण 1-> फ़ंक्शन swap(int *a, int *b) में    temp = *a सेट करें    *a = *b सेट करें    *b = temp सेट करें चरण 2-> फ़ंक्शन arrangeArrival(int num, int mat[][3]) में    लूप i=0 से i<num और i++ तक       लूप j=0 से j<num-i-1 और j++ तक          यदि mat[1][j] > mat[1][j+1] तो,             k=0 से k<5 और k++ तक के लिए             swap(mat[k][j], mat[k][j+1]) फ़ंक्शन कॉल करें चरण 3-> फ़ंक्शन completionTime(int num, int mat[][3]) में    temp, val घोषित करें    mat[3][0] = mat[1][0] + mat[2][0] सेट करें    mat[5][0] = mat[3][0] - mat[1][0] सेट करें    mat[4][0] = mat[5][0] - mat[2][0] सेट करें     लूप i=1 से i<num और i++ तक       temp = mat[3][i-1] सेट करें       low = mat[2][i] सेट करें       लूप j=i से j<num और j++ तक          यदि temp >= mat[1][j] && low >= mat[2][j] तो,             low = mat[2][j] सेट करें             val = j सेट करें             mat[3][val] = temp + mat[2][val] सेट करें             mat[5][val] = mat[3][val] - mat[1][val] सेट करें             mat[4][val] = mat[5][val] - mat[2][val] सेट करें             लूप k=0; k<6; k++             swap(mat[k][val], mat[k][i]) फ़ंक्शन कॉल करें चरण 4-> फ़ंक्शन int main() में    num = 3, temp घोषित करें और सेट करें    mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4} घोषित करें और सेट करें    प्रोसेस ID, आगमन समय, बर्स्ट समय प्रिंट करें    लूप i=0 से i<num और i++ तक       mat[0][i], mat[1][i], mat[2][i] के मान प्रिंट करें       arrangeArrival(num, mat) फ़ंक्शन कॉल करें       completionTime(num, mat) फ़ंक्शन कॉल करें       प्रोसेस ID, आगमन समय, बर्स्ट समय, प्रतीक्षा समय, टर्नअराउंड समय प्रिंट करें       लूप i=0 से i<num और i++ तक         mat[0][i], mat[1][i], mat[2][i], mat[4][i], mat[5][i] के मान प्रिंट करें रुकें

उदाहरण

// आगमन समय के साथ शॉर्टेस्ट जॉब फर्स्ट को लागू करने के लिए C++ प्रोग्राम #include<iostream> using namespace std; void swap(int *a, int *b) {    int temp = *a;    *a = *b;    *b = temp; } void arrangeArrival(int num, int mat[][3]) {    for(int i=0; i<num; i++) {       for(int j=0; j<num-i-1; j++) {          if(mat[1][j] > mat[1][j+1]) {             for(int k=0; k<5; k++) {                swap(mat[k][j], mat[k][j+1]);             }          }       }    } } void completionTime(int num, int mat[][3]) {    int temp, val;    mat[3][0] = mat[1][0] + mat[2][0];    mat[5][0] = mat[3][0] - mat[1][0];    mat[4][0] = mat[5][0] - mat[2][0];     for(int i=1; i<num; i++) {       temp = mat[3][i-1];       int low = mat[2][i];       for(int j=i; j<num; j++) {          if(temp >= mat[1][j] && low >= mat[2][j]) {             low = mat[2][j];             val = j;          }       }       mat[3][val] = temp + mat[2][val];       mat[5][val] = mat[3][val] - mat[1][val];       mat[4][val] = mat[5][val] - mat[2][val];       for(int k=0; k<6; k++) {          swap(mat[k][val], mat[k][i]);       }    } } int main() {    int num = 3, temp;    int mat[6][3] = {1, 2, 3, 3, 6, 4, 2, 3, 4};    cout<<"व्यवस्था से पहले...\n";    cout<<"प्रोसेस ID\tआगमन समय\tबर्स्ट समय\n";    for(int i=0; i<num; i++) {       cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\n";    }    arrangeArrival(num, mat);    completionTime(num, mat);    cout<<"अंतिम परिणाम...\n";    cout<<"प्रोसेस ID\tआगमन समय\tबर्स्ट समय\tप्रतीक्षा समय\tटर्नअराउंड समय\n";    for(int i=0; i<num; i++) {       cout<<mat[0][i]<<"\t\t"<<mat[1][i]<<"\t\t"<<mat[2][i]<<"\t\t"<<mat[4][i]<<"\t\t"<<mat[5][i]<<"\n";    } }

आउटपुट

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


  1. C++ में पिरामिड के आयतन का प्रोग्राम C++ में पिरामिड के आयतन का प्रोग्राम

    पिरामिड के बेस के प्रकार के आधार पर भुजाएं दी गई हैं, कार्य पिरामिड का आयतन गणना करना है।पिरामिड एक 3-D आकृति है जिसकी बाहरी सतहें त्रिकोणीय हैं जो सामान्य बिंदु पर मिलती हैं जिससे पिरामिड का तीक्ष्ण किनारा बनता है। पिरामिड का आयतन उसके बेस के प्रकार पर निर्भर करता है।पिरामिड के बेस के विभिन्न प्रका

  1. C++ में क्विकसॉर्ट प्रोग्राम C++ में क्विकसॉर्ट प्रोग्राम

    क्विकसॉर्ट क्या है? क्विकसॉर्ट एक सॉर्टिंग तकनीक है जो अनसॉर्टेड सूची (सरणी) को सॉर्ट करने के लिए तुलनाओं का उपयोग करती है। क्विकसॉर्ट को पार्टीशन एक्सचेंज सॉर्ट के नाम से भी जाना जाता है। यह एक स्थिर सॉर्ट नहीं है, क्योंकि समान सॉर्ट आइटम्स का सापेक्ष क्रम संरक्षित नहीं रहता। क्विकसॉर्ट एक सरणी प

  1. C++ में पहले n प्राकृतिक संख्याओं के वर्गों का योग C++ में पहले n प्राकृतिक संख्याओं के वर्गों का योग

    इस समस्या में हम देखेंगे कि पहले n प्राकृतिक संख्याओं के वर्गों का योग कैसे प्राप्त किया जा सकता है। यहां हम एक फॉर लूप का उपयोग कर रहे हैं, जो 1 से n तक चलता है। प्रत्येक चरण में हम पद का वर्ग निकाल रहे हैं और फिर इसे योग में जोड़ रहे हैं। यह प्रोग्राम पूरा होने में O(n) समय लेता है। लेकिन यदि हम