لماذا لا تستخدم وحدات المعالجة المركزية (CPUs) x86 سوى اثنين من أربعة خواتم؟
عندما تتعلم المزيد حول كيفية تشغيل أنظمة التشغيل والأجهزة التي تعمل في العمل والتفاعل مع بعضها البعض ، قد تندهش لرؤية ما يبدو أنه شاذ أو نقص استخدام "الموارد" التي تحدث. لماذا هذا؟ إن سؤال SuperUser سؤال وجواب اليوم يجيب عن سؤال القارئ الغريب.
تأتي جلسة الأسئلة والأجوبة اليوم مقدمة من SuperUser-a subdivision of Stack Exchange ، وهي مجموعة مجتمعية مدفوعة من مواقع Q & A.
الصورة مقدمة من Lemsipmatt (Flickr).
السؤال
قارئ SuperUser يرغب AdHominem في معرفة سبب استخدام وحدات المعالجة المركزية x86 فقط حلقتين من كل أربع حلقات:
تستخدم أنظمة Linux و Windows x86 فقط الحلقة 0 لوضع النواة و الحلقة 3 لوضع المستخدم. لماذا تميز المعالجات حتى أربع حلقات مختلفة إذا انتهى بها المطاف فقط باستخدام اثنين منها على أي حال؟ هل تغير هذا مع بنية AMD64?
لماذا لا تستخدم وحدات المعالجة المركزية x86 إلا حلقتين من أصل أربع حلقات?
الاجابة
لدى جيمي هانراهان ، أحد المساهمين في SuperUser ، الإجابة لنا:
هناك سببان رئيسيان.
الأول هو أنه على الرغم من أن وحدات المعالجة المركزية x86 تقدم أربع حلقات من حماية الذاكرة ، فإن دقة الحماية المقدمة تكون فقط على مستوى كل مقطع. أي ، يمكن تعيين كل شريحة إلى حلقة محددة (مستوى الامتياز) جنبا إلى جنب مع غيرها من وسائل الحماية مثل معطل بالكتابة. ولكن لا توجد العديد من واصفات القطع المتاحة. ترغب معظم أنظمة التشغيل في الحصول على مستوى أعلى من حماية الذاكرة ، مثل ... للصفحات الفردية.
لذا ، أدخل الحماية المستندة إلى جدول الصفحات. معظم ، إن لم يكن كل ، أنظمة تشغيل x86 الحديثة أكثر أو أقل تجاهل آلية التقسيم (بقدر ما يمكن على أي حال) وتعتمد على الحماية المتاحة من البتات منخفضة الترتيب في مدخلات جدول الصفحات. واحد من هذه تسمى بت "المميز". يتحكم هذا البت في ما إذا كان المعالج يجب أن يكون في أحد المستويات "المميزة" للوصول إلى الصفحة. المستويات "المميزة" هي PL 0 و 1 و 2. ولكن الأمر واحد فقط ، لذا فبالنسبة لمستوى الحماية لكل صفحة على حدة ، فإن عدد "الأوضاع" المتاحة بقدر ما يتعلق الأمر بحماية الذاكرة هو أمران فقط: يمكن الوصول إلى الصفحة من وضع غير متميز ، أو لا. ومن ثم ، فقط حلقتان. للحصول على أربع حلقات محتملة لكل صفحة ، سيتعين عليهم الحصول على وحدتي حماية في كل إدخال من جدول الصفحات لترميز أحد أرقام الحلقات الأربعة المحتملة (تمامًا كما هو الحال مع واصفات الجزء). ومع ذلك ، لم يفعلوا ذلك.
السبب الآخر هو الرغبة في قابلية نظام التشغيل. ليس فقط حول x86؛ علمتنا يونكس أن نظام التشغيل يمكن أن يكون محملا نسبيا إلى معماريات متعددة المعالج ، وأنه كان أمرا جيدا. وتدعم بعض المعالجات حلقتين فقط. من خلال عدم الاعتماد على حلقات متعددة في البنية ، جعل منفذي نظام التشغيل أنظمة التشغيل أكثر قابلية للحمل.
هناك سبب ثالث خاص بتطوير Windows NT. مصممو NT (ديفيد Cutler وفريقه ، الذي استأجرت مايكروسوفت بعيدا عن مختبرات DEC المنطقة الغربية) لديها خبرة سابقة واسعة في VMS. في الواقع ، كان Cutler وعدد قليل من الآخرين من بين مصممي VMS الأصليين. ومعالج VAX الذي تم تصميم VMS له أربع حلقات (يستخدم VMS أربع حلقات).
لكن المكونات التي تعمل في VMS الخواتم 1 و 2 (خدمات إدارة السجلات و CLI ، على التوالي) تم تركها خارج تصميم NT. الحلقة 2 في نظام إدارة الوجهات السياحية لم يكن في الواقع حول أمن نظام التشغيل ، ولكن بالأحرى عن الحفاظ على بيئة CLI الخاصة بالمستخدم من برنامج إلى آخر ، ولم يكن لدى Windows هذا المفهوم ؛ يتم تشغيل CLI كعملية عادية. أما بالنسبة ل VMS الحلقة 1, رمز RMS في الحلقة 1 اضطر إلى الاتصال به الحلقة 0 في كثير من الأحيان ، وانتقالات حلقة مكلفة. اتضح أن تكون أكثر كفاءة بكثير لمجرد الذهاب إلى الحلقة 0 ويتم ذلك معها بدلا من أن يكون لها الكثير من الحلقة 0 التحولات داخل الحلقة 1 رمز (مرة أخرى ، وليس أن NT لديها أي شيء مثل RMS على أي حال).
ولماذا قامت x86 بتنفيذ أربع حلقات في حين لم تستخدمها أنظمة التشغيل ، فأنت تتحدث عن أنظمة تشغيل التصميم الأكثر حداثة من x86. تم تصميم الكثير من ميزات برمجة النظام لـ x86 قبل فترة طويلة من NT أو تم تطبيق نواة Unix-ish الحقيقية عليها ، ولم يعرفوا حقا ما الذي سيستخدمه نظام التشغيل. لم يكن حتى وصلنا على x86 أننا يمكن أن ننفذ صحيح unix-ish أو حبات مثل VMS.
لا تقوم أنظمة التشغيل x86 الحديثة فقط بتجاهل التقسيم إلى حد كبير (فهي تقوم فقط بإعداد المقاطع C و D و S مع عنوان أساسي من 0 وحجم 4 جيجا بايت ؛ في بعض الأحيان تستخدم قطعتي F و G للإشارة إلى هياكل بيانات نظام التشغيل الأساسية ) ، كما أنها تتجاهل أشياء كثيرة مثل "أجزاء حالة المهام". تم تصميم آلية TSS بشكل واضح لتبديل سياق مؤشر الترابط ، ولكن تبين أن لها العديد من التأثيرات الجانبية ، لذا فإن أنظمة x86 الحديثة تقوم بذلك "باليد". المرة الوحيدة التي يغير فيها x86 NT مهام الأجهزة هي لبعض الحالات الاستثنائية حقاً ، مثل استثناء خطأ مزدوج.
فيما يتعلق بالعمارة x64 ، تم استبعاد الكثير من هذه الميزات التي تم تعطيلها. بالنسبة إلى رصيدهم ، تحدثت AMD فعليًا إلى فرق عمل نظام التشغيل وتساءلت عما تحتاجه من x86 ، وما لم تكن بحاجة إليه أو لا تريده ، وما تود إضافته. توجد قطع على x64 فقط في ما يمكن أن يطلق عليه النموذج الأبجدي ، ولا يوجد تبديل حالة المهمة ، وما إلى ذلك ، ولا تزال أنظمة التشغيل تستخدم حلقتين فقط.
هل لديك شيء تضيفه إلى الشرح؟ الصوت قبالة في التعليقات. هل ترغب في قراءة المزيد من الإجابات من مستخدمي Stack Exchange الآخرين المحترفين بالتكنولوجيا؟ تحقق من موضوع المناقشة الكامل هنا.