أعماق الافتراضيّة في Windows(الجزء 1)── أين يعمل Windows فعليّاً؟ الـ hypervisor والأقسام

· · Windows, الافتراضيّة, Hyper-V, Hypervisor, SLAT, VMBus

افتح معلومات النظام (msinfo32) على Windows 11 وسترى غالباً «Running» في حقل «Virtualization-based security» ── حتّى على جهاز لم تُنشئ عليه آلة افتراضيّة قطّ.

ما يعنيه ذلك هو الحقيقة التالية. على ذلك الحاسوب، يعمل Windows المضيف نفسه فوق hypervisor أصلاً. «الافتراضيّة» لم تعد تقنيّة لمن يُنشئ آلات افتراضيّة في Hyper-V Manager فقط. على Windows 11، تُفعَّل الأمان المستند إلى الافتراضيّة (VBS) افتراضيّاً على التكوينات التي تستوفي الشروط ── تثبيت نظيف على عتاد متوافق مثلاً1 ── وكلّ من WSL2 وWindows Sandbox مبنيّان على hypervisor Windows نفسه. تحت Windows الذي تستخدمه كلّ يوم، ثمّة طبقة برمجيّة إضافيّة أصلاً.

تتبّع هذه السلسلة، «أعماق الافتراضيّة في Windows»، ما يحدث في تلك الطبقة، بدءاً من الأسس.

«أعماق الافتراضيّة في Windows» ── الأجزاء الثلاثة كلّها

  1. الجزء 1 (هذا المقال): الـ hypervisor والأقسام
    نتتبّع أين ينتهي Windows المضيف إلى العمل عندما تفعِّل Hyper-V.
  2. الجزء 2: ذاكرة لا تراها النواة ── VBS وHVCI وCredential Guard
    نتتبّع أين يضع Windows أسراراً لا يستطيع مدير ولا النواة قراءتها.
  3. الجزء 3: آلات افتراضيّة تقلع في ثوانٍ ── WSL2 وWindows Sandbox والحاويات
    نتتبّع، من كيفيّة مشاركة الذاكرة والصور، لماذا WSL2 وSandbox خفيفان رغم ثقل آلة افتراضيّة كاملة.

السؤال الذي يجيب عنه الجزء 1 واحد فقط.

عندما تفعِّل Hyper-V، أين ينتهي Windows المضيف إلى العمل؟

القرّاء المستهدَفون مطوِّرون ومشغِّلون يستخدمون Hyper-V أو WSL2 أو Windows Sandbox ويريدون فهم ما يعمل تحتها من الآليّة صعوداً. المتطلّبات هي Windows 10/11 x64 أو Windows Server الحالي (نقاش الحلقات وVT-x/AMD-V وEPT/RVI في هذا المقال يفترض x64؛ يستخدم Arm64 آليّة مختلفة مثل مستويات الاستثناء). الخلفيّة المطلوبة هي تقريباً التمييز بين وضع النواة ووضع المستخدم؛ لا تحتاج خبرة تشغيل آلات افتراضيّة ولا معرفة تطوير hypervisor. الصعوبة متوسّطة. نغطّي مفهوم امتدادات افتراضيّة المعالج، لكن لا ندخل تفاصيل مجموعة التعليمات.

1. الخلاصة أوّلاً

عندما يسمع الناس Hyper-V، قد يتصوّرون «برمجيّة تشغيل آلات افتراضيّة تجلس فوق Windows». البنية الفعليّة معكوسة.

من لحظة تفعيل Hyper-V وإعادة التشغيل، الـ hypervisor هو من يتحكّم بالمعالجات الفيزيائيّة والذاكرة، ويعمل Windows المضيف فوقه بوصفه أوّل قسم ذي امتياز ── «القسم الجذر».

الـ hypervisor طبقة برمجيّة رقيقة تجلس بين العتاد ونظام التشغيل، وتنشئ بيئات تنفيذ معزولة تُسمَّى «أقساماً»، وتتوسّط الوصول إلى العتاد.2 الذي يدخل إليه Windows المضيف هو القسم الجذر؛ والذي تدخل إليه الآلات الافتراضيّة هي الأقسام الأبناء. يُعامَل القسم الجذر معاملة خاصّة (له وصول مباشر إلى الأجهزة الفيزيائيّة ويحتفظ بمكدّس الإدارة)، لكن بمعنى أنّه لا يتحكّم بالمعالجات الفيزيائيّة مباشرةً، يقف في الموقع نفسه كقسم ابن.

البنية الكلّيّة بعد تفعيل Hyper-Vيجلس الـ hypervisor مباشرةً على العتاد الفيزيائيّ، وفوقه يجلس القسم الجذر الذي يحوي Windows المضيف والأقسام الأبناء التي تحوي الآلات الافتراضيّةالعتاد الفيزيائيّالـ hypervisorالقسم الجذر(Windows المضيف)الأقسام الأبناء(الآلات الافتراضيّة)يحوي مكدّس إدارة الافتراضيّة وبرامج التشغيل

الشكل 1: Hyper-V ليس «برمجيّة آلات افتراضيّة فوق Windows» بل طبقة تذهب تحت Windows، ونظام التشغيل المضيف نفسه يعمل داخل القسم الجذر.

قد تفكِّر: «إن لم أشعر بفرق بعد التفعيل، هل حدث حقّاً هذا الانقلاب الكبير؟» نعم حدث. ولهذا بالضبط تمرّ هذه البنية عادةً دون أن تُلاحَظ. في هذا المقال نفكِّك هذا الرسم الواحد على ثلاثة محاور: المعالج، والذاكرة، وإدخال/إخراج الأجهزة.

2. من المعالج ── امتياز إضافيّ تحت الحلقات

2.1. تذكير بحماية الحلقات

لمعالجات x64 مستويات امتياز (حلقات)، ويعمل Windows وضع النواة عند الحلقة 0 ووضع المستخدم عند الحلقة 3. لا تستطيع التطبيقات لمس العتاد مباشرةً لأنّ التعليمات المميَّزة لا يمكن تنفيذها من الحلقة 3.

فكيف تؤوي بأمان عدّة نوى أنظمة تشغيل، كلّ منها يعمل عند الحلقة 0، على المعالج الفيزيائيّ نفسه؟ كلّ نواة مكتوبة على افتراض أنّ «أنا أتحكّم بالمعالج». أعطِ الحلقة 0 لكلّها فتتصادم؛ احجبها فلا تعمل.

مشكلة نوى أنظمة تشغيل متعدّدة تطالب بالحلقة 0نواتا المضيف والضيف مكتوبتان بافتراض سلطة كاملة عند الحلقة 0، لذا سلّم الحلقات التقليديّ وحده لا يستطيع إيواءهما بأمان على المعالج الفيزيائيّ نفسهنواة المضيف(تفترض الحلقة 0)تطالب بالتحكّم بالمعالج الفيزيائيّنواة الضيف(تفترض الحلقة 0)الحلقات التقليديّة لا توفِّقيلزم وسيط فوق الحلقة 0

الشكل 2: بُني سلّم الحلقات بافتراض نظام تشغيل واحد، فإيواء نوى متعدّدة يحتاج امتيازاً إضافيّاً فوقه.

2.2. امتدادات الافتراضيّة ── وضع محجوز للـ hypervisor

ما يحلّ هذه المشكلة هو امتدادات الافتراضيّة في المعالج (Intel VT-x/AMD-V). يشترط Hyper-V معالجاً يملك هذه الميزة.2 تضيف امتدادات الافتراضيّة، على محور منفصل عن الحلقات التقليديّة، «وضع تنفيذ للـ hypervisor» و«وضع تنفيذ للضيوف». هو امتياز أقوى حتّى من الحلقة 0، يُلقَّب أحياناً «الحلقة −1».

  • تواصل نواة الضيف العمل عند الحلقة 0، كما كانت. لا يلزم إعادة كتابة.
  • لكن تلك الحلقة 0 هي «الحلقة 0 داخل وضع الضيف»، ولا تتحكّم بالمعالج الفيزيائيّ ككلّ.
  • عندما يصطدم الضيف بعمليّة معيّنة تحتاج تدخّل الـ hypervisor (تعليمة مضبوطة كاعتراض، أو استثناء أو انتهاك)، ينقل المعالج التحكّم تلقائيّاً إلى الـ hypervisor (VM Exit). عندما ينتهي الـ hypervisor من المعالجة، يعود إلى الضيف (VM Entry). تمرّ وصولات الذاكرة العاديّة دون VM Exit، ما دامت ترجمة SLAT تنجح.

تعمل المقاطعات بالطريقة نفسها. لا تلمس الأقسام المعالجات الفيزيائيّة مباشرةً؛ يستقبل الـ hypervisor المقاطعات ويوجِّهها إلى كلّ قسم.2

تدفّق تنفيذ الضيف وVM Exitتعمل نواة الضيف والتطبيقات عند الحلقة 0 والحلقة 3 في وضع الضيف؛ تمرّ وصولات الذاكرة العاديّة عبر ترجمة SLAT، بينما تتسبّب الاعتراضات والاستثناءات المضبوطة في VM Exit ينقل التحكّم إلى الـ hypervisor، الذي يعود بعد ذلك إلى الضيف عبر VM Entryلانعميعمل في وضع الضيف(بما فيه نواة الحلقة 0)عمليّة تحتاج تدخّلاً؟(اعتراضات/استثناءات مضبوطة)واصل التنفيذ كما هوVM Exit(المعالج ينقل التحكّم)الـ hypervisor يعالجهاالعودة إلى الضيف عبر VM Entry

الشكل 3: يواصل نظام تشغيل الضيف العمل عند الحلقة 0 دون إعادة كتابة، ويستدعي المعالج الـ hypervisor فقط عند الحاجة.

يشبه هذا الذهاب والإياب كثيراً التدفّق الذي تتبّعناه في سلسلة الذاكرة ── «ادخل النواة عند خطأ صفحة، ثمّ عُد إلى التعليمة نفسها». يعترض المعالج التحكّم عبر آليّة استثناء أو انتقال، ويدع مديراً أعلى يقرِّر، ثمّ يعود. في أعماق Windows، يظهر هذا الشكل مراراً.

2.3. النوع 1 والنوع 2 ── الفرق هو أين يجلس

تُقسَم برامج hypervisor عموماً إلى النوع 1 (على العتاد مباشرةً / bare-metal)، الذي يعمل مباشرةً على العتاد، والنوع 2 (مستضاف)، الذي يعمل فوق نظام تشغيل مضيف. Hyper-V من النوع 1.3 يُصنَّف VirtualBox وVMware Workstation (عند التشغيل مستقلَّين) نوعاً 2.

عند سماع النوع 1، يميل الناس إلى تخيّل «تكوين خادم فقط بلا نظام تشغيل مضيف»، لكن Hyper-V مختلف. لا يختفي Windows المضيف ── إنّه «ينتقل» إلى القسم الجذر. عندما تفعِّل Hyper-V وتعيد التشغيل، يبدأ الـ hypervisor أوّلاً أثناء الإقلاع، ثمّ يأتي Windows المضيف بوصفه القسم الجذر فوقه.

الفرق بين hypervisor النوع 1 والنوع 2في النوع 2 يجلس نظام التشغيل المضيف على العتاد ويجلس الـ hypervisor والآلات الافتراضيّة على نظام التشغيل المضيف، بينما في Hyper-V من النوع 1 يجلس الـ hypervisor مباشرةً على العتاد ويدخل نظام التشغيل المضيف نفسه إلى القسم الجذر فوقهالنوع 1(Hyper-V)النوع 2(مستضاف)الـ hypervisorالعتادالقسم الجذر(نظام التشغيل المضيف)آلة افتراضيّةنظام التشغيل المضيفالعتادالـ hypervisorآلة افتراضيّة

الشكل 4: في النوع 2 يجلس الـ hypervisor على نظام التشغيل المضيف، بينما في Hyper-V من النوع 1 يُعكَس الترتيب ويجلس نظام التشغيل المضيف نفسه على الطبقة الأدنى بدرجة.

منظوراً على خطّ زمنيّ للإقلاع، يبدو التغيير الذي يحدث عند التفعيل هكذا.

ترتيب الإقلاع بعد تفعيل Hyper-Vبعد التشغيل، يبدأ الـ hypervisor أوّلاً أثناء الإقلاع، ثمّ يأتي Windows المضيف بوصفه القسم الجذر فوقه، وتبدأ الآلات الافتراضيّة وVBS وما شابه بعد ذلكالتشغيل وبدء الإقلاعالـ hypervisor يبدأ أوّلاًWindows المضيف يبدأ قسماً جذراًالآلات الافتراضيّة وVBS وWSL2 تبدأ فوق ذلكتجربة المستخدم بلا تغيير

الشكل 5: انقلاب الترتيب يكون قد انتهى قبل ظهور شاشة تسجيل الدخول، ويأتي نظام التشغيل المضيف على الـ hypervisor من البداية.

3. الأقسام ── وحدة العزل

3.1. أدوار يملكها القسم الجذر وحده

القسم وحدة عزل منطقيّة يوفِّرها الـ hypervisor.2 لكن ليست كلّ الأقسام متساوية. ثمّة أمور يملكها القسم الجذر وحده.

  • وصول مباشر إلى الأجهزة الفيزيائيّة. تعيش برامج تشغيل الأقراص وبطاقات الشبكة ووحدات GPU وما شابه في Windows داخل القسم الجذر، لا في الـ hypervisor. لـ Hyper-V على Windows Server تكوين يخصِّص جهازاً PCIe معيّناً مباشرةً لقسم ابن (Discrete Device Assignment)؛ في تلك الحالة يُفلِت الجذر ذلك الجهاز (هذا غير متاح على Windows العميل).4
  • مكدّس إدارة الافتراضيّة. يعمل VMMS (Virtual Machine Management Service)، الذي يحكم إنشاء الآلات الافتراضيّة وبدءها وإيقافها، وعملية العامل لكلّ آلة افتراضيّة (vmwp.exe) في وضع المستخدم في القسم الجذر.5 هذه جزء من ميزات إدارة الآلات الافتراضيّة في Hyper-V، لذا قد تغيب على مضيف يعمل فيه الـ hypervisor فقط من أجل VBS أو WSL2.
  • حقّ إنشاء أقسام أبناء. ينشئ القسم الجذر أقساماً أبناء عبر واجهة hypercall (واجهة الاستدعاء إلى الـ hypervisor).2

لهذا التصميم سبب. إن وضعت كلّ برنامج تشغيل جهاز في الـ hypervisor نفسه، يصبح الـ hypervisor ضخماً ويزداد عدد العلل ومداخل الهجوم. يحصر الـ hypervisor نفسه في العمل الأدنى لتوسّط المعالجات والذاكرة، ويترك رعاية الأجهزة لـ Windows في القسم الجذر. تقسيم الأدوار هذا هو ما يُبقي Hyper-V رقيقاً.

تقسيم الأدوار بين القسم الجذر والأقسام الأبناءيحتفظ القسم الجذر بمكدّس إدارة الافتراضيّة وبرامج تشغيل الأجهزة الفيزيائيّة وينشئ أقساماً أبناء عبر hypercalls؛ يرى القسم الابن عادةً أجهزة افتراضيّة فقط، وتحت Discrete Device Assignment على Windows Server يصل إلى الجهاز المخصَّص مباشرةًالقسم الجذرأنشئ وأدِر عبر hypercallsالقسم الابننظام تشغيل الضيففي التكوين المعتاد، أجهزة افتراضيّة فقطVMMS وعمليّات العاملبرامج تشغيل الأجهزة الفيزيائيّةالـ hypervisor(يحصر نفسه في توسّط المعالج والذاكرة)

الشكل 6: وضع برامج تشغيل الأجهزة ومكدّس الإدارة في جانب القسم الجذر هو ما يُبقي الـ hypervisor نفسه رقيقاً.

3.2. العالم كما يُرى من قسم ابن

لا يستطيع نظام تشغيل الضيف في قسم ابن رؤية العتاد الفيزيائيّ مباشرةً في تكوين الأجهزة الافتراضيّة المعتاد (الاستثناء الوحيد جهاز مخصَّص عبر Discrete Device Assignment على Windows Server، كما في القسم السابق). ما يستطيع رؤيته هو معالجات افتراضيّة، وفضاء ذاكرة يبدو خاصّاً به، وأجهزة افتراضيّة. تُمرَّر الطلبات إلى الأجهزة الافتراضيّة إلى القسم الجذر عبر VMBus أو الـ hypervisor.2 أمّا تخصيص وقت المعالج وترجمة الذاكرة عبر SLAT فيعالجهما الـ hypervisor مباشرةً دون المرور بالجذر. ما يتوسّطه الجذر هو إدخال/إخراج الأجهزة، لا كلّ مورد فيزيائيّ.

العالم كما يُرى من قسم ابنما يراه نظام تشغيل الضيف هو معالجات افتراضيّة وفضاء ذاكرة خاصّ بالقسم وأجهزة افتراضيّة؛ تُمرَّر الطلبات إلى الأجهزة الافتراضيّة إلى القسم الجذر عبر VMBus وما شابه، ويعالج الـ hypervisor وقت المعالج وترجمة الذاكرة مباشرةً، وفي تكوين Discrete Device Assignment على Windows Server تُوصَل الأجهزة المخصَّصة فقط مباشرةًنظام تشغيل الضيف(ابن)معالجات افتراضيّةذاكرة أم أجهزة؟فضاء ذاكرة خاصّأجهزة افتراضيّةتُمرَّر إلى الجذرعبر VMBus وما شابهمعالج فيزيائيّ وRAM وأجهزةغير مرئيّة مباشرةًDDA: أجهزة مخصَّصةWindows Server

الشكل 7: في تكوين الأجهزة الافتراضيّة المعتاد كلّ ما يراه الضيف نافذة افتراضيّة والمسار إلى الفيزيائيّ يمرّ بوسيط؛ الجهاز المخصَّص عبر DDA على Windows Server وحده هو الاستثناء.

ما يهمّ هنا هو أنّ بالنسبة لتطبيق يعمل على Windows المضيف، هذه البنية شفّافة تقريباً. ما زالت استدعاءات Win32 API ومعالجة أخطاء الصفحات تُعالَج بواسطة نواة Windows داخل القسم الجذر، كما كانت. يتدخّل الـ hypervisor فقط عندما يُصطدَم باعتراض أو استثناء مضبوط.

4. من الذاكرة ── ترجمة العناوين تكتسب مستوى إضافيّاً

4.1. ثلاثة أنواع من العناوين

في الجزء 1 من سلسلة الذاكرة تتبّعنا التدفّق الذي تُترجَم به عنوان افتراضيّ عبر جدول الصفحات إلى عنوان فيزيائيّ («اللحظة التي يصبح فيها عنوان افتراضيّ ذاكرة RAM فيزيائيّة»). في بيئة مُفتَرَضة يُضاف مستوى إضافيّ تحت تلك الترجمة، وثمّة ثلاثة أنواع من العناوين.

العنوان الاختصار من يديره
عنوان افتراضيّ للضيف GVA جدول صفحات نظام تشغيل الضيف
عنوان فيزيائيّ للضيف GPA العنوان الذي يعتقد نظام تشغيل الضيف أنّه «فيزيائيّ»
عنوان فيزيائيّ للنظام SPA الـ hypervisor (الموقع الفعليّ في RAM)

يترجم نظام تشغيل الضيف GVA إلى GPA بجدول صفحاته. لكن GPA الذي يراه الضيف ليس عنواناً فيزيائيّاً حقيقيّاً؛ إنّه فضاء ذاكرة خاصّ مخصَّص لكلّ قسم.2 إسقاط GPA على الموقع الفعليّ في RAM (SPA) مهمّة الـ hypervisor.

4.2. SLAT ── ترجمة ذات مستويين في العتاد

إن فعلت هذه الترجمة من المستوى الثاني برمجيّاً وحدها، سيضطرّ الـ hypervisor إلى تتبّع كلّ تحديث لجدول صفحات الضيف واحداً واحداً، وهو أمر غير واقعيّ من منظور الأداء. لذا يوفِّر المعالج آليّة تمشي جداول الترجمة من المستوى الثاني في العتاد. تلك هي SLAT (Second Level Address Translation)؛ Intel EPT (Extended Page Tables) وAMD RVI هما التنفيذان. يشترط Hyper-V الحاليّ معالج 64 بت قادراً على SLAT.4

ترجمة عناوين ذات مستويين عبر SLATيُترجَم عنوان افتراضيّ للضيف إلى عنوان فيزيائيّ للضيف بجدول صفحات نظام تشغيل الضيف، ثمّ يُترجَم أيضاً إلى عنوان فيزيائيّ للنظام بـ SLAT الذي يديره الـ hypervisor، ويصل إلى RAM الفعليّجدول صفحات نظام تشغيل الضيفSLAT(جداول ترجمة EPT/RVI)عنوان افتراضيّ للضيف(GVA)عنوان فيزيائيّ للضيف(GPA)عنوان فيزيائيّ للنظام(SPA)RAM فيزيائيّطبقة يعتقد الضيف أنّها فيزيائيّة فحسب

الشكل 8: جدول ترجمة آخر، يديره الـ hypervisor، يجلس تحت جدول صفحات الضيف، ويمشي المعالج كليهما في العتاد.

SLAT ليست ميزة توجد فقط لكفاءة تنفيذ الآلات الافتراضيّة. يستخدم VBS الذي سنراه في الجزء 2 خاصّيّة «يمكنك امتلاك جدول ترجمة SLAT مختلف لكلّ مستوى امتياز» مادّةً لحدّ أمنيّ. سبب إمكان إنشاء ذاكرة لا تراها النواة حتّى هو أنّ الـ hypervisor يحتفظ بهذه الترجمة من المستوى الثاني. يصبح هذا خيطاً عبر السلسلة كلّها، لذا تذكَّر نقطة واحدة: «مالك جداول الترجمة هو الـ hypervisor».

5. من إدخال/إخراج الأجهزة ── VMBus ونوعان من الأجهزة

5.1. حدود الأجهزة المُحاكاة

الطريقة الكلاسيكيّة لإظهار جهاز لقسم ابن هي محاكاة عتاد حقيقيّ بالكامل (متحكِّم IDE قديم مثلاً) برمجيّاً. التوافق مرتفع لأنّ برامج التشغيل المدمَجة في نظام تشغيل الضيف تعمل كما هي، لكن يحدث VM Exit في كلّ مرّة يصطدم فيها الضيف بمنفذ إدخال/إخراج، والأداء لا يتوسّع.

لماذا إدخال/إخراج جهاز مُحاكى بطيءفي كلّ مرّة يشغِّل فيها الضيف منفذ إدخال/إخراج، ينتقل التحكّم إلى جانب الـ hypervisor عبر VM Exit، ويُحاكى الجهاز برمجيّاً، ويُعاد الضيف، فتتكرّر الدورة وتكون بطيئةتتكرّر عند تشغيل المنفذ التاليالضيف يشغِّل منفذ إدخال/إخراجيحدث VM Exitيُحاكى الجهاز برمجيّاًالعودة إلى الضيف عبر VM Entry

الشكل 9: تعمل هذه الدورة مرّات كثيرة خلف وصول قرص واحد، وثمن التوافق يُدفَع أداءً.

5.2. VMBus وVSP/VSC ── مسار سريع مصمَّم للافتراضيّة

لذا يملك Hyper-V آليّة «جهاز اصطناعيّ» مصمَّمة بافتراض الافتراضيّة. ثمّة ثلاث شخصيّات.2

  • VMBus: قناة اتّصال منطقيّة بين الأقسام. توفِّر اتّصالاً عالي السرعة بين الأقسام يستخدم ذاكرة مشتركة.3
  • VSP (Virtualization Service Provider): خدمة تقيم في جانب القسم الجذر، تستقبل طلبات الأجهزة من الابن، وتجسرها إلى مكدّس الجهاز/الخلف في جانب الجذر. قد يصل الطلب إلى جهاز فيزيائيّ، أو قد يعالجه خلف في جانب المضيف مثل قرص افتراضيّ أو مبدِّل افتراضيّ.
  • VSC (Virtualization Service Consumer): برنامج تشغيل جهاز اصطناعيّ يدخل نظام تشغيل الضيف في جانب القسم الابن. يرسل الطلبات إلى VSP عبر VMBus.

بأخذ طلب تخزين من نظام تشغيل الضيف مثالاً، يبدو التدفّق هكذا. يهبط WriteFile لتطبيق الضيف في مكدّس إدخال/إخراج نواة الضيف ويصل، في الأسفل، إلى VSC (بدلاً من عتاد حقيقيّ). يضع VSC الطلب على VMBus ويسلِّمه إلى VSP في القسم الجذر، ويُدخل VSP الطلب في مكدّس الإدخال/الإخراج في جانب الجذر. في تكوين قرص افتراضيّ (VHDX)، تُعالَج هذه الكتابة كتابةً إلى ملفّ VHDX على المضيف وتصل في النهاية إلى القرص الفيزيائيّ. يُسمَّى هذا النهج Enlightened I/O (إدخال/إخراج واعٍ بالافتراضيّة)، ويرفع الكفاءة بتجاوز طبقة محاكاة الجهاز.2

مسار إدخال/إخراج لجهاز اصطناعيّيصل طلب إدخال/إخراج من تطبيق في القسم الابن إلى VSC عبر نواة الضيف، ويعبر VMBus إلى VSP في القسم الجذر، وعلى مكدّس الإدخال/الإخراج في جانب الجذر الذي يجسره VSP قد يصل إلى جهاز حقيقيّ عبر برنامج تشغيل جهاز فيزيائيّ، أو قد يعالجه خلف في جانب المضيف مثل قرص افتراضيّ أو مبدِّل افتراضيّVMBusتطبيق في القسم الابنمكدّس إدخال/إخراج نواة الضيفVSC(برنامج تشغيل جهاز اصطناعيّ)VSP(جانب القسم الجذر)مكدّس إدخال/إخراج جانب الجذربرنامج تشغيل جهاز فيزيائيّخلف جانب المضيف(قرص افتراضيّ، مبدِّل افتراضيّ، وغيرها)جهاز فيزيائيّ

الشكل 10: مع جهاز اصطناعيّ، يعبر إدخال/إخراج الضيف إلى القسم الجذر عبر VMBus، وعبر مكدّس جانب الجذر يصل إلى جهاز حقيقيّ أو خلف في جانب المضيف.

بعبارة أخرى، ما إذا كان إدخال/إخراج قرص آلة افتراضيّة أو شبكتها سريعاً لا يعتمد على جانب الضيف فقط بل أيضاً على حالة مكدّس الإدخال/الإخراج وبرامج تشغيل الأجهزة في جانب القسم الجذر. سبب كون الملاحظة من جانب المضيف لا غنى عنها عند التحقيق في مشكلة أداء آلة افتراضيّة هو أنّ المسار يمرّ فعليّاً بالمضيف.

الأجهزة المُحاكاة مقابل الأجهزة الاصطناعيّةيحاكي جهاز مُحاكى عتاداً حقيقيّاً فتعمل برامج تشغيل الضيف المدمَجة لكنّه بطيء؛ الجهاز الاصطناعيّ برنامج تشغيل مصمَّم لغرضه يفترض VMBus وهو سريعالجهاز المعروض على القسم الابنجهاز مُحاكىجهاز اصطناعيّيحاكي عتاداً حقيقيّاً؛ التوافق أوّلاًيحتاج تدخّلاً عند كلّ إدخال/إخراج؛ بطيءمصمَّم حول VMBus؛ سريعيتطلّب برنامج تشغيل مطابقاً في الضيف

الشكل 11: من نوعَي الجهاز الافتراضيّ، تحمل الأجهزة المُحاكاة التوافق بعد تثبيت نظام التشغيل مباشرةً، وتحمل الأجهزة الاصطناعيّة الأداء في الاستخدام اليوميّ.

6. لماذا هذا ليس شأن غيرك، حتّى إن لم تستخدم آلة افتراضيّة قطّ

قد تبدو البنية حتّى الآن «قصّة لمن يُقيم آلات افتراضيّة». لكن كما قال الافتتاح، على Windows الحاليّ الـ hypervisor جزء من الحياة اليوميّة.

  • الأمان المستند إلى الافتراضيّة (VBS). يستخدم hypervisor Windows لإنشاء بيئة معزولة ويؤوي فيها ميزات أمنيّة. على Windows 11 يُفعَّل افتراضيّاً عندما تُستوفى شروط مثل تثبيت نظيف على عتاد متوافق.1 التفاصيل في الجزء 2.
  • WSL2. يشغِّل نواة Linux حقيقيّة داخل آلة افتراضيّة خدميّة خفيفة.6
  • Windows Sandbox. بيئة Windows قابلة للرمي معزولة بالـ hypervisor.7 كلاهما في الجزء 3.
ميزات يوميّة تجلس على الـ hypervisor نفسهليس فقط آلات Hyper-V الافتراضيّة بل أيضاً VBS، الذي يُفعَّل افتراضيّاً على الأجهزة التي تستوفي شروطاً مثل التثبيت النظيف، زائد WSL2 وWindows Sandbox، كلّها مبنيّة على hypervisor Windows نفسهhypervisor Windowsآلات Hyper-V الافتراضيّةVBS(افتراضي عند التثبيت النظيف)WSL2Windows Sandboxلماذا يعمل على حواسيب بلا VM

الشكل 12: الأساس واحد، وهذا الرسم هو حيث ينهار افتراض «الافتراضيّة قصّة لمن يستخدم آلات افتراضيّة».

أمر آخر يطأه الناس كثيراً في العمل هو التعايش مع برمجيّات افتراضيّة من طرف ثالث. لأنّ الـ hypervisor يستخدم امتدادات الافتراضيّة في المعالج حصريّاً، في بيئة يعمل فيها hypervisor Windows، لا يستطيع VirtualBox وما شابه العمل بالطريقة التقليديّة (الطريقة التي تستخدم امتدادات الافتراضيّة في المعالج نفسها). لهذا تُوفَّر واجهة عامّة تُسمَّى Windows Hypervisor Platform، ويمكن لمكدّس افتراضيّة من طرف ثالث أن يعمل بالجلوس فوق hypervisor Windows.8 يمكن لـ VirtualBox/VMware الحاليَّين التعايش مع WSL2 بفضل هذه الآليّة، لكن فروق أداء وميزات تأتي مع تبديل الأوضاع تُلاحَظ أحياناً بوصفها «بعد تفعيل Hyper-V (أو VBS)، بدأت برمجيّة الافتراضيّة تتصرّف بشكل مختلف».

من يملك امتدادات افتراضيّة المعالج، ومسار برمجيّة افتراضيّة طرف ثالثبينما يعمل hypervisor Windows يملك امتدادات افتراضيّة المعالج حصريّاً؛ برمجيّة افتراضيّة طرف ثالث تدعم WHP تعمل فوقه عبر Windows Hypervisor Platform، بينما التنفيذات التي لا تدعم WHP لا تستطيع العمل أو تكون محدودة الميزاتلانعمامتدادات افتراضيّة المعالج(VT-x/AMD-V)هل يعمل hypervisor Windows؟برمجيّة طرف ثالث تستطيع استخدامه مباشرةًالـ hypervisor يستخدمه حصريّاًWindows Hypervisor Platformبرمجيّة طرف ثالث قادرة على WHP تعمل فوقهتنفيذات غير قادرة لا تعمل، أو محدودة

الشكل 13: لمالك امتدادات الافتراضيّة واحد، وبرمجيّة الطرف الثالث الوحيدة التي تستطيع التعايش بينما يعمل الـ hypervisor هي برمجيّة تدعم الواجهة العامّة (WHP).

7. انظر بنفسك

يمكنك التأكيد على جهازك ما إذا كان hypervisor يعمل.

أولاً، فحص يمكن تشغيله دون صلاحيّات مسؤول.

# Whether we are running on top of a hypervisor
(Get-CimInstance Win32_ComputerSystem).HypervisorPresent

# VBS status (same source as "Virtualization-based security" in msinfo32)
Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
    -ClassName Win32_DeviceGuard |
    Select-Object VirtualizationBasedSecurityStatus

يُرجع VirtualizationBasedSecurityStatus حالة تشغيل VBS رقماً (2 هو «Running»).9

تحذير واحد. كلّ ما يخبرك به HypervisorPresent هو «ما إذا كنّا نعمل فوق hypervisor»؛ ولا يميِّز الجذر عن الابن. إن شغَّلتَه على Windows داخل آلة افتراضيّة، ما زال يُرجع True، بوصفه قسماً ابناً. إن كان True على Windows على حاسوب فيزيائيّ، فذلك Windows داخل القسم الجذر ── تقرؤه مع بيئة التنفيذ.

ثانياً، الكلاسيكيّ من موجه أوامر.

systeminfo

انظر إلى «Hyper-V Requirements» في نهاية المخرجات. على جهاز لم يعمل فيه الـ hypervisor بعد، تُدرَج المتطلّبات الفرديّة ── دعم SLAT، وما إذا كانت امتدادات الافتراضيّة ممكَّنة، وغيرها. على جهاز يعمل فيه الـ hypervisor أصلاً، بدلاً من المتطلّبات تحصل على سطر واحد: «A hypervisor has been detected. Features required for Hyper-V will not be displayed.»4 ذلك السطر الواحد إذن بيان أنّ Windows لديك يعمل فوق hypervisor ما. كما مع HypervisorPresent، تحتاج إلى قراءته «داخل القسم الجذر» على حاسوب فيزيائيّ، أو «بوصفه قسماً ابناً» داخل آلة افتراضيّة.

حتّى إن كان كلّ متطلَّب في systeminfo «Yes»، فهذا يعني فقط أنّ جانب العتاد جاهز. ميزة Hyper-V نفسها متاحة على إصدارات Pro وEnterprise وEducation، وليست على Home.10

في الواجهة الرسوميّة، افحص صف «Virtualization-based security» تحت «System Summary» في msinfo32. لاحظ أنّ «Virtualization: Enabled» في لوحة المعالج في مدير المهام يعرض فقط ما إذا كانت امتدادات الافتراضيّة ممكَّنة في البرنامج الثابت، وهو معلومات منفصلة عن ما إذا كان hypervisor يعمل.

كيفيّة فحص ما إذا كان الـ hypervisor يعملإذا قال systeminfo إنّ hypervisor قد اكتُشِف فأنت تعمل على hypervisor(داخل القسم الجذر على حاسوب فيزيائيّ);إذا ظهرت قائمة Hyper-V Requirements فهو لا يعمل بعد لذا تفحص كلّ متطلَّب مثل SLAT وVM Monitor Mode Extensions وDEP، لكن كلّها Yes تعني فقط أنّ جانب العتاد جاهز ولميزة Hyper-V أيضاً متطلَّب إصداراكتُشِفمُدرَجكلّها Yesبعضها Noشغِّل systeminfoحقل المتطلّبات؟الـ hypervisor يعملداخل الجذرعلى حاسوب فيزيائيّلا يعمل بعدكلّ المتطلّبات Yes؟جانب العتاد جاهزيحتاج Pro / Ent / Eduافحص عناصر UEFI/BIOS

الشكل 14: حقل «Hyper-V Requirements» في systeminfo يعمل فحص حالة تشغيل وفحص متطلّبات معاً.

8. ثلاثة قراءات خاطئة تجنَّبها في العمل

8.1. «لم نفعِّل Hyper-V، لذا الافتراضيّة لا شأن لها بحواسيبنا»

حتّى إن لم تفعِّل ميزة Hyper-V (أدوات الإدارة وبيئة تنفيذ الآلات الافتراضيّة)، يعمل hypervisor Windows إن كان VBS مفعَّلاً. عندما تحقِّق في مشكلة توافق برنامج تشغيل، أو اختبار أداء، أو مشكلة مع برمجيّة افتراضيّة من طرف ثالث، افحص HypervisorPresent وحالة تشغيل VBS ── لا ما إذا كانت الميزة مفعَّلة.

8.2. «مدير المهام يقول «Virtualization: Enabled»، إذن Hyper-V يعمل»

ذلك العرض عن إعداد البرنامج الثابت (ما إذا كان VT-x/AMD-V متاحاً). احكم على حالة تشغيل الـ hypervisor من «A hypervisor has been detected» في systeminfo. بالمقابل، إذا قال مدير المهام «Disabled»، لا تستطيع تفعيل Hyper-V أو WSL2 أيضاً، فافحص إعدادات UEFI/BIOS أوّلاً.

ثلاثة فحوصات يسهل الخلط بينهاحقل الافتراضيّة في مدير المهام يعرض إعداد البرنامج الثابت، وقائمة ميزات Windows تعرض حالة التثبيت، وsysteminfo أو HypervisorPresent يعرض حالة التشغيل؛ كلّ منها يجيب عن سؤال مختلفأيّ سؤال؟برنامج ثابت أم Windows؟هل يعمل الـ hypervisor؟امتدادات البرنامج الثابت؟هل ميزة Hyper-V مفعَّلة؟لوحة المعالج في مدير المهامواجهة ميزات WindowssysteminfoHypervisorPresent

الشكل 15: هذه ثلاثة أسئلة مستقلّة، واستنتاج الاثنين الآخرين من أيّ عرض واحد قراءة خاطئة.

8.3. «إذا كانت الآلة الافتراضيّة بطيئة، فهي مشكلة نظام تشغيل الضيف»

يعبر إدخال/إخراج الجهاز الاصطناعيّ VMBus إلى VSP في القسم الجذر ويمرّ بمكدّس الجهاز/الخلف في جانب الجذر (برامج تشغيل فيزيائيّة، زائد معالجة مبدِّل افتراضيّ وقرص افتراضيّ). إن راقبت العدّادات داخل الضيف فقط، لن تجد اختناقاً يجلس في تخزين جانب المضيف أو بطاقة شبكة. مبدأ مشكلات أداء الآلة الافتراضيّة هو الملاحظة من الجانبين: الضيف والمضيف (القسم الجذر).

9. الخلاصة

  • عندما تفعِّل Hyper-V، يعمل الـ hypervisor مباشرةً على العتاد ويعمل Windows المضيف بوصفه القسم الجذر.2
  • تواصل نواة نظام تشغيل الضيف العمل عند الحلقة 0، والعمليّات المضبوطة كاعتراضات زائد الاستثناءات وحدها تُسلَّم إلى الـ hypervisor عبر VM Exit. تمرّ وصولات الذاكرة العاديّة عبر ترجمة SLAT.
  • يحتفظ القسم الجذر وحده ببرامج تشغيل الأجهزة الفيزيائيّة ومكدّس إدارة الافتراضيّة، وينشئ أقساماً أبناء عبر hypercalls.2
  • تصبح الذاكرة ترجمة ذات مستويين GVA→GPA→SPA، ويُعالَج المستوى الثاني في العتاد بـSLAT (EPT/RVI). يشترط Hyper-V الحاليّ SLAT.4
  • يهيمن على إدخال/إخراج الأجهزة مسار الجهاز الاصطناعيّ VSC→VMBus→VSP، والأداء يعتمد أيضاً على مكدّس الإدخال/الإخراج في جانب المضيف.2
  • على Windows 11، لأنّ VBS يُفعَّل افتراضيّاً على الأجهزة التي تستوفي شروطاً مثل التثبيت النظيف، ليس غريباً أن يعمل الـ hypervisor حتّى على حاسوب لا يستخدم آلة افتراضيّة قطّ.1 يمكنك تأكيد حالة التشغيل بـHypervisorPresent وsysteminfo.

تتكثّف الصورة الكبيرة للجزء 1 في هذا الرسم الواحد.

الصورة الكبيرة للجزء 1يجلس الـ hypervisor تحت القسم الجذر والأقسام الأبناء؛ تُخصَّص المعالجات بجدولة معالجات افتراضيّة(VM Exit فقط عند اعتراضات واستثناءات مضبوطة)、والذاكرة تتوسّطها ترجمة SLAT ذات مستويين، ويُمرَّر إدخال/إخراج الجهاز الاصطناعيّ عبر VMBus ويعالجه VSP في القسم الجذر، وللأجهزة المُحاكاة وDiscrete Device Assignment مسارات أخرىالقسم الجذر + الأقسام الأبناءالـ hypervisorالمعالج: جدولة VPالذاكرة: SLATVM Exit عند الاعتراضترجمة ذات مستويينالأجهزة: إدخال/إخراج VMBusVSP جانب الجذر يعالجمُحاكى / DDA: أخرى

الشكل 16: جدولة المعالج وترجمة الذاكرة يعالجهما الـ hypervisor مباشرةً (VM Exit عند التدخّل فقط)، ويتوسّط القسم الجذر (VSP) إدخال/إخراج الجهاز الاصطناعيّ في الجانب الأبعد من VMBus.

يتواصل في الجزء 2، «ذاكرة لا تراها النواة ── VBS وHVCI وCredential Guard».

نلتقط خيط هذا المقال ── أنّ الـ hypervisor يحتفظ بجداول ترجمة SLAT ── ونتتبّع كيف ينشئ Windows «ذاكرة لا يستطيع مدير ولا النواة قراءتها».

مقالات ذات صلة

مجالات الاستشارة ذات الصلة

تتعامل شركة كومورا سوفت ذ.م.م. مع تصميم بيئات التحقّق لتطبيقات Windows، وتحقيقات الأداء في البيئات الافتراضيّة، وتحليل مشكلات توافق برامج التشغيل والأجهزة الطرفيّة.

روابط مرجعيّة

  1. Microsoft Learn, Silicon assisted security. حول استخدام VBS الافتراضيّة العتاديّة لعزل النواة الآمنة عن نظام التشغيل العاديّ، وحول تفعيل VBS وHVCI افتراضيّاً على الأجهزة التي تستوفي المتطلّبات عند تثبيت جديد لـ Windows 11.  2 3

  2. Microsoft Learn, Hyper-V Architecture. حول توفير الـ hypervisor للأقسام بوصفها وحدة العزل؛ وإنشاء القسم الجذر أقساماً أبناء عبر واجهة hypercall؛ وعمل الأقسام في فضاء ذاكرة افتراضيّ خاصّ دون وصول مباشر إلى المعالجات الفيزيائيّة؛ وأدوار VMBus وVSP وVSC وEnlightened I/O؛ واشتراط امتدادات الافتراضيّة في العتاد (Intel VT/AMD-V).  2 3 4 5 6 7 8 9 10 11 12

  3. Microsoft Learn, Hyper-V architecture (Performance Tuning). حول كون Hyper-V hypervisor من النوع 1، وملكيّة القسم الجذر لأجهزة الإدخال/الإخراج الفيزيائيّة، وتوفير VMBus اتّصالاً عالي الأداء بين الأقسام يستخدم ذاكرة مشتركة.  2

  4. Microsoft Learn, System requirements for Hyper-V on Windows and Windows Server. حول اشتراط معالج 64 بت قادر على SLAT وVM Monitor Mode Extensions؛ وإمكان تأكيد استيفاء المتطلّبات في حقل «Hyper-V Requirements» في systeminfo؛ وعرض «A hypervisor has been detected» بينما يعمل hypervisor؛ وإمكان تخصيص Discrete Device Assignment جهازاً معيّناً مباشرةً لقسم ابن.  2 3 4

  5. Microsoft Learn, Appendix B: Hyper-V Architecture and Feature Overview. حول إدارة VMMS (Virtual Machine Management Service) لحالة الآلات الافتراضيّة في الأقسام الأبناء، وبدء عمليّة عامل (VMWP) في وضع المستخدم في القسم الجذر لكلّ آلة افتراضيّة. 

  6. Microsoft Learn, Comparing WSL Versions. حول تشغيل WSL2 نواة Linux حقيقيّة داخل آلة افتراضيّة خدميّة خفيفة، وحول محاذير استخدامها مع VMware وVirtualBox الحاليَّين. 

  7. Microsoft Learn, Windows Sandbox architecture. حول كون Windows Sandbox بيئة Windows خفيفة تجمع تقنيّة الحاويات مع عزل الـ hypervisor. 

  8. Microsoft Learn, Windows Hypervisor Platform. حول توفير واجهة وضع مستخدم حتّى يستطيع مكدّس افتراضيّة من طرف ثالث إنشاء أقسام وإدارتها فوق hypervisor Windows. 

  9. Microsoft Learn, Enable Hotpatch for Azure Arc-enabled servers. حول إمكان تأكيد حالة تشغيل VBS (الوضع الآمن الافتراضيّ) عبر VirtualizationBasedSecurityStatus على صنف Win32_DeviceGuard. 

  10. Microsoft Learn, Install Hyper-V. حول إمكان تفعيل Hyper-V على Windows 10/11 Pro أو Enterprise وما شابه، وعدم إمكان تثبيته على إصدار Home. 

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الأسئلة الشائعة

أسئلة شائعة حول موضوع هذه المقالة.

عندما تفعِّل Hyper-V، أين يعمل Windows المضيف فعليّاً؟
يتولّى الـ hypervisor التحكّم المباشر في كيفيّة تخصيص المعالجات الفيزيائيّة والذاكرة، ويعمل Windows المضيف داخل قسم خاصّ يُسمَّى القسم الجذر. يُعالَج التحكّم بالأجهزة الفيزيائيّة عادةً عبر برامج التشغيل في جانب القسم الجذر. يحتفظ القسم الجذر ببرامج تشغيل الأجهزة ومكدّس إدارة الافتراضيّة، لكن ملكيّة المعالجات الفيزيائيّة تعود إلى الـ hypervisor.
هل تعني «الافتراضيّة: ممكَّنة» في مدير المهام أنّ Hyper-V يعمل؟
لا. يعرض ذلك العرض ما إذا كانت امتدادات الافتراضيّة في المعالج (Intel VT-x/AMD-V) ممكَّنة في البرنامج الثابت. لمعرفة ما إذا كان hypervisor يعمل فعليّاً، ابحث عن «A hypervisor has been detected» في systeminfo، أو افحص Win32_ComputerSystem.HypervisorPresent.
لماذا يعمل الـ hypervisor رغم أنّني لم أُنشئ آلة افتراضيّة قطّ؟
على Windows 11، تُفعَّل الأمان المستند إلى الافتراضيّة (VBS) افتراضيّاً على الأجهزة التي تستوفي الشروط ── تثبيت نظيف على عتاد متوافق مثلاً ── وVBS مبنيّ على hypervisor Windows. الأمر نفسه إن استخدمت WSL2 أو Windows Sandbox. ليس غريباً أن يعمل الـ hypervisor دون أيّ صلة باستخدام أحد للآلات الافتراضيّة.
ما SLAT، ولماذا يُشترَط لـ Hyper-V؟
SLAT (Second Level Address Translation) هي الآليّة التي يترجم بها المعالج العناوين الفيزيائيّة للضيف إلى عناوين فيزيائيّة فعليّة؛ Intel EPT وAMD RVI هما التنفيذان. بدونها سيضطرّ الـ hypervisor إلى صيانة جداول الترجمة برمجيّاً، وهو أمر غير واقعيّ من منظور الأداء، لذا يعاملها Hyper-V الحاليّ متطلَّباً صارماً.
إذا فعَّلتُ Hyper-V، هل يتوقّف VirtualBox وVMware عن العمل؟
لأنّ الـ hypervisor يستخدم امتدادات الافتراضيّة في المعالج حصريّاً، لا يمكن لـ hypervisor طرف ثالث أن يعمل بالطريقة التقليديّة. لكن VirtualBox وVMware الحاليَّين يملكان وضعاً يعمل فوق hypervisor Windows (عبر Windows Hypervisor Platform)، لذا يمكن للإصدارات الحديثة من كلّ منهما التعايش.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

العودة إلى المدونة