في أواخر التسعينيات، تم تحقيق المحاكاة الافتراضية x86 بواسطة تقنيات برمجية معقدة، ضرورية للتعويض عن افتقار المعالج إلى قدرات المحاكاة الافتراضية المدعومة بالأجهزة مع تحقيق أداء معقول. في عامي 2005 و2006، قدمت كل من إنتل ( VT-x ) و إي إم دي ( AMD-V ) دعمًا محدودًا للمحاكاة الافتراضية للأجهزة، مما سمح ببرامج محاكاة افتراضية أبسط ولكن قدمت القليل من مزايا السرعة. [1] دعم أكبر للأجهزة، والذي سمح بتحسينات كبيرة في السرعة، جاء مع نماذج معالج لاحقة.
المحاكاة الافتراضية القائمة على البرمجيات
تركز المناقشة التالية فقط على الوضع الظاهري للوضع المحمي للعمارة x86.
في المحاكاة الافتراضية المستندة إلى البرامج، يتمتع نظام التشغيل المضيف بوصول مباشر إلى الأجهزة بينما تتمتع أنظمة تشغيل الضيف بوصول محدود إلى الأجهزة، تمامًا مثل أي تطبيق آخر لنظام التشغيل المضيف. يُسمى أحد الأساليب المستخدمة في المحاكاة الافتراضية المستندة إلى البرامج x86 للتغلب على هذا القيد الحجب الدائري، والذي يتضمن تشغيل نظام تشغيل الضيف في حلقة أعلى (أقل امتيازًا) من 0. [2]
جعلت ثلاث تقنيات المحاكاة الافتراضية للوضع المحمي ممكنة:
تُستخدم الترجمة الثنائية لإعادة الكتابة من حيث تعليمات الحلقة 3 بعض تعليمات الحلقة 0، مثل POPF. [3]:1[4] لتحسين الأداء، يجب تخزين الكتل الأساسية المترجمة في ذاكرة التخزين المؤقت بطريقة متماسكة تكتشف تصحيح التعليمات البرمجية (المستخدمة في VxDs على سبيل المثال) ، أو إعادة استخدام الصفحات بواسطة نظام تشغيل الضيف، أو حتى التعليمات البرمجية المعدلة ذاتيًا . [5]
يحتاج عدد من هياكل البيانات الرئيسية التي يستخدمها المعالج إلى التظليل. نظرًا لأن معظم أنظمة التشغيل تستخدم ذاكرة ظاهرية مقسمة إلى صفحات، ومنح نظام الضيف وصولاً مباشرًا إلى وحدة معالجة الوسائط (MMU) يعني فقد التحكم من قِبل مدير المحاكاة الافتراضية، فإن بعض عمل وحدة x86 MMU يجب أن يتكرر في برنامج لنظام تشغيل الضيف باستخدام تقنية تعرف بجداول صفحات الظل . [6]:5:2
مضاهاة جهاز الإدخال / الإخراج: يجب محاكاة الأجهزة غير المدعومة في نظام التشغيل الضيف بواسطة محاكي جهاز يعمل في نظام التشغيل المضيف. [7]