2012-04-19 8 views
5

वर्चुअल मेमोरी पेज आकार को बदलना संभव है? मैं यह पूछ रहा हूं क्योंकि X86_64 part of the MMU article on wikipedia में, यह विभिन्न पेज आकारों के बारे में बात करता है। यदि पृष्ठ का आकार वास्तव में बदला जा सकता है, तो यह कैसे बदला जाता है?क्या वर्चुअल मेमोरी पेज आकार बदलना संभव है?

+0

क्या आप पूछ रहे हैं कि कोई एप्लिकेशन अपना पृष्ठ आकार कैसे बदल सकता है, या ऑपरेटिंग सिस्टम एक अलग आकार के पेज कैसे बनाता है? – ughoavgfhw

+0

वैसे मैं पूछ रहा हूं कि पेज आकार किसी भी तरह बदला जा सकता है, लेकिन यदि यह प्रति आवेदन किया जा सकता है, तो यह बहुत अच्छा होगा! – pythonic

उत्तर

4

x86_64 पर आप hugetlbfs की मदद से सामान्य 4 कीबी पृष्ठों के बजाय 2 एमआईबी पृष्ठों का स्पष्ट रूप से अनुरोध कर सकते हैं। पारदर्शी विशाल पृष्ठ के साथ आधुनिक कर्नेल पर एक छोटे से पृष्ठ पृष्ठभूमि में विशाल पृष्ठों को स्वचालित रूप से संयोजित कर सकते हैं, यह देखते हुए कि स्मृति विखंडन बड़ा नहीं है और पर्याप्त स्मृति अभी भी मुफ़्त है।

-2

विंडोज: http://windows.microsoft.com/en-US/windows-vista/Change-the-size-of-virtual-memory

लिनक्स:

/* PAGE_SHIFT निर्धारित करता है:

/usr/src/linux/include/asm-generic/page.h में आप निम्नलिखित लाइनों पा सकते हैं पृष्ठ आकार */

परिभाषित PAGE_SHIFT 12

नीचे दिए गए लेख टिप्पणियाँ अनुभाग में बताते हैं।

http://www.cyberciti.biz/faq/linux-check-the-size-of-pagesize/

/proc/sys/VM/swappiness पैरामीटर, जो क्रम स्मृति बाहर गमागमन के बीच संतुलन बदल जाता है, के रूप में सिस्टम पेज कैश से पृष्ठों को छोड़ने के लिए विरोध किया।

+2

ओपी वर्चुअल मेमोरी में दिए गए पेज के आकार को बदलने के बारे में पूछ रहा है, वर्चुअल मेमोरी के आकार को नहीं बदल रहा है। इसके अलावा, सवाल लिनक्स टैग किया गया है। – ughoavgfhw

+2

उम ... ओपी लिनक्स के बारे में पूछ रहा है ... आपका लिंक विंडोज के लिए है। – Mysticial

3

जहाँ तक मुझे पता है, कोई ऑपरेटिंग सिस्टम की अनुमति देता है एक पृष्ठ के आकार का अनुरोध करने के लिए आवेदन। X86_64 पेजिंग सिस्टम विभिन्न आकारों के पृष्ठों को मिश्रित करने की क्षमता प्रदान करता है, लेकिन आमतौर पर इसका उपयोग केवल तभी किया जाता है जब बड़ी मात्रा में स्मृति आवंटित की जाती है।

x86_64 (और x86) पर, वर्चुअल पते को पृष्ठ सारणी की एक श्रृंखला के माध्यम से भौतिक पते पर मैप किया जाता है। प्रत्येक तालिका भौतिक आभासी पते के लिए बिट्स की एक निश्चित संख्या प्रदान करती है। x86_64 वर्तमान में प्रत्येक मैपिंग के लिए 4 टेबल तक का उपयोग कर सकता है, प्रत्येक 9 वर्चुअल एड्रेस बिट्स प्रदान करता है, और कम 12 बिट पेज के ऑफसेट को निर्दिष्ट करते हैं। पहले 3 टेबल प्रत्येक तालिका के भौतिक पते पर इंगित करते हैं, और वास्तविक पृष्ठ के भौतिक पते के अंतिम बिंदु।

| PML4T entry |-+ 
       V 
    +-| PDPT entry | 
    V 
| PDT entry |-+ 
       V 
    | PT entry |-> Physical address (4kB page) 

हालांकि, दूसरे और तीसरे तालिका प्रविष्टियों भी एक सा है, जो सेट करता है, तो यह संकेत करता है आगे कोई टेबल देखते हैं होते हैं और उस प्रविष्टि भौतिक पता प्रदान करता है। जब ऐसा होता है, तो अन्य तालिकाओं द्वारा प्रदान की जाने वाली बिट्स को भौतिक पृष्ठ ऑफ़सेट में स्थानांतरित किया जाता है, प्रत्येक तालिका को हटाए जाने के लिए पेज आकार को 512 तक गुणा कर दिया जाता है।

| PML4T entry |-+ 
       V 
    +-| PDPT entry | 
    V 
| PDT entry (PS=1) | -> Physical address (2MB page) 

किसी दिए गए वर्चुअल ऐड्रेस को मैप करने के लिए प्रयोग किया जाता तालिकाओं की संख्या बदलने से, ऑपरेटिंग सिस्टम 4kB (4 टेबल), 2 एमबी (3 टेबल), या 1GB (2 टेबल) के पन्नों बना सकते हैं। चूंकि प्रत्येक तालिका प्रविष्टि में बिट प्रदान किया जाता है, इसलिए अलग-अलग पेज आकार मिश्रित किए जा सकते हैं, इसलिए उदाहरण के लिए 2 एमबी पृष्ठ के बाद 2 एमबी पेज का अनुसरण किया जा सकता है।

+0

लिनक्स पर madvise() देखें, आप कम से कम बड़े पेज MADV_HUGEPAGE के साथ कर सकते हैं – nos

2

हां और नहीं।

पृष्ठ का आकार निश्चित किया गया है। लेकिन वर्चुअल मेमोरी क्षेत्र का आकार नहीं है (x86 आर्किटेक्चर पर)।जब आप वर्चुअल मेमोरी क्षेत्र बनाते हैं जो किसी पृष्ठ पर आकार के बराबर नहीं है, तो इसे सेगमेंट कहा जाता है।

संबंधित मुद्दे