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

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


n संख्या में प्रक्रियाएं और m आकार के मेमोरी ब्लॉक दिए गए हैं और कार्य फर्स्ट फिट मेमोरी मैनेजमेंट एल्गोरिदम का उपयोग करके संबंधित प्रक्रिया के लिए सर्वश्रेष्ठ फिट मेमोरी ब्लॉक खोजना है।

फर्स्ट फिट मेमोरी मैनेजमेंट एल्गोरिदम क्या है?

कई मेमोरी पार्टीशनिंग एल्गोरिदम उपलब्ध हैं जिनका उपयोग ऑपरेटिंग सिस्टम द्वारा प्रक्रियाओं को मेमोरी ब्लॉक आवंटित करने के लिए किया जाता है जैसे −

  • फर्स्ट फिट एल्गोरिदम
  • नेक्स्ट फिट एल्गोरिदम
  • बेस्ट फिट एल्गोरिदम
  • वर्स्ट फिट एल्गोरिदम
  • क्विक फिट एल्गोरिदम

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

लाभ फर्स्ट फिट एल्गोरिदम का उपयोग करने का यह है कि यह आने वाली प्रक्रियाओं के लिए सबसे तेज़ मेमोरी आवंटन है क्योंकि यह नई प्रक्रियाओं को सबसे बड़ा पहला फिट एल्गोरिदम आवंटित करता है।

नुकसान फर्स्ट फिट एल्गोरिदम का उपयोग करने का यह है कि मेमोरी की बर्बादी होती है जिससे अन्य प्रक्रियाओं के लिए मेमोरी की कमी हो जाएगी।

उदाहरण

इनपुट-: block_size[] = {300, 50, 200, 350, 70} process_size[] = {200, 47, 212, 426, 10} आउटपुट-: प्रोसेस नं. प्रोसेस आकार ब्लॉक नं. 1             200       1 2             47       1 3             212       4 4             426       आवंटित नहीं 5             10       1

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

  • ब्लॉक और प्रक्रियाओं को एक सरणी में इनपुट करें
  • सभी मेमोरी ब्लॉक्स को फ्री पर सेट करें
  • जांचें यदि (प्रक्रिया का आकार) <= (मेमोरी ब्लॉक का आकार) तो प्रक्रिया को मेमोरी ब्लॉक में आवंटित करें
  • अन्यथा अन्य ब्लॉक्स को तब तक पार करते रहें जब तक (प्रक्रिया का आकार) <= (मेमोरी ब्लॉक का आकार) सत्य न हो जाए।

एल्गोरिदम

शुरुआत चरण 1-> सर्वश्रेष्ठ फिट मेमोरी ब्लॉक की गणना करने के लिए फ़ंक्शन घोषित करें    void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process)    int allocation[total_process] घोषित करें    memset(allocation, -1, sizeof(allocation)) फ़ंक्शन कॉल करें    लूप i = 0 से i < total_process और i++ तक       लूप j = 0 से j < total_blocks और j++ तक          IF block_size[j] >= process_size[i]             allocation[i] = j सेट करें             block_size[j] -= process_size[i] सेट करें          अंत       अंत    अंत    लूप i = 0 से i < total_process और i++ तक       IF allocation[i] != -1          allocation[i] + 1 सेट करें       अंत       अन्यथा          आवंटित नहीं प्रिंट करें       अंत    अंत चरण 2-> main() में    ब्लॉक के लिए सरणी घोषित करें int block_size[] = {300, 50, 200, 350, 70}    प्रक्रियाओं के लिए सरणी घोषित करें int process_size[] = {200, 47, 212, 426, 10}    कुल ब्लॉक गणना करें int total_blocks = sizeof(block_size) / sizeof(block_size[0]    कुल प्रक्रियाएं गणना करें int total_process = sizeof(process_size) / sizeof(process_size[0])    First_Fit(block_size, total_blocks, process_size, total_process) कॉल करें रुकें

उदाहरण

#include<bits/stdc++.h> using namespace std; // फर्स्ट फिट एल्गोरिदम के अनुसार ब्लॉक को मेमोरी आवंटित करने का फ़ंक्शन void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process) {    int allocation[total_process];    memset(allocation, -1, sizeof(allocation));    //यह फॉर लूप प्रत्येक प्रक्रिया को चुनेगा और उसे पहला फिट ब्लॉक आवंटित करेगा    for (int i = 0; i < total_process; i++) {       for (int j = 0; j < total_blocks; j++) {          if (block_size[j] >= process_size[i]) {             allocation[i] = j;             block_size[j] -= process_size[i];             break;          }       }    }    cout << "\nप्रोसेस नं.\tप्रोसेस आकार\tब्लॉक नं.\n";    for (int i = 0; i < total_process; i++) {       cout << " " << i+1 << "\t\t" << process_size[i] << "\t\t";       if (allocation[i] != -1)          cout << allocation[i] + 1;       else          cout << "आवंटित नहीं";          cout << endl;    } } int main() {    //ब्लॉक आकार स्टोर करने के लिए सरणी बनाएं    int block_size[] = {300, 50, 200, 350, 70};     //प्रोसेस आकार स्टोर करने के लिए सरणी बनाएं    int process_size[] = {200, 47, 212, 426, 10};     //वेरिएबल total_blocks जिसमें ब्लॉक्स की कुल संख्या है    int total_blocks = sizeof(block_size) / sizeof(block_size[0]);     //वेरिएबल total_process जिसमें प्रोसेस की कुल संख्या है    int total_process = sizeof(process_size) / sizeof(process_size[0]);     //फर्स्ट_फिट फ़ंक्शन कॉल करें    First_Fit(block_size, total_blocks, process_size, total_process);    return 0 ; }

आउटपुट

प्रोसेस नं.    प्रोसेस आकार   ब्लॉक नं.   1                  200            1   2                  47             1           3                  212            4   4                  426         आवंटित नहीं   5                  10            1

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

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

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

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

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

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