क्या आप x86 क्लास प्रोसेसर रैमलेस चला सकते हैं?


9

आधुनिक x86 प्रोसेसर में कम से कम 512K L2 कैश है। ऐसे अनुप्रयोग हैं जो पूरी तरह से मेमोरी की मात्रा में फिट होंगे। क्या आप इन चिप्स को बिना रैम के अटैच करके चला सकते हैं? यदि ऐसा है, तो क्या ऐसा करने का कोई तरीका है जो जब सीपीयू रैम सुसंगतता को बनाए रखने का प्रयास करता है तो राइटबैक टाइम पेनल्टी को समाप्त कर देता है।

मेरे मन में एक विशिष्ट आवेदन नहीं है, यह सिर्फ निष्क्रिय जिज्ञासा है। मुझे यकीन है कि कहीं न कहीं एक आला आवेदन है जहां यह उपयोगी होगा।

जवाबों:


12

हाँ तुम कर सकते हो। लगातार (गैर-मौजूद) भौतिक मेमोरी स्थानों से फ़ेकिंग रीड द्वारा, आप कैश में टैग सेट करते हैं। फिर आप कैशेलाइन के आगे भरने को बंद कर देते हैं और राइटबैक में प्रवेश करते हैं, इस प्रकार कैश में रीड / राइट को सीमित कर देता है और यह एक सामान्य रैम की तरह व्यवहार करेगा।

कुछ बायोस-रिप्लेसमेंट प्रोजेक्ट्स ऐसा करते हैं क्योंकि तब आप चिपसेट और चिपसेट मेमोरी कंट्रोलर सेटअप पर बहुत अधिक कोड खर्च कर सकते हैं, इसलिए आप इसे उदाहरण के लिए C में लिख सकते हैं।

यह प्रथा व्यापक रूप से एम्बेडेड-क्लास सीपीयू के साथ-साथ बूटलोडर्स को संभालने के लिए उपयोग की जाती है। रैम की तरह कैश को चालू करने के तरीके थोड़े अलग हैं।

एक निम्न स्तर के परिचय के लिए आप इस प्रस्तुति को देख सकते हैं

ध्यान दें कि जैसा कि दूसरों ने बताया है कि आपको अभी भी स्पष्ट रूप से बूट-कोड लोड करने की आवश्यकता है।


वास्तव में, मुझे लगता है कि सभी आधुनिक BIOS इस का उपयोग करते हैं और बहुत सारे आधुनिक x86 CPUs के पास इसके लिए आधिकारिक समर्थन है।
युहोंग बाओ

7

जब CPU रीसेट से बाहर आता है, तो कैश बंद कर दिया जाता है। BIOS वह है जो प्रारंभ में कैश को कॉन्फ़िगर और क्लियर करता है। तो नहीं, आप इसे रैम-कम नहीं चला सकते क्योंकि पहली जगह में चीज़ को बूट करने के लिए कोई रैम नहीं है।


1
RAM का उपयोग किए बिना, ROM से शुरुआती कुछ निर्देशों को प्रारंभ और कैश चालू नहीं कर सकता था?
मार्क रैनसम

1
@Mark फिरौती आधुनिक इंटेल प्रोसेसर (और कई अन्य सीपीयू) BIOS को स्टोर करने के लिए सीरियल फ्लैश का उपयोग करते हैं। लेकिन यह सीरियल फ्लैश से कोड निष्पादित नहीं कर सकता है। इसके बजाय सीपीयू इस सीरियल फ्लैश को रैम में कॉपी करता है और फिर इसे निष्पादित करता है।

हाह, मेरी अज्ञानता दिख रही है - आप देख सकते हैं कि हार्डवेयर डिजाइन किए हुए मुझे कितने साल हो गए हैं। पहला निर्देश निष्पादित होने से पहले सीपीयू फ्लैश को स्वचालित रूप से कॉपी करता है? इससे उबरने के लिए एक बुरा चिकन / अंडा समस्या होगी।
मार्क रैनसम

@ दाविद सख्ती से कह रहा है कि यह 'धारावाहिक' फ्लैश नहीं बल्कि 'फर्मवेयर हब' है। यह 'धारावाहिक' से इस
मायने में

1
@Mark Ransom कई सीपीयू / MCU / DSP हैं जो एक सीरियल लिंक (सीरियल फ्लैश, RS-232, SPI, आदि) पर बूट होंगे। वे सभी सीपीयू के अंदर एक छोटी सी रॉम होने से इसे पूरा करते हैं जिससे वह बूट होता है, और वह कोड जहां से भी "वास्तविक" कोड को लोड करेगा। रैम-लेस सिस्टम चलाना, सिद्धांत रूप में, हो सकता है कि इंटेल बाहरी रैम के बजाय कैश का उपयोग करने के लिए इस कोड को संशोधित करे। लेकिन मुझे शक है कि इंटेल ऐसा करेगा।

3

मुझे नहीं पता कि यह कितना सही है, लेकिन ये मेरे विचार हैं:

मुझे नहीं लगता कि कैश पर प्रोग्रामेटिक एक्सेस पाने का कोई तरीका है। आप एक निर्देश से दूसरे को गारंटी नहीं दे सकते कि कैश में क्या होगा, और यह कहाँ स्थित होगा, इसलिए आप इसे रैम के रूप में मज़बूती से उपयोग नहीं कर सकते हैं भले ही आप इसे सीधे एक्सेस कर सकें।

आप RAM के बिना x86 चला सकते हैं, लेकिन आप इसे बहुत उपयोगी बनाने में सक्षम नहीं होंगे। आपको डेटा संग्रहण के लिए आंतरिक रजिस्टरों का उपयोग पूरी तरह से प्रतिबंधित करना होगा।


2
कैशलाइन फिल और फ्लश प्रोटोकॉल x86 सहित अधिकांश सीपीयू में अच्छी तरह से प्रलेखित और विन्यास योग्य हैं। Cacheline सामग्री निर्देशों के बीच एक यादृच्छिक तरीके से फ्लश नहीं की जाती है। आप आमतौर पर इसे रैखिक रैम के रूप में व्यवहार करने के लिए कैसे सेट करते हैं, इस पर मेरा जवाब देखें।
ब्योर्न वेसेन

मैंने 80x86 क्लोन के लिए एक हेक्स लोडर उपयोगिता लिखी है जो बिना किसी रैम के सही ढंग से काम करेगी; IIRC, मैंने रिटर्न एड्रेस को होल्ड करने के लिए SP का उपयोग करके एक-स्तरीय कॉल स्टैक लागू किया। चूंकि ROM रैम के रूप में एक ही बस में थी, इसलिए यह बहुत संभावना नहीं थी कि कोई समस्या होगी जो RAM के नहीं होने पर ROM को काम करने देगी, लेकिन ऐसे मामले में लोडर समस्या का निदान कर सकता है। बाहरी कोड बसों के साथ कुछ अन्य माइक्रो पर लेकिन आंतरिक कोड स्थान की एक छोटी राशि, एक टूटी हुई बस के साथ एक सिस्टम पर कोड चलाने में सक्षम होना एक उपयोगी नैदानिक ​​उपकरण था।
सुपरकैट

@ मैं गलत हो सकता है, लेकिन रैम बाइनरी कोड के लिए नहीं है और प्रोसेसर द्वारा पढ़ने और लिखने के लिए है?
विक्टर मेहता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.