नोट - kmalloc और kmem_cache, या vmalloc:
kmalloc: सर्वश्रेष्ठ तेज आवंटन है कि एक पृष्ठ से छोटे हैं के लिए इस्तेमाल किया (PAGE_SIZE, 0x1000 सबसे आर्किटेक्चर पर)। इसमें मैपिंग मेमोरी शामिल नहीं है, इसलिए आपको कर्नेल की 1: 1 भौतिक मेमोरी मैपिंग से सीधे मेमोरी मिलती है। आपको शारीरिक रूप से आकस्मिक स्मृति मिलती है। ध्यान दें कि यदि आप से अधिक एक पृष्ठ (यानी आदेश> 0) आवंटित करना चाहते हैं, तो आप बाहरी विखंडन के मुद्दों में बंपिंग का जोखिम उठाने का जोखिम उठाते हैं - यानी कॉल पर्याप्त विफल होने पर भी असफल हो सकता है। उच्च आदेश - आवंटन विफलता के लिए उच्च अवसर, और अप-टाइम यहां भी एक कारक निभाता है।
यदि आप अधिकतम आवंटन दक्षता प्राप्त करना चाहते हैं तो प्रत्येक प्रकार की संरचना के लिए अपने स्वयं के kmem_cache का उपयोग करने का तरीका है (इस रणनीति के लिए अन्य लाभ/आवंटन से आपकी आवंटन की स्थिति की निगरानी करने और स्मृति को पकड़ने में सक्षम हैं अधिक आसानी से लीक)।
vmalloc: एक से अधिक पृष्ठों के आवंटन। आपको कर्नेल स्पेस में मैप-मेमोरी मिलती है। दृश्यों के पीछे यह उपयोगकर्ता के समान होने के समान है - कर्नेल पृष्ठों का एक समूह आवंटित करता है और उन्हें वर्चुअल एड्रेस स्पेस में मानचित्र करता है। यह आवंटन kmalloc की तुलना में धीमा है, और स्मृति पहुंच थोड़ा अधिक ओवरहेड हो सकती है।
स्रोत
2011-11-02 22:40:31
दूसरे शब्दों में हम सभी जानते हैं # शामिल कर्नेल में मौजूद नहीं है जिसमें मुझे क्या शामिल होना चाहिए? –
yoavstr