X86-64 सिस्टम में केवल 48 बिट वर्चुअल एड्रेस स्पेस क्यों है?


97

एक पुस्तक में मैंने निम्नलिखित पढ़ा:

32-बिट प्रोसेसर में 2 ^ 32 संभावित पते होते हैं, जबकि वर्तमान 64-बिट प्रोसेसर में 48-बिट पता स्थान होता है

मेरी अपेक्षा यह थी कि यदि यह 64-बिट प्रोसेसर है, तो पता स्थान भी 2 ^ 64 होना चाहिए।

तो मैं सोच रहा था कि इस सीमा का कारण क्या है?


11
पुस्तक विशेष रूप से AMD64 वास्तुकला (x86-64) के वर्तमान कार्यान्वयन के बारे में बात कर रही होगी। केवल कम-क्रम 48 बिट्स का उपयोग किया जाता है। यह एक हार्डवेयर सीमा नहीं है, हालांकि - सभी 64 बिट्स उपलब्ध हैं।
कोड़ी ग्रे

7
पुस्तक की पहचान के लिए हमेशा एक अच्छा विचार।
हेनक होल्टरमैन

1
मैं अनुमान लगा रहा हूं कि भौतिक पता लाइनें मुफ़्त नहीं हैं (आपको कम से कम 16 अतिरिक्त सीपीयू पिन की आवश्यकता है)। और मुझे ऐसे किसी हार्डवेयर की जानकारी नहीं है, जो एक ही प्रोसेसर पर भौतिक रैम चिप्स के साथ 48 बिट स्थान भर सकता है। जब यह संभव हो जाता है, मुझे यकीन है कि एएमडी लापता 16 पिन जोड़ देगा :)
Torp

7
यहां तक ​​कि, The 32-bit processors have 2^32 possible addressesयह भी सच नहीं है कि स्मृति को संबोधित करने के लिए केवल 24 "पिन" के साथ 32 बिट सीपीयू मौजूद हो सकता है। जैसे 68EC020 (सस्ता 68020 संस्करण) एक 32 बिट सीपीयू है लेकिन स्मृति को संबोधित करने के लिए 24 बिट्स के साथ है।
शिनटेकजेउ

21
64-बिट भौतिक पते के साथ एक बहुत ही वास्तविक समस्या है, वर्चुअल मेमोरी पेज का आकार बहुत छोटा है। जो विशाल पृष्ठ निर्देशिकाओं और हर संदर्भ स्विच पर बेहद महंगी टीएलबी कैश फ्लश के लिए बनाता है। 4KB से 4MB पेज पर जाना एक विकल्प है लेकिन वर्तमान ऑपरेटिंग सिस्टम के साथ बहुत असंगत है।
हंस पैसेंट

जवाबों:


134

क्योंकि बस इतना ही चाहिए। 48 बिट्स आपको 256 टेराबाइट का एड्रेस स्पेस देते हैं। यह बहुत ज्यादा है। आप एक ऐसी प्रणाली को देखने नहीं जा रहे हैं, जिसे जल्द ही किसी भी समय इससे अधिक की आवश्यकता हो।

इसलिए CPU निर्माताओं ने एक शॉर्टकट लिया। वे एक निर्देश सेट का उपयोग करते हैं जो पूर्ण 64-बिट पता स्थान की अनुमति देता है, लेकिन वर्तमान सीपीयू केवल निचले 48 बिट्स का उपयोग करते हैं। विकल्प एक बड़े पते वाले स्थान को संभालने पर ट्रांजिस्टर को बर्बाद कर रहा था जो कई वर्षों तक आवश्यक नहीं था।

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


118
640kb किसी के लिए भी काफी है।

7
क्या आप अभी भी 8088 सिस्टम, bdares चला रहे हैं?
जो

23
@bdares: ख़राब सादृश्य। 8088/8086 आर्च के इंस्ट्रक्शन सेट में 640k की सीमा है। केवल एक नया आईएसए (386) बनाने से अवरोध को तोड़ना संभव था। दूसरी ओर x86_64 ISA में सभी 64 बिट्स का समर्थन करता है। यह सिर्फ वर्तमान पीढ़ी का हार्डवेयर है जो उन सभी का उपयोग नहीं कर सकता है ...
R .. GitHub STOP HELPING ICE

16
@R। दरअसल, सीपीयू में सीमा एक मेगाबाइट थी। IBM PC ने मेमोरी मैप्ड पेरिफेरल्स, BIOS, आदि के लिए कुछ अन्य भागों को निर्दिष्ट किया है।
जेरी कॉफिन

25
lwn.net/SubscriberLink/655437/9a48cd3e7a8cbe8a <- इस जवाब के तीन साल बाद, हम पहले से ही इन सीमाओं को मार रहे हैं :) HP मशीन में 320TB मेमोरी होगी और वे इसे 48 के कारण एक फ्लैट एड्रेस स्पेस के रूप में प्रदान कर सकते हैं। -बिट को संबोधित सीमा।
अगम

18

बस के आकार और भौतिक मेमोरी का जिक्र करने वाला कोई भी उत्तर थोड़ा गलत है, क्योंकि ओपी का प्रश्न वर्चुअल एड्रेस स्पेस के बारे में था न कि भौतिक पता स्थान । उदाहरण के लिए माना जाता है कि कुछ 386's पर सादृश्यता की सीमा भौतिक मेमोरी पर एक सीमा थी, जो वर्चुअल एड्रेस स्पेस का उपयोग नहीं कर सकते थे, जो हमेशा पूर्ण 32 बिट्स था। सिद्धांत रूप में आप केवल कुछ एमबी भौतिक मेमोरी के साथ पूर्ण 64 बिट वर्चुअल एड्रेस स्पेस का उपयोग कर सकते हैं; निश्चित रूप से आप ऐसा अदला-बदली करके, या विशेष कार्यों के लिए कर सकते हैं, जहाँ आप अधिकांश पतों पर एक ही पेज को मैप करना चाहते हैं (जैसे कि कुछ विशेष डेटा संचालन)।

मुझे लगता है कि असली जवाब यह है कि एएमडी सिर्फ सस्ता था और उम्मीद थी कि अब कोई भी परवाह नहीं करेगा, लेकिन मेरे पास हवाला का संदर्भ नहीं है।


14
"सस्ता होने के नाते" मुझे लगता है कि आप का मतलब उन पिनों को जोड़ना नहीं है जो कभी भी उपयोग नहीं किए जाएंगे, ट्रांजिस्टर के लिए चिप स्थान नहीं ले रहे हैं जो कि उपयोग नहीं किया जाएगा और मौजूदा निर्देशों को तेजी से बनाने के लिए मुक्त स्थान का उपयोग कर रहा है? अगर यह सस्ता हो रहा है, तो मैं अंदर हूँ!
ओलफ फोर्शेल

80386 2 * 4096 चयनकर्ताओं को 4GB मेमोरी (32TB कुल) तक की अनुमति देता है। 80286 ने 2 * 4096 चयनकर्ताओं को प्रत्येक को 64KB (1GB) तक की अनुमति दी।
ओलफ फोर्शेल

गैर-रेखीय खंडित हैक मेरी पुस्तक में पता स्थान के रूप में नहीं गिना जाता है। पोर्टेबल सॉफ्टवेयर के लिए कोई उपाय नहीं है कि उनका कोई उपयोग किया जा सके।
आर .. गिटहब स्टॉप हेल्पिंग ICE

@ आर .. - मुझे लगा कि पोर्टेबल सॉफ्टवेयर की परिभाषा यह है कि यह कर सकता है । :-) उदाहरण के लिए, C ++ अलग-अलग सरणियों में पॉइंटर्स की तुलना करने से मना करता है ताकि वे अलग-अलग 4GB सेगमेंट में हो सकें।
बो पर्सन

यदि आपका संकलन वास्तव में विशाल संकेत उत्पन्न करता है और प्रत्येक मेमोरी डेरेफेरेंस के लिए एक सेगमेंट रजिस्टर लोड करता है तो हाँ। लेकिन वास्तव में यह बहुत धीमा है, और इसके बजाय सभी ने छोटे मेमोरी मॉडल और __far(या इससे भी बदतर, FAR/ far!) पॉइंटर्स का उपयोग किया ...
R .. GitHub STOP HELPING ICE

10

विकिपीडिया लेख की सीमा अनुभाग पढ़ें :

एक पीसी में 4 पेटाबाइट मेमोरी (वर्तमान मेमोरी चिप्स के आकार के कारण और कुछ नहीं होने पर) हो सकता है, लेकिन एएमडी ने बड़े सर्वर, साझा मेमोरी क्लस्टर और भौतिक पता स्थान के अन्य उपयोगों की कल्पना की है जो भविष्य में इस दृष्टिकोण का उपयोग कर सकते हैं, और 52 64-बिट भौतिक पते को लागू करने की लागत को कम नहीं करते हुए बिट भौतिक पता विस्तार के लिए पर्याप्त स्थान प्रदान करता है

इस समय, इस बिंदु पर पूर्ण 64 बिट एड्रेसिंग को लागू करने का कोई मतलब नहीं है, क्योंकि हम एक ऐसी प्रणाली का निर्माण नहीं कर सकते हैं, जो इस तरह के एड्रेस स्पेस को पूर्ण रूप से उपयोग कर सके - इसलिए हम आज (और कल के) सिस्टम के लिए व्यावहारिक है।


4 पेटाबाइट्स में 4 कहाँ से आता है? अगर हम 64 एड्रेस लाइन्स पर बात कर रहे हैं, तो हमें 32 एड्रेस लाइन्स जो कि 4 गीगाबाइट्स है, द्वारा संभव किए गए एड्रेस स्पेस के वर्ग के साथ समाप्त होनी चाहिए। स्क्वायर कि और हमारे पास 16 होना चाहिए, न कि 4 पेटाबाइट्स। क्या मैं कुछ भूल रहा हूँ?
ओलफ फोर्शेल

1
यह वर्तमान भौतिक सीमा (52 बिट्स) से आता है - यह बिंदु कि हम इस सीमित सीमा का समर्थन करने के लिए एक पीसी में पर्याप्त रैम नहीं डाल सकते हैं, अकेले पूर्ण 64-बिट एड्रेस स्पेस के लिए क्या आवश्यक होगा।
डेमियन___बेलिवर्स १२

9

आंतरिक मूल रजिस्टर / संचालन चौड़ाई को बाहरी पता बस चौड़ाई में परिलक्षित करने की आवश्यकता नहीं है

मान लें कि आपके पास 64 बिट प्रोसेसर है जिसे केवल 1 मेगाबाइट रैम तक पहुंचने की आवश्यकता है। एक 20 बिट पता बस की आवश्यकता है। सभी अतिरिक्त पिनों की लागत और हार्डवेयर जटिलता से परेशान क्यों हैं जिनका आप उपयोग नहीं करेंगे?

मोटोरोला 68000 इस तरह था; आंतरिक रूप से 32 बिट, लेकिन 23 बिट एड्रेस बस (और 16 बिट डेटा बस) के साथ। सीपीयू 16 मेगाबाइट रैम का उपयोग कर सकता है, और देशी डेटा प्रकार (32 बिट्स) को लोड करने के लिए दो मेमोरी एक्सेस (प्रत्येक डेटा के 16 बिट्स) ले गया।


1
लेकिन 68000 को "16/32 बिट" सीपीयू माना जाता है, न कि "पूर्ण" 32 बिट सीपीयू तो कोई कह सकता है कि यह 16 फीट अतीत में अभी भी एक पैर है; मैंने 68020 को एक उदाहरण के रूप में चुना है, क्योंकि इसकी कम लागत वाली 68EC020 संस्करण में केवल पतों के लिए 24 बिट है, हालांकि 68020 में इस अद्भुत प्रोसेसर परिवार पर विचार करने के लिए "पूर्ण" 32 बिट सीपीयू ... +1 है!
शिनटेकजेउ

@ShinTakezou: ईमानदारी से, 80386SX एक 16-बिट CPU था (क्योंकि इसमें 80286 की तरह पता जगह थी) या यह 32-बिट था (क्योंकि इसमें 80386DX की आंतरिक वास्तुकला थी)? एक जैसा आप कह सकते हैं, लेकिन दूसरा (यह एक) कहता है "आंतरिक वह है जो मायने रखता है" - और आप मुझे उस पर उद्धृत कर सकते हैं।
ओलफ फोर्शेल

@Olof मुझे लगता है कि लगता है, "स्मृति" (जो बाहरी दुनिया है) के संदर्भ में, बाहरी क्या मायने रखता है, तो 68000 एक 16bit सीपीयू (2 "चरण" की आवश्यकता होगी, 32 बिट डेटा पढ़ने के लिए) है: डी
ShinTakezou

@ShinTakezou: मेमोरी संदर्भ, यहां तक ​​कि कैश, हमेशा सीपीयू के लिए बाहरी है, भले ही वे आधुनिक प्रोसेसर में बहुत कसकर युग्मित हों। 8088 आंतरिक रूप से 8086 के बराबर था, हालांकि इसमें 8086 के सोलह में आठ डेटा बस लाइनें थीं। मैं यह नहीं देखता कि आप स्पष्ट रूप से क्या स्पष्ट रूप से देखते हैं, कि 8088 को उसी समूह में Z80, 8080, 8085 आदि के रूप में वर्गीकृत किया जाना चाहिए। डेटा बस की चौड़ाई का प्रश्न उस संदर्भ में तुच्छ लगता है
ओलोफ़ फोर्सहेल

मैं ऐसे किसी मामले का विशेषज्ञ नहीं हूं, इसलिए मेरे पास कुछ भी स्पष्ट नहीं है। मैं अतीत के साथ एक तेज कटौती की आवश्यकता पर ध्यान देना चाहता था, जहां कोई सोच सकता था कि 68000 अभी भी एक "पुराना समय" प्रोसेसर है, इसलिए यह "स्वाभाविक" लग सकता है कि इसका पता स्थान 32 बिट से कम तक सीमित है; जबकि 68020 32 बिट हो सकता है, ताकि 68EC020 की अपनी सीमा के साथ अस्तित्व स्पष्ट हो जाए कि यह "की सीमा" के कारण नहीं है या यह) समय "लेकिन अन्य विचार के लिए (जैसे कि यह सस्ता करने के लिए अगर 64 पिन होने में कोई वास्तविक लाभ नहीं है), जो कि इस उत्तर का तर्क कम या ज्यादा है।
शिनटकेज़ोउ

7

सीपीयू एड्रेस पथ में ट्रांजिस्टर को बचाने से अधिक गंभीर कारण है: यदि आप पते की जगह का आकार बढ़ाते हैं, तो आपको पृष्ठ का आकार बढ़ाने की जरूरत है, पृष्ठ तालिकाओं के आकार को बढ़ाएं, या एक गहरी पृष्ठ तालिका संरचना (है कि अनुवाद की तालिकाओं का अधिक स्तर है)। इन सभी चीजों से टीएलबी मिस की लागत बढ़ जाती है, जो प्रदर्शन को नुकसान पहुंचाती है।


1
Intel वर्तमान 48 बिट्स से 57 बिट्स तक विस्तारित करने के लिए 5-स्तरीय पेजिंग योजना प्रस्तावित कर रहा है । (समान x बिट्स वर्तमान x86-64 पृष्ठ तालिकाओं के रूप में प्रति स्तर / 4k पृष्ठ)। प्रति स्तर 10 या 11 बिट्स का उपयोग करने से पेज-वॉक हार्डवेयर को बदलने की आवश्यकता होती है, इसलिए यह विशाल मेमोरी के लिए इष्टतम डिज़ाइन नहीं हो सकता है, लेकिन यह दोहरे मोड सीपीयू के लिए एक समझदार विस्तार है जिसे 4- के लिए अधिकतम प्रदर्शन का भी समर्थन करने की आवश्यकता है वर्तमान प्रारूप में स्तर तालिकाएँ।
पीटर कॉर्ड्स

बेशक, 2M या 1G विशालपृष्ठों के साथ, यह पृष्ठ निर्देशिका के पॉइंटर के बजाय शीर्ष-स्तर से विशाल-पृष्ठ तालिका प्रविष्टि तक पृष्ठ तालिकाओं का केवल 4 या 3 स्तर है।
पीटर कॉर्ड्स

6

मेरे दृष्टिकोण से, यह पृष्ठ आकार से परिणाम है। प्रत्येक पृष्ठ में 4096/8 = 512 पृष्ठ तालिका की प्रविष्टियाँ हैं। और 2 ^ 9 = 512। तो ९ * ४ + १२ = ४ 12।


4

मूल प्रश्न का उत्तर देने के लिए: पीए के 48 से अधिक बिट्स जोड़ने की आवश्यकता नहीं थी।

सर्वर को अधिकतम मात्रा में मेमोरी की आवश्यकता होती है, इसलिए चलो गहरी खुदाई करने का प्रयास करें।

1) सबसे बड़ा (आमतौर पर इस्तेमाल किया जाने वाला) सर्वर कॉन्फ़िगरेशन एक 8 सॉकेट सिस्टम है। एक 8S सिस्टम कुछ भी नहीं है, लेकिन 8 सर्वर CPU एक एकल नोड बनाने के लिए एक उच्च गति सुसंगत इंटरकनेक्ट (या बस, एक उच्च गति "बस") द्वारा जुड़ा हुआ है। वहाँ बड़े समूह हैं, लेकिन वे कुछ और दूर हैं, हम यहाँ आमतौर पर उपयोग किए जाने वाले विन्यासों के बारे में बात कर रहे हैं। ध्यान दें कि वास्तविक दुनिया के उपयोगों में, 2 सॉकेट सिस्टम सबसे अधिक उपयोग किए जाने वाले सर्वरों में से एक है, और 8S को आमतौर पर बहुत उच्च अंत माना जाता है।

2) सर्वर द्वारा उपयोग की जाने वाली मुख्य प्रकार की मेमोरी बाइट एड्रेसेबल रेगुलर DRAM मेमोरी (जैसे DDR3 / DDR4 मेमोरी), मेमोरी मैप्ड IO - MMIO (जैसे कि ऐड-इन कार्ड द्वारा उपयोग की जाने वाली मेमोरी) हैं, साथ ही कॉन्फ़िगरेशन को कॉन्फ़िगर करने के लिए उपयोग किया जाता है सिस्टम में मौजूद डिवाइस। पहली प्रकार की मेमोरी वह है जो आमतौर पर सबसे बड़ी होती है (और इसलिए पता बिट्स की सबसे बड़ी संख्या की आवश्यकता होती है)। कुछ उच्च अंत सर्वर MMIO की बड़ी मात्रा का उपयोग करते हैं और साथ ही सिस्टम के वास्तविक विन्यास पर निर्भर करते हैं।

3) मान लें कि प्रत्येक सर्वर CPU प्रत्येक स्लॉट में 16 DDR4 DIMM का उपयोग कर सकता है। 256GB के अधिकतम आकार DDR4 DIMM के साथ। (सर्वर के संस्करण के आधार पर, प्रति सॉकेट संभव DIMM की यह संख्या वास्तव में 16 DIMM से कम है, लेकिन उदाहरण के लिए पढ़ना जारी रखें)।

इसलिए प्रत्येक सॉकेट में सैद्धांतिक रूप से 16 * 256GB = 4096GB = 4 टीबी हो सकता है। हमारे उदाहरण 8S प्रणाली के लिए, DRAM का आकार अधिकतम 4 * 8 = 32 TB हो सकता है। इसका मतलब है कि इस DRAM स्पेस को संबोधित करने के लिए आवश्यक बिट्स की अधिकतम संख्या 45 (= log2 32TB / log2 2) है।

हम अन्य प्रकार की मेमोरी (MMIO, MMCFG आदि) के विवरणों में नहीं जाते हैं, लेकिन यहाँ बिंदु यह है कि 8 सॉकेट सिस्टम के लिए सबसे अधिक "डिमांडिंग" प्रकार की मेमोरी सबसे बड़ी प्रकार की DDR4 DIMMs के साथ आज (256 GB) DIMM) केवल 45 बिट्स का उपयोग करते हैं।

48 बिट्स (उदाहरण के लिए WS16) का समर्थन करने वाले OS के लिए, शेष 48 बिट्स (48-45 =) हैं। जिसका अर्थ है कि यदि हम 32TB के DRAM के लिए केवल निचले 45 बिट्स का उपयोग करते हैं, तो हमारे पास अभी भी 2 ^ 3 बार पता योग्य मेमोरी है जिसका उपयोग MMIO / MMCFG के लिए कुल 256 TB पते योग्य स्थान के लिए किया जा सकता है।

इसलिए, संक्षेप में: 1) 48 बिट्स फिजिकल एड्रेस आज के सबसे बड़े सिस्टम का समर्थन करने के लिए बहुत सारे बिट्स हैं जो DDR4 के प्रचुर मात्रा में "पूरी तरह से लोड" हैं और एमएमआईओ स्पेस की मांग करने वाले अन्य IO उपकरणों से भी भरपूर हैं। 256TB सटीक होना।

ध्यान दें कि इस 256TB एड्रेस स्पेस (= फिजिकल एड्रेस का 48 बिट्स) में SATA ड्राइव जैसी कोई डिस्क ड्राइव शामिल नहीं है क्योंकि वे एड्रेस मैप का हिस्सा नहीं हैं, वे केवल उस मेमोरी को शामिल करते हैं जो बाइट-एड्रेसेबल है, और OS के संपर्क में है।

2) सीपीयू हार्डवेयर सर्वर की पीढ़ी के आधार पर 46, 48 या> 48 बिट्स को लागू करने का विकल्प चुन सकता है। लेकिन एक अन्य महत्वपूर्ण कारक यह है कि ओएस कितने बिट्स को पहचानता है। आज, WS16 48 बिट भौतिक पते (= 256 टीबी) का समर्थन करता है।

उपयोगकर्ता के लिए इसका मतलब क्या है, भले ही किसी के पास एक बड़ा, अति आधुनिक सर्वर सीपीयू हो जो पते के 48 बिट्स का समर्थन कर सकता है, यदि आप एक ओएस चलाते हैं जो केवल पीए के 48 बिट्स का समर्थन करता है, तो आप केवल 256 टीबी का लाभ उठा सकते हैं ।

3) सभी में, पते की बिट्स की अधिक संख्या (= अधिक मेमोरी क्षमता) का लाभ लेने के लिए दो मुख्य कारक हैं।

a) आपके CPU HW कितने बिट्स का समर्थन करता है? (यह Intel CPUs में CPUID अनुदेश द्वारा निर्धारित किया जा सकता है)।

ख) आप किस OS संस्करण को चला रहे हैं और PA के कितने बिट्स इसे पहचानते हैं / समर्थन करते हैं।

(ए, बी) का मिनट अंततः आपके सिस्टम का लाभ ले सकने योग्य स्थान की मात्रा निर्धारित करेगा।

मैंने अन्य प्रतिक्रियाओं को विस्तार से देखे बिना इस प्रतिक्रिया को लिखा है। इसके अलावा, मैंने MMIO, MMCFG की बारीकियों और एड्रेस मैप निर्माण की संपूर्णता में विस्तार नहीं किया है। लेकिन मुझे उम्मीद है कि इससे मदद मिलेगी।

धन्यवाद, आनंद के एनामद्रम, सर्वर प्लेटफार्म आर्किटेक्ट इंटेल कॉर्पोरेशन


यह सवाल 48-बिट वर्चुअल एड्रेस स्पेस साइज़ (वर्चुअल एड्रेस को कैनोनिकल बनाने के लिए आवश्यक है) के बारे में पूछ रहा है । आप भौतिक बिट्स की तुलना में अधिक आभासी बिट्स चाहते हैं, इसलिए एक उच्च-आधा कर्नेल भौतिक मेमोरी के सभी को एक पते वाले स्थान (यह स्वयं या उपयोगकर्ता-स्थान) में मैप कर सकता है। जैसा कि आप कहते हैं, एचडब्ल्यू को केवल डीएएएम नियंत्रक + एमएमआईओ के रूप में कई पीए बिट्स को लागू करने की आवश्यकता है, और x86-64 पेज-टेबल प्रारूप में 52-बिट सीमा तक किसी भी संख्या का उपयोग कर सकते हैं। ( 64 बिट में क्यों आभासी पता 4 बिट्स हैं कम (48bit लंबे) भौतिक पता (52 बिट लंबे की तुलना में)? )
पीटर Cordes

1
4-स्तरीय पेज-टेबल प्रारूप 48-बिट VA सीमा भी लगाता है, जब तक कि HW + SW 57-बिट VA के लिए PML5 पेज टेबल का समर्थन नहीं करता है। वैसे भी, यह एक उपयोगी उत्तर है, लेकिन यह गलत प्रश्न के तहत पोस्ट किया गया लगता है। मुझे यकीन नहीं है कि अगर इसके लिए एक बेहतर जगह है, तो मुझे लगता है कि हम इसे यहां छोड़ सकते हैं, उम्मीद है कि पीए बनाम वीए के बारे में कुछ कहने के लिए एक हेडर जोड़ने के लिए संपादित करें।
पीटर कॉर्डेस

2

कई लोगों को यह गलत धारणा है। लेकिन मैं आपसे वादा कर रहा हूं कि अगर आप इसे ध्यान से पढ़ें, तो इसे पढ़ने के बाद आपकी सारी गलतफहमी दूर हो जाएगी।

प्रोसेसर को 32 बिट या 64 बिट कहने का मतलब यह नहीं है कि उसके पास क्रमशः 32 बिट एड्रेस बस या 64 बिट एड्रेस बस होनी चाहिए! ... मैं इसे दोहराता हूँ !!

32 बिट प्रोसेसर का मतलब है कि इसमें 32 बिट ALU (अंकगणित और तर्क इकाई) है ... इसका मतलब है कि यह 32 बिट बाइनरी ऑपरेंड पर संचालित हो सकता है (या बस बाइनरी संख्या 32 अंक होने का कहना है) और इसी तरह 64 बिट प्रोसेसर 64 बिट बाइनरी पर काम कर सकता है संकार्य। तो एक प्रोसेसर 32 बिट या 64 बिट DOESN'T का संकेत देता है कि अधिकतम मात्रा में मेमोरी स्थापित की जा सकती है। वे बस यह दिखाते हैं कि ऑपरेंड कितना बड़ा हो सकता है ... (सादृश्य के लिए आप 10 अंकों के कैलकुलेटर के बारे में सोच सकते हैं, 10 अंकों तक के परिणामों की गणना कर सकते हैं ... यह हमें 11 अंक या कोई अन्य बड़ा परिणाम नहीं दे सकता ... हालांकि यह है दशमलव में, लेकिन मैं इस सादगी को सादगी के लिए कह रहा हूं) ... लेकिन आप जो कह रहे हैं, वह ऐसी जगह है जो मेमोरी का अधिकतम इंटरएक्टिव आकार है (RAM)। RAM ' अधिकतम संभव आकार पता बस के आकार से निर्धारित होता है और यह डेटा बस या ALU का आकार नहीं होता है, जिस पर प्रोसेसर का आकार परिभाषित होता है (32/64 बिट)। हाँ यदि किसी प्रोसेसर में 32 बिट "एड्रेस बस" है तो वह 2 ^ 32 बाइट = 4 जीबी रैम (या 64 बिट के लिए 2 ^ 64 होगा) को संबोधित करने में सक्षम है ... लेकिन प्रोसेसर को 32 बिट या 64 बिट कहना इस एड्रेस स्पेस (एड्रेस स्पेस = इसकी मेमोरी या रैम के अधिकतम आकार तक कितनी पहुँच हो सकती है) के लिए कुछ भी प्रासंगिक नहीं है और यह केवल इसके ALU के आकार पर निर्भर है। बेशक डेटा बस और एड्रेस बस एक ही आकार के हो सकते हैं और फिर ऐसा लग सकता है कि 32 बिट प्रोसेसर का मतलब है कि यह 2 ^ 32 बाइट या 4 जीबी मेमोरी तक पहुंच जाएगा ... लेकिन यह केवल एक संयोग है और यह समान नहीं होगा सबके लिए.... उदाहरण के लिए इंटेल 8086 एक 16 बिट प्रोसेसर है (क्योंकि इसमें 16 बिट एएलयू है) इसलिए आपके कहने पर इसे 2 ^ 16 बाइट = 64 KB मेमोरी तक एक्सेस किया जाना चाहिए, लेकिन यह सच नहीं है। यह 20 बिट एड्रेस बस रखने के लिए 1 एमबी तक की मेमोरी तक पहुँच सकता है .... अगर आपको कोई संदेह हो तो आप गूगल कर सकते हैं :)

मुझे लगता है कि मैंने अपनी बात स्पष्ट कर दी है। अब आपके सवाल पर आ रहा हूं ... क्योंकि 64 बिट प्रोसेसर का मतलब यह नहीं है कि इसमें 64 बिट एड्रेस बस होनी चाहिए, इसलिए 64 बिट प्रोसेसर में 48 बिट एड्रेस बस होने का कोई गलत तरीका नहीं है। ... वे डिजाइन और निर्माण को सस्ता बनाने के लिए पते की जगह को छोटा रखते थे .... क्योंकि कोई भी इतनी बड़ी मेमोरी (2 ^ 64 बाइट) का उपयोग करने वाला नहीं था ... जहां 2 ^ 48 बाइट आजकल पर्याप्त से अधिक है।


मुझे लगता है कि आपने अपनी बात बहुत स्पष्ट कर दी है, एक बात है जो मुझे समझ में नहीं आती है कि आपने 16 बिट्स 8086 सीपीयू के बारे में क्या कहा है: 16 बिट्स सीपीयू 20 बिट्स पते को कैसे संभाल सकता है? क्या यह 2 चरणों के संचालन के माध्यम से इसे संभालता है? यहां तक ​​कि अगर पता बस 20 बिट्स की चौड़ाई है, तो एक बार सीपीयू में जाने के बाद, रजिस्टर की चौड़ाई स्पष्ट रूप से केवल 16 बिट्स ले सकती है ... वे ऐसा कैसे करते हैं?
प्रोग्रामर

2
हम्म ... 2 चरणों का संचालन। सेगमेंट रजिस्टर में केवल ऊपरी 16 बिट्स होते हैं। फिर इसे 20 बिट बनाने के लिए 10H से गुणा किया जाता है और फिर ऑफसेट जोड़ा जाता है।
hafiz031

1

यह सच नहीं है कि 64 बिट वीए के केवल कम-क्रम वाले 48 बिट्स का उपयोग किया जाता है, कम से कम इंटेल 64 के साथ। ऊपरी 16 बिट्स का उपयोग किया जाता है, जैसे, की तरह।

अनुभाग 3.3.7.1 कैन्यिकल एड्रेसिंग इन Intel® 64 और IA-32 आर्किटेक्चर सॉफ्टवेयर डेवलपर के मैनुअल कहते हैं:

एक विहित पते में ४ through से ४on सेट ज़ीरोस या वाले होने चाहिए (यह निर्भर करता है कि बिट ४ is एक शून्य या एक है)

तो बिट्स 47 के माध्यम से 63 एक सुपर-बिट बनाते हैं, या तो सभी 1 या सभी 0. यदि कोई पता विहित रूप में नहीं है, तो कार्यान्वयन में गलती होनी चाहिए।

AArch64 पर, यह अलग है। ARMv8 इंस्ट्रक्शन सेट ओवरव्यू के अनुसार , यह एक 49-बिट VA है।

AArch64 मेमोरी ट्रांसलेशन सिस्टम 49-बिट वर्चुअल एड्रेस (48 बिट प्रति अनुवाद तालिका) का समर्थन करता है। वर्चुअल पते साइन-49 बिट्स से बढ़ाए गए हैं, और 64-बिट पॉइंटर के भीतर संग्रहीत हैं। वैकल्पिक रूप से, एक सिस्टम रजिस्टर के नियंत्रण में, 64-बिट पॉइंटर के सबसे महत्वपूर्ण 8 बिट एक "टैग" धारण कर सकते हैं जिसे लोड / स्टोर पते या अप्रत्यक्ष शाखा के लक्ष्य के रूप में उपयोग किए जाने पर नजरअंदाज किया जाएगा।


1
केवल निचले 48 महत्वपूर्ण हैं, लेकिन हार्डवेयर जांचता है कि यह सही ढंग से 64 बिट्स पर हस्ताक्षरित है। IDK क्यों उन्होंने शून्य-विस्तार निर्दिष्ट नहीं किया; हो सकता है कि वे उच्च बनाम निम्न आधे पते (केवल साइन बिट की जाँच करके) की जाँच करना अधिक सुविधाजनक बनाना चाहते थे। या शायद 2 ^ 48 सीमा विशेष बनाने से बचने के लिए, और इसलिए शीर्ष के निकट पते 32-बिट साइन-विस्तारित स्थिरांक में आसानी से फिट हो सकते हैं। मुझे लगता है कि बाद की संभावना अधिक है।
पीटर कॉर्ड्स

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

मेरे कोर i5 पर लिनक्स पर procfs का कहना है कि यह 7ffd5ea41000-7ffd5ea62000 पर मैप हो जाता है। यह पता सीमा उपरोक्त 'विहित' नियम के अनुसार समझ में आती है। बिट 48-63 हैं 0 इसे एक सही विहित पता बनाते हैं। लिनक्स स्रोत में कुछ पते कुछ अजीब हैं। इसमें / asm / pgtable_64_types शामिल हैं, यह #define __VMALLOC_BASE _AC (0xff92000000000000, UL) कहता है। यह एक विहित पता नहीं है। ऐसा पता 0xffff8 से शुरू होगा। पता नहीं क्यों।
ओल्सनिस्ट

हाँ, IIRC लिनक्स उपयोगकर्ता-अंतरिक्ष के लिए विहित रेंज के निचले आधे हिस्से का उपयोग करता है, और (अधिकतर) कर्नेल-केवल मैपिंग के लिए उच्च आधे का उपयोग करता है। लेकिन कुछ कर्नेल मेमोरी [vsyscall]पेज की तरह यूजर-स्पेस को एक्सपोर्ट की जाती है । (जो कि वर्तमान पीआईडी ​​की तरह सामान का निर्यात कर सकता है ताकि getpid()विशुद्ध रूप से उपयोगकर्ता-स्थान हो। इसके अलावा gettimeofday()कर्नेल द्वारा निर्यात किए गए उपयोगकर्ता-स्पेस + स्केल कारकों में rdtsc का उपयोग कर सकते हैं। हालांकि, कुछ मैं ऐसा सोचता हूं [vdso], जो शीर्ष पर है। नीचे का आधा हिस्सा)
पीटर कॉर्ड्स

IDK क्या __VMALLOC_BASEकरता है संभवतः इसका सीधा उपयोग नहीं किया गया है।
पीटर कॉर्ड्स

0

एक सीपीयू को मुख्य रूप से उसके डेटा-बस आकार पर "एन-बिट्स" माना जाता है, और इसके बड़े हिस्से पर (आंतरिक वास्तुकला) इकाइयां : रजिस्टरों, Accumulators, अंकगणित-तर्क-इकाई (ALU), निर्देश सेट, आदि उदाहरण के लिए: अच्छा पुराना मोटोरोला 6800 (या इंटेल 8050) सीपीयू 8-बिट्स सीपीयू है। इसमें 8-बिट डेटा-बस, 8-बिट्स आंतरिक वास्तुकला, और 16-बिट्स एड्रेस-बस है।


  • हालांकि एन-बिट्स सीपीयू में एन-आकार की संस्थाओं के अलावा कुछ और हो सकते हैं। उदाहरण के लिए 6800 से अधिक 6809 में दोनों (8-बिट डेटा-बस के साथ दोनों 8-बिट सीपीयू हैं)। 6809 में शुरू की गई महत्वपूर्ण वृद्धि में दो 8-बिट संचायक (ए और बी का उपयोग था, जिसे एक एकल 16-बिट रजिस्टर, डी), दो 16-बिट इंडेक्स रजिस्टर (एक्स, वाई) और दो में जोड़ा जा सकता है। 16-बिट स्टैक पॉइंटर्स।

एक उदाहरण के रूप में मोटोरोला 68000/68020 के साथ इस बिंदु पर पहले से ही एक उत्तर है । यह प्रश्न वास्तव में x86-64 के बारे में है, विशेष रूप से, पुराने 8/16-बिट सीपीयू के बारे में नहीं। X86-64 के मामले में, प्रमुख कारकों में से एक यह है कि व्यापक आभासी पते के लिए एक गहरी पृष्ठ तालिका की आवश्यकता होगी, और वह कारक उस पुराने चिप्स के लिए मौजूद नहीं था जिसके बारे में आप बात कर रहे हैं।
पीटर कॉर्ड्स

डेटा-बस चौड़ाई को रजिस्टर या ALU चौड़ाई से मेल नहीं खाना है। उदाहरण के लिए, P5 पेंटियम में 64-बिट डेटा बस है (संरेखित 64-बिट लोड / स्टोर परमाणु होने की गारंटी है), लेकिन रजिस्टर / ALUs केवल 32 बिट (एकीकृत FPU को छोड़कर, और बाद के पेंटियम MMX SIMD में हैं) ALUs।)
पीटर कॉर्ड्स

ओपी लिखते हैं: "मेरी उम्मीद यह थी कि यदि यह 64-बिट प्रोसेसर है, तो पता स्थान भी 2 ^ 64 होना चाहिए।" ........ आप लिखते हैं: "यह प्रश्न वास्तव में x86-64 के बारे में है, विशेष रूप से, पुराने 8/16-बिट सीपीयू नहीं"। ........ मुझे लगता है कि आपने ओपी प्रश्न का सार याद किया। ओपी प्रश्न गलत धारणा का परिणाम है कि 64-बिट सीपीयू में 64-बिट्स पता-बस होना चाहिए। ALU के बारे में, मैंने इसकी संस्थाओं का बड़ा हिस्सा लिखा ; इनमें से सभी नहीं।
अमित जी।

इस टिप्पणी को रद्द करके मुझे स्पैम करना बंद करें। हां, निश्चित रूप से ओपी आपके द्वारा वर्णित कारण के लिए गलत है, लेकिन मैं इंगित कर रहा था कि आपका उत्तर ऐसा लगता है कि यह एक समान गलती करता है। आप कहते हैं, " और इसके कारण संस्थाओं का बड़ा हिस्सा: रजिस्टरों और Accumulators, अंकगणित-तर्क-इकाई (ALU) ... ", जो लगता है कि आप कह रहे हैं कि वे चीजें डेटा बस की चौड़ाई से मेल खाती हैं। वाक्यांश "एक बड़ा हिस्सा" का तात्पर्य है कि आप कह रहे हैं कि कौन से हिस्से हैं, ऐसा नहीं है कि यह केवल उन हिस्सों के लिए कभी-कभी सच है।
पीटर कॉर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.