पृष्ठ संख्या और पृष्ठ आकार दिया गया; कार्य हिट और मिस की संख्या का पता लगाना है जब हम इष्टतम पेज रिप्लेसमेंट एल्गोरिथम का उपयोग करके किसी पृष्ठ को मेमोरी ब्लॉक आवंटित करते हैं।
इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम क्या है?
इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथ्म एक पृष्ठ प्रतिस्थापन एल्गोरिथ्म है। पेज रिप्लेसमेंट एल्गोरिथम एक एल्गोरिथम है जो यह तय करता है कि किस मेमोरी पेज को बदला जाना है। इष्टतम पृष्ठ प्रतिस्थापन में हम उस पृष्ठ को प्रतिस्थापित करते हैं जिसे निकट भविष्य में संदर्भित नहीं किया जाता है, हालांकि इसे व्यावहारिक रूप से कार्यान्वित नहीं किया जा सकता है, लेकिन यह सबसे इष्टतम है और इसमें न्यूनतम चूक है, और यह सबसे इष्टतम है।
आइए एक उदाहरण का उपयोग करके और इसे आरेखीय रूप से समझाकर समझते हैं।
यहाँ 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