https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
सैद्धांतिक रूप से, आप
memfd_create()
नए syscalls को शुरू किए बिना [ ] व्यवहार प्राप्त कर सकते हैं , जैसे:
int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU);
(ध्यान दें, यहां एक tmpfs की अधिक गारंटी के लिए, हम " /dev/shm
" के बजाय " " का उपयोग कर सकते हैं /tmp
)।
इसलिए, सबसे महत्वपूर्ण सवाल यह है कि नरक को हमें तीसरे तरीके की आवश्यकता क्यों है?
[...]
- बैकिंग-मेमोरी को उस प्रक्रिया के लिए जिम्मेदार माना जाता है जो फ़ाइल का मालिक है और माउंट-कोटा के अधीन नहीं है।
^ क्या मैं इस वाक्य के पहले भाग पर भरोसा नहीं कर सकता हूं?
Memfd_create () कोड सचमुच एक "के रूप में कार्यान्वित किया जाता है [एक] tmpfs में लिंक रद्द फ़ाइल में रहने वाले जो गिरी आंतरिक होना चाहिए "। कोड को ट्रेस करते हुए, मैं समझता हूं कि यह एलएसएम जांचों को लागू नहीं करने में भिन्न है, "मुहरों" का समर्थन करने के लिए भी मेम बनाए गए हैं, जैसा कि ब्लॉग पोस्ट समझाने के लिए आगे बढ़ता है। हालांकि, मैं बहुत संदेह है कि memfds कर रहे हैं रहा हूँ हिसाब सिद्धांत रूप में एक tmpfile लिए अलग तरह से।
विशेष रूप से, जब ओओएम-हत्यारा दस्तक देता है, तो मुझे नहीं लगता कि यह स्मृति द्वारा आयोजित स्मृति के लिए जिम्मेदार होगा। यह कुल 50% RAM तक हो सकता है - आकार का मान = tmpfs के लिए विकल्प । कर्नेल आंतरिक tmpfs के लिए एक अलग मूल्य निर्धारित नहीं करता है, इसलिए यह 50% के डिफ़ॉल्ट आकार का उपयोग करेगा।
इसलिए मुझे लगता है कि हम आम तौर पर उन प्रक्रियाओं की अपेक्षा कर सकते हैं जो एक बड़े ज्ञापन को रखती हैं, लेकिन कोई अन्य महत्वपूर्ण स्मृति आवंटन नहीं है, जो ओओएम-मारे नहीं जाएंगे। क्या वो सही है?