نرمافزارهایی نظیر VirtualBox یا VMWare Workstation در دسته هایپروایزرهای میزبانیشده محسوب میشوند. سیستمعامل که به آن سیستمعامل میزبان گفته میشود بر روی سختافزار نصب میشود. هایپروایزر بر روی سیستمعامل میزبان نصبشده و از امکانات آن برای مدیریت سختافزار استفاده میکند. هایپروایزر میزبان ماشینهای مجازی میشود. بر روی ماشینهای مجازی سیستمعامل مهمان نصب و اجرا میشود.
حال نگاهی به هایپروایزر مستقل (نوع ۱) بیاندازیم.
همانطور که در تصویر بالا پیداست هیچ سیستمعامل میزبانی وجود ندارد. هایپروایزر مستقیماً بر روی سختافزار اجراشده و کنترل کامل پلتفرم سختافزاری و منابع آن را (شامل CPU و حافظه اصلی) در دست دارد. مشابه هایپروایزر میزبانیشده، هایپروایزر مستقل میتواند میزبان ماشینهای مجازی باشد. بر روی ماشینهای مجازی سیستمعاملهای مهمان نصب و اجرا میشوند.
دو هایپروایزر متنباز و پراستفاده پلتفرمهای ARM، هایپروایزر Xen (مستقل، نوع ۱) و KVM (میزبانیشده، نوع ۲) هستند. ما از این دو هایپروایزر برای تشریح برخی نکات در این متن استفاده میکنیم. علاوه بر این دو هایپروایزرهای دیگری نیز برای ARM وجود دارد.
طبق تعریف کلاسیک، ماشین مجازی یک محیط جدا و ایزوله محاسباتی است که از ماشین فیزیکی واقعی قابلتشخیص نباشد. بااینکه شبیهسازی کامل یک ماشین واقعی بر روی سیستم مبتنی بر ARM امکانپذیر است، اما این روش غالباً کارایی لازم را ندارد. بنابراین این نوع شبیهسازی غالباً انجام نمیشود. بهعنوانمثال شبیهسازی یک دستگاه Ethernet واقعی کند است، چراکه هر دسترسی به ثبات شبیهسازیشده بهوسیله سیستمعامل مهمان باید از طریق هایپروایزر انجام شود. این کار هزینه بیشتری نسبت به دسترسی به ثباتهای دستگاه واقعی دارد.
جایگزین مناسبتری که معمولاً از آن برای بهبود کارایی استفاده میشود، دادن آگاهی به سیستمعامل مهمان است. درصورتیکه سیستمعامل مهمان بداند بر روی ماشین مجازی اجراشده است و با ارائه دستگاههای مجازی که برای کارایی خوب طراحی و در هایپروایزر شبیهسازیشدهاند میتوان به کارایی خوبی دستیافت.
اگر بخواهیم دقیق صحبت کنیم، مجازیسازی کامل سیستم یک ماشین فیزیکی واقعی را شبیهسازی میکند. در مقابل پروژه متنباز Xen مفهوم Para-Virtualization را معرفی میکند. در این نوع مجازیسازی بخشهای مرکزی سیستمعامل مهمان دستکاری میشوند (بخشی از کد سیستمعامل مهمان را تغییر میدهند. سیستم عامل ها معمولا چند نسخه ارائه می دهند یک نسخه برای نصب مستقیم بر روی سخت افزار و نسخه های دیگر هم دستکاری شده برای هایپروایزرهای مختلف) تا بتوان آنها را بجای ماشین فیزیکی بر روی یک ماشین مجازی اجرا کرد. این دستکاری عهدهدار بهبود کارایی میشود. (البته انواع دیگر مجازیسازی هم وجود دارد. در این متن تنها به این دو مجازیسازی اشارهشده است اگر فرصتی پیش آمد در مورد انواع دیگر مجازیسازی همصحبت خواهیم کرد)
امروزه، در اغلب معماریها که از مجازی سازی بهصورت سختافزاری پشتیبانی میکنند (مثل ARM)، سیستمعامل مهمان در غالب عملکرد خود بدون دستکاری اجرا میشوند. (عملکردهایی که سیستم را به مخاطره نمیاندازند) سیستمعامل مهمان فکر میکند که بر روی یک سختافزار واقعی اجرا میشود مگر برای درایورهای دستگاههای I/O جانبی نظیر شبکه و دستگاههای ذخیرهسازی؛ در این موارد سیستمعامل مهمان از درایورها و دستگاهها مجازی سازی شده (paravirtualized) استفاده میکند. بهعنوان نمونه از این دستگاههای مجازی میتوان به Virtio و Xen PV Bus اشاره کرد.
مهم است که تفاوت میان ماشین مجازی (Virtual Machine – VM) و پردازنده مجازی (Virtual CPU – vCPU) مشخص شود. ماشین مجازی شامل یک یا تعداد بیشتری پردازنده مجازی است. این مفهوم در تصویر زیر نشان دادهشده است:
تمییز میان VM و vCPU زمانی مهم میشود که به موضوعات دیگری در این سری از پستها برسیم. برای مثال یک صفحه (page) از حافظه را میتوان به یک ماشین مجازی تخصیص داد و از این طریق برای تمامی پردازندههای مجازی درون ماشین مجازی در دسترس خواهد بود. هرچند یک وقفه مجازی که در یک پردازنده مجازی هدفگذاری شده، تنها به همان پردازنده مجازی میرود.
پایان قسمت اول
مطالب مرتبط:
بررسی مقاله: Unikernels: The Next Stage of Linux’s Dominance
بررسی مقاله: My VM is Lighter (and Safer) than your Container – ویدیو
دیدگاهتان را بنویسید