क्यों x86 CPUs केवल चार रिंगों में से दो का उपयोग करते हैं?
जब ऑपरेटिंग सिस्टम और हार्डवेयर काम पर चलते हैं और एक-दूसरे के साथ बातचीत करते हैं, तो इसके बारे में अधिक जानने के बाद, आप यह देखकर आश्चर्यचकित हो सकते हैं कि क्या होने वाली विषमताएं या "संसाधनों" का उपयोग कम प्रतीत होता है। ऐसा क्यों है? आज के SuperUser Q & A पोस्ट में एक जिज्ञासु पाठक के प्रश्न का उत्तर है.
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.
Lemsipmatt (फ़्लिकर) के सौजन्य से फोटो.
प्रश्न
SuperUser रीडर AdHominem जानना चाहता है कि x86 CPUs केवल चार में से दो रिंगों का उपयोग क्यों करते हैं:
लिनक्स और विंडोज आधारित x86 सिस्टम का ही उपयोग करते हैं अंगूठी ० कर्नेल मोड के लिए और अँगूठी ३ उपयोगकर्ता मोड के लिए। क्यों प्रोसेसर भी चार अलग-अलग रिंगों को भेद करते हैं यदि वे सभी वैसे भी दो का उपयोग करके समाप्त हो जाते हैं? यह AMD64 वास्तुकला के साथ बदल गया है?
क्यों x86 CPUs केवल चार रिंगों में से दो का उपयोग करते हैं?
उत्तर
सुपरयूजर योगदानकर्ता जेमी हैनराहन का जवाब हमारे लिए है:
इसके दो प्राथमिक कारण हैं.
पहला यह है कि, हालाँकि x86 CPU मेमोरी प्रोटेक्शन के चार रिंग प्रदान करते हैं, पर सुरक्षा की ग्रेन्युलैरिटी की पेशकश प्रति-सेगमेंट स्तर पर ही होती है। अर्थात्, प्रत्येक खंड को एक विशिष्ट अंगूठी (विशेषाधिकार स्तर) के साथ-साथ अन्य सुरक्षा जैसे लेखन-अक्षम के लिए सेट किया जा सकता है। लेकिन कई खंड वर्णनकर्ता उपलब्ध नहीं हैं। अधिकांश ऑपरेटिंग सिस्टम अलग-अलग पृष्ठों के लिए मेमोरी प्रोटेक्शन की बहुत बारीक बारीकियों को पसंद करना चाहेंगे.
इसलिए, पृष्ठ तालिका-आधारित सुरक्षा दर्ज करें। अधिकांश, यदि सभी नहीं, आधुनिक x86 ऑपरेटिंग सिस्टम कम या ज्यादा सेगमेंटिंग तंत्र (जितना वे वैसे भी) को अनदेखा कर सकते हैं और पेज टेबल प्रविष्टियों में कम-ऑर्डर बिट्स से उपलब्ध सुरक्षा पर भरोसा कर सकते हैं। इनमें से एक को "विशेषाधिकार प्राप्त" बिट कहा जाता है। यह बिट नियंत्रित करता है कि प्रोसेसर को पृष्ठ तक पहुंचने के लिए "विशेषाधिकार प्राप्त" स्तरों में से एक में होना है या नहीं। "विशेषाधिकार प्राप्त" स्तर हैं पीएल 0, 1, और 2. लेकिन यह सिर्फ एक बिट है, इसलिए पेज-बाय-पेज प्रोटेक्शन लेवल पर, मेमोरी प्रोटेक्शन से संबंधित "मोड" की संख्या केवल दो है: एक पेज नॉन-विशेषाधिकारित मोड से एक्सेस किया जा सकता है, या नहीं। इसलिए, सिर्फ दो अंगूठियां। प्रत्येक पृष्ठ के लिए चार संभव रिंग होने के लिए, उन्हें चार संभावित रिंग नंबरों में से एक को एनकोड करने के लिए प्रत्येक पेज टेबल एंट्री में दो प्रोटेक्शन बिट्स रखने होंगे (जैसे कि सेगमेंट डिस्क्रिप्टर करें)। हालांकि, वे नहीं करते हैं.
दूसरा कारण ऑपरेटिंग सिस्टम पोर्टेबिलिटी की इच्छा है। यह सिर्फ x86 के बारे में नहीं है; यूनिक्स ने हमें सिखाया कि एक ऑपरेटिंग सिस्टम कई प्रोसेसर आर्किटेक्चर के लिए अपेक्षाकृत पोर्टेबल हो सकता है, और यह एक अच्छी बात थी। और कुछ प्रोसेसर केवल दो रिंग का समर्थन करते हैं। वास्तुकला में कई छल्ले के आधार पर, ऑपरेटिंग सिस्टम को लागू करने वालों ने ऑपरेटिंग सिस्टम को अधिक पोर्टेबल बना दिया.
एक तीसरा कारण है जो विंडोज एनटी विकास के लिए विशिष्ट है। NT के डिजाइनर (डेविड कटलर और उनकी टीम, जिन्हें Microsoft ने डीईसी पश्चिमी क्षेत्र लैब्स से दूर रखा था) को वीएमएस पर व्यापक पिछला अनुभव था; वास्तव में, कटलर और कुछ अन्य वीएमएस के मूल डिजाइनरों में से थे। और VAX प्रोसेसर जिसके लिए VMS डिजाइन किया गया था, उसके चार रिंग होते हैं (VMS चार रिंगों का उपयोग करता है).
लेकिन वीएमएस में चलने वाले घटक रिंग्स 1 और 2 (रिकॉर्ड प्रबंधन सेवाएं और सीएलआई, क्रमशः) एनटी डिजाइन से बचे हुए थे. अँगूठी २ वीएमएस वास्तव में ऑपरेटिंग सिस्टम सुरक्षा के बारे में नहीं था, बल्कि उपयोगकर्ता के सीएलआई पर्यावरण को एक कार्यक्रम से दूसरे प्रोग्राम में संरक्षित करने के बारे में था, और विंडोज में यह अवधारणा नहीं थी; सीएलआई एक सामान्य प्रक्रिया के रूप में चलता है। वीएमएस के लिए के रूप में अंगूठी 1, में RMS कोड अंगूठी 1 में बुलाना पड़ा अंगूठी ० काफी अक्सर, और अंगूठी संक्रमण महंगा है। यह सिर्फ जाने के लिए कहीं अधिक कुशल निकला अंगूठी ० और इसके साथ बहुत कुछ किया जाना चाहिए अंगूठी ० के भीतर संक्रमण अंगूठी 1 कोड (फिर, ऐसा नहीं है कि NT के पास वैसे भी RMS जैसा कुछ भी है).
जब तक x86 ने चार रिंगों को लागू किया, जबकि ऑपरेटिंग सिस्टम ने उनका उपयोग नहीं किया था, आप x86 की तुलना में कहीं अधिक हाल के डिजाइन के ऑपरेटिंग सिस्टम के बारे में बात कर रहे हैं। X86 के बहुत से सिस्टम प्रोग्रामिंग सुविधाओं को NT या ट्रू यूनिक्स-ईश गुठली पर लागू करने से बहुत पहले डिज़ाइन किया गया था, और वे वास्तव में नहीं जानते थे कि ऑपरेटिंग सिस्टम क्या उपयोग करेगा। यह तब तक नहीं था जब तक हमें x86 पर पेजिंग नहीं मिली थी कि हम सही यूनिक्स-ईश या वीएमएस जैसी गुठली को लागू कर सकते थे.
न केवल आधुनिक x86 ऑपरेटिंग सिस्टम बड़े पैमाने पर सेगमेंटिंग को अनदेखा करते हैं (वे 0, 4 के आधार पते के साथ सी, डी और एस सेगमेंट सेट करते हैं; एफ और जी सेगमेंट कभी-कभी कुंजी ऑपरेटिंग सिस्टम डेटा संरचनाओं को इंगित करने के लिए उपयोग किए जाते हैं; ), वे बड़े पैमाने पर "कार्य राज्य क्षेत्रों" जैसी चीजों की उपेक्षा करते हैं। TSS तंत्र को स्पष्ट रूप से थ्रेड संदर्भ स्विचिंग के लिए डिज़ाइन किया गया था, लेकिन इसके बहुत अधिक दुष्प्रभाव हैं, इसलिए आधुनिक x86 ऑपरेटिंग सिस्टम इसे "हाथ से" करते हैं। एक ही समय x86 NT हार्डवेयर कार्य कुछ वास्तविक स्थितियों के लिए एक दोहरे दोष अपवाद की तरह है.
X64 आर्किटेक्चर के बारे में, इनमें से बहुत से उपयोग की गई सुविधाओं को छोड़ दिया गया था। अपने क्रेडिट के लिए, एएमडी ने वास्तव में ऑपरेटिंग सिस्टम कर्नेल टीमों से बात की और पूछा कि उन्हें x86 से क्या चाहिए, उन्हें क्या ज़रूरत नहीं थी या क्या नहीं चाहिए, और वे क्या चाहेंगे। X64 पर सेगमेंट केवल उसी चीज़ में मौजूद होते हैं जिसे वेस्टेजियल फॉर्म कहा जा सकता है, टास्क स्टेट स्विचिंग मौजूद नहीं है, आदि, और ऑपरेटिंग सिस्टम सिर्फ दो रिंग्स का उपयोग करना जारी रखते हैं.
स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में विचार व्यक्त करो। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.