ماشین مجازی چیست و چگونه کار میکند؟

در دنیای پرشتاب فناوری اطلاعات، نیاز به بهرهبرداری موثرتر از منابع سختافزاری و افزایش انعطافپذیری سیستمها، منجر به شکلگیری مفاهیمی نوین در زیرساختهای رایانشی شده است. یکی از این مفاهیم کلیدی، ماشین مجازی (Virtual Machine یا به اختصار VM) است؛ فناوری نسبتا جدیدی که بهطرز چشمگیری نحوه توسعه، استقرار و مدیریت نرمافزارها و سیستمها را دگرگون کرده است. در ادامه با ویژگیها و نحوه کار با ماشینهای مجازی بیشتر آشنا خواهید شد.
فهرست محتوا
ماشین مجازی چیست؟
ماشین مجازی (Virtual Machine یا VM) محیطی نرمافزاری است که عملکرد یک رایانه فیزیکی را شبیهسازی میکند. این محیط بهگونهای طراحی شده است که بتواند سیستمعامل و نرمافزارها را دقیقا مانند دستگاهی واقعی اجرا کند، در حالی که در واقع روی زیرساخت سختافزاری مشترکی (مانند یک سرور یا رایانه میزبان) قرار دارد. امروزه از ماشینهای مجازی در خدمات مجازیسازی شبکه استفادههای زیادی میشود.
ماشین مجازی توسط لایهای نرمافزاری به نام هایپروایزر (Hypervisor) مدیریت میشود. هایپروایزر مسئول ایجاد، مدیریت و اجرای ماشینهای مجازی روی سختافزار میزبان است. این لایه منابع فیزیکی سیستم مانند پردازنده (CPU)، حافظه (RAM)، فضای ذخیرهسازی (Storage) و کارت شبکه را بهصورت مجازی بین ماشینهای مختلف تقسیم میکند.
هر ماشین مجازی شامل اجزای زیر است:
- سیستمعامل مهمان (Guest OS): سیستمعاملی که داخل ماشین مجازی نصب و اجرا میشود. این سیستمعامل میتواند با سیستمعامل میزبان متفاوت باشد. مثلا میتوان ویندوز را در ماشین مجازی روی لینوکس یا macOS اجرا کرد.
- دیسک مجازی: فایلی در سیستمعامل میزبان که مانند هارد دیسک برای ماشین مجازی عمل میکند.
- درایورها و سختافزار مجازی: هایپروایزر سختافزار فیزیکی را به صورت مجازی در اختیار سیستمعامل مهمان قرار میدهد، مانند کارت گرافیک، کارت شبکه و غیره.
ماشین مجازی از دید سیستمعامل مهمان، رایانهای مستقل محسوب میشود. با چنین قابلیتی میتوان چندین ماشین مجازی را بهصورت همزمان روی یک رایانه اجرا کرد، بدون اینکه اختلالی در عملکرد یکدیگر ایجاد کنند.
فرض کنید شغل شما توسعهدهنده نرمافزار است و باید برنامهای را هم روی ویندوز و هم روی لینوکس تست کنید. بهجای خرید دو رایانه جداگانه، میتوانید روی سیستم خود دو ماشین مجازی نصب کنید، یکی با سیستمعامل ویندوز و دیگری با لینوکس. هر دو محیط کاملا مجزا هستند اما روی یک سختافزار مشترک اجرا میشوند. برای آشنایی کاملتر با این موضوع، خواندن مقالات مجازی سازی چیست؟ میتواند بسیار مفید باشد.

ماشین مجازی چگونه کار میکند؟
حال که با نقش اصلی هایپروایزر بهعنوان لایهای واسطه آشنا شدید، بهتر است انواع اصلی هایپروایزرها را نیز بشناسید تا نحوهی کار ماشینهای مجازی را بهتر درک کنید.
دو نوع اصلی هایپروایزر وجود دارد:
- هایپروایزر نوع اول (Type 1 – Bare Metal) مستقیما روی سختافزار نصب میشود و نیازی به سیستمعامل میزبان ندارد. این نوع هایپروایزر بیشتر در مراکز داده و سرورهای حرفهای استفاده میشود و کارایی بالاتری دارد. VMware ESXi، Microsoft Hyper-V، Xen از جمله هایپروایزرهای نوع اول هستند.
- هایپروایزر نوع دوم (Type 2 – Hosted) روی سیستمعامل میزبان (مثلا ویندوز یا لینوکس) نصب میشود. در این نوع، ماشینهای مجازی بهعنوان برنامههایی در سیستمعامل میزبان اجرا میشوند. VMware Workstation، Oracle VirtualBox از جمله هایپروایزرهای نوع دوم بهشمار میروند.
بیشتر بخوانید: هایپروایزر چیست؟
فرایند اجرای ماشین مجازی چگونه است؟
- اختصاص منابع فیزیکی بهصورت مجازی: هایپروایزر منابع سختافزاری (مانند CPU، RAM، دیسک، شبکه) را به ماشینهای مجازی بهصورت مجازی اختصاص میدهد. برای مثال اگر سیستمی ۱۶ گیگابایت رم داشته باشد، میتوان ۴ گیگابایت آن را به ماشین مجازی اختصاص داد.
- ایجاد محیط ایزولهشده: هر ماشین مجازی بهصورت ایزوله اجرا میشود؛ یعنی خطاها، ویروسها یا تغییرات در یکی از VMها روی سایر ماشینها یا سیستم میزبان تاثیری ندارد.
- اجرای سیستمعامل مهمان: پس از راهاندازی ماشین مجازی، سیستمعامل مهمان درون آن اجرا میشود، مانند راهاندازی یک کامپیوتر جدید. این سیستمعامل تصور میکند که روی سختافزاری واقعی و جداگانه نصب شده است.
- شبیهسازی سختافزار: هایپروایزر درایورهای مجازی ارائه میدهد که امکان برقراری ارتباط سیستمعامل مهمان با سختافزار میزبان را فراهم میکنند. مثلا اگر ماشین مجازی به اینترنت متصل شود، این اتصال از طریق کارت شبکه مجازی و سپس کارت شبکهی فیزیکی میزبان انجام میشود.
- مدیریت منابع در زمان واقعی: هایپروایزر همواره منابع را مدیریت میکند تا تداخلی بین ماشینها به وجود نیاید. همچنین در صورت نیاز، منابع میتوانند بین ماشینها بهصورت پویا تخصیص یابند.

انواع ماشین مجازی (VM)
ماشینهای مجازی بهطور کلی به دو دسته اصلی تقسیم میشوند:
ماشین مجازی سیستم (System Virtual Machine)
این نوع ماشین مجازی رایانهای کامل را بهصورت نرمافزاری شبیهسازی میکند. در واقع ماشین مجازی سیستم قادر است سیستمعامل جداگانهای را بهصورت کامل اجرا کند که گویی روی یک مجموعهی سختافزاری واقعی نصب شده است. کاربر میتواند هر سیستمعاملی را داخل آن نصب و اجرا کند، مثل ویندوز، لینوکس یا مکاواس، بدون اینکه به سیستمعامل میزبان آسیبی وارد شود.
این نوع ماشینها برای توسعه و تست نرمافزار، اجرای سیستمهای عامل مختلف بهصورت همزمان یا پیادهسازی زیرساختهای مجازی در دیتاسنترها کاربرد فراوان دارند. کنترل منابع، ایزوله بودن و قابلیت پشتیبانی از چند سیستمعامل بهصورت همزمان، از ویژگیهای مهم این نوع ماشین مجازی بهشمار میروند.
ماشین مجازی فرایندی (Process Virtual Machine)
ماشین مجازی فرایندی برای اجرای برنامه یا فرایندی خاص طراحی شده است و برخلاف نوع سیستم، به شبیهسازی کامل یک رایانه نیاز ندارد. این نوع ماشین مجازی اغلب در زمان اجرای برنامه ایجاد میشود و پس از پایان برنامه از بین میرود. مهمترین مثال در این دسته، ماشین مجازی جاوا (JVM) است که به برنامههای نوشتهشده با زبان Java اجازه میدهد روی هر پلتفرمی اجرا شوند، بدون اینکه به تغییری در کد منبع نیاز باشد.
این ویژگی باعث میشود نرمافزارهایی که بر بستر ماشینهای مجازی فرایندی اجرا میشوند، از استقلال پلتفرمی برخوردار باشند، یعنی یکبار نوشته شوند و همهجا اجرا شوند. چنین ماشینهایی معمولا برای زبانهای برنامهنویسی سطح بالا و محیطهای پورتابل مناسب هستند.
مزایا و معایب Virtual Machine
ماشینهای مجازی با وجود مزایای گستردهای که دارند، محدودیتهایی هم به همراه میآورند. در این بخش به بررسی دقیق مزایا و معایب آنها میپردازیم.
مزایای ماشین مجازی
- استفادهی بهینه از منابع سختافزاری
با استفاده از ماشین مجازی، میتوان چندین سیستمعامل را روی یک سختافزار اجرا کرد. این موضوع بهویژه در محیطهای سازمانی و مراکز داده باعث صرفهجویی در هزینههای تجهیزات و بهینهسازی مصرف منابع میشود. - ایزولهسازی محیطها
هر ماشین مجازی محیطی کاملا جداگانه دارد؛ بهطوری که خطاها، بدافزارها یا خرابیهای یک ماشین تاثیری بر ماشینهای دیگر یا سیستم میزبان ندارند. ایزولاسیون محیط ماشینهای مجازی، امنیت و پایداری سیستمها را افزایش میدهد. - قابلیت بازیابی سریع و انتقالپذیری
ماشینهای مجازی بهصورت فایلهایی قابل ذخیرهسازی هستند. چنین قابلیتی باعث میشود تا بتوان از آنها نسخه پشتیبان گرفت، آنها را منتقل کرد یا روی سیستم دیگری اجرا نمود. همین موضوع فرایند بازیابی در مواقع بحرانی را تسهیل میکند. - انعطافپذیری بالا در تست و توسعه
توسعهدهندگان میتوانند چندین نسخه از سیستمعامل یا نرمافزارهای مختلف را روی ماشینهای مجازی نصب کنند و بدون هیچ ریسکی، برنامهها را تست و ارزیابی نمایند. - صرفهجویی در هزینهها
با حذف نیاز به سختافزارهای متعدد و بهرهگیری از ماشینهای مجازی، هزینههای نگهداری، برق، فضا و تجهیزات کاهش پیدا میکند.
معایب ماشین مجازی
- افت نسبی عملکرد نسبت به سختافزار واقعی
از آنجا که ماشین مجازی منابع را بهصورت غیرمستقیم (از طریق هایپروایزر) استفاده میکند، معمولا عملکرد آن اندکی ضعیفتر از اجرای مستقیم برنامهها روی سختافزار فیزیکی است. این موضوع بهویژه در برنامههای سنگین یا حساس به تاخیر قابل مشاهده است. - مصرف بالای منابع در صورت استفاده همزمان از چند VM
اجرای چند ماشین مجازی بهطور همزمان میتواند فشار زیادی به CPU، حافظه و دیسک وارد کند. در سیستمهایی با منابع محدود، مصرف بیشازحد منابع ممکن است باعث کندی شدید عملکرد شود. - پیچیدگی در مدیریت و پیکربندی
در مقیاس بزرگ، مدیریت تعداد زیادی ماشین مجازی نیاز به ابزارهای تخصصی و نیروی فنی آگاه دارد. اشتباه در پیکربندی یا تخصیص منابع میتواند امنیت یا کارایی سیستم را تحتتاثیر قرار دهد. - نیاز به فضای ذخیرهسازی بیشتر
ماشینهای مجازی به فایلهایی با حجم نسبتا بالا نیاز دارند (مثلا فایل دیسک مجازی یا Snapshotها). بنابراین در سیستمهایی با فضای محدود، استفادهی گسترده از VMها میتواند چالشبرانگیز باشد.
مقایسه ماشین مجازی با کانتینر (Container)
با گسترش نیاز به توسعه و اجرای سریعتر و مقیاسپذیرتر نرمافزارها، فناوریهای مجازیسازی دچار تحول شدند. ماشین مجازی و کانتینر هر دو ابزارهایی برای جداسازی محیط اجرای نرمافزار هستند، اما در لایههای متفاوتی از سیستمعامل کار میکنند و تفاوتهای مهمی با یکدیگر دارند.

ساختار معماری
ماشین مجازی شامل سیستمعامل کاملی (سیستمعامل مهمان) به همراه برنامههای کاربردی است که توسط هایپروایزر روی سیستمعامل میزبان یا مستقیما روی سختافزار اجرا میشود. چنین فرایندی به ما نشان میدهد که هر ماشین مجازی تمام اجزای لازم برای اجرا را در خود دارد.
در مقابل، کانتینرها فقط شامل برنامه و وابستگیهای مستقیم آن هستند و همگی از هسته (Kernel) سیستمعامل میزبان بهصورت مشترک استفاده میکنند که باعث میشود کانتینرها سبکتر، سریعتر و کمحجمتر از ماشینهای مجازی باشند.
عملکرد و مصرف منابع
از آنجایی که ماشین مجازی باید کل سیستمعامل را شبیهسازی کند، راهاندازی و اجرای آنها به منابع بیشتری نیاز دارد و زمان بیشتری میبرد. کانتینرها با استفاده از اشتراکگذاری هستهی سیستمعامل، بسیار سریعتر اجرا میشوند و منابع کمتری مصرف میکنند.
سطح ایزولهسازی
ماشینهای مجازی سطح ایزولهسازی بالاتری دارند چون هر کدام سیستمعامل مستقلی دارند. این ویژگی برای اجرای نرمافزارهای با حساسیت بالا یا ناسازگار، امنیت بیشتری فراهم میکند.
کانتینرها از نظر ایزولهسازی ضعیفتر هستند چون همهی آنها روی یک هسته اجرا میشوند. با اینکه تکنولوژیهایی مانند namespaces و cgroups در لینوکس سطحی از ایزولاسیون فراهم میکنند، اما همچنان در مقایسه با VMها کمتر است.
زمان راهاندازی
راهاندازی یک ماشین مجازی ممکن است چند دقیقه زمان ببرد، بهویژه اگر سیستمعامل بخواهد بهطور کامل بوت شود، اما کانتینرها بلافاصله اجرا میشوند و در چند ثانیه یا کمتر آماده بهکار هستند.
کاربردها
ماشین مجازی بیشتر در مواردی استفاده میشود که نیاز به اجرای سیستمهای عامل متفاوت، امنیت بالا یا اجرای نرمافزارهای legacy وجود دارد. همچنین برای ایجاد محیطهای تست و توسعهی کاملا جداگانه بسیار مفید است.
کانتینرها بیشتر در توسعهی نرمافزارهای مدرن، میکروسرویسها، استقرار سریع در محیطهای ابری و DevOps کاربرد دارند. آنها گزینهای ایدهآل برای مقیاسپذیری بالا و استقرار سریع در سرورهای ابری بهشمار میروند.
تفاوت ماشین مجازی با سرور
در ظاهر ممکن است ماشین مجازی و سرور مفاهیم مشابهی به نظر برسند، چون هر دو برای اجرای سیستمعامل و نرمافزارها مورد استفاده قرار میگیرند. با این حال تفاوت آنها در لایههای زیرساختی و نحوهی عملکرد بسیار اساسی است. سرور بهطور سنتی به مجموعهی سختافزاری فیزیکی و مستقلی اطلاق میشود که منابعی مانند پردازنده، حافظه، فضای ذخیرهسازی و کارت شبکه دارد و برای ارائهی خدمات خاصی در شبکه نظیر میزبانی وب، دیتابیس یا فایلسرور مورد استفاده قرار میگیرد.
در مقابل، ماشین مجازی محیط نرمافزاری شبیهسازیشدهای است که روی سرور یا کامپیوتر میزبان اجرا میشود. ماشین مجازی خود بهتنهایی سختافزار نیست، بلکه با استفاده از منابع یک سرور فیزیکی (هایپروایزر) بهصورت مستقل رفتار میکند. این ماشین میتواند سیستمعامل مخصوص به خود را اجرا کند، بدون اینکه با دیگر ماشینها یا سیستمعامل میزبان تداخل داشته باشد. بهعبارت دیگر، ماشین مجازی یک مهمان روی سرور میزبان است که گمان میکند روی سختافزار اختصاصی خود در حال اجرا است.
یکی از تفاوتهای کلیدی دیگر این است که در سرور فیزیکی سنتی، معمولا سیستمعامل بهصورت مستقیم نصب میشود و تمامی منابع سرور را در اختیار دارد. اما در ساختار مجازیسازی، چندین ماشین مجازی میتوانند همزمان روی یک سرور واحد اجرا شوند، بهطوریکه منابع فیزیکی بین آنها بهصورت مجازی تقسیم میشود. چنین عملکردی باعث میشود بهرهوری از سختافزار افزایش یابد و بتوان انعطافپذیری و مقیاسپذیری بیشتری در زیرساخت ایجاد کرد.
سرور نوعی بستر فیزیکی اصلی محسوب میشود و ماشین مجازی، ساختاری نرمافزاری است که از آن استفاده میکند. سرور بدون ماشین مجازی هم میتواند به فعالیت خود ادامه دهد، اما ماشین مجازی بدون بستر فیزیکی (سرور یا رایانه میزبان)، امکان اجرا ندارد.
بیشتر بخوانید: مجازی سازی سرور چیست؟

معرفی بهترین نرمافزارهای ماشین مجازی
VMware Workstation / VMware ESXi
VMware یکی از پیشگامان حوزهی مجازیسازی است و محصولات مختلفی را برای کاربران خانگی و سازمانی ارائه میدهد. VMware Workstation مخصوص دسکتاپ بوده و برای توسعهدهندگان، تستکنندگان و کاربران حرفهای طراحی شده است. در مقابل، VMware ESXi هایپروایزر قدرتمندی برای سرورها است که امکان اجرای همزمان دهها یا صدها ماشین مجازی را روی یک سرور فیزیکی فراهم میکند. این پلتفرم بهدلیل پایداری، امنیت بالا و مدیریت پیشرفته منابع، در بسیاری از مراکز دادهی دنیا مورد استفاده قرار میگیرد. امروزه خدمات نصب ESXi توسط اکثر شرکتهای ارائهدهندهی خدمات اینترنت انجام میشود. در مورد مجازی سازی با VMware در مقاله Vmware چیست؟ اطلاعات کاملی را ارائه کردهایم.
VirtualBox
VirtualBox نرمافزار متنباز و رایگانی است که توسط Oracle توسعه داده شده و یکی از محبوبترین گزینهها در میان کاربران خانگی و توسعهدهندگان محسوب میشود. این نرمافزار قابلیت اجرای سیستمهای عامل مختلف بهصورت همزمان را دارد و روی ویندوز، لینوکس، مک و سولاریس نصب میشود. رابط کاربری ساده، افزونههای قابل نصب و پشتیبانی از ویژگیهایی مثل snapshot و اشتراکگذاری پوشهها، از مزایای اصلی آن بهشمار میروند.
Microsoft Hyper-V
Hyper-V فناوری مجازیسازی اختصاصی مایکروسافت است که در نسخههای حرفهای و سرور سیستمعامل ویندوز تعبیه شده است. این نرمافزار بیشتر در محیطهای سازمانی و دیتاسنترهای مبتنی بر ویندوز کاربرد دارد و با اکوسیستم مایکروسافت، مانند Active Directory و System Center، یکپارچگی بالایی دارد. Hyper-V بهصورت مستقیم با هستهی ویندوز تعامل دارد و عملکردی پایدار و قابل اطمینان ارائه میدهد.
KVM (Kernel-based Virtual Machine)
KVM فناوری مجازیسازی سطح پایین برای سیستمهای عامل لینوکسی است که بهصورت بومی در هستهی لینوکس تعبیه شده است. با استفاده از KVM، هر ماشین مجازی بهعنوان یک فرایند در لینوکس اجرا میشود و از قدرت سیستمعامل میزبان برای مدیریت حافظه، پردازش و دیسک استفاده میکند. KVM در محیطهای سازمانی، سرورهای ابری و زیرساختهای مجازیسازی با مقیاس بزرگ، بهویژه همراه با ابزارهایی مانند QEMU و libvirt، بسیار رایج است.
Parallels Desktop
Parallels نرمافزار مجازیسازی اختصاصی برای سیستمعامل macOS است که به کاربران مک اجازه میدهد سیستمهای عاملی مانند ویندوز، لینوکس یا نسخههای دیگر مک را در کنار سیستمعامل اصلی خود اجرا کنند. این نرمافزار با تمرکز بر یکپارچگی و سهولت استفاده طراحی شده و امکان اجرای برنامههای ویندوزی را در محیط مک بهصورت یکپارچه و بدون نیاز به راهاندازی مجدد سیستم فراهم میکند.
آنچه در مورد ماشین مجازی بیان کردیم
ماشین مجازی یکی از مهمترین فناوریهای زیرساخت در دنیای امروز است که به کاربران کمک میکند تا چندین سیستمعامل و برنامه را روی یک مجموعهی سختافزاری اجرا کنند، بدون اینکه نیازی به خرید و نگهداری سرورهای متعدد باشد. این فناوری با استفاده از نرمافزارهایی مانند VMware، VirtualBox، Hyper-V و KVM، بهویژه در حوزههای توسعه نرمافزار، تست و اجرای چندین سیستمعامل بهطور همزمان و محیطهای ابری کاربرد فراوانی دارد.
با وجود مزایای متعدد ماشینهای مجازی مانند ایزولهسازی، صرفهجویی در منابع و انعطافپذیری بالا، محدودیتهایی نظیر کاهش عملکرد نسبت به سرورهای فیزیکی، مصرف بیشتر منابع و پیچیدگیهای مدیریتی نیز وجود دارند. بهطور کلی، انتخاب بین VM و سایر تکنولوژیهای مجازیسازی مانند کانتینرها، بستگی به نیازهای خاص پروژه، مقیاسپذیری، امنیت و منابع موجود دارد.