हमारे Computer में हम आमतौर पर दो प्रकार की मेमोरी को जानते हैं. एक प्राथमिक मेमरी जो की ROM (हार्ड डिस्क) को कहा जाता है, और दूसरा Temporary memory जो की RAM को कहा जाता है. लेकिन इन दो के अलावा, एक और प्रकार की मेमोरी है जो हमारे पास इन सभी प्रकार के उपकरणों में शामिल होती है और वह है कैश Memory. लेकिन हम मे से बहुतों को पता नहीं होता है कि कैश मेमोरी क्या है और यह हमारे डिवाइस पर कैसे काम करता है. तो आइए जानते हैं.
कैश Memory एक चिप – आधारित Computer डिवाइस है जो सीपीयू में आवश्यक डेटा रखने के लिए एक Temporary storage क्षेत्र के रूप में कार्य करता है. कैश नामक यह अस्थायी भंडारण उपकरण प्रोसेसर के बहुत करीब स्थित होता है. कैश Memory को अक्सर CPU Memory के रूप में संदर्भित किया जाता है क्योंकि यह आमतौर पर सीधे CPU Chip के अंदर स्थित होता है. यह किसी-किसी Computer में सीपीयू के साथ एक अलग बस, से जुड़ा होता है. चूंकि यह प्रोसेसर के बहुत करीब होता है, इसलिए यह आकार में बहुत छोटा होता है और इसका भंडारण स्थान भी बहुत छोटा होता है. Primary Memory की तुलना में कैश Memory अधिक महंगी होती है. कैश Memory आमतौर पर रैम की तुलना में 10 से 100 गुना Fast होती है, जो केवल कुछ नैनो सेकंड में Output देने में सक्षम है. कैश Memory में उपयोग किए जाने वाले हार्डवेयर को “High Speed Static Random Access Memory” कहा जाता है. जैसा कि मैंने पहले बताया कि कैश Memory Computer या मोबाइल में बहुत कम होती है, जिसका अर्थ है कि जहां आपकी हार्ड डिस्क कई सौ जीबी तक हो सकती है, इस कैश Memory को दो से तीन एमबी होता है.
कैश Memory एक हाई-स्पीड Memory है, जो आकार में छोटी है लेकिन मुख्य मेमोरी से तेज है. CPU इसे प्राथमिक Memory की तुलना में अधिक तेज़ी से एक्सेस कर सकता है. तो, इसका उपयोग हाई-स्पीड सीपीयू के साथ Synchronized करने और इसके प्रदर्शन को बेहतर बनाने के लिए किया जाता है. कैश मेमोरी को केवल CPU द्वारा ही एक्सेस किया जा सकता है. यह सीपीयू के बाहर मुख्य मेमोरी या स्टोरेज डिवाइस का एक आरक्षित हिस्सा हो सकता है. यह डेटा और प्रोग्राम रखता है जो अक्सर सीपीयू द्वारा उपयोग किया जाता है. इसलिए, यह सुनिश्चित करता है कि जब भी सीपीयू को इस डेटा की आवश्यकता हो, डेटा तुरंत सीपीयू के लिए उपलब्ध हो. दूसरे शब्दों में, यदि सीपीयू को कैशे मेमोरी में आवश्यक डेटा या निर्देश मिलते हैं, तो उसे प्राथमिक मेमोरी (रैम) तक पहुंचने की आवश्यकता नहीं होती है. इस प्रकार, रैम और सीपीयू के बीच बफर के रूप में कार्य करके, यह सिस्टम के प्रदर्शन को गति देता है.
L1: यह कैशे मेमोरी का पहला स्तर है, जिसे लेवल 1 कैश या L1 कैश कहा जाता है. इस प्रकार की कैश मेमोरी में CPU के अंदर ही थोड़ी मात्रा में मेमोरी मौजूद होती है. यदि सीपीयू में चार कोर (क्वाड कोर सीपीयू) हैं, तो प्रत्येक कोर का अपना स्तर 1 कैश होगा. चूंकि यह मेमोरी सीपीयू में मौजूद होती है, इसलिए यह सीपीयू की तरह ही गति से काम कर सकती है. इस मेमोरी का आकार 2KB से 64 KB तक होता है. L1 कैश में दो प्रकार के कैश होते हैं: निर्देश कैश, जो CPU द्वारा आवश्यक निर्देशों को संग्रहीत करता है, और डेटा कैश जो CPU द्वारा आवश्यक डेटा को संग्रहीत करता है.
L2: इस कैश को लेवल 2 कैश या L2 कैश के रूप में जाना जाता है. यह स्तर 2 कैश सीपीयू के अंदर या सीपीयू के बाहर हो सकता है. सीपीयू के सभी कोर का अपना अलग स्तर 2 कैश हो सकता है, या वे आपस में एक L2 कैश साझा कर सकते हैं. यदि यह सीपीयू के बाहर है, तो यह सीपीयू के साथ बहुत तेज गति वाली बस से जुड़ा है. इस कैशे की मेमोरी का आकार 256 केबी से 512 केबी के बीच होता है. गति के मामले में, वे L1 कैश से धीमी हैं.
L3: इसे लेवल 3 कैशे या L3 कैशे के रूप में जाना जाता है. यह कैश सभी प्रोसेसर में मौजूद नहीं है; कुछ हाई-एंड प्रोसेसर में इस प्रकार का कैश हो सकता है. इस कैश का उपयोग स्तर 1 और स्तर 2 कैश के प्रदर्शन को बढ़ाने के लिए किया जाता है. यह सीपीयू के बाहर स्थित होता है और सीपीयू के सभी कोर द्वारा साझा किया जाता है. इसकी मेमोरी साइज 1 एमबी से 8 एमबी तक होती है. हालाँकि यह L1 और L2 कैश से धीमा है, लेकिन यह रैंडम एक्सेस मेमोरी (RAM) से तेज़ है.
जब CPU को डेटा की आवश्यकता होती है, तो सबसे पहले यह L1 कैशे के अंदर दिखता है. अगर इसे L1 में कुछ नहीं मिलता है, तो यह L2 कैशे के अंदर दिखता है. यदि फिर से, यह L2 कैश में डेटा नहीं ढूंढता है, तो यह L3 कैश में देखता है. यदि कैश मेमोरी में डेटा मिलता है, तो इसे कैश हिट के रूप में जाना जाता है. इसके विपरीत, यदि कैश के अंदर डेटा नहीं मिलता है, तो इसे कैशे मिस कहा जाता है. यदि किसी भी कैश मेमोरी में डेटा उपलब्ध नहीं है, तो यह रैंडम एक्सेस मेमोरी (रैम) के अंदर दिखता है. अगर RAM में भी डाटा नहीं है तो वह हार्ड डिस्क ड्राइव से वह डाटा प्राप्त कर लेगा. इसलिए, जब कोई कंप्यूटर पहली बार चालू होता है, या कोई एप्लिकेशन पहली बार खोला जाता है, तो कैश मेमोरी या रैम में डेटा उपलब्ध नहीं होता है. इस मामले में, सीपीयू सीधे हार्ड डिस्क ड्राइव से डेटा प्राप्त करता है. इसके बाद, जब आप अपना कंप्यूटर शुरू करते हैं या कोई एप्लिकेशन खोलते हैं, तो सीपीयू उस डेटा को कैशे मेमोरी या रैम से प्राप्त कर सकता है.
कैशे मेमोरी एक विशेष अति उच्च गति वाली मेमोरी है. इसका उपयोग हाई-स्पीड सीपीयू के साथ गति और सिंक्रनाइज़ करने के लिए किया जाता है. कैश मेमोरी मुख्य मेमोरी या डिस्क मेमोरी से महंगी होती है लेकिन सीपीयू रजिस्टरों की तुलना में किफायती होती है. कैशे मेमोरी एक अत्यंत तेज़ मेमोरी प्रकार है जो रैम और सीपीयू के बीच बफर के रूप में कार्य करता है. यह अक्सर अनुरोधित डेटा और निर्देश रखता है ताकि जरूरत पड़ने पर वे सीपीयू को तुरंत उपलब्ध हों. कैश मेमोरी का उपयोग मेन मेमोरी से डेटा एक्सेस करने में लगने वाले औसत समय को कम करने के लिए किया जाता है. कैशे एक छोटी और तेज़ मेमोरी है जो अक्सर उपयोग किए जाने वाले मुख्य मेमोरी स्थानों से डेटा की प्रतियां संग्रहीत करती है. सीपीयू में कई अलग-अलग स्वतंत्र कैश होते हैं, जो निर्देशों और डेटा को स्टोर करते हैं.
लेवल 1 या रजिस्टर - यह एक प्रकार की मेमोरी होती है जिसमें डेटा को स्टोर किया जाता है और स्वीकार किया जाता है जो तुरंत सीपीयू में स्टोर हो जाता है. सबसे अधिक इस्तेमाल किया जाने वाला रजिस्टर एक्यूमुलेटर, प्रोग्राम काउंटर, एड्रेस रजिस्टर आदि है.
लेवल 2 या कैशे मेमोरी - यह सबसे तेज़ मेमोरी है जिसमें तेज़ पहुँच समय होता है जहाँ डेटा को तेज़ पहुँच के लिए अस्थायी रूप से संग्रहीत किया जाता है.
लेवल 3 या मेन मेमोरी - यह मेमोरी है जिस पर वर्तमान में कंप्यूटर काम करता है. यह आकार में छोटा है और एक बार बिजली बंद हो जाने के बाद डेटा इस मेमोरी में नहीं रहता है.
लेवल 4 या सेकेंडरी मेमोरी - यह बाहरी मेमोरी है जो मुख्य मेमोरी जितनी तेज नहीं होती है लेकिन डेटा इस मेमोरी में स्थायी रूप से रहता है.
जब प्रोसेसर को मुख्य मेमोरी में किसी स्थान को पढ़ने या लिखने की आवश्यकता होती है, तो यह पहले कैश में संबंधित प्रविष्टि की जांच करता है. यदि प्रोसेसर को पता चलता है कि मेमोरी लोकेशन कैश में है, तो कैश हिट हुआ है और कैशे से डेटा पढ़ा जाता है. यदि प्रोसेसर को कैश में मेमोरी लोकेशन नहीं मिलती है, तो कैश मिस हो गया है. कैश मिस के लिए, कैश एक नई प्रविष्टि आवंटित करता है और मुख्य मेमोरी से डेटा में कॉपी करता है, फिर कैश की सामग्री से अनुरोध पूरा किया जाता है. कैश मेमोरी का प्रदर्शन अक्सर हिट अनुपात नामक मात्रा के संदर्भ में मापा जाता है.
Hit ratio = hit / (hit + miss) = no. of hits/total accesses
हम उच्च कैश ब्लॉक आकार, उच्च सहयोगीता का उपयोग करके कैश प्रदर्शन में सुधार कर सकते हैं, मिस रेट कम कर सकते हैं, मिस पेनल्टी कम कर सकते हैं और कैश में हिट करने के लिए समय कम कर सकते हैं.
कैश मेमोरी के उद्देश्य के लिए तीन अलग-अलग प्रकार की मैपिंग का उपयोग किया जाता है जो इस प्रकार हैं: डायरेक्ट मैपिंग, एसोसिएटिव मैपिंग और सेट-एसोसिएटिव मैपिंग. इन्हें नीचे समझाया गया है.
डायरेक्ट मैपिंग के रूप में जानी जाने वाली सबसे सरल तकनीक, मुख्य मेमोरी के प्रत्येक ब्लॉक को केवल एक संभावित कैश लाइन में मैप करती है. या डायरेक्ट मैपिंग में, प्रत्येक मेमोरी ब्लॉक को कैशे में एक विशिष्ट लाइन पर असाइन करें. यदि किसी नए ब्लॉक को लोड करने की आवश्यकता होने पर मेमोरी ब्लॉक द्वारा पहले एक लाइन ली जाती है, तो पुराना ब्लॉक ट्रैश हो जाता है. एक पता स्थान दो भागों में विभाजित है अनुक्रमणिका फ़ील्ड और एक टैग फ़ील्ड. कैश का उपयोग टैग फ़ील्ड को संग्रहीत करने के लिए किया जाता है जबकि शेष को मुख्य मेमोरी में संग्रहीत किया जाता है. डायरेक्ट मैपिंग का प्रदर्शन हिट अनुपात के सीधे आनुपातिक है.
i = j modulo m where i=cache line number j= main memory block number m=number of lines in the cache
कैश एक्सेस के प्रयोजनों के लिए, प्रत्येक मुख्य मेमोरी एड्रेस को तीन क्षेत्रों से मिलकर देखा जा सकता है. कम से कम महत्वपूर्ण w बिट्स मुख्य मेमोरी के एक ब्लॉक के भीतर एक अद्वितीय शब्द या बाइट की पहचान करते हैं. अधिकांश समकालीन मशीनों में, पता बाइट स्तर पर होता है. शेष s बिट्स मुख्य मेमोरी के 2s ब्लॉकों में से एक को निर्दिष्ट करते हैं. कैश लॉजिक इन s बिट्स को s-r बिट्स (सबसे महत्वपूर्ण भाग) के टैग और r बिट्स के एक लाइन फ़ील्ड के रूप में व्याख्या करता है. यह बाद वाला क्षेत्र कैश की m=2r पंक्तियों में से एक की पहचान करता है.
इस प्रकार की मैपिंग में, साहचर्य स्मृति का उपयोग स्मृति शब्द की सामग्री और पते को संग्रहीत करने के लिए किया जाता है. कोई भी ब्लॉक कैश की किसी भी लाइन में जा सकता है. इसका मतलब यह है कि आईडी बिट्स शब्द का उपयोग यह पहचानने के लिए किया जाता है कि ब्लॉक में किस शब्द की आवश्यकता है, लेकिन टैग शेष सभी बिट्स बन जाता है. यह किसी भी शब्द को कैशे मेमोरी में किसी भी स्थान पर रखने में सक्षम बनाता है. इसे सबसे तेज और सबसे लचीला मैपिंग फॉर्म माना जाता है.
मानचित्रण का यह रूप प्रत्यक्ष मानचित्रण का एक उन्नत रूप है जहाँ प्रत्यक्ष मानचित्रण की कमियाँ दूर की जाती हैं. सेट एसोसिएटिव डायरेक्ट मैपिंग विधि में संभावित थ्रैशिंग की समस्या का समाधान करता है. यह यह कहकर करता है कि कैश में एक ब्लॉक मैप करने के लिए बिल्कुल एक लाइन होने के बजाय, हम एक सेट बनाने के लिए कुछ पंक्तियों को एक साथ समूहित करेंगे. फिर मेमोरी में एक ब्लॉक किसी विशिष्ट सेट की किसी एक लाइन को मैप कर सकता है. सेट-एसोसिएटिव मैपिंग की अनुमति देता है कि कैश में मौजूद प्रत्येक शब्द में एक ही इंडेक्स एड्रेस के लिए मुख्य मेमोरी में दो या दो से अधिक शब्द हो सकते हैं. सहयोगी कैश मैपिंग सेट करें जो प्रत्यक्ष और सहयोगी कैश मैपिंग तकनीकों का सर्वोत्तम संयोजन करता है. इस मामले में, कैश में कई सेट होते हैं, जिनमें से प्रत्येक में कई लाइनें होती हैं. रिश्ते हैं.
मेमोरी कैशिंग (अक्सर केवल कैशिंग के रूप में संदर्भित) एक ऐसी तकनीक है जिसमें कंप्यूटर एप्लिकेशन अस्थायी रूप से डेटा को कंप्यूटर की मुख्य मेमोरी (यानी, रैंडम एक्सेस मेमोरी, या रैम) में संग्रहीत करते हैं ताकि उस डेटा की तेजी से पुनर्प्राप्ति को सक्षम किया जा सके. अस्थायी भंडारण के लिए उपयोग की जाने वाली RAM को कैशे के रूप में जाना जाता है. चूंकि रैम तक पहुंच हार्ड डिस्क ड्राइव या नेटवर्क जैसे अन्य मीडिया तक पहुंचने की तुलना में काफी तेज है, कैशिंग डेटा तक तेजी से पहुंच के कारण अनुप्रयोगों को तेजी से चलाने में मदद करता है. कैशिंग विशेष रूप से कुशल है जब एप्लिकेशन एक सामान्य पैटर्न प्रदर्शित करता है जिसमें यह बार-बार डेटा तक पहुंचता है जिसे पहले एक्सेस किया गया था. कैशिंग डेटा गणनाओं को संग्रहीत करने के लिए भी उपयोगी है जो अन्यथा गणना करने के लिए समय लेने वाली हैं. गणनाओं को कैश में संग्रहीत करके, सिस्टम गणना की पुनरावृत्ति से बचकर समय बचाता है.
मेमोरी कैशिंग पहले RAM के एक हिस्से को कैश के रूप में उपयोग करने के लिए अलग सेट करके काम करता है. चूंकि कोई एप्लिकेशन डेटा को पढ़ने की कोशिश करता है, आमतौर पर डेटाबेस जैसे डेटा स्टोरेज सिस्टम से, यह यह देखने के लिए जांच करता है कि वांछित रिकॉर्ड कैश में पहले से मौजूद है या नहीं. यदि ऐसा होता है, तो एप्लिकेशन कैश से डेटा पढ़ेगा, इस प्रकार डेटाबेस तक धीमी पहुंच को समाप्त कर देगा. यदि वांछित रिकॉर्ड कैश में नहीं है, तो एप्लिकेशन स्रोत से रिकॉर्ड पढ़ता है. जब यह उस डेटा को पुनः प्राप्त करता है, तो यह डेटा को कैशे में भी लिखता है ताकि जब भविष्य में एप्लिकेशन को उसी डेटा की आवश्यकता हो, तो वह इसे कैश से जल्दी से प्राप्त कर सके.
चूंकि कैश आकार में सीमित है, अंततः कैश में पहले से मौजूद कुछ डेटा को नए डेटा के लिए जगह बनाने के लिए निकालना होगा जिसे एप्लिकेशन ने हाल ही में एक्सेस किया है. इसका मतलब है कि कैशिंग सिस्टम को एक रणनीति की आवश्यकता होती है, जिस पर रिकॉर्ड बनाने के लिए जगह बनाई जाए. रणनीति एप्लिकेशन के डेटा एक्सेस की प्रकृति पर निर्भर करेगी, और आम तौर पर उन रिकॉर्ड्स को हटाने का प्रयास करेगी जिन्हें जल्द ही फिर से एक्सेस करने की उम्मीद नहीं है. उदाहरण के लिए, हाल ही में उपयोग की गई (LRU) रणनीति उस रिकॉर्ड को हटा देगी जिसका अंतिम एक्सेस कैश में किसी अन्य रिकॉर्ड से पहले था. यहां धारणा यह है कि यदि रिकॉर्ड को एक्सेस किए हुए काफी समय हो गया है, तो संभवत: जल्द ही इसे फिर से एक्सेस नहीं किया जाएगा. या इसे दूसरे तरीके से कहें, तो हाल ही में जिन रिकॉर्ड्स का सबसे अधिक उपयोग किया गया था, उनके जल्द ही फिर से उपयोग किए जाने की संभावना है. कम से कम बार-बार उपयोग की जाने वाली (LFU) रणनीति में कैश में प्रत्येक रिकॉर्ड की एक्सेस की संख्या को ट्रैक करना और कम से कम एक्सेस के साथ रिकॉर्ड को हटाना शामिल है. यहां धारणा यह है कि शायद ही कभी इस्तेमाल किए गए रिकॉर्ड का जल्द ही फिर से उपयोग नहीं किया जाएगा.
कैश के साथ चुनौती यह है कि "कैश मिस" को कैसे कम किया जाए, यानी, रिकॉर्ड के लिए एप्लिकेशन द्वारा पढ़ने का प्रयास जो कैश में नहीं है. यदि आपके पास बहुत अधिक चूक हैं, तो आपके कैश की दक्षता कम हो जाती है. एक एप्लिकेशन जो केवल नया डेटा पढ़ता है, उसे कैश से लाभ नहीं होगा, और वास्तव में, कैश की जांच के अतिरिक्त काम के कारण इसमें वांछित रिकॉर्ड नहीं मिलने के कारण कम प्रदर्शन का प्रदर्शन होगा. बड़े कैश का लाभ उठाकर इस चुनौती को कम करने का एक तरीका है. यह अक्सर एक कंप्यूटर पर व्यावहारिक नहीं होता है, यही कारण है कि वितरित कैश उन अनुप्रयोगों को गति देने के लिए लोकप्रिय विकल्प हैं जिन्हें बड़े डेटा सेट तक पहुंचने की आवश्यकता होती है. एक वितरित कैश एक क्लस्टर में जुड़े कई कंप्यूटरों की रैम को एक साथ जोड़ता है ताकि आप एक बड़ा कैश बना सकें जो क्लस्टर में और कंप्यूटर जोड़कर बढ़ता जा सके. हेज़लकास्ट IMDG जैसी तकनीकों का उपयोग बड़े पैमाने पर अनुप्रयोगों में तेजी लाने के लिए एक वितरित क्लस्टर के रूप में किया जा सकता है.
कैश की एक और चुनौती "बासी" डेटा को पढ़ने का जोखिम है, जिसमें कैश में डेटा अंतर्निहित स्रोत में नवीनतम डेटा को प्रतिबिंबित नहीं करता है. आवेदन के प्रदर्शन के लिए अक्सर यह जोखिम एक स्वीकार्य व्यापार-बंद होता है. ऐसे मामलों में जहां यह नहीं है, यह उस एप्लिकेशन पर निर्भर करता है जो कैश में संबंधित रिकॉर्ड को अपडेट करने के लिए अंतर्निहित डेटा स्रोत को अपडेट करता है.
मेमोरी कैशिंग के लिए एक व्यापक उपयोग का मामला डेटाबेस अनुप्रयोगों में तेजी लाने के लिए है, विशेष रूप से वे जो कई डेटाबेस पढ़ते हैं. डेटाबेस के एक हिस्से को कैश से रीड के साथ बदलकर, एप्लिकेशन लगातार डेटाबेस एक्सेस से उत्पन्न होने वाली विलंबता को हटा सकते हैं. यह उपयोग मामला आम तौर पर उन वातावरणों में पाया जाता है जहां उच्च मात्रा में डेटा एक्सेस देखे जाते हैं, जैसे उच्च ट्रैफ़िक वेब साइट में जो डेटाबेस से गतिशील सामग्री पेश करती है. एक अन्य उपयोग के मामले में क्वेरी त्वरण शामिल है, जिसमें एक डेटाबेस के लिए एक जटिल क्वेरी के परिणाम कैश में संग्रहीत होते हैं. समूहीकरण और व्यवस्था जैसे जटिल प्रश्नों के संचालन को पूरा होने में काफी समय लग सकता है. यदि क्वेरी को बार-बार चलाया जाता है, जैसा कि कई उपयोगकर्ताओं द्वारा एक्सेस किए गए व्यावसायिक इंटेलिजेंस (BI) डैशबोर्ड में होता है, तो कैश में परिणाम संग्रहीत करने से उन डैशबोर्ड में अधिक प्रतिक्रियात्मकता सक्षम होगी.