mmap
यदि आप एक ही फ़ाइल से केवल पढ़ने के फैशन में डेटा तक पहुँचने के लिए कई प्रक्रियाएँ करते हैं, तो यह बहुत अच्छा है, जो कि मेरे द्वारा लिखी जाने वाली सर्वर प्रणालियों में सामान्य है। mmap
उन सभी प्रक्रियाओं को एक ही भौतिक मेमोरी पेज को साझा करने की अनुमति देता है, जिससे बहुत सारी मेमोरी बचती है।
mmap
पेजिंग संचालन को अनुकूलित करने के लिए ऑपरेटिंग सिस्टम को भी अनुमति देता है। उदाहरण के लिए, दो कार्यक्रमों पर विचार करें; वह प्रोग्राम A
जो किसी 1MB
फाइल में बफर बनाने के साथ पढ़ता है malloc
, और प्रोग्राम B जिसे mmaps
1MB फाइल मेमोरी में रखता है। यदि ऑपरेटिंग सिस्टम को A
मेमोरी मेमोरी का कुछ भाग स्वैप करना है, तो उसे मेमोरी को पुनः उपयोग करने से पहले बफर की सामग्री को स्वैप करना होगा। में B
के मामले में किसी भी असंशोधित mmap
ओएस जानता है क्योंकि कैसे मौजूदा फ़ाइल वे थे से उन्हें बहाल करने के लिए 'घ पृष्ठ तुरंत पुन: उपयोग किया जा सकता है mmap
' से डी। (OS यह पता लगा सकता है कि शुरू में लिखने योग्य mmap
'd' पृष्ठों को चिन्हित करके कौन से पृष्ठ अनमॉडिफाइड हैं और कॉपी स्ट्रैटजी के समान, सेग दोष को पकड़ सकते हैं )।
mmap
अंतर प्रक्रिया संचार के लिए भी उपयोगी है । आप उन mmap
फ़ाइलों को पढ़ / लिख सकते हैं, जिन्हें उस प्रक्रिया में लिखना है और फिर उस mmap'd
क्षेत्र में सिंक्रोनाइज़ेशन प्राइमेटिव्स का उपयोग करना है (यह वही है जो MAP_HASSEMAPHORE
झंडा है)।
एक जगह mmap
अजीब हो सकती है यदि आपको 32 बिट मशीन पर बहुत बड़ी फ़ाइलों के साथ काम करने की आवश्यकता है। ऐसा इसलिए है क्योंकि mmap
आपकी प्रक्रिया के पते स्थान में पते का एक सन्निहित ब्लॉक ढूंढना पड़ता है जो फ़ाइल की पूरी रेंज को मैप करने के लिए पर्याप्त है। यह एक समस्या बन सकती है यदि आपका पता स्थान खंडित हो जाता है, जहां आपके पास 2 जीबी पता स्थान खाली हो सकता है, लेकिन इसकी कोई भी व्यक्तिगत श्रेणी 1 जीबी फ़ाइल मैपिंग में फिट नहीं हो सकती है। इस मामले में आपको फ़ाइल को छोटे हिस्से में मैप करना पड़ सकता है, जितना आप इसे फिट बनाना चाहते हैं।
mmap
पढ़ने / लिखने के प्रतिस्थापन के रूप में एक और संभावित अजीबता यह है कि आपको पृष्ठ आकार के ऑफसेट पर अपनी मैपिंग शुरू करनी होगी। यदि आप ऑफसेट पर कुछ डेटा प्राप्त करना चाहते हैं, तो आपको X
उस ऑफसेट को ठीक करना होगा ताकि यह संगत हो mmap
।
और अंत में, पढ़ना / लिखना एकमात्र तरीका है जिससे आप कुछ प्रकार की फ़ाइलों के साथ काम कर सकते हैं। पाइप और ट्टीmmap
जैसी चीजों पर इस्तेमाल नहीं किया जा सकता है ।