X86 मेमोरी सेगमेंटेशन: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Implementation of memory segmentation on Intel x86}} | {{short description|Implementation of memory segmentation on Intel x86}} | ||
x[[86]] [[ स्मृति विभाजन ]] इंटेल x86 कंप्यूटर [[ निर्देश सेट वास्तुकला ]] में स्मृति विभाजन के कार्यान्वयन को संदर्भित करता है। 1978 में [[Index.php?title=इंटेल 8086|इंटेल 8086]] पर विभाजन की शुरुआत की गई थी, ताकि कार्यक्रमों को 64 KB (65,536 [[बाइट]] | 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> | क्रियान्वित किए जा रहे कार्य के अनुसार खंड की पसंद आमतौर पर संसाधक द्वारा चूक की जाती है। निर्देश हमेशा संकेत खंड से प्राप्त किए जाते हैं। कोई भी स्तंभ दबाना या त्वरित या कोई भी आंकड़े संदर्भ जो स्तंभ का जिक्र करता है, स्तंभ खंड का उपयोग करता है। आंकड़े के अन्य सभी संदर्भ आंकड़े खंड का उपयोग करते हैं। अतिरिक्त खंड श्रृंखला संचालन के लिए चूक गंतव्य है (उदाहरण के लिए 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 | [[Image:Overlapping realmode segments.svg|thumb|300px|वास्तविक प्रणाली स्मृति में तीन खंड (विस्तार करने के लिए चित्र पर क्लिक करें)। खंड 2 और खंड 3 के बीच अधिव्यापन है; फ़िरोज़ा क्षेत्र में जोड़ का उपयोग दोनों खंड चयनकर्ताओं से किया जा सकता है।]]पूर्णतः प्रणाली या [[वर्चुअल 8086 मोड|वी 8086 प्रणाली]] में, खंड का आकार 1 जोड़ से लेकर 65,536 जोड़ (16-अंश लक्ष्यांतर का उपयोग करके) तक हो सकता है। | ||
खंड पंजिका में 16-अंश खंड चयनकर्ता को एक रैखिक 20-अंश दक्षता के सबसे महत्वपूर्ण 16 अंश के रूप में व्याख्या किया जाता है, जिसे खंड दक्षता कहा जाता है, जिसमें से शेष चार सबसे कम महत्वपूर्ण अंश सभी शून्य हैं। खंड | खंड पंजिका में 16-अंश खंड चयनकर्ता को एक रैखिक 20-अंश दक्षता के सबसे महत्वपूर्ण 16 अंश के रूप में व्याख्या किया जाता है, जिसे खंड दक्षता कहा जाता है, जिसमें से शेष चार सबसे कम महत्वपूर्ण अंश सभी शून्य हैं। खंड स्थान हमेशा एक रेखीय स्थान प्राप्त करने के निर्देश में 16-अंश लक्ष्यांतर में जोड़ा जाता है, जो इस प्रणाली में भौतिक स्थान के समान होता है। उदाहरण के लिए, खंडित स्थान 06EFh:1234h (यहाँ प्रत्यय h का अर्थ [[हेक्साडेसिमल]] है) में 06EFh का एक खंड चयनकर्ता है, जो 06EF0h के एक खंड स्थान का प्रतिनिधित्व करता है, जिसमें लक्ष्यांतर जोड़ा जाता है, जिससे रैखिक स्थान 06EF0h + 1234h = 08124h प्राप्त होता है। | ||
{| | {| | ||
|- | |- | ||
! style=width:18em | <code> </code><code style="background:#DED">0000 0110 1110 1111</code><code>0000</code> | ! style=width:18em | <code> </code><code style="background:#DED">0000 0110 1110 1111</code><code>0000</code> | ||
| ''' | | '''खंड''' | ||
| 16 | | 16 जोड़ , स्थान्तरण 4 जोड़ विरूध्द पक्ष (और गुणा किया 0x10) | ||
|- | |- | ||
! style=width:18em | <code>+ </code><code style="background:#DDF">0001 0010 0011 0100</code> | ! style=width:18em | <code>+ </code><code style="background:#DDF">0001 0010 0011 0100</code> | ||
| ''' | | '''लक्ष्यांतर''' | ||
| 16 | | 16 जोड़ | ||
|- style="text-decoration:line-through" | |- style="text-decoration:line-through" | ||
! style=width:18em | <code> </code> | ! style=width:18em | <code> </code> | ||
Line 24: | Line 24: | ||
|- | |- | ||
! style=width:18em | <code> </code><code style="background:#FDF">0000 1000 0001 0010 0100</code> | ! style=width:18em | <code> </code><code style="background:#FDF">0000 1000 0001 0010 0100</code> | ||
| ''' | | '''स्थान''' | ||
| 20 | | 20 जोड़ | ||
|} | |} | ||
जिस तरह से खंड दक्षता और | जिस तरह से खंड दक्षता और लक्ष्यांतर जोड़े जाते हैं, उसके कारण एक पृथक रेखीय दक्षता को तक प्रतिचित्र किया जा सकता है 2<sup>12</sup> = 4096 विशिष्ट खंड: लक्ष्यांतर जोड़े। उदाहरण के लिए, रैखिक स्थान 08124h में खंडित स्थान हो सकते हैं 06EFh:1234h, 0812h:0004h, 0000h:8124h, आदि। | ||
यह अद्वितीय दक्षता | यह अद्वितीय दक्षता योजनाओं के आदी क्रमादेशकों के लिए भ्रमित करने वाला हो सकता है, लेकिन इसका उपयोग लाभ के लिए भी किया जा सकता है, उदाहरण के लिए कई स्थिर आंकड़े संरचनाओं को संबोधित करते समय। जबकि वास्तविक प्रणाली खंड हमेशा 64 [[किलोबाइट|के बी]] लंबे होते हैं, व्यावहारिक प्रभाव केवल यह है कि कोई भी खंड 64 केबी से अधिक लंबा नहीं हो सकता है, इसके बजाय प्रत्येक खंड 64 केबी लंबा होना चाहिए। क्योंकि वास्तविक प्रणाली में कोई सुरक्षा या विशेषाधिकार सीमा नहीं है, भले ही एक खंड को 64 केबी से छोटा परिभाषित किया जा सकता है, फिर भी यह पूरी तरह से कार्यक्रमों पर निर्भर करेगा कि वे समन्वय करें और अपने खंडों की सीमा के भीतर रखें, जैसा कि कोई भी कार्यक्रम कर सकता है हमेशा किसी भी स्मृति तक पहुंचें (चूंकि यह मनमाने ढंग से खंड चयनकर्ताओं को बिना किसी पर्यवेक्षण के खंड स्थान बदलने के लिए समूह कर सकता है)। इसलिए, 1 से 65,536 जोड़ की सीमा में प्रत्येक खंड के लिए एक चर लंबाई होने के रूप में वास्तविक प्रणाली की कल्पना की जा सकती है, जो कि सीपीयू द्वारा लागू नहीं किया गया है। | ||
(रैखिक | (रैखिक स्थान के प्रमुख शून्य, खंडित स्थान, और खंड और लक्ष्यांतर क्षेत्र स्पष्टता के लिए यहां दिखाए गए हैं। वे आमतौर पर छोड़े जाते हैं।) | ||
वास्तविक प्रणाली का प्रभावी 20-अंश [[ पता स्थान ]] [[ स्मृति पता ]] को 2 | वास्तविक प्रणाली का प्रभावी 20-अंश [[ पता स्थान | स्थान अन्तर]] जो [[ स्मृति पता | स्मृति स्थान]] को 2<sup>20</sup> जोड़ तक सीमित करता है , या 1,048,576 जोड़ (1 [[मेगाबाइट|स्पष्टजोड़]] )। यह सीधे इंटेल 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]] संगतता मुद्दों के कारण हुआ, जहां रेखीय स्थान को 20 अंश से आगे बढ़ाया गया था। | ||
16-अंश वास्तविक प्रणाली में, कई स्मृति खंड का उपयोग करने के लिए | 16-अंश वास्तविक प्रणाली में, कई स्मृति खंड का उपयोग करने के लिए अनुप्रयोग को सक्षम करना (किसी एक 64K-खंड में उपलब्ध स्मृति से अधिक स्मृति तक पहुंचने के लिए) काफी जटिल है, लेकिन इसे सभी के लिए एक आवश्यक बुराई के रूप में देखा गया था लेकिन सबसे छोटे उपकरण ( जो कम स्मृति के साथ कर सकता है)। समस्या की जड़ यह है कि संपूर्ण स्मृति श्रेणी के समतल दक्षता के लिए उपयुक्त कोई उपयुक्त स्थान-अंकगणितीय निर्देश उपलब्ध नहीं हैं। कई निर्देशों को लागू करने से समतल दक्षता संभव है, जो हालांकि धीमे योजना की ओर ले जाता है। | ||
[[x86 मेमोरी मॉडल|x86 स्मृति | [[x86 मेमोरी मॉडल|x86 स्मृति प्रतिरूप]] अवधारणा खंड पंजिका के व्यवस्था से निकली है। उदाहरण के लिए, छोटे प्रतिरूप CS=DS=SS में, यानी योजना का संकेत, आंकड़े और स्तंभ सभी एक ही 64 KB खंड में समाहित हैं। छोटे स्मृति प्रतिरूप DS=SS में, इसलिए आंकड़े और स्तंभ दोनों एक ही खंड में रहते हैं; सीएस 64 केबी तक के अलग संकेत खंड की ओर इशारा करता है। | ||
== संरक्षित प्रणाली == | == संरक्षित प्रणाली == | ||
Line 45: | Line 45: | ||
=== 80286 संरक्षित प्रणाली === | === 80286 संरक्षित प्रणाली === | ||
इंटेल 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 लाइन|ए 20 रेखा]] को अवरोधन बंद करके संसाधक के बाहरी हार्डवेयर के साथ ऐसा कर सकता है। IBM PC AT ने ऐसा करने के लिए हार्डवेयर प्रदान किया (मूल IBM PC और IBM PC/XT|PC/XT प्रतिरूप के लिए सॉफ़्टवेयर के साथ पूर्ण पिछड़े संगतता के लिए), और इसलिए बाद के सभी IBM PC/AT-श्रेणी के PC प्रतिरूप ने भी किया। | |||
286 संरक्षित प्रणाली का उपयोग शायद ही कभी किया गया था क्योंकि यह 8086/88 | 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> | |||
=== विस्तृत विभाजन इकाई कार्यप्रवाह === | === विस्तृत विभाजन इकाई कार्यप्रवाह === | ||
एक तार्किक | एक तार्किक स्थान में 16-अंश खंड चयनकर्ता (13 + 1 स्थान अंश्स की आपूर्ति) और 16-अंश लक्ष्यांतर होता है। खंड चयनकर्ता को खंड पंजिका ों में से एक में स्थित होना चाहिए। उस चयनकर्ता में 2-अंश रिक्वेस्ट्ड प्रिविलेज लेवल (RPL), 1-अंश टेबल इंडिकेटर (TI) और 13-अंश निर्देशिका होता है। | ||
किसी दिए गए लॉजिकल दक्षता के दक्षता | किसी दिए गए लॉजिकल दक्षता के दक्षता अनुवाद का प्रयास करते समय, संसाधक 64-अंश [[ खंड वर्णनकर्ता ]] स्ट्रक्चर को या तो [[ग्लोबल डिस्क्रिप्टर टेबल]] से पढ़ता है जब TI = 0 या [[ स्थानीय वर्णनकर्ता तालिका ]] जब TI = 1 होता है। यह तब विशेषाधिकार जांच करता है: | ||
: मैक्स (सीपीएल, आरपीएल) ≤ डीपीएल | : मैक्स (सीपीएल, आरपीएल) ≤ डीपीएल | ||
जहाँ CPL वर्तमान [[विशेषाधिकार स्तर]] है (CS पंजिका के निचले 2 अंश्स में पाया जाता है), RPL खंड चयनकर्ता से अनुरोधित विशेषाधिकार स्तर है, और DPL खंड का वर्णनकर्ता विशेषाधिकार स्तर है (विवरणकर्ता में पाया जाता है)। सभी विशेषाधिकार स्तर 0-3 की सीमा में पूर्णांक हैं, जहाँ सबसे कम संख्या उच्चतम विशेषाधिकार से मेल खाती है। | जहाँ CPL वर्तमान [[विशेषाधिकार स्तर]] है (CS पंजिका के निचले 2 अंश्स में पाया जाता है), RPL खंड चयनकर्ता से अनुरोधित विशेषाधिकार स्तर है, और DPL खंड का वर्णनकर्ता विशेषाधिकार स्तर है (विवरणकर्ता में पाया जाता है)। सभी विशेषाधिकार स्तर 0-3 की सीमा में पूर्णांक हैं, जहाँ सबसे कम संख्या उच्चतम विशेषाधिकार से मेल खाती है। | ||
यदि असमानता गलत है, तो संसाधक एक सामान्य सुरक्षा दोष | सामान्य सुरक्षा (GP) दोष उत्पन्न करता है। अन्यथा, | यदि असमानता गलत है, तो संसाधक एक सामान्य सुरक्षा दोष | सामान्य सुरक्षा (GP) दोष उत्पन्न करता है। अन्यथा, स्थान अनुवाद जारी रहता है। संसाधक तब 32-अंश या 16-अंश लक्ष्यांतर लेता है और इसकी तुलना खंड डिस्क्रिप्टर में निर्दिष्ट खंड लिमिट से करता है। यदि यह बड़ा है, तो जीपी दोष उत्पन्न होता है। अन्यथा, संसाधक 24-अंश खंड आधार जोड़ता है, वर्णनकर्ता में निर्दिष्ट, लक्ष्यांतर में, एक रेखीय भौतिक स्थान बनाता है। | ||
विशेषाधिकार जांच केवल तब की जाती है जब खंड पंजिका लोड हो जाता है, क्योंकि खंड डिस्क्रिप्टर को खंड पंजिका ों के छिपे हुए हिस्सों में कैश किया जाता है। | विशेषाधिकार जांच केवल तब की जाती है जब खंड पंजिका लोड हो जाता है, क्योंकि खंड डिस्क्रिप्टर को खंड पंजिका ों के छिपे हुए हिस्सों में कैश किया जाता है।<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-अंश आभासी स्थानों को उत्पन्न और मान्य करती है, तो सक्षम पृष्ठीकरण इकाई अंत में इन आभासी स्थानों को भौतिक स्थानों में बदल देती है। इंटेल 80386 पर भौतिक स्थान 32-अंश हैं, लेकिन नए संसाधक पर बड़े हो सकते हैं जो भौतिक स्थान एक्सटेंशन का समर्थन करते हैं। | ||
80386 ने चार खंड पंजिका ों (सीएस, डीएस, ईएस, और एसएस) के मूल | 80386 ने चार खंड पंजिका ों (सीएस, डीएस, ईएस, और एसएस) के मूल समूह में दो नए सामान्य-उद्देश्य आंकड़े खंड पंजिका , एफएस और जीएस भी पेश किए। | ||
एक 386 CPU को CR0 नियंत्रण पंजिका में थोड़ा सा साफ़ करके वास्तविक प्रणाली में वापस रखा जा सकता है, हालाँकि सुरक्षा और मजबूती को लागू करने के लिए यह एक विशेषाधिकार प्राप्त ऑपरेशन है। तुलना के माध्यम से, एक 286 को केवल संसाधक | एक 386 CPU को CR0 नियंत्रण पंजिका में थोड़ा सा साफ़ करके वास्तविक प्रणाली में वापस रखा जा सकता है, हालाँकि सुरक्षा और मजबूती को लागू करने के लिए यह एक विशेषाधिकार प्राप्त ऑपरेशन है। तुलना के माध्यम से, एक 286 को केवल संसाधक पुनः समायोजन के लिए मजबूर करके वास्तविक प्रणाली में लौटाया जा सकता है, उदा। ट्रिपल फॉल्ट या बाहरी हार्डवेयर का उपयोग करके। | ||
== बाद के घटनाक्रम == | == बाद के घटनाक्रम == | ||
x86-64 संरचना लंबे प्रणाली (64-अंश प्रणाली) में विभाजन का उपयोग नहीं करता है। खंड पंजिका ों में से चार, सीएस, एसएस, डीएस, और ईएस, आधार | x86-64 संरचना लंबे प्रणाली (64-अंश प्रणाली) में विभाजन का उपयोग नहीं करता है। खंड पंजिका ों में से चार, सीएस, एसएस, डीएस, और ईएस, आधार स्थान 0 और 2 की सीमा के लिए मजबूर हैं<sup>64</सुप>. खंड पंजिका FS और GS में अभी भी एक गैर-शून्य आधार स्थान हो सकता है। यह ऑपरेटिंग प्रणाली को इन खंड को विशेष उद्देश्यों के लिए उपयोग करने की अनुमति देता है। विरासत प्रणाली द्वारा उपयोग किए जाने वाले वैश्विक विवरणक तालिका तंत्र के विपरीत, इन खंडों का आधार स्थान [[मॉडल-विशिष्ट रजिस्टर|प्रतिरूप-विशिष्ट पंजिका]] में संग्रहीत होता है। x86-64 संरचना विशेष SWAPGS निर्देश प्रदान करता है, जो [[कर्नेल मोड|कर्नेल प्रणाली]] और [[उपयोगकर्ता मोड|उपयोगकर्ता प्रणाली]] आधार स्थानों को स्वैप करने की अनुमति देता है। | ||
उदाहरण के लिए, x86-64 पर [[Microsoft Windows]] जीएस खंड का उपयोग [[Win32 थ्रेड सूचना ब्लॉक]] को इंगित करने के लिए करता है, प्रत्येक थ्रेड (कंप्यूटर विज्ञान) के लिए एक छोटी आंकड़े संरचना, जिसमें अपवाद | उदाहरण के लिए, x86-64 पर [[Microsoft Windows]] जीएस खंड का उपयोग [[Win32 थ्रेड सूचना ब्लॉक]] को इंगित करने के लिए करता है, प्रत्येक थ्रेड (कंप्यूटर विज्ञान) के लिए एक छोटी आंकड़े संरचना, जिसमें अपवाद प्रबंधन, थ्रेड-स्थानीय चर और अन्य प्रति- के बारे में जानकारी शामिल है। थ्रेड स्टेट। इसी तरह, [[लिनक्स कर्नेल]] प्रति-सीपीयू आंकड़े स्टोर करने के लिए जीएस खंड का उपयोग करता है। | ||
GS/FS का उपयोग [[जीएनयू संकलक संग्रह]] के [[थ्रेड-लोकल स्टोरेज]] और बफर ओवरफ्लो प्रोटेक्शन#GNU कम्पाइलर कलेक्शन .28GCC.29|कैनरी- | GS/FS का उपयोग [[जीएनयू संकलक संग्रह]] के [[थ्रेड-लोकल स्टोरेज]] और बफर ओवरफ्लो प्रोटेक्शन#GNU कम्पाइलर कलेक्शन .28GCC.29|कैनरी-आधार्ड स्तंभ प्रोटेक्टर में भी किया जाता है। | ||
== अभ्यास == | == अभ्यास == | ||
तार्किक | तार्किक स्थानों को [[x86 असेंबली भाषा]] में स्पष्ट रूप से निर्दिष्ट किया जा सकता है, उदा। (एटी एंड टी सिंटैक्स): | ||
movl $42, %fs:(%eax); [[ स्थानांतरण भाषा पंजीकृत करें ]] में M[fs:eax]<-42) के बराबर | movl $42, %fs:(%eax); [[ स्थानांतरण भाषा पंजीकृत करें ]] में M[fs:eax]<-42) के बराबर | ||
Line 90: | Line 89: | ||
* सभी सीपीयू निर्देश सीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट संकेत खंड से निहित रूप से प्राप्त किए जाते हैं। | * सभी सीपीयू निर्देश सीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट संकेत खंड से निहित रूप से प्राप्त किए जाते हैं। | ||
* अधिकांश स्मृति संदर्भ डीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट आंकड़े खंड से आते हैं। ये ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड से भी आ सकते हैं, यदि एक खंड-अवहेलना उपसर्ग उस निर्देश से पहले आता है जो स्मृति संदर्भ बनाता है। अधिकांश, लेकिन सभी नहीं, निर्देश जो चूक रूप से DS का उपयोग करते हैं, एक ES अवहेलना उपसर्ग को स्वीकार करेंगे। | * अधिकांश स्मृति संदर्भ डीएस पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट आंकड़े खंड से आते हैं। ये ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड से भी आ सकते हैं, यदि एक खंड-अवहेलना उपसर्ग उस निर्देश से पहले आता है जो स्मृति संदर्भ बनाता है। अधिकांश, लेकिन सभी नहीं, निर्देश जो चूक रूप से DS का उपयोग करते हैं, एक ES अवहेलना उपसर्ग को स्वीकार करेंगे। | ||
* संसाधक [[रन-टाइम स्टैक|रन-टाइम स्तंभ]] संदर्भ, या तो निहित रूप से (जैसे ' दबाना' और 'त्वरित ' निर्देश) या स्पष्ट रूप से ( [[स्टैक-आधारित मेमोरी आवंटन|स्तंभ-आधारित स्मृति आवंटन]] | (ई) एसपी या (ई) बीपी पंजिका ों का उपयोग करके स्मृति | * संसाधक [[रन-टाइम स्टैक|रन-टाइम स्तंभ]] संदर्भ, या तो निहित रूप से (जैसे ' दबाना' और 'त्वरित ' निर्देश) या स्पष्ट रूप से ( [[स्टैक-आधारित मेमोरी आवंटन|स्तंभ-आधारित स्मृति आवंटन]] | (ई) एसपी या (ई) बीपी पंजिका ों का उपयोग करके स्मृति अभिगम) निर्दिष्ट स्तंभ खंड का उपयोग करें SS पंजिका में मौजूद खंड सिलेक्टर द्वारा। | ||
* [[x86 स्ट्रिंग निर्देश|x86 श्रृंखला निर्देश]] (जैसे 'stos', 'movs'), आंकड़े खंड के साथ, ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड का भी उपयोग करते हैं। | * [[x86 स्ट्रिंग निर्देश|x86 श्रृंखला निर्देश]] (जैसे 'stos', 'movs'), आंकड़े खंड के साथ, ES पंजिका में रखे गए खंड चयनकर्ता द्वारा निर्दिष्ट अतिरिक्त खंड का भी उपयोग करते हैं। | ||
विभाजन को x86-32 संसाधक पर बंद नहीं किया जा सकता है (यह 64-अंश प्रणाली के लिए भी सही है, लेकिन चर्चा के दायरे से परे है), इतने सारे 32-अंश ऑपरेटिंग | विभाजन को x86-32 संसाधक पर बंद नहीं किया जा सकता है (यह 64-अंश प्रणाली के लिए भी सही है, लेकिन चर्चा के दायरे से परे है), इतने सारे 32-अंश ऑपरेटिंग प्रणाली सभी खंड के आधार को 0 पर समूहकरके एक [[फ्लैट मेमोरी मॉडल|समतल स्मृति प्रतिरूप]] का अनुकरण करते हैं। विभाजन को कार्यक्रमों के प्रति तटस्थ बनाने के लिए। उदाहरण के लिए, लिनक्स कर्नेल केवल 4 सामान्य प्रयोजन खंड स्थापित करता है: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 107: | Line 106: | ||
| __USER_DS || User data segment || 0 || 4 GiB || 3 | | __USER_DS || User data segment || 0 || 4 GiB || 3 | ||
|} | |} | ||
चूंकि आधार सभी मामलों में 0 पर | चूंकि आधार सभी मामलों में 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 निर्देशों तक पूर्ण अनियंत्रित पहुंच होती है। | संरक्षित प्रणाली में, संकेत हमेशा सीएस ( संकेत खंड चयनकर्ता) को छोड़कर सभी खंड पंजिका ों को संशोधित कर सकता है। ऐसा इसलिए है क्योंकि संसाधक का वर्तमान विशेषाधिकार स्तर (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 निर्देशों तक पूर्ण अनियंत्रित पहुंच होती है। | ||
Line 121: | Line 120: | ||
== यह भी देखें == | == यह भी देखें == | ||
* x86 स्मृति | * x86 स्मृति प्रतिरूप | ||
* [[मल्टीप्रोग्रामिंग सिस्टम]] | * [[मल्टीप्रोग्रामिंग सिस्टम|मल्टीप्रोग्रामिंग प्रणाली]] | ||
* [[स्प्लिट ऑक्टल]] | * [[स्प्लिट ऑक्टल]] | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* [http://www.intel.com/products/processor/manuals/index.htm Home of the IA-32 | * [http://www.intel.com/products/processor/manuals/index.htm Home of the IA-32 इंटेल Architecture Software Developer's Manual] | ||
* [http://thestarman.pcministry.com/asm/debug/Segments.html The Segment:Offset Addressing Scheme] | * [http://thestarman.pcministry.com/asm/debug/Segments.html The Segment:Offset Addressing Scheme] | ||
Revision as of 14:05, 29 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
|
खंड | 16 जोड़ , स्थान्तरण 4 जोड़ विरूध्द पक्ष (और गुणा किया 0x10) |
---|---|---|
+ 0001 0010 0011 0100
|
लक्ष्यांतर | 16 जोड़ |
|
||
0000 1000 0001 0010 0100
|
स्थान | 20 जोड़ |
जिस तरह से खंड दक्षता और लक्ष्यांतर जोड़े जाते हैं, उसके कारण एक पृथक रेखीय दक्षता को तक प्रतिचित्र किया जा सकता है 212 = 4096 विशिष्ट खंड: लक्ष्यांतर जोड़े। उदाहरण के लिए, रैखिक स्थान 08124h में खंडित स्थान हो सकते हैं 06EFh:1234h, 0812h:0004h, 0000h:8124h, आदि।
यह अद्वितीय दक्षता योजनाओं के आदी क्रमादेशकों के लिए भ्रमित करने वाला हो सकता है, लेकिन इसका उपयोग लाभ के लिए भी किया जा सकता है, उदाहरण के लिए कई स्थिर आंकड़े संरचनाओं को संबोधित करते समय। जबकि वास्तविक प्रणाली खंड हमेशा 64 के बी लंबे होते हैं, व्यावहारिक प्रभाव केवल यह है कि कोई भी खंड 64 केबी से अधिक लंबा नहीं हो सकता है, इसके बजाय प्रत्येक खंड 64 केबी लंबा होना चाहिए। क्योंकि वास्तविक प्रणाली में कोई सुरक्षा या विशेषाधिकार सीमा नहीं है, भले ही एक खंड को 64 केबी से छोटा परिभाषित किया जा सकता है, फिर भी यह पूरी तरह से कार्यक्रमों पर निर्भर करेगा कि वे समन्वय करें और अपने खंडों की सीमा के भीतर रखें, जैसा कि कोई भी कार्यक्रम कर सकता है हमेशा किसी भी स्मृति तक पहुंचें (चूंकि यह मनमाने ढंग से खंड चयनकर्ताओं को बिना किसी पर्यवेक्षण के खंड स्थान बदलने के लिए समूह कर सकता है)। इसलिए, 1 से 65,536 जोड़ की सीमा में प्रत्येक खंड के लिए एक चर लंबाई होने के रूप में वास्तविक प्रणाली की कल्पना की जा सकती है, जो कि सीपीयू द्वारा लागू नहीं किया गया है।
(रैखिक स्थान के प्रमुख शून्य, खंडित स्थान, और खंड और लक्ष्यांतर क्षेत्र स्पष्टता के लिए यहां दिखाए गए हैं। वे आमतौर पर छोड़े जाते हैं।)
वास्तविक प्रणाली का प्रभावी 20-अंश स्थान अन्तर जो स्मृति स्थान को 220 जोड़ तक सीमित करता है , या 1,048,576 जोड़ (1 स्पष्टजोड़ )। यह सीधे इंटेल 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 संरक्षित प्रणाली
इंटेल 80286 का संरक्षित प्रणाली संसाधक के दक्षता अंतराल को 224 तक बढ़ा देता है जोड़ (16 स्पष्ट जोड़), लेकिन परिवर्तन मान को समायोजित करके नहीं। इसके बजाय, 16-अंश खंड पंजिका में अब 24-अंश आधार दक्षता वाले खंड वर्णनकर्ता की तालिका में एक निर्देशिका होता है जिसमें लक्ष्यांतर जोड़ा जाता है। पुराने सॉफ़्टवेयर का समर्थन करने के लिए, संसाधक वास्तविक प्रणाली में शुरू होता है, एक ऐसा प्रणाली जिसमें यह 8086 के खंडित दक्षता प्रतिरूप का उपयोग करता है। हालांकि एक छोटा सा अंतर है: परिणामी भौतिक स्थान अब 20 अंश तक छोटा नहीं किया जाता है, इसलिए वास्तविक प्रणाली संकेत (लेकिन 8086 संकेत नहीं) अब 10000016 के बीच के स्थानों को संदर्भित कर सकते हैं और 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-अंश खंड आधार जोड़ता है, वर्णनकर्ता में निर्दिष्ट, लक्ष्यांतर में, एक रेखीय भौतिक स्थान बनाता है।
विशेषाधिकार जांच केवल तब की जाती है जब खंड पंजिका लोड हो जाता है, क्योंकि खंड डिस्क्रिप्टर को खंड पंजिका ों के छिपे हुए हिस्सों में कैश किया जाता है।[1]
80386 संरक्षित प्रणाली
इंटेल 80386 और बाद में, संरक्षित प्रणाली 80286 संरक्षित प्रणाली के विभाजन तंत्र को बरकरार रखता है, लेकिन विभाजन इकाई और भौतिक स्थान्तरण के बीच स्थान अनुवाद की दूसरी परत के रूप में एक पृष्ठीकरण इकाई को जोड़ा गया है। इसके अलावा, महत्वपूर्ण बात यह है कि दक्षता लक्ष्यांतर 32-अंश (16-अंश के बजाय) हैं, और प्रत्येक खंड डिस्क्रिप्टर में खंड आधार भी 32-अंश (24-अंश के बजाय) है। विभाजन इकाई का सामान्य संचालन अन्यथा अपरिवर्तित है। पृष्ठन इकाई सक्षम या अक्षम हो सकती है; यदि अक्षम किया गया है, तो संचालन 80286 के समान है। यदि पृष्ठीकरण इकाई सक्षम है, तो खंड में स्थान अब भौतिक स्थान के बजाय आभासी स्थान हैं, जैसा कि वे 80286 पर थे। और अंतिम 32-अंश स्थान दो को जोड़कर प्राप्त विभाजन इकाई सभी आभासी (या तार्किक) स्थान हैं जब पृष्ठीकरण इकाई सक्षम होती है। जब विभाजन इकाई इन 32-अंश आभासी स्थानों को उत्पन्न और मान्य करती है, तो सक्षम पृष्ठीकरण इकाई अंत में इन आभासी स्थानों को भौतिक स्थानों में बदल देती है। इंटेल 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 स्मृति प्रतिरूप
- मल्टीप्रोग्रामिंग प्रणाली
- स्प्लिट ऑक्टल