X86 मेमोरी सेगमेंटेशन: Difference between revisions
No edit summary |
No edit summary |
||
Line 2: | Line 2: | ||
x[[86]] [[ स्मृति विभाजन ]] इंटेल x86 कंप्यूटर [[ निर्देश सेट वास्तुकला ]] में स्मृति विभाजन के कार्यान्वयन को संदर्भित करता है। 1978 में [[Index.php?title=इंटेल 8086|इंटेल 8086]] पर विभाजन की शुरुआत की गई थी, ताकि कार्यक्रमों को 64 KB (65,536 [[बाइट]]स) से अधिक स्मृति को संबोधित करने की अनुमति मिल सके। [[Intel 80286|इंटेल 80286]] ने 1982 में विभाजन का दूसरा संस्करण पेश किया जिसमें [[ आभासी मेमोरी | आभासी स्मृति]] और स्मृति सुरक्षा के लिए समर्थन जोड़ा गया। इस बिंदु पर मूल प्रणाली का नाम बदलकर [[वास्तविक मोड|वास्तविक प्रणाली]] कर दिया गया था, और नए संस्करण को संरक्षित प्रणाली नाम दिया गया था। 2003 में पेश किए गए [[x86-64]] संरचना ने 64-अंश प्रणाली में विभाजन के लिए काफी हद तक समर्थन छोड़ दिया है। | x[[86]] [[ स्मृति विभाजन ]] इंटेल x86 कंप्यूटर [[ निर्देश सेट वास्तुकला ]] में स्मृति विभाजन के कार्यान्वयन को संदर्भित करता है। 1978 में [[Index.php?title=इंटेल 8086|इंटेल 8086]] पर विभाजन की शुरुआत की गई थी, ताकि कार्यक्रमों को 64 KB (65,536 [[बाइट]]स) से अधिक स्मृति को संबोधित करने की अनुमति मिल सके। [[Intel 80286|इंटेल 80286]] ने 1982 में विभाजन का दूसरा संस्करण पेश किया जिसमें [[ आभासी मेमोरी | आभासी स्मृति]] और स्मृति सुरक्षा के लिए समर्थन जोड़ा गया। इस बिंदु पर मूल प्रणाली का नाम बदलकर [[वास्तविक मोड|वास्तविक प्रणाली]] कर दिया गया था, और नए संस्करण को संरक्षित प्रणाली नाम दिया गया था। 2003 में पेश किए गए [[x86-64]] संरचना ने 64-अंश प्रणाली में विभाजन के लिए काफी हद तक समर्थन छोड़ दिया है। | ||
वास्तविक और संरक्षित दोनों प्रणाली में, वास्तविक स्मृति | वास्तविक और संरक्षित दोनों प्रणाली में, वास्तविक स्मृति दक्षता प्राप्त करने के लिए सिस्टम 16-अंश ''खंड पंजिका'' का उपयोग करता है। वास्तविक प्रणाली में, CS, DS, SS और ES पंजिका वर्तमान में उपयोग किए गए योजना[[ कोड खंड | संकेत खंड]] (CS), वर्तमान [[डेटा खंड|आंकड़े खंड]] (DS), वर्तमान [[कॉल स्टैक]] (आह्वान स्तंभ)(SS), और एक ''अतिरिक्त'' खंड की ओर इशारा करते हैं। क्रमादेशक (ईएस) द्वारा निर्धारित। 1985 में पेश किया गया [[Intel 80386|इंटेल]] [[Intel 80386|80386]], दो अतिरिक्त खंड पंजिका , FS और GS जोड़ता है, जिसमें हार्डवेयर द्वारा परिभाषित कोई विशिष्ट उपयोग नहीं है। जिस तरह से खंड पंजिका का उपयोग किया जाता है, वह दो प्रणाली के बीच भिन्न होता है।<ref name=Arch /> | ||
क्रियान्वित किए जा रहे कार्य के अनुसार खंड की पसंद आमतौर पर | क्रियान्वित किए जा रहे कार्य के अनुसार खंड की पसंद आमतौर पर संसाधक द्वारा चूक की जाती है। निर्देश हमेशा संकेत खंड से प्राप्त किए जाते हैं। कोई भी स्तंभ दबाना या त्वरित या कोई भी आंकड़े संदर्भ जो स्तंभ का जिक्र करता है, स्तंभ खंड का उपयोग करता है। आंकड़े के अन्य सभी संदर्भ आंकड़े खंड का उपयोग करते हैं। अतिरिक्त खंड श्रृंखला संचालन के लिए चूक गंतव्य है (उदाहरण के लिए MOVS या CMPS)। एफएस और जीएस के पास हार्डवेयर- नियुक्त किए गए उपयोग नहीं हैं। निर्देश प्रारूप एक वैकल्पिक खंड उपसर्ग काटने की अनुमति देता है जिसका उपयोग वांछित होने पर चयनित निर्देशों के लिए चूक खंड को अवहेलना करने के लिए किया जा सकता है।<ref>{{cite book|last=Intel Corporation|title=IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture|date=2004|url=http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf}}</ref> | ||
== पूर्णतः प्रणाली == | |||
[[Image:Overlapping realmode segments.svg|thumb|right|300px|वास्तविक प्रणाली स्मृति में तीन खंड (विस्तार करने के लिए चित्र पर क्लिक करें)। खंड 2 और खंड 3 के बीच ओवरलैप है; फ़िरोज़ा क्षेत्र में बाइट्स का उपयोग दोनों खंड चयनकर्ताओं से किया जा सकता है।]]पूर्णतः प्रणाली या [[वर्चुअल 8086 मोड|वर्चुअल 8086 प्रणाली]] में, खंड का आकार 1 बाइट से लेकर 65,536 बाइट (16-अंश ऑफ़सेट का उपयोग करके) तक हो सकता है। | |||
खंड पंजिका में 16-अंश खंड चयनकर्ता को एक रैखिक 20-अंश दक्षता के सबसे महत्वपूर्ण 16 अंश के रूप में व्याख्या किया जाता है, जिसे खंड दक्षता कहा जाता है, जिसमें से शेष चार सबसे कम महत्वपूर्ण अंश सभी शून्य हैं। खंड पता हमेशा एक रेखीय पता प्राप्त करने के निर्देश में 16-अंश ऑफ़सेट में जोड़ा जाता है, जो इस प्रणाली में भौतिक पते के समान होता है। उदाहरण के लिए, खंडित पता 06EFh:1234h (यहाँ प्रत्यय h का अर्थ [[हेक्साडेसिमल]] है) में 06EFh का एक खंड चयनकर्ता है, जो 06EF0h के एक खंड पते का प्रतिनिधित्व करता है, जिसमें ऑफसेट जोड़ा जाता है, जिससे रैखिक पता 06EF0h + 1234h = 08124h प्राप्त होता है। | |||
{| | {| | ||
Line 29: | Line 27: | ||
| 20 bits | | 20 bits | ||
|} | |} | ||
जिस तरह से | जिस तरह से खंड दक्षता और ऑफ़सेट जोड़े जाते हैं, उसके कारण एक सिंगल लीनियर दक्षता को 2 तक मैप किया जा सकता है<sup>12</sup> = 4096 विशिष्ट खंड: ऑफ़सेट जोड़े। उदाहरण के लिए, रैखिक पता 08124h में खंडित पते हो सकते हैं 06EFh:1234h, 0812h:0004h, 0000h:8124h, आदि। | ||
यह अद्वितीय | यह अद्वितीय दक्षता िंग योजनाओं के आदी क्रमादेशकों के लिए भ्रमित करने वाला हो सकता है, लेकिन इसका उपयोग लाभ के लिए भी किया जा सकता है, उदाहरण के लिए कई नेस्टेड आंकड़े संरचनाओं को संबोधित करते समय। जबकि वास्तविक प्रणाली खंड हमेशा 64 [[किलोबाइट]] लंबे होते हैं, व्यावहारिक प्रभाव केवल यह है कि कोई भी खंड 64 केबी से अधिक लंबा नहीं हो सकता है, इसके बजाय प्रत्येक खंड 64 केबी लंबा होना चाहिए। क्योंकि वास्तविक प्रणाली में कोई सुरक्षा या विशेषाधिकार सीमा नहीं है, भले ही एक खंड को 64 केबी से छोटा परिभाषित किया जा सकता है, फिर भी यह पूरी तरह से कार्यक्रमों पर निर्भर करेगा कि वे समन्वय करें और अपने खंडों की सीमा के भीतर रखें, जैसा कि कोई भी कार्यक्रम कर सकता है हमेशा किसी भी स्मृति तक पहुंचें (चूंकि यह मनमाने ढंग से खंड चयनकर्ताओं को बिना किसी पर्यवेक्षण के खंड पते बदलने के लिए सेट कर सकता है)। इसलिए, 1 से 65,536 बाइट्स की सीमा में प्रत्येक खंड के लिए एक चर लंबाई होने के रूप में वास्तविक प्रणाली की कल्पना की जा सकती है, जो कि सीपीयू द्वारा लागू नहीं किया गया है। | ||
(रैखिक पते के प्रमुख शून्य, खंडित पते, और खंड और ऑफसेट फ़ील्ड स्पष्टता के लिए यहां दिखाए गए हैं। वे आमतौर पर छोड़े जाते हैं।) | (रैखिक पते के प्रमुख शून्य, खंडित पते, और खंड और ऑफसेट फ़ील्ड स्पष्टता के लिए यहां दिखाए गए हैं। वे आमतौर पर छोड़े जाते हैं।) | ||
वास्तविक प्रणाली का प्रभावी 20-अंश [[ पता स्थान ]] [[ स्मृति पता ]] को 2 तक सीमित करता है<sup>20</sup> बाइट, या 1,048,576 बाइट (1 [[मेगाबाइट]])। यह सीधे Intel 8086 (और, बाद में, निकट से संबंधित 8088) के हार्डवेयर डिज़ाइन से प्राप्त हुआ, जिसमें ठीक 20 [[ पता बस ]] थी। (दोनों को 40-पिन डीआईपी पैकेज में पैक किया गया था; केवल 20 | वास्तविक प्रणाली का प्रभावी 20-अंश [[ पता स्थान ]] [[ स्मृति पता ]] को 2 तक सीमित करता है<sup>20</sup> बाइट, या 1,048,576 बाइट (1 [[मेगाबाइट]])। यह सीधे Intel 8086 (और, बाद में, निकट से संबंधित 8088) के हार्डवेयर डिज़ाइन से प्राप्त हुआ, जिसमें ठीक 20 [[ पता बस ]] थी। (दोनों को 40-पिन डीआईपी पैकेज में पैक किया गया था; केवल 20 दक्षता लाइन के साथ भी, दक्षता और आंकड़े बस को सीमित पिन काउंट के भीतर सभी दक्षता और आंकड़े लाइन को फिट करने के लिए मल्टीप्लेक्स किया गया था।) | ||
प्रत्येक खंड रेखीय (सपाट) पता स्थान की शुरुआत से 16 बाइट्स के गुणक से शुरू होता है, जिसे एक पैराग्राफ कहा जाता है। यानी 16 बाइट के अंतराल पर। चूंकि सभी | प्रत्येक खंड रेखीय (सपाट) पता स्थान की शुरुआत से 16 बाइट्स के गुणक से शुरू होता है, जिसे एक पैराग्राफ कहा जाता है। यानी 16 बाइट के अंतराल पर। चूंकि सभी खंड 64 केबी लंबे हैं, यह बताता है कि खंड के बीच ओवरलैप कैसे हो सकता है और लीनियर स्मृति दक्षता स्पेस में किसी भी स्थान को कई खंड:ऑफ़सेट जोड़े के साथ क्यों एक्सेस किया जा सकता है। रेखीय पता स्थान में एक खंड की शुरुआत के वास्तविक स्थान की गणना खंड × 16 के साथ की जा सकती है। 0Ch (12) का एक खंड मान रैखिक पता स्थान में C0h (192) पर एक रैखिक पता देगा। इसके बाद दक्षता ऑफ़सेट को इस नंबर में जोड़ा जा सकता है। 0Ch:0Fh (12:15) होगा C0h+0Fh=CFh (192+15=207), CFh (207) रेखीय पता होगा। इस तरह के दक्षता ट्रांसलेशन सीपीयू की विभाजन यूनिट द्वारा किए जाते हैं। अंतिम खंड, FFFFh (65535), रेखीय पते FFFF0h (1048560) पर शुरू होता है, 20 अंश पता स्थान के अंत से 16 बाइट्स पहले, और इस प्रकार, 65,536 बाइट तक, 65,520 (65536) तक ऑफ़सेट के साथ पहुंच सकता है −16) बाइट्स 20 अंश 8088 दक्षता स्पेस के अंत के बाद। 8088 पर, इन दक्षता एक्सेस को दक्षता स्पेस की शुरुआत में लपेटा गया था जैसे कि 65535:16 दक्षता 0 तक पहुंच जाएगा और 65533:1000 लीनियर दक्षता स्पेस के दक्षता 952 तक पहुंच जाएगा। क्रमादेशकों द्वारा इस सुविधा का उपयोग बाद की सीपीयू पीढ़ियों में [[गेट ए 20]] संगतता मुद्दों के कारण हुआ, जहां रेखीय पता स्थान को 20 अंश्स से आगे बढ़ाया गया था। | ||
16-अंश वास्तविक प्रणाली में, कई स्मृति | 16-अंश वास्तविक प्रणाली में, कई स्मृति खंड का उपयोग करने के लिए एप्लिकेशन को सक्षम करना (किसी एक 64K-खंड में उपलब्ध स्मृति से अधिक स्मृति तक पहुंचने के लिए) काफी जटिल है, लेकिन इसे सभी के लिए एक आवश्यक बुराई के रूप में देखा गया था लेकिन सबसे छोटे उपकरण ( जो कम स्मृति के साथ कर सकता है)। समस्या की जड़ यह है कि संपूर्ण स्मृति रेंज के फ्लैट दक्षता िंग के लिए उपयुक्त कोई उपयुक्त पता-अंकगणितीय निर्देश उपलब्ध नहीं हैं। कई निर्देशों को लागू करने से फ्लैट दक्षता िंग संभव है, जो हालांकि धीमे योजना की ओर ले जाता है। | ||
[[x86 मेमोरी मॉडल|x86 स्मृति मॉडल]] अवधारणा खंड | [[x86 मेमोरी मॉडल|x86 स्मृति मॉडल]] अवधारणा खंड पंजिका ों के सेटअप से निकली है। उदाहरण के लिए, छोटे मॉडल CS=DS=SS में, यानी योजना का संकेत, आंकड़े और स्तंभ सभी एक ही 64 KB खंड में समाहित हैं। छोटे स्मृति मॉडल DS=SS में, इसलिए आंकड़े और स्तंभ दोनों एक ही खंड में रहते हैं; सीएस 64 केबी तक के अलग संकेत खंड की ओर इशारा करता है। | ||
== संरक्षित प्रणाली == | == संरक्षित प्रणाली == | ||
Line 47: | Line 45: | ||
=== 80286 संरक्षित प्रणाली === | === 80286 संरक्षित प्रणाली === | ||
Intel 80286 का संरक्षित प्रणाली | Intel 80286 का संरक्षित प्रणाली संसाधक के दक्षता स्पेस को 2 तक बढ़ा देता है<sup>24</sup> बाइट्स (16 मेगाबाइट्स), लेकिन शिफ्ट वैल्यू को समायोजित करके नहीं। इसके बजाय, 16-अंश खंड पंजिका ों में अब 24-अंश बेस दक्षता वाले [[खंड वर्णनकर्ता]] की तालिका में एक इंडेक्स होता है जिसमें ऑफ़सेट जोड़ा जाता है। पुराने सॉफ़्टवेयर का समर्थन करने के लिए, संसाधक वास्तविक प्रणाली में शुरू होता है, एक ऐसा प्रणाली जिसमें यह 8086 के खंडित दक्षता िंग मॉडल का उपयोग करता है। हालांकि एक छोटा सा अंतर है: परिणामी भौतिक पता अब 20 अंश तक छोटा नहीं किया जाता है, इसलिए वास्तविक प्रणाली पॉइंटर्स (लेकिन 8086 पॉइंटर्स नहीं) अब 100000 के बीच के पतों को संदर्भित कर सकते हैं<sub>16</sub> और 10FFEF<sub>16</sub>. स्मृति के लगभग 64-किलोबाइट क्षेत्र को हाई स्मृति एरिया (HMA) के रूप में जाना जाता था, और DOS के बाद के संस्करण इसका उपयोग उपलब्ध पारंपरिक स्मृति (यानी पहले मेगाबाइट के भीतर) को बढ़ाने के लिए कर सकते थे। HMA को जोड़ने के साथ, कुल पता स्थान लगभग 1.06 MB हो जाता है। हालांकि 80286 रीयल-प्रणाली पतों को 20 अंश तक छोटा नहीं करता है, 80286 वाला सिस्टम 21वीं दक्षता लाइन, [[ए 20 लाइन]] को गेट ऑफ करके संसाधक के बाहरी हार्डवेयर के साथ ऐसा कर सकता है। IBM PC AT ने ऐसा करने के लिए हार्डवेयर प्रदान किया (मूल IBM PC और IBM PC/XT|PC/XT मॉडल के लिए सॉफ़्टवेयर के साथ पूर्ण पिछड़े संगतता के लिए), और इसलिए बाद के सभी IBM PC/AT-श्रेणी के PC क्लोनों ने भी किया। | ||
286 संरक्षित प्रणाली का उपयोग शायद ही कभी किया गया था क्योंकि यह 8086/88 मशीनों वाले उपयोगकर्ताओं के बड़े निकाय को बाहर कर देता था। इसके अलावा, यह अभी भी स्मृति को 64k | 286 संरक्षित प्रणाली का उपयोग शायद ही कभी किया गया था क्योंकि यह 8086/88 मशीनों वाले उपयोगकर्ताओं के बड़े निकाय को बाहर कर देता था। इसके अलावा, यह अभी भी स्मृति को 64k खंड में विभाजित करने [[की]] आवश्यकता है जैसे वास्तविक प्रणाली में किया गया था। इस सीमा को 32-अंश सीपीयू पर काम किया जा सकता है जो आकार में 64k से अधिक स्मृति पॉइंटर्स के उपयोग की अनुमति देता है, हालांकि खंड लिमिट फ़ील्ड केवल 24-अंश लंबा है, जो अधिकतम खंड आकार बनाया जा सकता है वह 16MB है (यद्यपि पेजिंग अधिक स्मृति आवंटित करने के लिए उपयोग किया जा सकता है, कोई भी व्यक्तिगत खंड 16MB से अधिक नहीं हो सकता है)। इस पद्धति का उपयोग आमतौर पर विंडोज 3.x अनुप्रयोगों पर फ्लैट स्मृति स्पेस बनाने के लिए किया जाता था, हालांकि ओएस अभी भी 16-अंश था, 32-अंश निर्देशों के साथ एपीआई कॉल नहीं की जा सकती थी। इस प्रकार, 64k खंड में एपीआई कॉल करने वाले सभी संकेत को रखना अभी भी आवश्यक था। | ||
एक बार 286 संरक्षित प्रणाली लागू हो जाने के बाद, इसे हार्डवेयर रीसेट करने के अलावा बाहर नहीं निकाला जा सकता है। बढ़ती आईबीएम पीसी/एटी मानक का पालन करने वाली मशीनें मानकीकृत कीबोर्ड नियंत्रक के माध्यम से सीपीयू को रीसेट करने का ढोंग कर सकती हैं, लेकिन यह काफी सुस्त था। विंडोज़ 3.x ने सीपीयू के इंटरप्ट-हैंडलिंग मैकेनिज्म में जानबूझकर [[ ट्रिपल दोष ]] को ट्रिगर करके इन दोनों समस्याओं के आसपास काम किया, जिससे सीपीयू वास्तविक प्रणाली में वापस आ जाएगा, लगभग तुरंत।<ref>{{Cite web|url=http://blogs.msdn.com/b/larryosterman/archive/2005/02/08/369243.aspx|title = DevBlogs}}</ref> | एक बार 286 संरक्षित प्रणाली लागू हो जाने के बाद, इसे हार्डवेयर रीसेट करने के अलावा बाहर नहीं निकाला जा सकता है। बढ़ती आईबीएम पीसी/एटी मानक का पालन करने वाली मशीनें मानकीकृत कीबोर्ड नियंत्रक के माध्यम से सीपीयू को रीसेट करने का ढोंग कर सकती हैं, लेकिन यह काफी सुस्त था। विंडोज़ 3.x ने सीपीयू के इंटरप्ट-हैंडलिंग मैकेनिज्म में जानबूझकर [[ ट्रिपल दोष ]] को ट्रिगर करके इन दोनों समस्याओं के आसपास काम किया, जिससे सीपीयू वास्तविक प्रणाली में वापस आ जाएगा, लगभग तुरंत।<ref>{{Cite web|url=http://blogs.msdn.com/b/larryosterman/archive/2005/02/08/369243.aspx|title = DevBlogs}}</ref> | ||
Line 55: | Line 53: | ||
=== विस्तृत विभाजन इकाई कार्यप्रवाह === | === विस्तृत विभाजन इकाई कार्यप्रवाह === | ||
एक तार्किक पते में 16-अंश खंड चयनकर्ता (13 + 1 पता अंश्स की आपूर्ति) और 16-अंश ऑफ़सेट होता है। खंड चयनकर्ता को खंड | एक तार्किक पते में 16-अंश खंड चयनकर्ता (13 + 1 पता अंश्स की आपूर्ति) और 16-अंश ऑफ़सेट होता है। खंड चयनकर्ता को खंड पंजिका ों में से एक में स्थित होना चाहिए। उस चयनकर्ता में 2-अंश रिक्वेस्ट्ड प्रिविलेज लेवल (RPL), 1-अंश टेबल इंडिकेटर (TI) और 13-अंश इंडेक्स होता है। | ||
किसी दिए गए लॉजिकल | किसी दिए गए लॉजिकल दक्षता के दक्षता ट्रांसलेशन का प्रयास करते समय, संसाधक 64-अंश [[ खंड वर्णनकर्ता ]] स्ट्रक्चर को या तो [[ग्लोबल डिस्क्रिप्टर टेबल]] से पढ़ता है जब TI = 0 या [[ स्थानीय वर्णनकर्ता तालिका ]] जब TI = 1 होता है। यह तब विशेषाधिकार जांच करता है: | ||
: मैक्स (सीपीएल, आरपीएल) ≤ डीपीएल | : मैक्स (सीपीएल, आरपीएल) ≤ डीपीएल | ||
जहाँ CPL वर्तमान [[विशेषाधिकार स्तर]] है (CS | जहाँ CPL वर्तमान [[विशेषाधिकार स्तर]] है (CS पंजिका के निचले 2 अंश्स में पाया जाता है), RPL खंड चयनकर्ता से अनुरोधित विशेषाधिकार स्तर है, और DPL खंड का वर्णनकर्ता विशेषाधिकार स्तर है (विवरणकर्ता में पाया जाता है)। सभी विशेषाधिकार स्तर 0-3 की सीमा में पूर्णांक हैं, जहाँ सबसे कम संख्या उच्चतम विशेषाधिकार से मेल खाती है। | ||
यदि असमानता गलत है, तो | यदि असमानता गलत है, तो संसाधक एक सामान्य सुरक्षा दोष | सामान्य सुरक्षा (GP) दोष उत्पन्न करता है। अन्यथा, पता अनुवाद जारी रहता है। संसाधक तब 32-अंश या 16-अंश ऑफ़सेट लेता है और इसकी तुलना खंड डिस्क्रिप्टर में निर्दिष्ट खंड लिमिट से करता है। यदि यह बड़ा है, तो जीपी दोष उत्पन्न होता है। अन्यथा, संसाधक 24-अंश खंड आधार जोड़ता है, वर्णनकर्ता में निर्दिष्ट, ऑफ़सेट में, एक रेखीय भौतिक पता बनाता है। | ||
विशेषाधिकार जांच केवल तब की जाती है जब | विशेषाधिकार जांच केवल तब की जाती है जब खंड पंजिका लोड हो जाता है, क्योंकि खंड डिस्क्रिप्टर को खंड पंजिका ों के छिपे हुए हिस्सों में कैश किया जाता है।{{Citation needed|date=July 2011|reason=Is this true on the 80286, or only on the 80386 and above?}}<ref name=Arch>"Intel 64 and IA-32 Architectures Software Developer's Manual", Volume 3, "System Programming Guide", published in 2011, Page "Vol. 3A 3-11", the book is written: "''Every segment register has a “visible” part and a “hidden” part. (The hidden part is sometimes referred to as a “descriptor cache” or a “shadow register.”) When a segment selector is loaded into the visible part of a segment register, the processor also loads the hidden part of the segment register with the base address, segment limit, and access control information from the segment descriptor pointed to by the segment selector. The information cached in the segment register (visible and hidden) allows the processor to translate addresses without taking extra bus cycles to read the base address and limit from the segment descriptor.''"</ref> | ||
=== 80386 संरक्षित प्रणाली === | === 80386 संरक्षित प्रणाली === | ||
इंटेल 80386 और बाद में, संरक्षित प्रणाली 80286 संरक्षित प्रणाली के विभाजन तंत्र को बरकरार रखता है, लेकिन विभाजन इकाई और भौतिक बस के बीच पता अनुवाद की दूसरी परत के रूप में एक [[पेजिंग]] इकाई को जोड़ा गया है। इसके अलावा, महत्वपूर्ण बात यह है कि | इंटेल 80386 और बाद में, संरक्षित प्रणाली 80286 संरक्षित प्रणाली के विभाजन तंत्र को बरकरार रखता है, लेकिन विभाजन इकाई और भौतिक बस के बीच पता अनुवाद की दूसरी परत के रूप में एक [[पेजिंग]] इकाई को जोड़ा गया है। इसके अलावा, महत्वपूर्ण बात यह है कि दक्षता ऑफ़सेट 32-अंश (16-अंश के बजाय) हैं, और प्रत्येक खंड डिस्क्रिप्टर में खंड बेस भी 32-अंश (24-अंश के बजाय) है। विभाजन इकाई का सामान्य संचालन अन्यथा अपरिवर्तित है। पृष्ठन इकाई सक्षम या अक्षम हो सकती है; यदि अक्षम किया गया है, तो संचालन 80286 के समान है। यदि पेजिंग इकाई सक्षम है, तो खंड में पते अब भौतिक पते के बजाय आभासी पते हैं, जैसा कि वे 80286 पर थे। और अंतिम 32-अंश पता दो को जोड़कर प्राप्त विभाजन इकाई सभी आभासी (या तार्किक) पते हैं जब पेजिंग इकाई सक्षम होती है। जब विभाजन इकाई इन 32-अंश आभासी पतों को उत्पन्न और मान्य करती है, तो सक्षम पेजिंग इकाई अंत में इन आभासी पतों को भौतिक पतों में बदल देती है। Intel 80386 पर भौतिक पते 32-अंश हैं, लेकिन नए संसाधक पर बड़े हो सकते हैं जो भौतिक पता एक्सटेंशन का समर्थन करते हैं। | ||
80386 ने चार खंड | 80386 ने चार खंड पंजिका ों (सीएस, डीएस, ईएस, और एसएस) के मूल सेट में दो नए सामान्य-उद्देश्य आंकड़े खंड पंजिका , एफएस और जीएस भी पेश किए। | ||
एक 386 CPU को CR0 नियंत्रण | एक 386 CPU को CR0 नियंत्रण पंजिका में थोड़ा सा साफ़ करके वास्तविक प्रणाली में वापस रखा जा सकता है, हालाँकि सुरक्षा और मजबूती को लागू करने के लिए यह एक विशेषाधिकार प्राप्त ऑपरेशन है। तुलना के माध्यम से, एक 286 को केवल संसाधक रीसेट के लिए मजबूर करके वास्तविक प्रणाली में लौटाया जा सकता है, उदा। ट्रिपल फॉल्ट या बाहरी हार्डवेयर का उपयोग करके। | ||
== बाद के घटनाक्रम == | == बाद के घटनाक्रम == | ||
x86-64 संरचना लंबे प्रणाली (64-अंश प्रणाली) में विभाजन का उपयोग नहीं करता है। | x86-64 संरचना लंबे प्रणाली (64-अंश प्रणाली) में विभाजन का उपयोग नहीं करता है। खंड पंजिका ों में से चार, सीएस, एसएस, डीएस, और ईएस, आधार पता 0 और 2 की सीमा के लिए मजबूर हैं<sup>64</सुप>. खंड पंजिका FS और GS में अभी भी एक गैर-शून्य आधार पता हो सकता है। यह ऑपरेटिंग सिस्टम को इन खंड को विशेष उद्देश्यों के लिए उपयोग करने की अनुमति देता है। विरासत प्रणाली द्वारा उपयोग किए जाने वाले वैश्विक विवरणक तालिका तंत्र के विपरीत, इन खंडों का आधार पता [[मॉडल-विशिष्ट रजिस्टर|मॉडल-विशिष्ट पंजिका]] में संग्रहीत होता है। x86-64 संरचना विशेष SWAPGS निर्देश प्रदान करता है, जो [[कर्नेल मोड|कर्नेल प्रणाली]] और [[उपयोगकर्ता मोड|उपयोगकर्ता प्रणाली]] बेस पतों को स्वैप करने की अनुमति देता है। | ||
उदाहरण के लिए, x86-64 पर [[Microsoft Windows]] जीएस | उदाहरण के लिए, x86-64 पर [[Microsoft Windows]] जीएस खंड का उपयोग [[Win32 थ्रेड सूचना ब्लॉक]] को इंगित करने के लिए करता है, प्रत्येक थ्रेड (कंप्यूटर विज्ञान) के लिए एक छोटी आंकड़े संरचना, जिसमें अपवाद हैंडलिंग, थ्रेड-स्थानीय चर और अन्य प्रति- के बारे में जानकारी शामिल है। थ्रेड स्टेट। इसी तरह, [[लिनक्स कर्नेल]] प्रति-सीपीयू आंकड़े स्टोर करने के लिए जीएस खंड का उपयोग करता है। | ||
GS/FS का उपयोग [[जीएनयू संकलक संग्रह]] के [[थ्रेड-लोकल स्टोरेज]] और बफर ओवरफ्लो प्रोटेक्शन#GNU कम्पाइलर कलेक्शन .28GCC.29|कैनरी-बेस्ड | GS/FS का उपयोग [[जीएनयू संकलक संग्रह]] के [[थ्रेड-लोकल स्टोरेज]] और बफर ओवरफ्लो प्रोटेक्शन#GNU कम्पाइलर कलेक्शन .28GCC.29|कैनरी-बेस्ड स्तंभ प्रोटेक्टर में भी किया जाता है। | ||
== अभ्यास == | == अभ्यास == | ||
Line 88: | Line 86: | ||
mov dword [fs:eax], 42 | mov dword [fs:eax], 42 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
हालाँकि, खंड | हालाँकि, खंड पंजिका ों का उपयोग आमतौर पर निहित रूप से किया जाता है। | ||
* सभी सीपीयू निर्देश सीएस | * सभी सीपीयू निर्देश सीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट संकेत खंड से निहित रूप से प्राप्त किए जाते हैं। | ||
* अधिकांश स्मृति संदर्भ | * अधिकांश स्मृति संदर्भ डीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट आंकड़े खंड से आते हैं। ये ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड से भी आ सकते हैं, यदि एक खंड-अवहेलना उपसर्ग उस निर्देश से पहले आता है जो स्मृति संदर्भ बनाता है। अधिकांश, लेकिन सभी नहीं, निर्देश जो चूक रूप से DS का उपयोग करते हैं, एक ES अवहेलना उपसर्ग को स्वीकार करेंगे। | ||
* | * संसाधक [[रन-टाइम स्टैक|रन-टाइम स्तंभ]] संदर्भ, या तो निहित रूप से (जैसे ' दबाना' और 'त्वरित ' निर्देश) या स्पष्ट रूप से ( [[स्टैक-आधारित मेमोरी आवंटन|स्तंभ-आधारित स्मृति आवंटन]] | (ई) एसपी या (ई) बीपी पंजिका ों का उपयोग करके स्मृति एक्सेस) निर्दिष्ट स्तंभ खंड का उपयोग करें SS पंजिका में मौजूद खंड सिलेक्टर द्वारा। | ||
* [[x86 स्ट्रिंग निर्देश]] (जैसे 'stos', 'movs'), | * [[x86 स्ट्रिंग निर्देश|x86 श्रृंखला निर्देश]] (जैसे 'stos', 'movs'), आंकड़े खंड के साथ, ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड का भी उपयोग करते हैं। | ||
विभाजन को x86-32 | विभाजन को x86-32 संसाधक पर बंद नहीं किया जा सकता है (यह 64-अंश प्रणाली के लिए भी सही है, लेकिन चर्चा के दायरे से परे है), इतने सारे 32-अंश ऑपरेटिंग सिस्टम सभी खंड के बेस को 0 पर सेट करके एक [[फ्लैट मेमोरी मॉडल|फ्लैट स्मृति मॉडल]] का अनुकरण करते हैं। विभाजन को कार्यक्रमों के प्रति तटस्थ बनाने के लिए। उदाहरण के लिए, लिनक्स कर्नेल केवल 4 सामान्य प्रयोजन खंड स्थापित करता है: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 109: | Line 107: | ||
| __USER_DS || User data segment || 0 || 4 GiB || 3 | | __USER_DS || User data segment || 0 || 4 GiB || 3 | ||
|} | |} | ||
चूंकि आधार सभी मामलों में 0 पर सेट है और 4 GiB की सीमा है, पेजिंग इकाई पर पहुंचने से पहले विभाजन इकाई कार्यक्रम के मुद्दों को प्रभावित नहीं करती है। (यह निश्चित रूप से 80386 और बाद के | चूंकि आधार सभी मामलों में 0 पर सेट है और 4 GiB की सीमा है, पेजिंग इकाई पर पहुंचने से पहले विभाजन इकाई कार्यक्रम के मुद्दों को प्रभावित नहीं करती है। (यह निश्चित रूप से 80386 और बाद के संसाधक को संदर्भित करता है, क्योंकि पहले के x86 संसाधक में पेजिंग यूनिट नहीं है।) | ||
वर्तमान लिनक्स थ्रेड-लोकल स्टोरेज को इंगित करने के लिए जीएस का भी उपयोग करता है। | वर्तमान लिनक्स थ्रेड-लोकल स्टोरेज को इंगित करने के लिए जीएस का भी उपयोग करता है। | ||
खंड को संकेत, आंकड़े या सिस्टम खंड के रूप में परिभाषित किया जा सकता है। खंड को केवल पढ़ने, पढ़ने/लिखने, निष्पादित करने आदि के लिए अतिरिक्त अनुमति अंश मौजूद हैं। | |||
संरक्षित प्रणाली में, | संरक्षित प्रणाली में, संकेत हमेशा सीएस ( संकेत खंड चयनकर्ता) को छोड़कर सभी खंड पंजिका ों को संशोधित कर सकता है। ऐसा इसलिए है क्योंकि संसाधक का वर्तमान विशेषाधिकार स्तर (CPL) CS पंजिका के निचले 2 अंश्स में संग्रहीत है। संसाधक विशेषाधिकार स्तर (और CS को पुनः लोड करने) को बढ़ाने का एकमात्र तरीका 'lcall' (दूर कॉल) और INT (x86 निर्देश) | 'int' (व्यवधान) निर्देश हैं। इसी तरह, विशेषाधिकार स्तर (और सीएस को पुनः लोड करने) को कम करने का एकमात्र तरीका 'lret' (दूर वापसी) और 'iret' (व्यवधान वापसी) निर्देश हैं। वास्तविक प्रणाली में, संकेत दूर छलांग लगाकर (या एक गैर-दस्तावेजी का उपयोग करके) सीएस पंजिका को संशोधित भी कर सकता है <code>POP CS</code> 8086 या 8088 पर निर्देश)<ref><code>POP CS</code> must be used with extreme care and has limited usefulness, because it immediately changes the effective address that will be computed from the instruction pointer to fetch the next instruction. Generally, a far jump is much more useful. The existence of <code>POP CS</code> is probably an accident, as it follows a pattern of PUSH and POP instruction opcodes for the four segment registers on the 8086 and 8088.</ref>). बेशक, वास्तविक प्रणाली में, कोई विशेषाधिकार स्तर नहीं हैं; सभी योजनाओंं में सभी स्मृति और सभी CPU निर्देशों तक पूर्ण अनियंत्रित पहुंच होती है। | ||
विभाजन के बारे में अधिक जानकारी के लिए, [[एएमडी]] या [[इंटेल]] वेबसाइटों पर स्वतंत्र रूप से उपलब्ध [[आईए-32]] मैनुअल देखें। | विभाजन के बारे में अधिक जानकारी के लिए, [[एएमडी]] या [[इंटेल]] वेबसाइटों पर स्वतंत्र रूप से उपलब्ध [[आईए-32]] मैनुअल देखें। |
Revision as of 18:29, 28 April 2023
x86 स्मृति विभाजन इंटेल x86 कंप्यूटर निर्देश सेट वास्तुकला में स्मृति विभाजन के कार्यान्वयन को संदर्भित करता है। 1978 में इंटेल 8086 पर विभाजन की शुरुआत की गई थी, ताकि कार्यक्रमों को 64 KB (65,536 बाइटस) से अधिक स्मृति को संबोधित करने की अनुमति मिल सके। इंटेल 80286 ने 1982 में विभाजन का दूसरा संस्करण पेश किया जिसमें आभासी स्मृति और स्मृति सुरक्षा के लिए समर्थन जोड़ा गया। इस बिंदु पर मूल प्रणाली का नाम बदलकर वास्तविक प्रणाली कर दिया गया था, और नए संस्करण को संरक्षित प्रणाली नाम दिया गया था। 2003 में पेश किए गए x86-64 संरचना ने 64-अंश प्रणाली में विभाजन के लिए काफी हद तक समर्थन छोड़ दिया है।
वास्तविक और संरक्षित दोनों प्रणाली में, वास्तविक स्मृति दक्षता प्राप्त करने के लिए सिस्टम 16-अंश खंड पंजिका का उपयोग करता है। वास्तविक प्रणाली में, CS, DS, SS और ES पंजिका वर्तमान में उपयोग किए गए योजना संकेत खंड (CS), वर्तमान आंकड़े खंड (DS), वर्तमान कॉल स्टैक (आह्वान स्तंभ)(SS), और एक अतिरिक्त खंड की ओर इशारा करते हैं। क्रमादेशक (ईएस) द्वारा निर्धारित। 1985 में पेश किया गया इंटेल 80386, दो अतिरिक्त खंड पंजिका , FS और GS जोड़ता है, जिसमें हार्डवेयर द्वारा परिभाषित कोई विशिष्ट उपयोग नहीं है। जिस तरह से खंड पंजिका का उपयोग किया जाता है, वह दो प्रणाली के बीच भिन्न होता है।[1]
क्रियान्वित किए जा रहे कार्य के अनुसार खंड की पसंद आमतौर पर संसाधक द्वारा चूक की जाती है। निर्देश हमेशा संकेत खंड से प्राप्त किए जाते हैं। कोई भी स्तंभ दबाना या त्वरित या कोई भी आंकड़े संदर्भ जो स्तंभ का जिक्र करता है, स्तंभ खंड का उपयोग करता है। आंकड़े के अन्य सभी संदर्भ आंकड़े खंड का उपयोग करते हैं। अतिरिक्त खंड श्रृंखला संचालन के लिए चूक गंतव्य है (उदाहरण के लिए MOVS या CMPS)। एफएस और जीएस के पास हार्डवेयर- नियुक्त किए गए उपयोग नहीं हैं। निर्देश प्रारूप एक वैकल्पिक खंड उपसर्ग काटने की अनुमति देता है जिसका उपयोग वांछित होने पर चयनित निर्देशों के लिए चूक खंड को अवहेलना करने के लिए किया जा सकता है।[2]
पूर्णतः प्रणाली
पूर्णतः प्रणाली या वर्चुअल 8086 प्रणाली में, खंड का आकार 1 बाइट से लेकर 65,536 बाइट (16-अंश ऑफ़सेट का उपयोग करके) तक हो सकता है।
खंड पंजिका में 16-अंश खंड चयनकर्ता को एक रैखिक 20-अंश दक्षता के सबसे महत्वपूर्ण 16 अंश के रूप में व्याख्या किया जाता है, जिसे खंड दक्षता कहा जाता है, जिसमें से शेष चार सबसे कम महत्वपूर्ण अंश सभी शून्य हैं। खंड पता हमेशा एक रेखीय पता प्राप्त करने के निर्देश में 16-अंश ऑफ़सेट में जोड़ा जाता है, जो इस प्रणाली में भौतिक पते के समान होता है। उदाहरण के लिए, खंडित पता 06EFh:1234h (यहाँ प्रत्यय h का अर्थ हेक्साडेसिमल है) में 06EFh का एक खंड चयनकर्ता है, जो 06EF0h के एक खंड पते का प्रतिनिधित्व करता है, जिसमें ऑफसेट जोड़ा जाता है, जिससे रैखिक पता 06EF0h + 1234h = 08124h प्राप्त होता है।
0000 0110 1110 1111 0000
|
Segment | 16 bits, shifted 4 bits left (or multiplied by 0x10) |
---|---|---|
+ 0001 0010 0011 0100
|
Offset | 16 bits |
|
||
0000 1000 0001 0010 0100
|
Address | 20 bits |
जिस तरह से खंड दक्षता और ऑफ़सेट जोड़े जाते हैं, उसके कारण एक सिंगल लीनियर दक्षता को 2 तक मैप किया जा सकता है12 = 4096 विशिष्ट खंड: ऑफ़सेट जोड़े। उदाहरण के लिए, रैखिक पता 08124h में खंडित पते हो सकते हैं 06EFh:1234h, 0812h:0004h, 0000h:8124h, आदि।
यह अद्वितीय दक्षता िंग योजनाओं के आदी क्रमादेशकों के लिए भ्रमित करने वाला हो सकता है, लेकिन इसका उपयोग लाभ के लिए भी किया जा सकता है, उदाहरण के लिए कई नेस्टेड आंकड़े संरचनाओं को संबोधित करते समय। जबकि वास्तविक प्रणाली खंड हमेशा 64 किलोबाइट लंबे होते हैं, व्यावहारिक प्रभाव केवल यह है कि कोई भी खंड 64 केबी से अधिक लंबा नहीं हो सकता है, इसके बजाय प्रत्येक खंड 64 केबी लंबा होना चाहिए। क्योंकि वास्तविक प्रणाली में कोई सुरक्षा या विशेषाधिकार सीमा नहीं है, भले ही एक खंड को 64 केबी से छोटा परिभाषित किया जा सकता है, फिर भी यह पूरी तरह से कार्यक्रमों पर निर्भर करेगा कि वे समन्वय करें और अपने खंडों की सीमा के भीतर रखें, जैसा कि कोई भी कार्यक्रम कर सकता है हमेशा किसी भी स्मृति तक पहुंचें (चूंकि यह मनमाने ढंग से खंड चयनकर्ताओं को बिना किसी पर्यवेक्षण के खंड पते बदलने के लिए सेट कर सकता है)। इसलिए, 1 से 65,536 बाइट्स की सीमा में प्रत्येक खंड के लिए एक चर लंबाई होने के रूप में वास्तविक प्रणाली की कल्पना की जा सकती है, जो कि सीपीयू द्वारा लागू नहीं किया गया है।
(रैखिक पते के प्रमुख शून्य, खंडित पते, और खंड और ऑफसेट फ़ील्ड स्पष्टता के लिए यहां दिखाए गए हैं। वे आमतौर पर छोड़े जाते हैं।)
वास्तविक प्रणाली का प्रभावी 20-अंश पता स्थान स्मृति पता को 2 तक सीमित करता है20 बाइट, या 1,048,576 बाइट (1 मेगाबाइट)। यह सीधे Intel 8086 (और, बाद में, निकट से संबंधित 8088) के हार्डवेयर डिज़ाइन से प्राप्त हुआ, जिसमें ठीक 20 पता बस थी। (दोनों को 40-पिन डीआईपी पैकेज में पैक किया गया था; केवल 20 दक्षता लाइन के साथ भी, दक्षता और आंकड़े बस को सीमित पिन काउंट के भीतर सभी दक्षता और आंकड़े लाइन को फिट करने के लिए मल्टीप्लेक्स किया गया था।)
प्रत्येक खंड रेखीय (सपाट) पता स्थान की शुरुआत से 16 बाइट्स के गुणक से शुरू होता है, जिसे एक पैराग्राफ कहा जाता है। यानी 16 बाइट के अंतराल पर। चूंकि सभी खंड 64 केबी लंबे हैं, यह बताता है कि खंड के बीच ओवरलैप कैसे हो सकता है और लीनियर स्मृति दक्षता स्पेस में किसी भी स्थान को कई खंड:ऑफ़सेट जोड़े के साथ क्यों एक्सेस किया जा सकता है। रेखीय पता स्थान में एक खंड की शुरुआत के वास्तविक स्थान की गणना खंड × 16 के साथ की जा सकती है। 0Ch (12) का एक खंड मान रैखिक पता स्थान में C0h (192) पर एक रैखिक पता देगा। इसके बाद दक्षता ऑफ़सेट को इस नंबर में जोड़ा जा सकता है। 0Ch:0Fh (12:15) होगा C0h+0Fh=CFh (192+15=207), CFh (207) रेखीय पता होगा। इस तरह के दक्षता ट्रांसलेशन सीपीयू की विभाजन यूनिट द्वारा किए जाते हैं। अंतिम खंड, FFFFh (65535), रेखीय पते FFFF0h (1048560) पर शुरू होता है, 20 अंश पता स्थान के अंत से 16 बाइट्स पहले, और इस प्रकार, 65,536 बाइट तक, 65,520 (65536) तक ऑफ़सेट के साथ पहुंच सकता है −16) बाइट्स 20 अंश 8088 दक्षता स्पेस के अंत के बाद। 8088 पर, इन दक्षता एक्सेस को दक्षता स्पेस की शुरुआत में लपेटा गया था जैसे कि 65535:16 दक्षता 0 तक पहुंच जाएगा और 65533:1000 लीनियर दक्षता स्पेस के दक्षता 952 तक पहुंच जाएगा। क्रमादेशकों द्वारा इस सुविधा का उपयोग बाद की सीपीयू पीढ़ियों में गेट ए 20 संगतता मुद्दों के कारण हुआ, जहां रेखीय पता स्थान को 20 अंश्स से आगे बढ़ाया गया था।
16-अंश वास्तविक प्रणाली में, कई स्मृति खंड का उपयोग करने के लिए एप्लिकेशन को सक्षम करना (किसी एक 64K-खंड में उपलब्ध स्मृति से अधिक स्मृति तक पहुंचने के लिए) काफी जटिल है, लेकिन इसे सभी के लिए एक आवश्यक बुराई के रूप में देखा गया था लेकिन सबसे छोटे उपकरण ( जो कम स्मृति के साथ कर सकता है)। समस्या की जड़ यह है कि संपूर्ण स्मृति रेंज के फ्लैट दक्षता िंग के लिए उपयुक्त कोई उपयुक्त पता-अंकगणितीय निर्देश उपलब्ध नहीं हैं। कई निर्देशों को लागू करने से फ्लैट दक्षता िंग संभव है, जो हालांकि धीमे योजना की ओर ले जाता है।
x86 स्मृति मॉडल अवधारणा खंड पंजिका ों के सेटअप से निकली है। उदाहरण के लिए, छोटे मॉडल CS=DS=SS में, यानी योजना का संकेत, आंकड़े और स्तंभ सभी एक ही 64 KB खंड में समाहित हैं। छोटे स्मृति मॉडल DS=SS में, इसलिए आंकड़े और स्तंभ दोनों एक ही खंड में रहते हैं; सीएस 64 केबी तक के अलग संकेत खंड की ओर इशारा करता है।
संरक्षित प्रणाली
80286 संरक्षित प्रणाली
Intel 80286 का संरक्षित प्रणाली संसाधक के दक्षता स्पेस को 2 तक बढ़ा देता है24 बाइट्स (16 मेगाबाइट्स), लेकिन शिफ्ट वैल्यू को समायोजित करके नहीं। इसके बजाय, 16-अंश खंड पंजिका ों में अब 24-अंश बेस दक्षता वाले खंड वर्णनकर्ता की तालिका में एक इंडेक्स होता है जिसमें ऑफ़सेट जोड़ा जाता है। पुराने सॉफ़्टवेयर का समर्थन करने के लिए, संसाधक वास्तविक प्रणाली में शुरू होता है, एक ऐसा प्रणाली जिसमें यह 8086 के खंडित दक्षता िंग मॉडल का उपयोग करता है। हालांकि एक छोटा सा अंतर है: परिणामी भौतिक पता अब 20 अंश तक छोटा नहीं किया जाता है, इसलिए वास्तविक प्रणाली पॉइंटर्स (लेकिन 8086 पॉइंटर्स नहीं) अब 100000 के बीच के पतों को संदर्भित कर सकते हैं16 और 10FFEF16. स्मृति के लगभग 64-किलोबाइट क्षेत्र को हाई स्मृति एरिया (HMA) के रूप में जाना जाता था, और DOS के बाद के संस्करण इसका उपयोग उपलब्ध पारंपरिक स्मृति (यानी पहले मेगाबाइट के भीतर) को बढ़ाने के लिए कर सकते थे। HMA को जोड़ने के साथ, कुल पता स्थान लगभग 1.06 MB हो जाता है। हालांकि 80286 रीयल-प्रणाली पतों को 20 अंश तक छोटा नहीं करता है, 80286 वाला सिस्टम 21वीं दक्षता लाइन, ए 20 लाइन को गेट ऑफ करके संसाधक के बाहरी हार्डवेयर के साथ ऐसा कर सकता है। IBM PC AT ने ऐसा करने के लिए हार्डवेयर प्रदान किया (मूल IBM PC और IBM PC/XT|PC/XT मॉडल के लिए सॉफ़्टवेयर के साथ पूर्ण पिछड़े संगतता के लिए), और इसलिए बाद के सभी IBM PC/AT-श्रेणी के PC क्लोनों ने भी किया।
286 संरक्षित प्रणाली का उपयोग शायद ही कभी किया गया था क्योंकि यह 8086/88 मशीनों वाले उपयोगकर्ताओं के बड़े निकाय को बाहर कर देता था। इसके अलावा, यह अभी भी स्मृति को 64k खंड में विभाजित करने की आवश्यकता है जैसे वास्तविक प्रणाली में किया गया था। इस सीमा को 32-अंश सीपीयू पर काम किया जा सकता है जो आकार में 64k से अधिक स्मृति पॉइंटर्स के उपयोग की अनुमति देता है, हालांकि खंड लिमिट फ़ील्ड केवल 24-अंश लंबा है, जो अधिकतम खंड आकार बनाया जा सकता है वह 16MB है (यद्यपि पेजिंग अधिक स्मृति आवंटित करने के लिए उपयोग किया जा सकता है, कोई भी व्यक्तिगत खंड 16MB से अधिक नहीं हो सकता है)। इस पद्धति का उपयोग आमतौर पर विंडोज 3.x अनुप्रयोगों पर फ्लैट स्मृति स्पेस बनाने के लिए किया जाता था, हालांकि ओएस अभी भी 16-अंश था, 32-अंश निर्देशों के साथ एपीआई कॉल नहीं की जा सकती थी। इस प्रकार, 64k खंड में एपीआई कॉल करने वाले सभी संकेत को रखना अभी भी आवश्यक था।
एक बार 286 संरक्षित प्रणाली लागू हो जाने के बाद, इसे हार्डवेयर रीसेट करने के अलावा बाहर नहीं निकाला जा सकता है। बढ़ती आईबीएम पीसी/एटी मानक का पालन करने वाली मशीनें मानकीकृत कीबोर्ड नियंत्रक के माध्यम से सीपीयू को रीसेट करने का ढोंग कर सकती हैं, लेकिन यह काफी सुस्त था। विंडोज़ 3.x ने सीपीयू के इंटरप्ट-हैंडलिंग मैकेनिज्म में जानबूझकर ट्रिपल दोष को ट्रिगर करके इन दोनों समस्याओं के आसपास काम किया, जिससे सीपीयू वास्तविक प्रणाली में वापस आ जाएगा, लगभग तुरंत।[3]
विस्तृत विभाजन इकाई कार्यप्रवाह
एक तार्किक पते में 16-अंश खंड चयनकर्ता (13 + 1 पता अंश्स की आपूर्ति) और 16-अंश ऑफ़सेट होता है। खंड चयनकर्ता को खंड पंजिका ों में से एक में स्थित होना चाहिए। उस चयनकर्ता में 2-अंश रिक्वेस्ट्ड प्रिविलेज लेवल (RPL), 1-अंश टेबल इंडिकेटर (TI) और 13-अंश इंडेक्स होता है।
किसी दिए गए लॉजिकल दक्षता के दक्षता ट्रांसलेशन का प्रयास करते समय, संसाधक 64-अंश खंड वर्णनकर्ता स्ट्रक्चर को या तो ग्लोबल डिस्क्रिप्टर टेबल से पढ़ता है जब TI = 0 या स्थानीय वर्णनकर्ता तालिका जब TI = 1 होता है। यह तब विशेषाधिकार जांच करता है:
- मैक्स (सीपीएल, आरपीएल) ≤ डीपीएल
जहाँ CPL वर्तमान विशेषाधिकार स्तर है (CS पंजिका के निचले 2 अंश्स में पाया जाता है), RPL खंड चयनकर्ता से अनुरोधित विशेषाधिकार स्तर है, और DPL खंड का वर्णनकर्ता विशेषाधिकार स्तर है (विवरणकर्ता में पाया जाता है)। सभी विशेषाधिकार स्तर 0-3 की सीमा में पूर्णांक हैं, जहाँ सबसे कम संख्या उच्चतम विशेषाधिकार से मेल खाती है।
यदि असमानता गलत है, तो संसाधक एक सामान्य सुरक्षा दोष | सामान्य सुरक्षा (GP) दोष उत्पन्न करता है। अन्यथा, पता अनुवाद जारी रहता है। संसाधक तब 32-अंश या 16-अंश ऑफ़सेट लेता है और इसकी तुलना खंड डिस्क्रिप्टर में निर्दिष्ट खंड लिमिट से करता है। यदि यह बड़ा है, तो जीपी दोष उत्पन्न होता है। अन्यथा, संसाधक 24-अंश खंड आधार जोड़ता है, वर्णनकर्ता में निर्दिष्ट, ऑफ़सेट में, एक रेखीय भौतिक पता बनाता है।
विशेषाधिकार जांच केवल तब की जाती है जब खंड पंजिका लोड हो जाता है, क्योंकि खंड डिस्क्रिप्टर को खंड पंजिका ों के छिपे हुए हिस्सों में कैश किया जाता है।[citation needed][1]
80386 संरक्षित प्रणाली
इंटेल 80386 और बाद में, संरक्षित प्रणाली 80286 संरक्षित प्रणाली के विभाजन तंत्र को बरकरार रखता है, लेकिन विभाजन इकाई और भौतिक बस के बीच पता अनुवाद की दूसरी परत के रूप में एक पेजिंग इकाई को जोड़ा गया है। इसके अलावा, महत्वपूर्ण बात यह है कि दक्षता ऑफ़सेट 32-अंश (16-अंश के बजाय) हैं, और प्रत्येक खंड डिस्क्रिप्टर में खंड बेस भी 32-अंश (24-अंश के बजाय) है। विभाजन इकाई का सामान्य संचालन अन्यथा अपरिवर्तित है। पृष्ठन इकाई सक्षम या अक्षम हो सकती है; यदि अक्षम किया गया है, तो संचालन 80286 के समान है। यदि पेजिंग इकाई सक्षम है, तो खंड में पते अब भौतिक पते के बजाय आभासी पते हैं, जैसा कि वे 80286 पर थे। और अंतिम 32-अंश पता दो को जोड़कर प्राप्त विभाजन इकाई सभी आभासी (या तार्किक) पते हैं जब पेजिंग इकाई सक्षम होती है। जब विभाजन इकाई इन 32-अंश आभासी पतों को उत्पन्न और मान्य करती है, तो सक्षम पेजिंग इकाई अंत में इन आभासी पतों को भौतिक पतों में बदल देती है। Intel 80386 पर भौतिक पते 32-अंश हैं, लेकिन नए संसाधक पर बड़े हो सकते हैं जो भौतिक पता एक्सटेंशन का समर्थन करते हैं।
80386 ने चार खंड पंजिका ों (सीएस, डीएस, ईएस, और एसएस) के मूल सेट में दो नए सामान्य-उद्देश्य आंकड़े खंड पंजिका , एफएस और जीएस भी पेश किए।
एक 386 CPU को CR0 नियंत्रण पंजिका में थोड़ा सा साफ़ करके वास्तविक प्रणाली में वापस रखा जा सकता है, हालाँकि सुरक्षा और मजबूती को लागू करने के लिए यह एक विशेषाधिकार प्राप्त ऑपरेशन है। तुलना के माध्यम से, एक 286 को केवल संसाधक रीसेट के लिए मजबूर करके वास्तविक प्रणाली में लौटाया जा सकता है, उदा। ट्रिपल फॉल्ट या बाहरी हार्डवेयर का उपयोग करके।
बाद के घटनाक्रम
x86-64 संरचना लंबे प्रणाली (64-अंश प्रणाली) में विभाजन का उपयोग नहीं करता है। खंड पंजिका ों में से चार, सीएस, एसएस, डीएस, और ईएस, आधार पता 0 और 2 की सीमा के लिए मजबूर हैं64</सुप>. खंड पंजिका FS और GS में अभी भी एक गैर-शून्य आधार पता हो सकता है। यह ऑपरेटिंग सिस्टम को इन खंड को विशेष उद्देश्यों के लिए उपयोग करने की अनुमति देता है। विरासत प्रणाली द्वारा उपयोग किए जाने वाले वैश्विक विवरणक तालिका तंत्र के विपरीत, इन खंडों का आधार पता मॉडल-विशिष्ट पंजिका में संग्रहीत होता है। x86-64 संरचना विशेष SWAPGS निर्देश प्रदान करता है, जो कर्नेल प्रणाली और उपयोगकर्ता प्रणाली बेस पतों को स्वैप करने की अनुमति देता है।
उदाहरण के लिए, x86-64 पर Microsoft Windows जीएस खंड का उपयोग Win32 थ्रेड सूचना ब्लॉक को इंगित करने के लिए करता है, प्रत्येक थ्रेड (कंप्यूटर विज्ञान) के लिए एक छोटी आंकड़े संरचना, जिसमें अपवाद हैंडलिंग, थ्रेड-स्थानीय चर और अन्य प्रति- के बारे में जानकारी शामिल है। थ्रेड स्टेट। इसी तरह, लिनक्स कर्नेल प्रति-सीपीयू आंकड़े स्टोर करने के लिए जीएस खंड का उपयोग करता है।
GS/FS का उपयोग जीएनयू संकलक संग्रह के थ्रेड-लोकल स्टोरेज और बफर ओवरफ्लो प्रोटेक्शन#GNU कम्पाइलर कलेक्शन .28GCC.29|कैनरी-बेस्ड स्तंभ प्रोटेक्टर में भी किया जाता है।
अभ्यास
तार्किक पतों को x86 असेंबली भाषा में स्पष्ट रूप से निर्दिष्ट किया जा सकता है, उदा। (एटी एंड टी सिंटैक्स):
movl $42, %fs:(%eax); स्थानांतरण भाषा पंजीकृत करें में M[fs:eax]<-42) के बराबर
या इंटेल सिंटैक्स में:
mov dword [fs:eax], 42
हालाँकि, खंड पंजिका ों का उपयोग आमतौर पर निहित रूप से किया जाता है।
- सभी सीपीयू निर्देश सीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट संकेत खंड से निहित रूप से प्राप्त किए जाते हैं।
- अधिकांश स्मृति संदर्भ डीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट आंकड़े खंड से आते हैं। ये ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड से भी आ सकते हैं, यदि एक खंड-अवहेलना उपसर्ग उस निर्देश से पहले आता है जो स्मृति संदर्भ बनाता है। अधिकांश, लेकिन सभी नहीं, निर्देश जो चूक रूप से DS का उपयोग करते हैं, एक ES अवहेलना उपसर्ग को स्वीकार करेंगे।
- संसाधक रन-टाइम स्तंभ संदर्भ, या तो निहित रूप से (जैसे ' दबाना' और 'त्वरित ' निर्देश) या स्पष्ट रूप से ( स्तंभ-आधारित स्मृति आवंटन | (ई) एसपी या (ई) बीपी पंजिका ों का उपयोग करके स्मृति एक्सेस) निर्दिष्ट स्तंभ खंड का उपयोग करें SS पंजिका में मौजूद खंड सिलेक्टर द्वारा।
- x86 श्रृंखला निर्देश (जैसे 'stos', 'movs'), आंकड़े खंड के साथ, ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड का भी उपयोग करते हैं।
विभाजन को x86-32 संसाधक पर बंद नहीं किया जा सकता है (यह 64-अंश प्रणाली के लिए भी सही है, लेकिन चर्चा के दायरे से परे है), इतने सारे 32-अंश ऑपरेटिंग सिस्टम सभी खंड के बेस को 0 पर सेट करके एक फ्लैट स्मृति मॉडल का अनुकरण करते हैं। विभाजन को कार्यक्रमों के प्रति तटस्थ बनाने के लिए। उदाहरण के लिए, लिनक्स कर्नेल केवल 4 सामान्य प्रयोजन खंड स्थापित करता है:
Name | Description | Base | Limit | DPL |
---|---|---|---|---|
__KERNEL_CS | Kernel code segment | 0 | 4 GiB | 0 |
__KERNEL_DS | Kernel data segment | 0 | 4 GiB | 0 |
__USER_CS | User code segment | 0 | 4 GiB | 3 |
__USER_DS | User data segment | 0 | 4 GiB | 3 |
चूंकि आधार सभी मामलों में 0 पर सेट है और 4 GiB की सीमा है, पेजिंग इकाई पर पहुंचने से पहले विभाजन इकाई कार्यक्रम के मुद्दों को प्रभावित नहीं करती है। (यह निश्चित रूप से 80386 और बाद के संसाधक को संदर्भित करता है, क्योंकि पहले के x86 संसाधक में पेजिंग यूनिट नहीं है।)
वर्तमान लिनक्स थ्रेड-लोकल स्टोरेज को इंगित करने के लिए जीएस का भी उपयोग करता है।
खंड को संकेत, आंकड़े या सिस्टम खंड के रूप में परिभाषित किया जा सकता है। खंड को केवल पढ़ने, पढ़ने/लिखने, निष्पादित करने आदि के लिए अतिरिक्त अनुमति अंश मौजूद हैं।
संरक्षित प्रणाली में, संकेत हमेशा सीएस ( संकेत खंड चयनकर्ता) को छोड़कर सभी खंड पंजिका ों को संशोधित कर सकता है। ऐसा इसलिए है क्योंकि संसाधक का वर्तमान विशेषाधिकार स्तर (CPL) CS पंजिका के निचले 2 अंश्स में संग्रहीत है। संसाधक विशेषाधिकार स्तर (और CS को पुनः लोड करने) को बढ़ाने का एकमात्र तरीका 'lcall' (दूर कॉल) और INT (x86 निर्देश) | 'int' (व्यवधान) निर्देश हैं। इसी तरह, विशेषाधिकार स्तर (और सीएस को पुनः लोड करने) को कम करने का एकमात्र तरीका 'lret' (दूर वापसी) और 'iret' (व्यवधान वापसी) निर्देश हैं। वास्तविक प्रणाली में, संकेत दूर छलांग लगाकर (या एक गैर-दस्तावेजी का उपयोग करके) सीएस पंजिका को संशोधित भी कर सकता है POP CS
8086 या 8088 पर निर्देश)[4]). बेशक, वास्तविक प्रणाली में, कोई विशेषाधिकार स्तर नहीं हैं; सभी योजनाओंं में सभी स्मृति और सभी CPU निर्देशों तक पूर्ण अनियंत्रित पहुंच होती है।
विभाजन के बारे में अधिक जानकारी के लिए, एएमडी या इंटेल वेबसाइटों पर स्वतंत्र रूप से उपलब्ध आईए-32 मैनुअल देखें।
नोट्स और संदर्भ
- ↑ 1.0 1.1 "Intel 64 and IA-32 Architectures Software Developer's Manual", Volume 3, "System Programming Guide", published in 2011, Page "Vol. 3A 3-11", the book is written: "Every segment register has a “visible” part and a “hidden” part. (The hidden part is sometimes referred to as a “descriptor cache” or a “shadow register.”) When a segment selector is loaded into the visible part of a segment register, the processor also loads the hidden part of the segment register with the base address, segment limit, and access control information from the segment descriptor pointed to by the segment selector. The information cached in the segment register (visible and hidden) allows the processor to translate addresses without taking extra bus cycles to read the base address and limit from the segment descriptor."
- ↑ Intel Corporation (2004). IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture (PDF).
- ↑ "DevBlogs".
- ↑
POP CS
must be used with extreme care and has limited usefulness, because it immediately changes the effective address that will be computed from the instruction pointer to fetch the next instruction. Generally, a far jump is much more useful. The existence ofPOP CS
is probably an accident, as it follows a pattern of PUSH and POP instruction opcodes for the four segment registers on the 8086 and 8088.
यह भी देखें
- x86 स्मृति मॉडल
- मल्टीप्रोग्रामिंग सिस्टम
- स्प्लिट ऑक्टल