وضع 8086 الافتراضي
في معالج 80386 والمعالجات اللاحقة، يسمح وضع 8086 الافتراضي (المعروف أيضًا بالوضع الحقيقي الافتراضي ، أو وضع V86 ، أو VM86 ) بتشغيل تطبيقات الوضع الحقيقي التي لا يمكنها العمل مباشرةً في الوضع المحمي أثناء تشغيل المعالج لنظام تشغيل في الوضع المحمي. وهي تقنية محاكاة افتراضية للأجهزة سمحت بمحاكاة عدة معالجات 8086 بواسطة شريحة 386. وقد نشأت هذه التقنية نتيجةً للتجارب الصعبة مع الوضع المحمي في معالج 80286 ، الذي لم يكن مناسبًا بحد ذاته لتشغيل تطبيقات الوضع الحقيقي المتزامنة بكفاءة. [ 1 ] قام جون كروفورد بتطوير بت الوضع الافتراضي في مجموعة السجلات، مما مهد الطريق لهذه البيئة. [ 2 ]
يستخدم وضع VM86 مخطط تجزئة مطابقًا لمخطط الوضع الحقيقي (لأسباب تتعلق بالتوافق)، والذي يقوم بإنشاء عناوين خطية 20 بت بنفس الطريقة التي يتم بها إنشاء عناوين فيزيائية 20 بت في الوضع الحقيقي، ولكنها تخضع لآلية ترحيل الذاكرة في الوضع المحمي .
ملخص
يُعد وضع 8086 الافتراضي وضعًا لمهام الوضع المحمي . وبالتالي، يمكن للمعالج التبديل بين مهام VM86 والمهام غير VM86، مما يُمكّن تطبيقات DOS القديمة من تعدد المهام.
لاستخدام وضع 8086 الافتراضي، يقوم نظام التشغيل بإعداد برنامج مراقبة وضع 8086 الافتراضي، وهو برنامج يدير برنامج الوضع الحقيقي ويحاكي أو يُصفّي الوصول إلى موارد النظام من أجهزة وبرامج. يجب أن يعمل برنامج المراقبة بمستوى امتياز 0 وفي الوضع المحمي. يعمل برنامج 8086 فقط في وضع VM86 وبمستوى امتياز 3. عندما يحاول برنامج الوضع الحقيقي القيام بأمور مثل الوصول إلى منافذ إدخال/إخراج معينة لاستخدام أجهزة مادية أو الوصول إلى مناطق معينة في مساحة ذاكرته، يعترض المعالج هذه الأحداث ويستدعي برنامج مراقبة V86، الذي يفحص ما يحاول برنامج الوضع الحقيقي القيام به، ثم إما أن يعمل كوسيط للتفاعل مع الأجهزة، أو يحاكي الوظيفة المقصودة التي كان برنامج الوضع الحقيقي يحاول الوصول إليها، أو يُنهي برنامج الوضع الحقيقي إذا كان يحاول القيام بشيء لا يمكن السماح به أو لا يمكن دعمه بشكل كافٍ (مثل إعادة تشغيل الجهاز، أو ضبط شاشة عرض الفيديو على وضع غير مدعوم من قبل الأجهزة وغير محاكى، أو الكتابة فوق كود نظام التشغيل).
يمكن لمراقب V86 أيضًا رفض الإذن تدريجيًا عن طريق محاكاة فشل عملية مطلوبة ؛ فعلى سبيل المثال، يمكنه إظهار محرك الأقراص دائمًا على أنه غير جاهز، بينما في الواقع لم يتم فحصه، بل ببساطة لن يسمح لبرنامج الوضع الحقيقي بالوصول إليه. كما يمكن لمراقب V86 القيام بمهام مثل تعيين صفحات الذاكرة، واعتراض الاستدعاءات والمقاطعات، ومقاطعة برنامج الوضع الحقيقي، مما يسمح لبرامج الوضع الحقيقي بالعمل في بيئة متعددة المهام مثل برامج الوضع المحمي. من خلال اعتراض عمليات الإدخال/الإخراج للأجهزة والبرامج الخاصة ببرنامج الوضع الحقيقي، وتتبع الحالة التي يتوقعها برنامج V86، يمكنه السماح لبرامج متعددة بمشاركة نفس الأجهزة دون التداخل مع بعضها البعض. [ أ ] لذا، يوفر وضع V86 طريقة لبرامج الوضع الحقيقي المصممة لبيئة أحادية المهمة (مثل DOS [ ب ] ) للعمل بشكل متزامن في بيئة متعددة المهام.
الاستخدام
يُستخدم لتشغيل برامج DOS معينة في FlexOS 386 (منذ عام 1987)، وConcurrent DOS 386 (منذ عام 1987)، وWindows/386 2.10 (منذ عام 1987)، و DESQview 386 (منذ عام 1988)، و Windows 3.x (منذ عام 1990)، و Multiuser DOS (منذ عام 1991)، و Windows for Workgroups 3.1x (منذ عام 1992)، وOS/2 2.x (منذ عام 1992)، و 4690 OS (منذ عام 1993)، و REAL/32 (منذ عام 1995) التي تعمل في وضع 386 المحسن ، وكذلك في Windows 95 و 98 و 98 SE و ME من خلال أجهزة DOS الافتراضية ، وفي SCO UNIX من خلال Merge ، وفي Linux من خلال DOSEMU . (تُنفَّذ برامج DOS الأخرى التي تستخدم الوضع المحمي باستخدام وضع المستخدم ضمن المحاكي). يستخدم NTVDM في أنظمة التشغيل المبنية على معالجات x86 Windows NT أيضًا وضع VM86، [ 3 ] ولكن مع وصول مباشر محدود للغاية إلى الأجهزة. تستخدم بعض برامج تحميل الإقلاع (مثل GRUB ) الوضع المحمي ، وتُنفِّذ استدعاءات مقاطعة BIOS في وضع Virtual 8086. [ 4 ] [ 5 ]
معالجة الذاكرة والمقاطعات
تتمثل المشكلة الأكثر شيوعًا عند تشغيل كود 8086 من الوضع المحمي في عنونة الذاكرة ، والتي تختلف تمامًا بين الوضع المحمي والوضع الحقيقي . وكما ذُكر، عند العمل في وضع VM86، يُعاد تكوين آلية التجزئة لتعمل تمامًا كما في الوضع الحقيقي، لكن آلية الترحيل تظل نشطة، وهي شفافة لكود الوضع الحقيقي؛ وبالتالي، تظل حماية الذاكرة سارية، وكذلك عزل مساحة العناوين.
عند حدوث مقاطعات (سواءً كانت متعلقة بالأجهزة أو البرامج أو تعليمات المقاطعة)، يقوم المعالج بإيقاف وضع VM86 والعودة إلى العمل في وضع الحماية الكاملة لمعالجة المقاطعة. وقبل معالجة المقاطعة، يتم دفع سجلات DS وES وFS وGS إلى المكدس الجديد وتصفيرها.
ملحقات وضع Virtual-8086 (VME)
أضافت بنية بنتيوم عددًا من التحسينات إلى وضع 8086 الافتراضي. مع ذلك، لم توثق إنتل هذه التحسينات إلا بدءًا من بنية P6 (البنية الدقيقة) اللاحقة ؛ [ 6 ] ويُطلق عليها رسميًا اسم "امتدادات وضع 8086 الافتراضي"، ويُختصر إلى VME [ 7 ] (قد تستخدم الوثائق القديمة عبارة "تحسينات وضع 8086 الافتراضي" كتوسيع لاختصار VME). [ 6 ] كما تدعمها بعض رقاقات إنتل 486 اللاحقة. [ 8 ] [ 9 ] تعالج هذه التحسينات بشكل أساسي عبء المحاكاة الافتراضية لـ 8086، مع التركيز بشكل خاص على المقاطعات (الافتراضية). [ 6 ] [ 10 ] قبل توثيق هذه الامتدادات علنًا في وثائق P6، كانت الوثائق الرسمية تشير إلى الملحق H الشهير ، الذي حُذف من الوثائق العامة ولم يُشارك إلا مع شركاء مُختارين بموجب اتفاقية عدم إفصاح .
يتم تفعيل VME بتعيين البت رقم 0 (القيمة 0x1) في سجل CR4 . ولأن تحسينات تسريع مقاطعة VME وُجدت مفيدة للمهام غير المحمية بواسطة VM86، يمكن تفعيلها بشكل منفصل بتعيين البت رقم 1 فقط (القيمة 0x2)، وهو ما يُسمى PVI (المقاطعات الافتراضية للوضع المحمي). [ 6 ] [ 9 ] يتم الكشف عما إذا كان المعالج يدعم VME (بما في ذلك PVI) باستخدام تعليمة CPUID ، بقيمة EAX ابتدائية 0x1، وذلك باختبار قيمة البت الثاني (البت رقم 1، القيمة 0x2) في سجل EDX، والذي يتم تعيينه إذا كان المعالج يدعم VME. [ 11 ] [ 6 ] في نظام Linux، يُشار إلى هذا البت الأخير كعلامة vme في ملف /proc/ cpuinfo ، ضمن قسم "flags".
في وضع 8086 الافتراضي، تتمثل الفكرة الأساسية في أنه عندما يكون مستوى الإدخال/الإخراج (IOPL) أقل من 3، فإن تعليمات PUSHF/POPF/STI/CLI/INT/IRET ستتعامل مع قيمة VIF في سجل EFLAGS الحقيقي ذي 32 بت كقيمة IF في سجل FLAGS المُحاكى ذي 16 بت (تستمر تعليمات PUSHFD/POPFD ذات 32 بت في التسبب بخطأ عام). ستؤدي تعليمات VIP إلى حدوث خطأ عام عند ضبط قيمة IF المُحاكى، مما يوجه نظام التشغيل لمعالجة أي مقاطعات معلقة. أما تعليمات PVI فهي تعمل بنفس الفكرة ولكنها تؤثر فقط على تعليمات CLI/STI.
تبين أن معالجات AMD Ryzen من الجيل الأول تعاني من خلل في تطبيق VME. [ 12 ] وقد تم إصلاح هذه المشكلة في معالجات Ryzen من الجيل الثاني (سلسلة 2000). [ 13 ]
دعم 64 بت وVMX
الوضع الافتراضي 8086 غير متوفر في الوضع الطويل x86-64 ، على الرغم من أنه لا يزال موجودًا على المعالجات القادرة على x86-64 التي تعمل في الوضع القديم .
تُعيد تقنية Intel VT-x إمكانية تشغيل وضع 8086 الافتراضي من وضع x86-64 الطويل، ولكن يجب القيام بذلك عن طريق تحويل المعالج (الفعلي) إلى وضع VMX الجذري وتشغيل معالج منطقي (افتراضي) يعمل في وضع 8086 الافتراضي. [ 14 ]
عادةً ما تستطيع معالجات ويستمير وما بعدها من معالجات إنتل [ 15 ] تشغيل المعالج الافتراضي مباشرةً في الوضع الحقيقي باستخدام ميزة "الضيف غير المقيد" (التي تتطلب بدورها جداول صفحات موسعة )؛ وتُغني هذه الطريقة عن الحاجة إلى اللجوء إلى وضع 8086 الافتراضي المتداخل لمجرد تشغيل نظام BIOS القديم للتمهيد. [ 16 ] [ 17 ]
يمكن لتقنية AMD-V تشغيل وضع 8086 الافتراضي في الأنظمة الضيفة أيضًا، ولكن يمكنها أيضًا تشغيل النظام الضيف في "وضع الترحيل الحقيقي" باتباع الخطوات التالية: إنشاء نظام ضيف في وضع SVM (الآلة الافتراضية الآمنة) مع CR0.PE=0، ولكن CR0.PG=1 (أي مع تعطيل الوضع المحمي وتمكين الترحيل)، وهو أمر مستحيل عادةً، ولكنه مسموح به لأنظمة SVM الضيفة إذا اعترض المضيف أخطاء الصفحات. [ 18 ]
انظر أيضاً
ملحوظات
- على سبيل المثال ، إذا قام برنامج ما بالكتابة إلى شاشة عرض، ثم تولى برنامج آخر التحكم بها وكتب إلى نفس الشاشة، ثم استعاد البرنامج الأول التحكم، فسيحاول استخدام الشاشة كما لو أن البرنامج الثاني لم يغيرها. يستطيع مُراقب V86 اعتراض عمليات الكتابة إلى الشاشة، وتتبع حالة الشاشة لكل برنامج، والتبديل بين الشاشات الفعلية وفقًا للبرنامج الذي اختاره المستخدم للتفاعل معه حاليًا. يُحاكي مُراقب V86 شاشات عرض مستقلة لكل برنامج باستخدام شاشة عرض فعلية واحدة فقط.
- ↑ تم ذكر نظام التشغيل DOS لأنه كان على وجه الخصوص المكتبة الواسعة من برامج DOS الموجودة التي كانت شركة Intel تضعها في اعتبارها عندما صممت وضع V86.
مراجع
- ↑ ياغر، توم (5 نوفمبر 2004). "إرسال برمجيات للقيام بوظيفة الأجهزة" . إنفوورلد . مؤرشف من الأصل في 18 أكتوبر 2014. تم الاطلاع عليه في 27 يناير 2014 .
- ↑ غنومز، لي؛ "خلف الكواليس: صناعة معالج 386"، شركة إنتل، إصدار خاص 32 بت، نوفمبر/ديسمبر 1985، صفحة 19
- ↑ "بنية محطة عمل ويندوز إن تي 4.0" . مايكروسوفت . مؤرشف من الأصل بتاريخ 2006-02-06 . تم الاطلاع عليه بتاريخ 2009-12-28 .
- ↑ مايك وانغ (21 يونيو 2016). "عملية بدء تشغيل Grub2" . مؤرشف من الأصل في 30 نوفمبر 2020. تم الاطلاع عليه في 10 ديسمبر 2020 .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ↑ "وضع 8086 الافتراضي - ويكي تطوير أنظمة التشغيل" . wiki.osdev.org . مؤرشف من الأصل بتاريخ 24 فبراير 2021. تم الاطلاع عليه بتاريخ 10 ديسمبر 2020 .
- 1 2 3 4 5 تي. شانلي (1998). بنية نظام بنتيوم برو وبنتيوم 2. أديسون-ويسلي. الصفحات 427، 465-480 . ISBN 978-0-201-30973-7.
- ↑ دليل مطوري البرامج لبنيتي Intel 64 و IA-32، المجلد 3 (3A، 3B، 3C و 3D): دليل برمجة النظام . Intel . مايو 2020. ص 2-17 .
- ↑ "أرشيف القائمة البريدية: ردًا على: 2.6.14: هل لم يعد فحص CR4 ضروريًا على جهاز 486؟" . Gossamer-threads.com. مؤرشف من الأصل بتاريخ 22-02-2014 . تم الاطلاع عليه بتاريخ 20-02-2014 .
- 1 2 "المقاطعات الافتراضية في الوضع المحمي لمعالجات بنتيوم (PVI)" . Rcollins.org. مؤرشف من الأصل بتاريخ 2013-06-04 . تم الاطلاع عليه بتاريخ 2014-02-20 .
- ↑ "امتدادات الوضع الافتراضي على معالج بنتيوم" . Rcollins.org . تم الاطلاع عليه بتاريخ 20 فبراير 2014 .
- ↑ دليل مطوري برامج معمارية Intel 64 و IA-32، المجلد 2 (2A، 2B، 2C و2D): مرجع مجموعة التعليمات، AZ . Intel . مايو 2020. الصفحات 3-199 ، 3-221 ، 3-222 . مؤرشف من الأصل بتاريخ 9 أكتوبر 2020. تم الاطلاع عليه بتاريخ 11 أكتوبر 2020 .
- ↑ ميخال نيكاسيك (12 مايو 2017). "تعطل VME على معالج AMD Ryzen" . متحف نظام التشغيل OS/2 . مؤرشف من الأصل في 25 سبتمبر 2018. تم الاطلاع عليه في 25 سبتمبر 2018 .
- ↑ "دليل مراجعة معالجات AMD من عائلة 17h طرازات 00h-0Fh" (ملف PDF) . AMD . يونيو 2018.
- ↑ دليل مطوري برامج معمارية Intel 64 و IA-32، المجلد 3ب: دليل برمجة النظام، الجزء 2 (ملف PDF) . Intel . سبتمبر 2009. ص 29-1 . مؤرشف من الأصل (ملف PDF) في 5 يناير 2010.
يُسمح بإدخال الجهاز الظاهري فقط للأنظمة الضيفة التي تم تمكين الترحيل إليها والتي تعمل في الوضع المحمي أو في وضع 8086 الظاهري. يتطلب تنفيذ النظام الضيف في أوضاع تشغيل المعالج الأخرى معالجة خاصة بواسطة مدير الأجهزة الظاهرية (VMM).
انظر أيضًا CS 686: موضوع خاص: Intel EM64T وامتدادات VT (ربيع 2007)، مؤرشف في 20 أكتوبر 2014 على Wayback Machine ، الدرس 24 حول كيفية القيام بذلك من Linux (مع العلم أن الكود قديم جدًا، لذا قد لا يعمل كما هو مع النواة الحالية). يمكن العثور على كود أحدث هنا . يُرجى الانتباه أيضًا إلى أن هذا الكود النموذجي أكثر تعقيدًا من مجرد تشغيل المعالج المنطقي في وضع 8086 الافتراضي؛ هدفه النهائي هو إجراء بعض استدعاءات BIOS في الوضع الحقيقي. - ↑ "قائمة تقنيات المحاكاة الافتراضية من إنتل" . Ark.intel.com. مؤرشفة من الأصل بتاريخ 10 فبراير 2014. تم الاطلاع عليها بتاريخ 20 فبراير 2014.
قائمة بمعالجات إنتل التي تدعم تقنية VT-x ولكنها لا تدعم تقنية EPT.
- ↑ "أضافت إنتل وضع الضيف غير المقيد على معمارية Westmere الدقيقة ووحدات المعالجة المركزية اللاحقة من إنتل، وتستخدم EPT لترجمة الوصول إلى عنوان الضيف الفعلي إلى عنوان المضيف الفعلي. مع هذا الوضع، يُسمح بـ VMEnter بدون تمكين الترحيل.( ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 21-02-2014 . تم الاطلاع عليه بتاريخ 17-02-2014 .
- ↑ ""إذا كانت قيمة التحكم في تنفيذ الجهاز الظاهري "الضيف غير المقيد" هي 1، فيجب أن تكون قيمة التحكم في تنفيذ الجهاز الظاهري "تمكين EPT" هي 1 أيضًا."( ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 18-04-2013 . تم الاطلاع عليه بتاريخ 17-02-2014 .
- ↑ "15.19 وضع الذاكرة الحقيقية المُصفحة". دليل مبرمج معمارية AMD64، المجلد 2: برمجة النظام (PDF) . الإصدار 3.38. شركة Advanced Micro Devices . نوفمبر 2021. الصفحات 515-516 . مؤرشف (PDF) من الأصل بتاريخ 30-11-2021 . تم الاطلاع عليه بتاريخ 10-12-2021 .
لتسهيل محاكاة وضع الذاكرة الحقيقية، يجوز لتعليمات VMRUN تحميل قيمة CR0 للضيف مع PE = 0 وPG = 1. وبالمثل، يُسمح لتعليمات RSM بالعودة إلى وضع الذاكرة الحقيقية المُصفحة. يتصرف وضع المعالج هذا تمامًا مثل وضع الذاكرة الحقيقية، باستثناء تطبيق الترحيل. الهدف هو أن يقوم مدير الذاكرة الافتراضية (VMM) بتشغيل الضيف في وضع الذاكرة الحقيقية المُصفحة عند CPL0، مع اعتراض أخطاء الصفحات. مدير الذاكرة الافتراضية (VMM) مسؤول عن إعداد جدول صفحات ظل يربط الذاكرة الفعلية للضيف بعناوين النظام الفعلية المناسبة. إن سلوك تشغيل نظام تشغيل ضيف في وضع الصفحات الحقيقية دون اعتراض أخطاء الصفحات إلى VMM غير محدد.
- أوضاع تشغيل X86
- المحاكاة الافتراضية
- منتجات إنتل
- تنفيذ لغة البرمجة
