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

मेमोरी मैनेजमेंट में बेस्ट फिट एल्गोरिदम के लिए C++ प्रोग्राम


दो ऐरे दिए गए हैं जिनमें ब्लॉक साइज़ और प्रोसेस साइज़ हैं; कार्य मेमोरी मैनेजमेंट में बेस्ट फिट एल्गोरिदम के अनुसार परिणाम प्रिंट करना है।

बेस्ट फिट एल्गोरिदम क्या है?

बेस्ट फिट एक मेमोरी मैनेजमेंट एल्गोरिदम है; यह सबसे छोटे फ्री पार्टीशन को आवंटित करने से संबंधित है जो अनुरोध करने वाले प्रोसेस की आवश्यकता को पूरा करता है। इस एल्गोरिदम में हम पूरे मेमोरी ब्लॉक को देखते हैं और प्रोसेस के लिए सबसे छोटे और सबसे उपयुक्त ब्लॉक की जांच करते हैं और फिर उस तत्काल निकट ब्लॉक को देखते हैं जिसका उपयोग पर्याप्त प्रोसेस को पूरा करने के लिए किया जा सकता है।

इसलिए हम ब्लॉक साइज़ और प्रोसेस साइज़ लेंगे और प्रोसेस का आउटपुट और कौन सा ब्लॉक एक प्रोसेस को आवंटित किया जाना है, वापस करेंगे।

उदाहरण

इनपुट: 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

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

    हमें n प्रक्रियाएं P1, P2, P3, ..., Pn दी गई हैं, जिनके साथ उनके बर्स्ट टाइम (burst time) और प्रायोरिटी (priority) जुड़े हुए हैं। कार्य प्रायोरिटी CPU शेड्यूलिंग एल्गोरिदम का उपयोग करके औसत वेटिंग टाइम, औसत टर्नअराउंड टाइम और प्रक्रिया निष्पादन का क्रम ढूंढना है। वेटिंग टाइम और टर्नअराउंड टाइम क्या

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

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

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

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