2012-04-02 10 views
21

क्या कोई समझा सकता है कि आश्रम क्यों बनाया गया था?असम के पास कौन सी विशेष शक्तियां हैं?

मैं अभी mm/ashmem.c के माध्यम से ब्राउज़ कर रहा हूं। जैसा कि मैं कह सकता हूं, कर्नेल एस्हेम को फाइल-बैकड मेमोरी के रूप में सोच रहा है जिसे mmap'd किया जा सकता है। लेकिन फिर, आश्रम को लागू करने की परेशानी क्यों जाती है? ऐसा लगता है कि रैम एफएस को घुमाने और फिर स्मृति साझा करने के लिए फ़ाइलमैप/एमएमएपी का उपयोग करके एक ही कार्यक्षमता हासिल की जा सकती है।

मुझे यकीन है कि ashmem अधिक फैंसी सामान कर सकता है - कोड को देखने से, ऐसा लगता है कि पिनिंग/अनपिनिंग पृष्ठों के साथ कुछ करना है?

उत्तर

19

अशमम प्रक्रियाओं को अनुमति देता है जो पूर्वजों द्वारा नाम से स्मृति मानचित्र साझा करने के लिए संबंधित नहीं हैं, जो स्वचालित रूप से साफ हो जाते हैं।

सादा पुराना अनाम एमएमएपीएस और सिस्टम वी साझा स्मृति में इनमें से कुछ आवश्यकताओं की कमी है।

सिस्टम वी साझा स्मृति खंड तब चलते हैं जब प्रोग्राम चलाने से संदर्भित नहीं किया जाता है (जो कभी-कभी एक विशेषता है, कभी-कभी परेशानी होती है)।

बेनामी साझा एमएमएपी माता-पिता से बाल प्रक्रियाओं में पारित किया जा सकता है, जो कि कभी-कभी आप प्रक्रियाओं को स्मृति साझा करने के तरीके से संबंधित नहीं करना चाहते हैं।

+3

लेकिन ashmem फ़ाइल वर्णनकर्ताओं के माध्यम से साझा करने की आवश्यकता है। एक बैकिंग फ़ाइल बनाना और साझा करने के लिए प्रत्येक प्रक्रिया को एमएमएपी करने की इजाजत देना एक ही लक्ष्य पूरा करेगा, नहीं? मैं देखता हूं कि यह शम से बेहतर कैसे है लेकिन बैकिंग फ़ाइल होने से बेहतर कैसे है? –

+1

यह बेहतर है क्योंकि, अच्छी तरह से, जब आप वास्तव में चाहते हैं तो फ़ाइल बनाना एक स्मृति का एक साझा टुकड़ा एक सर्किट, हैकी मार्ग है। (फ़ाइल डिस्क्रिप्टर का उपयोग करने के लिए अभी भी हैकी है, लेकिन वहां फ़ाइल रखने से कम हैकी भी है। फ़ाइल डिस्क्रिप्टर पहले से ही विभिन्न प्रकार के संसाधनों, जैसे सॉकेट और डिवाइस को सामान्यीकृत करते हैं।) – Kaz

+0

वह पिनिंग और अनपिनिंग व्यवसाय आपको कैश को लागू करने देता है आपके एप्लिकेशन में मेमोरी जो स्मृति की आवश्यकता होने पर दूर हो जाएगी, इसी तरह कर्नेल बफर के लिए। एपीआई आपको बताता है कि क्या स्मृति को शुद्ध किया गया है (क्या आपके पास अभी भी आपका कैश है या नहीं)। – Kaz

5

क्या कोई समझा सकता है कि आश्रम क्यों बनाया गया था?

डेविड टर्नर (एंड्रॉयड NDK पर एक नियमित रूप से) Why was bionic/libc/include/sys/shm.h removed? में यह उत्तर दिया:

... सिस्टम वी IPCs कप केक के लिए हटा दिया गया है। विवरण के लिए बायोनिक/libc/docs/SYSV-IPC.TXT देखें।

संक्षेप में, सिस्टम वी IPCs डिजाइन द्वारा टपकाया कर रहे हैं और जहां प्रक्रियाओं की हत्या अन्य लोगों के लिए जगह बनाने के लिए सिर्फ सामान्य और बहुत आम है Android के क्रम पर्यावरण में अच्छी तरह से नहीं खेलते हैं। अंत परिणाम यह है कि इन आईपीसी पर निर्भर कोड कर्नेल की एसआईएसवी आईपीसी कुंजी की आंतरिक तालिका भरने को समाप्त कर सकता है, जो कुछ सुरक्षित रूप से रीबूट द्वारा हल किया जा सकता है।

हम भविष्य में वैकल्पिक तंत्र प्रदान करना चाहते हैं जिसमें समान समस्याएं नहीं हैं। इस समय हम जो चीज प्रदान करते हैं वह एशम है, जो विशेष रूप से एंड्रॉइड के लिए इस तरह की समस्या से बचने के लिए डिज़ाइन किया गया था (हालांकि यह भी उतना ही दस्तावेज नहीं है जैसा कि इसे करना चाहिए)। हमें शायद सेमेफोर और/या संदेश कतारों के समान कुछ चाहिए।

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