Linux / proc / id / मैप को समझना


156

मैं अपने एम्बेडेड लिनक्स एप्लिकेशन के मेमोरी उपयोग को समझने की कोशिश कर रहा हूं। /proc/pid/mapsउपयोगिता / फ़ाइल विवरण देखने के लिए एक अच्छा संसाधन हो रहा है। दुर्भाग्य से मैं सभी कॉलम और प्रविष्टियों को नहीं समझता।

अनाम इनोड 0 प्रविष्टियों का क्या अर्थ है? ये कुछ बड़े मेमोरी सेगमेंट के लगते हैं।


1
proc(5) mmap(2)"लिनक्स कर्नेल को समझना" 9.3। मेमोरी क्षेत्र; 16.2। मेमोरी मैपिंग "लिनक्स वर्चुअल मेमोरी मैनेजर को समझना" 4.4 मेमोरी क्षेत्र
19

जवाबों:


264

प्रत्येक पंक्ति /proc/$PID/mapsकिसी प्रक्रिया या थ्रेड में सन्निहित आभासी मेमोरी के क्षेत्र का वर्णन करती है। प्रत्येक पंक्ति में निम्नलिखित फ़ील्ड हैं:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • पता - यह प्रक्रिया के पता स्थान में क्षेत्र का शुरुआती और अंतिम पता है
  • अनुमतियाँ - यह वर्णन करता है कि क्षेत्र के पृष्ठों तक कैसे पहुँचा जा सकता है। चार अलग-अलग अनुमतियाँ हैं: पढ़ना, लिखना, निष्पादित करना और साझा करना। यदि पढ़ने / लिखने / निष्पादित करने में अक्षम हैं, -तो r/ w/ के बजाय एक वसीयत दिखाई देगी x। यदि कोई क्षेत्र साझा नहीं किया गया है , तो यह निजी है , इसलिए एक के pबजाय एक दिखाई देगा s। यदि प्रक्रिया स्मृति को उस तरीके से एक्सेस करने का प्रयास करती है जिसकी अनुमति नहीं है, तो एक विभाजन दोष उत्पन्न होता है। mprotectसिस्टम कॉल का उपयोग करके अनुमतियां बदली जा सकती हैं।
  • ऑफसेट - यदि इस क्षेत्र को फ़ाइल (उपयोग mmap) से मैप किया गया था , तो यह उस फ़ाइल में ऑफसेट है जहां मैपिंग शुरू होती है। यदि किसी फ़ाइल से मेमोरी मैप नहीं की गई थी, तो यह सिर्फ 0 है।
  • डिवाइस - यदि क्षेत्र को फ़ाइल से मैप किया गया था, तो यह प्रमुख और मामूली डिवाइस नंबर (हेक्स में) है जहां फ़ाइल रहती है।
  • इनकोड - यदि इस क्षेत्र को फ़ाइल से मैप किया गया था, तो यह फ़ाइल नंबर है।
  • pathname - यदि किसी फाइल से रीजन मैप किया गया था, तो यह फाइल का नाम है। यह फ़ील्ड अनाम मैप किए गए क्षेत्रों के लिए रिक्त है। पसंद भी कर रहे हैं नाम के साथ विशेष क्षेत्रों [heap], [stack]या [vdso][vdso]आभासी गतिशील साझा वस्तु के लिए खड़ा है। इसका उपयोग कर्नेल मोड पर जाने के लिए सिस्टम कॉल द्वारा किया जाता है। यहाँ इसके बारे में एक अच्छा लेख है: "linux-Gate.so.1 क्या है?"

आप बहुत सारे अनाम क्षेत्रों को देख सकते हैं। ये आमतौर पर द्वारा बनाए जाते हैं, mmapलेकिन किसी भी फ़ाइल से जुड़े नहीं होते हैं। उनका उपयोग ढेर सारी विविध चीजों के लिए किया जाता है जैसे साझा मेमोरी या बफ़र्स को ढेर पर आवंटित नहीं किया जाता है। उदाहरण के लिए, मुझे लगता है कि preadread लाइब्रेरी नए मैप्स के लिए स्टैक्ड के रूप में अनाम मैप किए गए क्षेत्रों का उपयोग करती है।


4
हाँ pthreads स्टैक के लिए 8Mb ब्लॉक आवंटित कर रहे हैं स्टैक ओवरफ़्लो डिटेक्शन (मुझे लगता है) के लिए एक छोटे खंड के साथ। तो प्रत्येक pthread बनाया, डिफ़ॉल्ट रूप से, 8Mb का एक इनोड 0 मेमोरी क्षेत्र और 4Kb का एक इनोड 0 क्षेत्र आवंटित करता है।
सिमोन

तो आपके उदाहरण gpmमें बाइनरी फ़ाइल को कुछ आभासी पते पर शुरू से ही मैप करना है, ईएलएफ हेडर आदि के साथ? क्या लोडर को ELF हेडर को पार्स करने और व्यक्तिगत अनुभागों को मैप करने के लिए नहीं माना जाता है, न कि पूरी फाइल को?
दिमित्री ग्रिगोरीव

9

मेमोरी मैपिंग का उपयोग न केवल फाइलों को मेमोरी में मैप करने के लिए किया जाता है, बल्कि रैम को कर्नेल से रिक्वेस्ट करने के लिए भी किया जाता है। ये वे एंटे ० प्रविष्टियाँ हैं - आपका स्टैक, हीप, बीएसएस सेगमेंट और बहुत कुछ


5

कृपया देखें: http://man7.org/linux/man-pages/man5/proc.5.html

address           perms offset  dev   inode       pathname
00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon

पता फ़ील्ड उस प्रक्रिया में पता स्थान है जिस पर मैपिंग व्याप्त है।

परमिट फ़ील्ड अनुमतियों का एक समूह है:

 r = read
 w = write
 x = execute
 s = shared
 p = private (copy on write)

ऑफसेट फ़ील्ड फ़ाइल में ऑफसेट है / जो भी हो;

देव डिवाइस है (प्रमुख: मामूली);

inode उस उपकरण पर इनोड है। यह बताता है कि कोई भी इनोड मेमोरीग्रेशन से जुड़ा नहीं है, जैसा कि BSS (अनइंस्टाल्यूटेड डेटा) के साथ होगा।

पाथनाम फ़ील्ड आमतौर पर फ़ाइल होगी जो मैपिंग का समर्थन कर रही है। ईएलएफ फ़ाइलों के लिए, आप ईएलएफ प्रोग्राम हेडर (रीड-एल) में ऑफसेट क्षेत्र को देखकर ऑफसेट फ़ील्ड के साथ आसानी से समन्वय कर सकते हैं।

लिनक्स 2.0 के तहत, कोई रास्ता नहीं दिया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.