الوضع الافتراضي 8086
تحتاج هذه المقالة إلى مصادر إضافية للتحقق . ( December 2009 ) |
| جزء من سلسلة عن |
| أوضاع المعالج الدقيق لعمارة x86 |
|---|
|
| First supported platform shown in parentheses |
في المعالج الدقيق 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 الأخرى التي تستخدم الوضع المحمي باستخدام وضع المستخدم ضمن المحاكي.) تستخدم أنظمة التشغيل المستندة إلى Windows NT المستندة إلى x86 أيضًا وضع VM86، [3] ولكن مع وصول مباشر محدود للغاية للأجهزة. تستخدم بعض برامج تحميل التمهيد (مثل GRUB ) الوضع المحمي ، وتنفذ مكالمات مقاطعة BIOS في وضع Virtual 8086. [4] [5]
معالجة الذاكرة والمقاطعات
المشكلة الأكثر شيوعًا عند تشغيل كود 8086 من الوضع المحمي هي معالجة الذاكرة التي تختلف تمامًا بين الوضع المحمي والوضع الحقيقي . وكما ذكرنا، من خلال العمل في وضع VM86، يتم إعادة تكوين آلية التجزئة للعمل تمامًا كما هو الحال في الوضع الحقيقي، ولكن آلية التقسيم لا تزال نشطة، وهي شفافة لكود الوضع الحقيقي؛ وبالتالي، لا تزال حماية الذاكرة قابلة للتطبيق، وكذلك عزل مساحة العنوان.
عندما تحدث المقاطعات (الأجهزة والبرامج والتعليمات int)، يقوم المعالج بإيقاف تشغيل وضع 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 بت في حدوث خطأ GP). سيتسبب VIP في حدوث خطأ GP عند إعداد IF المحاكى، مما يوجه نظام التشغيل لمعالجة أي مقاطعات معلقة. PVI هي نفس الفكرة ولكنها تؤثر فقط على تعليمات CLI/STI.
لقد وجد أن الجيل الأول من وحدات المعالجة المركزية AMD Ryzen يتميز بتنفيذ VME معطل. [12] وقد قام الجيل الثاني من Ryzen (سلسلة 2000) بإصلاح هذه المشكلة. [13]
دعم 64 بت وVMX
لا يتوفر وضع Virtual 8086 في الوضع الطويل x86-64 ، على الرغم من أنه لا يزال موجودًا على المعالجات القادرة على تشغيل x86-64 والتي تعمل في الوضع القديم .
تعيد تقنية Intel VT-x القدرة على تشغيل وضع 8086 الافتراضي من وضع x86-64 الطويل، ولكن يجب القيام بذلك عن طريق تحويل المعالج (المادي) إلى وضع جذر VMX وتشغيل معالج منطقي (افتراضي) يعمل في وضع 8086 الافتراضي. [14]
تستطيع معالجات Westmere والإصدارات الأحدث من Intel عادةً [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). "إرسال البرامج للقيام بوظيفة الأجهزة". إنفوورلد . تم الاسترجاع في 27 يناير 2014 .
- ^ Gnomes, Lee; "Behind The Scenes: The Making of the 386", Intel Corporation, Special 32-Bit Issue Solutions, November/December 1985, page 19
- ^ "هندسة محطة عمل Windows NT 4.0". Microsoft .
- ^ مايك وانج (21 يونيو 2016). "عملية تمهيد Grub2".
{{cite journal}}: تتطلب المجلة الاستشهاد بها|journal=( مساعدة ) - ^ "وضع 8086 الافتراضي - OSDev Wiki". wiki.osdev.org . تم الاسترجاع في 2020-12-10 .
- ^ abcde T. Shanley (1998). Pentium Pro وPentium II System Architecture. Addison-Wesley. ص 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 . تم الاسترجاع في 2014-02-20 .
- ^ ab "Pentium Protected Mode Virtual Interrupts (PVI)". Rcollins.org . تم الاسترجاع في 2014-02-20 .
- ^ "Virtual Mode Extensions on the Pentium Processor". Rcollins.org . تم الاسترجاع في 2014-02-20 .
- ^ دليل مطوري برامج Intel 64 وIA-32 Architectures، المجلد 2 (2A، 2B، 2C و2D): مرجع مجموعة التعليمات، AZ. Intel . مايو 2020. ص 3-199، 3-221، 3-222.
- ^ ميشال نكاسيك (12 مايو 2017). “VME مكسور على AMD Ryzen”. متحف OS/2 .
- ^ "دليل المراجعة لمعالجات عائلة AMD 17h موديلات 00h-0Fh" (PDF) . AMD . يونيو 2018.
- ^ دليل مطوري برامج Intel 64 وIA-32 Architectures، المجلد 3ب: دليل برمجة النظام، الجزء 2 (PDF) . Intel . سبتمبر 2009. ص 29-1. مؤرشف من الأصل (PDF) في 5 يناير 2010.
يُسمح بإدخال VM فقط للضيوف الذين تم تمكين الترقيم لهم والذين يعملون في الوضع المحمي أو في وضع 8086 الظاهري. يجب التعامل مع تنفيذ الضيف في أوضاع تشغيل المعالج الأخرى بشكل خاص بواسطة VMM
انظر أيضًا CS 686: موضوع خاص: Intel EM64T وVT Extensions (ربيع 2007)، الدرس 24 كيفية القيام بذلك من Linux (ليس أن الكود قديم جدًا، لذا قد لا يعمل كما هو مع النوى الحالية) يمكن العثور على كود أكثر حداثة هنا. انتبه أيضًا إلى أن هذا الكود النموذجي أكثر تعقيدًا من تشغيل المعالج المنطقي بدقة في وضع 8086 الافتراضي؛ هدفه النهائي هو إجراء بعض مكالمات BIOS في الوضع الحقيقي. - ^ "قائمة تقنيات المحاكاة الافتراضية من إنتل". Ark.intel.com. مؤرشف من الأصل في 2014-02-10 . تم الاسترجاع في 2014-02-20 .
قائمة بمعالجات إنتل التي تدعم VT-x ولكنها لا تدعم EPT
- ^ "أضافت Intel وضع الضيف غير المقيد على معمارية Westmere الدقيقة ووحدات المعالجة المركزية Intel اللاحقة، وهي تستخدم EPT لترجمة وصول عنوان الضيف الفعلي إلى عنوان المضيف الفعلي. مع هذا الوضع، يُسمح بـ VMEnter دون تمكين الترحيل."
- ^ "إذا كان عنصر التحكم في تنفيذ VM "الضيف غير المقيد" يساوي 1، فيجب أن يكون عنصر التحكم في تنفيذ VM "تمكين EPT" يساوي 1 أيضًا"
- ^ "15.19 Paged Real Mode". دليل مبرمج بنية AMD64، المجلد 2: برمجة النظام (PDF) . المراجعة 3.38. أجهزة Advanced Micro . نوفمبر 2021. ص 515-516.
لتسهيل المحاكاة الافتراضية للوضع الحقيقي، يجوز لتعليمة VMRUN تحميل قيمة CR0 للضيف بشكل قانوني مع PE = 0 ولكن PG = 1. وبالمثل، يُسمح لتعليمة RSM بالعودة إلى الوضع الحقيقي المقسم. يتصرف وضع المعالج هذا في كل شيء مثل الوضع الحقيقي، باستثناء تطبيق الترحيل. والغرض من ذلك هو أن يقوم VMM بتشغيل الضيف في الوضع الحقيقي المقسم عند CPL0، مع اعتراض أخطاء الصفحة. يكون VMM مسؤولاً عن إعداد جدول صفحات ظل يطابق الذاكرة الفعلية للضيف بالعناوين المادية المناسبة للنظام. سلوك تشغيل ضيف في الوضع الحقيقي المقسم دون اعتراض أخطاء الصفحة إلى VMM غير محدد.
