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

इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम के लिए C++ प्रोग्राम

पृष्ठ संख्या और पृष्ठ आकार दिया गया; कार्य हिट और मिस की संख्या का पता लगाना है जब हम इष्टतम पेज रिप्लेसमेंट एल्गोरिथम का उपयोग करके किसी पृष्ठ को मेमोरी ब्लॉक आवंटित करते हैं।

इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम क्या है?

इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथ्म एक पृष्ठ प्रतिस्थापन एल्गोरिथ्म है। पेज रिप्लेसमेंट एल्गोरिथम एक एल्गोरिथम है जो यह तय करता है कि किस मेमोरी पेज को बदला जाना है। इष्टतम पृष्ठ प्रतिस्थापन में हम उस पृष्ठ को प्रतिस्थापित करते हैं जिसे निकट भविष्य में संदर्भित नहीं किया जाता है, हालांकि इसे व्यावहारिक रूप से कार्यान्वित नहीं किया जा सकता है, लेकिन यह सबसे इष्टतम है और इसमें न्यूनतम चूक है, और यह सबसे इष्टतम है।

आइए एक उदाहरण का उपयोग करके और इसे आरेखीय रूप से समझाकर समझते हैं।

इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम के लिए C++ प्रोग्राम

यहाँ 1, 2 और 3 को आवंटित करने के बाद अब मेमोरी भर गई है, इसलिए 4 डालने के लिए हम उस पृष्ठ की तलाश करेंगे जो 1, 2 और 3 से निकट भविष्य में फिर से संदर्भित नहीं है, इसलिए पृष्ठ 3 निकट भविष्य में नहीं है इसलिए हम उसे बदल देते हैं नया पेज 4 वाला पेज, और इसी तरह हम अंत तक चरणों को दोहराते रहेंगे।

उदाहरण

Input: page[] = { 1, 7, 8, 3, 0, 2, 0, 3, 5, 4, 0, 6, 1 }
   fn=3
Output: Hits = 3
   Misses = 10

Input: page[] = { 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2 }
   fn = 4
Output: Hits = 7
   Misses= 6

उपरोक्त समस्या को हल करने के लिए हम जिस दृष्टिकोण का उपयोग कर रहे हैं -

  • पृष्ठों के इनपुट को एक सरणी के रूप में लें।
  • आवंटित पृष्ठ देखें निकट भविष्य में मौजूद है, यदि नहीं, तो उस पृष्ठ को स्मृति में नए पृष्ठ से बदलें,
  • अगर पेज पहले से ही इंक्रीमेंट हिट है, तो इंक्रीमेंट मिस हो जाएगा।
  • जब तक हम सरणी के अंतिम तत्व तक नहीं पहुंच जाते तब तक दोहराएं।
  • हिट और मिस की संख्या प्रिंट करें।

एल्गोरिदम

Start
Step 1-> In function int predict(int page[], vector<int>& fr, int pn, int index)
   Declare and initialize res = -1, farthest = index
   Loop For i = 0 and  i < fr.size() and i++
      Loop For j = index and j < pn and j++
         If fr[i] == page[j] then,
            If j > farthest
               Set farthest = j
            End If
            Set res = i
            break
         If j == pn then,
         Return i
   Return (res == -1) ? 0 : res
Step 2-> In function bool search(int key, vector<int>& fr)
   Loop For i = 0 and i < fr.size() and i++
   If fr[i] == key then,
      Return true
      Return false
Step 3-> In function void opr(int page[], int pn, int fn)
   Declare vector<int> fr
   Set hit = 0
   Loop For i = 0 and i < pn and i++
   If search(page[i], fr) then,
      Increment hit by 1
      continue
   If fr.size() < fn then,
      fr.push_back(page[i])
   Else
      Set j = predict(page, fr, pn, i + 1)
      Set fr[j] = page[i]
      Print the number of hits
      Print the number of misses
Step 4-> In function int main()
   Declare and assign page[] = { 1, 7, 8, 3, 0, 2, 0, 3, 5, 4, 0, 6, 1 }
   Set pn = sizeof(page) / sizeof(page[0])
   Set fn = 3
   opr(page, pn, fn)
Stop

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int predict(int page[], vector<int>& fr, int pn, int index) {
   // Store the index of pages which are going
   // to be used recently in future
   int res = -1, farthest = index;
   for (int i = 0; i < fr.size(); i++) {
      int j;
      for (j = index; j < pn; j++) {
         if (fr[i] == page[j]) {
            if (j > farthest) {
               farthest = j;
               res = i;
            }
            break;
         }
      }
      // Return the page which are
      // are never referenced in future,
      if (j == pn)
         return i;
   }
   // If all of the frames were not in future,
   // return any of them, we return 0. Otherwise
   // we return res.
   return (res == -1) ? 0 : res;
}
bool search(int key, vector<int>& fr) {
   for (int i = 0; i < fr.size(); i++)
   if (fr[i] == key)
   return true;
   return false;
}
void opr(int page[], int pn, int fn) {
   vector<int> fr;
   int hit = 0;
   for (int i = 0; i < pn; i++) {
      // Page found in a frame : HIT
      if (search(page[i], fr)) {
         hit++;
         continue;
      }
      //If a page not found in a frame : MISS  
      // check if there is space available in frames.
      if (fr.size() < fn)
      fr.push_back(page[i]);
      // Find the page to be replaced.
      else {
         int j = predict(page, fr, pn, i + 1);
         fr[j] = page[i];
      }
   }
   cout << "Hits = " << hit << endl;
   cout << "Misses = " << pn - hit << endl;
}
// main Function
int main() {
   int page[] = { 1, 7, 8, 3, 0, 2, 0, 3, 5, 4, 0, 6, 1 };
   int pn = sizeof(page) / sizeof(page[0]);
   int fn = 3;
   opr(page, pn, fn);
   return 0;
}

आउटपुट

Hits = 3
Misses = 10

  1. मेमोरी प्रबंधन में सर्वश्रेष्ठ फ़िट एल्गोरिथम के लिए C++ प्रोग्राम

    ब्लॉक आकार और प्रक्रिया आकार वाले दो सरणियों को देखते हुए; कार्य स्मृति प्रबंधन में सर्वश्रेष्ठ फ़िट एल्गोरिथम के अनुसार परिणामों को प्रिंट करना है। सर्वश्रेष्ठ फ़िट एल्गोरिथम क्या है? बेस्ट फिट एक मेमोरी मैनेजमेंट एल्गोरिथम है; यह सबसे छोटा मुक्त विभाजन आवंटित करने से संबंधित है जो अनुरोध करने क

  1. सी++ में पिरामिड के आयतन के लिए कार्यक्रम

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

  1. QuickSort के लिए C++ प्रोग्राम?

    क्विकसॉर्ट एक छँटाई तकनीक है जो एक क्रमबद्ध सूची (सरणी) को क्रमबद्ध करने के लिए तुलना का उपयोग करती है। Quicksort को पार्टीशन एक्सचेंज सॉर्ट के रूप में भी जाना जाता है। यह एक स्थिर प्रकार नहीं है, क्योंकि समान प्रकार की वस्तुओं का सापेक्ष क्रम संरक्षित नहीं है। क्विकसॉर्ट एक सरणी पर काम कर सकता है,