स्लैब आवंटक एक ही प्रकार की कई वस्तुओं के आसान आवंटन के लिए एक अमूर्त परत है। इंटरफ़ेस समारोह
struct kmem_cache * kmem_cache_create(const char *name,
size_t size, size_t align, unsigned long flags,
void (*ctor)(void*));
यह समारोह एक नया स्लैब संभाजक कि size
के आवंटन को संभालने के लिए सक्षम हो जाएगा बनाता है लंबे वस्तुओं -bytes प्रदान करता है। यदि सृजन सफल होता है, तो आप अपने सूचक को संबंधित struct kmem_cache
पर प्राप्त करते हैं। इस संरचना में स्लैब के बारे में जानकारी होती है जो यह प्रबंधित करती है।
जैसा कि यह विकिपीडिया विवरण पर निहित है, ऐसी अतिरिक्त परत का उद्देश्य स्मृति विखंडन के मुद्दों को रोकने के लिए है जो स्मृति आवंटन को सरल और सहज तरीके से बनाया गया हो सकता है। ऐसा करने के लिए, यह निम्न डेटा संरचना के माध्यम से स्लैब की धारणा का परिचय:
- :
struct slab {
struct list_head list; /* embedded list structure */
unsigned long colouroff;
void *s_mem; /* first object in the slab */
unsigned int inuse; /* allocated objects in the slab */
kmem_bufctl_t free; /* first free object (if any) */
};
इस प्रकार, kmem_cache
वस्तु अपने स्लैब के 3 सूचियों रखती है, 3 जायके में एकत्र हुए खाली स्लैब: इन स्लैब में इन-यूज ऑब्जेक्ट नहीं होता है।
- आंशिक स्लैब: इन स्लैब में वर्तमान में उपयोग की जाने वाली ऑब्जेक्ट्स हैं लेकिन अभी भी स्मृति क्षेत्र है जो नई वस्तुओं को पकड़ सकता है।
- पूर्ण स्लैब: इन स्लैब में वस्तुओं का उपयोग किया जा रहा है और नई वस्तुओं (पूर्ण ...) होस्ट नहीं कर सकता है।
जब पटिया allocator के माध्यम से एक वस्तु का अनुरोध है, यह एक आंशिक स्लैब के भीतर आवश्यक स्मृति क्षेत्र पाने के लिए, अगर यह नहीं है, यह इसके एक खाली स्लैब से मिलेगा कर सकते हैं की कोशिश करेंगे।
आप इस बारे में अधिक जानकारी इकट्ठा करने के लिए उत्सुक हैं, तो आप रॉबर्ट लव का Linux Kernel Development
आंतरिक विखंडन को कैसे कम करता है? अक्सर स्लैब केवल आंशिक रूप से पूर्ण होते हैं – CodyBugstein
@Imray: आंतरिक विखंडन तब होता है जब डेटा का आकार डेटा को पकड़ने के लिए आवंटित ब्लॉक के आकार से कम होता है। जब आप आकार के कैश ब्लॉक आवंटित करते हैं तो कैश ऑब्जेक्ट आकार "आंतरिक" विखंडन स्वचालित रूप से घट जाता है। पूरी तरह से पूर्ण होने के कारण कभी विखंडन का मानदंड नहीं था। –
एक समान प्रभाव है यदि स्लैब में ऑब्जेक्ट आकार का योग स्लैब आकार से कम है। एक ext4 inode कैश ऑब्जेक्ट पर विचार करें, जो होता है (किसी विशेष कर्नेल में) आकार में 1070 बाइट्स होता है। एसएलबी आवंटक इसके लिए एक 4 के स्लैब चुनता है, क्योंकि इसे पुनः दावा करने योग्य के रूप में चिह्नित किया जाता है। 1070 * 3 =886 अपशिष्ट बाइट्स। आंतरिक बाइट-सूचियों के लिए कुछ बाइट्स का उपयोग किया जाता है, लेकिन आवंटित स्थान के 20% से अधिक का उपयोग नहीं किया जा सकता है। इसके अलावा, एक स्लैब में कुछ इनोड्स का पुनर्मूल्यांकन स्मृति की मात्रा का कारण बन सकता है जो पूर्ण नहीं हैं, फिर भी अन्य प्रयोजनों के लिए उपयोग नहीं किया जा सकता है जब तक कि शेष वस्तुओं को स्लैब में पुनः प्राप्त नहीं किया जाता है। – GreenReaper