डायरेक्टरी बेस्ड कैशे कोहेरेन्स

कंप्यूटर इंजीनियरिंग में, डायरेक्टरी-आधारित कैश कोहेरेंस एक प्रकार का कैश कोहेरेंस#कोहेरेंस तंत्र है, जहां बस स्नूपिंग के स्थान पर कैश को प्रबंधित करने के लिए निर्देशिकाओं का उपयोग किया जाता है। प्रसारण (नेटवर्किंग)  के उपयोग के कारण बस जासूसी के तरीके खराब पैमाने पर हैं। इन विधियों का उपयोग कंप्यूटर के प्रदर्शन और निर्देशिका सिस्टम की  scalability  दोनों को लक्षित करने के लिए किया जा सकता है।

पूर्ण बिट वेक्टर प्रारूप
पूर्ण अंश  वेक्टर प्रारूप में, कंप्यूटर_मेमोरी में प्रत्येक संभावित कैश लाइन के लिए, एक बिट का उपयोग यह ट्रैक करने के लिए किया जाता है कि क्या प्रत्येक व्यक्तिगत सेंट्रल प्रोसेसिंग यूनिट में वह लाइन उसके कैश (कंप्यूटिंग) में संग्रहीत है। पूर्ण बिट वेक्टर प्रारूप लागू करने के लिए सबसे सरल संरचना है, लेकिन सबसे कम स्केलेबल है। एसजीआई उत्पत्ति 2000 प्रोसेसर की संख्या के आधार पर पूर्ण बिट वेक्टर और मोटे बिट वेक्टर के संयोजन का उपयोग करता है। प्रत्येक निर्देशिका प्रविष्टि में निर्देशिका की स्थिति को ट्रैक करने के लिए बिट्स के साथ-साथ प्रति प्रोसेसर प्रति कैश लाइन में 1 बिट संग्रहीत होना चाहिए। इससे कुल आवश्यक आकार (प्रोसेसर की संख्या)×कैश लाइनों की संख्या, स्टोरेज ओवरहेड (कंप्यूटिंग) अनुपात (प्रोसेसर की संख्या)/(कैश ब्लॉक आकार×8) हो जाता है।

यह देखा जा सकता है कि निर्देशिका ओवरहेड प्रोसेसर की संख्या के साथ रैखिक रूप से स्केल करती है। हालांकि यह कम संख्या में प्रोसेसर के लिए ठीक हो सकता है, लेकिन जब बड़े सिस्टम में इसे लागू किया जाता है तो निर्देशिका के लिए आकार की आवश्यकताएं अत्यधिक हो जाती हैं। उदाहरण के लिए, 32 बाइट्स और 1024 प्रोसेसर के ब्लॉक आकार के साथ, स्टोरेज ओवरहेड अनुपात 1024/(32×8) = 400% हो जाता है।

मोटे बिट वेक्टर प्रारूप
मोटे बिट वेक्टर प्रारूप में पूर्ण बिट वेक्टर प्रारूप के समान संरचना होती है, हालांकि प्रत्येक कैश लाइन के लिए प्रति प्रोसेसर एक बिट को ट्रैक करने के बजाय, निर्देशिका कई प्रोसेसर को नोड_(कंप्यूटर_साइंस) में समूहित करती है, यह संग्रहीत करती है कि कैश लाइन नोड में संग्रहीत है या नहीं एक पंक्ति के बजाय. यह बस (कंप्यूटिंग) ट्रैफ़िक की बचत (प्रति नोड प्रोसेसर) × (कुल लाइनें) स्थान के बिट्स की कीमत पर आकार आवश्यकताओं में सुधार करता है। इस प्रकार अनुपात ओवरहेड समान है, बस प्रोसेसर की संख्या को प्रोसेसर समूहों की संख्या से बदल दिया गया है। जब समूह में एक प्रोसेसर के पास मौजूद कैश लाइन के लिए बस अनुरोध किया जाता है, तो निर्देशिका केवल कैश में शामिल होने के बजाय नोड में प्रत्येक प्रोसेसर में सिग्नल प्रसारित करती है, जिससे उन नोड्स पर अनावश्यक ट्रैफ़िक उत्पन्न होता है जिनमें डेटा नहीं होता है कैश्ड.

इस मामले में निर्देशिका प्रविष्टि प्रत्येक कैश लाइन के लिए प्रोसेसर के समूह के लिए 1 बिट का उपयोग करती है। पूर्ण बिट वेक्टर प्रारूप के समान उदाहरण के लिए यदि हम एक समूह के रूप में 8 प्रोसेसर के लिए 1 बिट पर विचार करते हैं, तो स्टोरेज ओवरहेड 128/(32×8)=50% होगा। यह पूर्ण बिट वेक्टर प्रारूप की तुलना में एक महत्वपूर्ण सुधार है।

विरल निर्देशिका प्रारूप
कैश किसी विशेष समय में मुख्य मेमोरी में केवल ब्लॉकों का एक छोटा उपसमूह संग्रहीत करता है। इसलिए निर्देशिका में अधिकांश प्रविष्टियाँ अनकैश्ड ब्लॉक से संबंधित होंगी। विरल निर्देशिका प्रारूप में निर्देशिका में केवल कैश्ड ब्लॉकों को संग्रहीत करके बर्बादी को कम किया जाता है। 64KB के कैश आकार वाले एक प्रोसेसर पर विचार करें, जिसका ब्लॉक आकार 32 बाइट्स और मुख्य मेमोरी का आकार 4MB हो। विरल निर्देशिका प्रारूप में निर्देशिका में प्रविष्टियों की अधिकतम संख्या 2048 है। यदि निर्देशिका में मेमोरी के सभी ब्लॉकों के लिए एक प्रविष्टि है, तो निर्देशिका में प्रविष्टियों की संख्या 131072 होगी। इस प्रकार यह स्पष्ट है कि भंडारण में सुधार हुआ है विरल निर्देशिका प्रारूप द्वारा प्रदान किया गया बहुत महत्वपूर्ण है।

संख्या-संतुलित द्विआधारी वृक्ष प्रारूप
इस प्रारूप में निर्देशिका को विकेंद्रीकृत किया जाता है और मेमोरी ब्लॉक साझा करने वाले कैश के बीच वितरित किया जाता है। मेमोरी ब्लॉक साझा करने वाले विभिन्न कैश को बाइनरी ट्री के रूप में व्यवस्थित किया जाता है। कैश जो मेमोरी ब्लॉक तक सबसे पहले पहुंचता है वह ट्री (डेटा संरचना) है। प्रत्येक मेमोरी ब्लॉक में रूट नोड जानकारी (HEAD) और शेयरिंग काउंटर फ़ील्ड (SC) होती है। SC फ़ील्ड में ब्लॉक साझा करने वाले कैश की संख्या होती है। प्रत्येक कैश प्रविष्टि में अगले साझाकरण कैश के लिए पॉइंटर (कंप्यूटर प्रोग्रामिंग) होता है जिसे एल-सीएचडी और आर-सीएचडी के नाम से जाना जाता है। इस निर्देशिका के लिए एक शर्त यह है कि बाइनरी ट्री की संख्या संतुलित होनी चाहिए, यानी बाएं उप ट्री में नोड्स की संख्या दाएं उप ट्री में नोड्स की संख्या के बराबर या उससे एक अधिक होनी चाहिए। सभी उपवृक्षों की संख्या भी संतुलित होनी चाहिए।

श्रृंखलाबद्ध निर्देशिका प्रारूप
इस प्रारूप में मेमोरी निर्देशिका पॉइंटर को नवीनतम कैश में रखती है जिसने ब्लॉक तक पहुंच बनाई है और प्रत्येक कैश में पिछले कैश में पॉइंटर होता है जो ब्लॉक तक पहुंचता है। इसलिए जब कोई प्रोसेसर मेमोरी में किसी ब्लॉक को लिखने का अनुरोध भेजता है, तो प्रोसेसर पॉइंटर्स की श्रृंखला के नीचे कैश अमान्यकरण भेजता है। इस निर्देशिका में जब कैश ब्लॉक को प्रतिस्थापित किया जाता है तो हमें निर्देशिका को बदलने के लिए लिंक की गई सूची को ग्राफ़_ट्रैवर्सल करने की आवश्यकता होती है जो लेटेंसी_(इंजीनियरिंग)#कंप्यूटर हार्डवेयर और ऑपरेटिंग सिस्टम को बढ़ाती है। इसे रोकने के लिए अब दोहरी रूप से लिंक की गई सूचियों का व्यापक रूप से उपयोग किया जाता है, जिसमें प्रत्येक कैश्ड कॉपी में पिछले और अगले कैश के लिए पॉइंटर्स होते हैं जो ब्लॉक तक पहुंचते हैं।

सीमित सूचक प्रारूप
सीमित पॉइंटर प्रारूप डेटा को कैश करने वाले प्रोसेसर को ट्रैक करने के लिए पॉइंटर्स की एक निर्धारित संख्या का उपयोग करता है। जब कोई नया प्रोसेसर किसी ब्लॉक को कैश करता है, तो उस प्रोसेसर को इंगित करने के लिए पूल से एक फ्री पॉइंटर चुना जाता है। ऐसे मामलों को संभालने के लिए कुछ विकल्प हैं जब शेयर करने वालों की संख्या फ्री पॉइंटर्स की संख्या से अधिक हो जाती है। एक विधि नए अनुरोधकर्ता के लिए इसके पॉइंटर का उपयोग करके किसी एक हिस्सेदार को अमान्य करना है, हालांकि यह उन मामलों में महंगा हो सकता है जहां किसी ब्लॉक में बड़ी संख्या में पाठक हों, जैसे कि लॉक। एक अन्य तरीका यह है कि सभी ब्लॉकों के लिए मुफ्त पॉइंटर्स का एक अलग पूल उपलब्ध हो। यह विधि आमतौर पर प्रभावी होती है क्योंकि बड़ी संख्या में प्रोसेसर द्वारा साझा किए गए ब्लॉक की संख्या सामान्य रूप से बहुत बड़ी नहीं होती है।