दो ऐरे दिए गए हैं जिनमें ब्लॉक साइज़ और प्रोसेस साइज़ हैं; कार्य मेमोरी मैनेजमेंट में बेस्ट फिट एल्गोरिदम के अनुसार परिणाम प्रिंट करना है।
बेस्ट फिट एल्गोरिदम क्या है?
बेस्ट फिट एक मेमोरी मैनेजमेंट एल्गोरिदम है; यह सबसे छोटे फ्री पार्टीशन को आवंटित करने से संबंधित है जो अनुरोध करने वाले प्रोसेस की आवश्यकता को पूरा करता है। इस एल्गोरिदम में हम पूरे मेमोरी ब्लॉक को देखते हैं और प्रोसेस के लिए सबसे छोटे और सबसे उपयुक्त ब्लॉक की जांच करते हैं और फिर उस तत्काल निकट ब्लॉक को देखते हैं जिसका उपयोग पर्याप्त प्रोसेस को पूरा करने के लिए किया जा सकता है।
इसलिए हम ब्लॉक साइज़ और प्रोसेस साइज़ लेंगे और प्रोसेस का आउटपुट और कौन सा ब्लॉक एक प्रोसेस को आवंटित किया जाना है, वापस करेंगे।
उदाहरण
इनपुट: bsize[] = {100, 500, 200, 300, 400} psize[] = {112, 518, 110, 526}
आउटपुट: प्रोसेस नं. प्रोसेस साइज़ ब्लॉक नं.
1 112 3
2 518 Not Allocated
3 110 4
4 526 Not Allocated
उपरोक्त समस्या को हल करने के लिए उपयोग किया जाने वाला दृष्टिकोण -
- प्रोसेस और ब्लॉक साइज़ का इनपुट लें।
- प्रारंभ में सभी मेमोरी ब्लॉक्स को फ्री के रूप में सेट करें।
- प्रत्येक प्रोसेस को लें और न्यूनतम ब्लॉक साइज़ ढूंढें जिसे एक ब्लॉक को आवंटित किया जा सके, अर्थात पूरे ब्लॉक का न्यूनतम जो प्रोसेस साइज़ से बड़ा हो।
- यदि मिल जाए तो इसे वर्तमान प्रोसेस को आवंटित करें अन्यथा उस प्रोसेस को छोड़ दें और अगले प्रोसेस की जांच करें।
एल्गोरिदम
शुरुआत चरण 1 → फंक्शन void bestfit(int bsize[], int m, int psize[], int n) में int alloc[n] घोषित करें फंक्शन memset(alloc, -1, sizeof(alloc)) कॉल करें लूप i=0 और i= psize[i] तो, यदि bestIdx == -1 तो, bestIdx = j सेट करें अन्यथा यदि bsize[bestIdx] > bsize[j] तो, bestIdx = j सेट करें यदि bestIdx != -1 तो, alloc[i] = bestIdx सेट करें bsize[bestIdx] -= psize[i] सेट करें लूप i = 0 और i < n और i++ के लिए i+1, psize[i] प्रिंट करें यदि alloc[i] != -1 alloc[i] + 1 प्रिंट करें अन्यथा "Not Allocated" प्रिंट करें नई लाइन प्रिंट करें चरण 2 → फंक्शन int main() में bsize[] = {100, 500, 200, 300, 400} घोषित और प्रारंभ करें psize[] = {112, 518, 110, 526} घोषित और प्रारंभ करें m = sizeof(bsize)/sizeof(bsize[0]) सेट करें n = sizeof(psize)/sizeof(psize[0]) सेट करें फंक्शन bestfit(bsize, m, psize, n) कॉल करें रोकें
उदाहरण
#include#include using namespace std; // बेस्ट फिट एल्गोरिदम के अनुसार मेमोरी को ब्लॉक्स में आवंटित करने के लिए void bestfit(int bsize[], int m, int psize[], int n) { // एक प्रोसेस को आवंटित ब्लॉक की ब्लॉक आईडी स्टोर करने के लिए int alloc[n]; // प्रारंभ में किसी भी प्रोसेस को कोई ब्लॉक नहीं दिया गया है memset(alloc, -1, sizeof(alloc)); // प्रत्येक प्रोसेस को चुनें और उसके आकार के अनुसार उपयुक्त ब्लॉक्स ढूंढें और असाइन करें for (int i = 0; i < n; i++) { // वर्तमान प्रोसेस के लिए बेस्ट फिट ब्लॉक ढूंढें int bestIdx = -1; for (int j = 0; j < m; j++) { if (bsize[j] >= psize[i]) { if (bestIdx == -1) bestIdx = j; else if (bsize[bestIdx] > bsize[j]) bestIdx = j; } } // यदि हम वर्तमान प्रोसेस के लिए एक ब्लॉक ढूंढ सके if (bestIdx != -1) { // ब्लॉक j को p[i] प्रोसेस को आवंटित करें alloc[i] = bestIdx; // इस ब्लॉक में उपलब्ध मेमोरी कम करें। bsize[bestIdx] -= psize[i]; } } cout << "\nProcess No.\tProcess Size\tBlock no.\n"; for (int i = 0; i < n; i++) { cout << " " << i+1 << "\t\t\t\t" << psize[i] << "\t\t\t\t"; if (alloc[i] != -1) cout << alloc[i] + 1; else cout << "Not Allocated"; cout << endl; } } // ड्राइवर कोड int main() { int bsize[] = {100, 500, 200, 300, 400}; int psize[] = {112, 518, 110, 526}; int m = sizeof(bsize)/sizeof(bsize[0]); int n = sizeof(psize)/sizeof(psize[0]); bestfit(bsize, m, psize, n); return 0; }
आउटपुट
Process No. Process Size Block no. 1 112 3 2 518 Not Allocated 3 110 4 4 526 Not Allocated