2012-04-29 22 views
5

मेरी माफी माँगती है अगर यह गलत स्टैक एक्सचेंज है; यह बस उस स्थान पर सबसे नज़दीक की तरह लग रहा था जो कंप्यूटर आर्किटेक्चर के लिए मदद की जा सकती है। कंप्यूटर सिस्टम में एक होमवर्क समस्या के लिए मैं कहा गया था:डायरेक्ट मैप किए गए कैश हिट/मिस

Consider three direct mapped caches X, Y, and Z each interpreting an 
8-bit address slightly differently according to the {tag:setIdx:byteOffset} 
format specified. For each address in the reference stream, indicate whether the 
access will hit (H) or miss (M) in each cache. 

        C1  C2  C3 
Address Formats: {2:2:4} {2:3:3} {2:4:2} 

Address References in Binary: 00000010, 00000100... 

मैं कहना है कि क्या पता संदर्भ में से प्रत्येक के एक हिट या याद आती है में परिणाम होगा माना जाता रहा हूँ, लेकिन मैं नहीं जानता कि कहाँ से शुरू करने के लिए।

प्रारूपों के लिए, मैंने सोचा था कि टैग का मतलब कैश के ब्लॉक में डेटा का टैग था, सेट आईडीएक्स का मतलब कैश में विभिन्न ब्लॉक का प्रतिनिधित्व करने के लिए दिए गए बिट्स की मात्रा थी, और ऑफसेट एक ब्लॉक के भीतर विशेष बाइट था से चुन सकते हैं

मुझे लगता है कि मुझे समझ में नहीं आता कि हिट या मिस क्या है। मैंने सोचा कि 3 प्रकार थे: अनिवार्य, क्षमता, और संघर्ष। मुझे कैसे पता चलेगा कि एक अनिवार्य मिस क्या है यदि मुझे नहीं पता कि कैश में पहले से क्या है? मैं टैग स्वरूपों को दिए गए कैश की क्षमता कैसे बता सकता हूं?

किसी भी संकेत या सुझाव के लिए धन्यवाद।

उत्तर

3

उदाहरण के लिए सी 1 लें, इसमें setIdx के लिए 2 बिट हैं, और बाइट ऑफसेट के लिए 4 बिट्स हैं।

तो इस कैश में 2^2 = 4 ब्लॉक (00, 01, 10, और 11) होंगे, और प्रत्येक ब्लॉक में 2^4 = 16 बाइट होंगे।

पते के संदर्भ अब सी 1 प्रारूप में विभाजित किया जा सकता है: {00 00 0010}

मान लिया जाये कि कैश डिफ़ॉल्ट रूप से खाली है, पहले देखने एक याद आती है का परिणाम देगा। हालांकि, कैश में अब "00" टैग "00" के साथ लोड किया गया ब्लॉक होगा।

अगला संदर्भ {00 00 0100} ब्लॉक "00" दिखाई देगा, यह देखता है कि टैग भी "00" है, हमारे पास एक हिट है।

+0

बाइट तो के लिए ऑफसेट क्या है? – KWJ2104

+0

बाइट ऑफ़सेट यह है कि एक ब्लॉक कितना बड़ा है। उदाहरण के लिए, ऊपर दिए गए संदर्भ का उपयोग करते हुए, मानते हुए कि सी 1 में {00 00 00} ब्लॉक {00} में लोड किया गया है, इस ब्लॉक में {00 00 0000} को {00 00 0000} मेमोरी है। हालांकि, अगर आप {01 00 0010} को देखने का प्रयास करते हैं, तो यह एक मिस होगी क्योंकि टैग अलग है। (मुझे यह भी लगता है कि यह 1-तरफा सेट-एसोसिएटिव मैपिंग है) –

1

मुझे नहीं लगता कि आपको हिट होगी। भले ही पता 00 00 0100 एक ही ब्लॉक को देखेगा, यह स्मृति में एक अलग पता देखेगा। सीधे मैप किए गए कैश हिट में लगातार उसी निर्देश में उसी क्रम में स्मृति में उसी पते तक पहुंचने का प्रयास करके ही होता है। स्मृति में पता बाइट पते द्वारा दिया गया है, न कि ब्लॉक नंबर। एक प्रत्यक्ष मैप किए गए कैश तब तक ब्लॉक की सामग्री को प्रतिस्थापित करेगा जब तक कि वह ब्लॉक में एक ही पते तक पहुंचने का प्रयास नहीं कर रहा है। अगर 00 00 0100 किसी अन्य 00 00 0100 से पहले थे तो सीधे मैप किए गए कैश में एक हिट होगी।

संबंधित कैश में, ब्लॉक नंबर द्वारा दिए गए मेमोरी एड्रेस और बाइट एड्रेस इतनी हिट नहीं है कि यहां एक हिट उत्पन्न होगी।

ब्लॉक संख्या मंजिल द्वारा दिया जाता है (बाइट पता/बाइट्स प्रति ब्लॉक) आधुनिक (ब्लॉक की संख्या)

+0

आम तौर पर अनुरोधित बाइट न केवल मिस पर एक पूरे ब्लॉक को कैश लोड करता है। (कुछ कैश सेक्टरिंग का उपयोग करते हैं, जो प्रति ब्लॉक एक से अधिक मान्य बिट प्रदान करते हैं, लेकिन कोई मुख्यधारा प्रोसेसर प्रति बाइट या प्रति 4-बाइट प्रति यूनिट के लिए एक वैध बिट प्रदान करता है। इसके अलावा, वर्तमान डीआरएएम के साथ न्यूनतम विस्फोट लंबाई 4-विस्फोट काटकर, जो प्रदर्शन को कम कर सकता है-, इसलिए 64-बिट चौड़ा इंटरफ़ेस * न्यूनतम * 32-बाइट स्थानांतरण प्रदान करता है।) –

+0

@ PaulA.Clayton क्या आप इस कैशिंग प्रश्न को भी देख सकते हैं? http: // stackoverflow।com/प्रश्न/30555623/कैसे-कई-बिट-हैं-में-पता-क्षेत्र के लिए एक-सीधे-मैप किया-कैश – committedandroider

संबंधित मुद्दे