विधि # 4 में मैन्युअल रूप से उन पेजों की संख्या बढ़ाना शामिल है जो कमांड-लाइन तर्कों के लिए कर्नेल के भीतर आवंटित किए गए हैं। यदि आप शामिल / linux / binfmts.h फ़ाइल को देखते हैं, तो आपको निम्नलिखित शीर्ष के पास मिलेगा:
/*
* MAX_ARG_PAGES defines the number of pages allocated for arguments
* and envelope for the new program. 32 should suffice, this gives
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
कमांड-लाइन तर्कों को समर्पित मेमोरी की मात्रा बढ़ाने के लिए, आपको बस MAX_ARG_PAGES मान अधिक संख्या के साथ प्रदान करना होगा। एक बार जब यह संपादन सहेज लिया जाता है, तो आप नए कर्नेल में सामान्य रूप से करते हैं, बस पुन: स्थापित, स्थापित करें और रिबूट करें।
अपने स्वयं के परीक्षण प्रणाली पर मैंने इस मूल्य को 64 तक बढ़ाकर अपनी सभी समस्याओं को हल करने में कामयाब रहा। व्यापक परीक्षण के बाद, मैंने स्विच के बाद से एक भी समस्या का अनुभव नहीं किया है। यह पूरी तरह से अपेक्षित है, यहां तक कि MAX_ARG_PAGES
64 के सेट के साथ भी , सबसे लंबे समय तक संभव कमांड लाइन जो मैं उत्पादन कर सकता था वह केवल 256KB सिस्टम मेमोरी पर कब्जा कर सकता है - आज के सिस्टम हार्डवेयर मानकों द्वारा बहुत अधिक नहीं।
विधि # 4 के लाभ स्पष्ट हैं। अब आप केवल सामान्य रूप से कमांड चलाने में सक्षम हैं, और यह सफलतापूर्वक पूरा होता है। नुकसान समान रूप से स्पष्ट हैं। यदि आप उपलब्ध सिस्टम मेमोरी की मात्रा से परे कमांड लाइन के लिए उपलब्ध मेमोरी की मात्रा बढ़ाते हैं, तो आप अपने सिस्टम पर एक डॉस हमला कर सकते हैं और इसे क्रैश कर सकते हैं। विशेष रूप से बहुउपयोगकर्ता प्रणालियों पर, यहां तक कि एक छोटी सी वृद्धि का भी महत्वपूर्ण प्रभाव हो सकता है क्योंकि प्रत्येक उपयोगकर्ता को तब अतिरिक्त मेमोरी आवंटित की जाती है। इसलिए हमेशा अपने स्वयं के वातावरण में बड़े पैमाने पर परीक्षण करें, क्योंकि यह निर्धारित करने का सबसे सुरक्षित तरीका है कि क्या विधि # 4 आपके लिए एक व्यवहार्य विकल्प है।