توسعه دهندگان پروژه NetBSD
NVMM شامل یک درایور است که در سطح هسته سیستم اجرا می شود و دسترسی به مکانیزم های مجازی سازی سخت افزار را هماهنگ می کند و یک پشته Libnvmm که در فضای کاربر اجرا می شود. تعامل بین اجزای هسته و فضای کاربر از طریق IOCTL انجام می شود. یکی از ویژگی های NVMM که آن را از هایپروایزرهایی مانند KVM متمایز می کند
با این حال، Libnvmm خود شامل توابع شبیه ساز نیست، بلکه فقط یک API ارائه می دهد که به شما امکان می دهد پشتیبانی NVMM را در شبیه سازهای موجود، به عنوان مثال، QEMU ادغام کنید. API عملکردهایی مانند ایجاد و راه اندازی یک ماشین مجازی، تخصیص حافظه به سیستم مهمان و تخصیص VCPU را پوشش می دهد. برای بهبود امنیت و کاهش بردارهای حمله احتمالی، libnvmm تنها توابعی را ارائه میکند که صریحاً درخواست شدهاند—بهطور پیشفرض، کنترلکنندههای پیچیده بهطور خودکار فراخوانی نمیشوند و اگر بتوان از آنها اجتناب کرد، ممکن است اصلاً استفاده نشوند. NVMM سعی می کند همه چیز را ساده نگه دارد، بدون اینکه خیلی پیچیده شود، و به شما این امکان را می دهد که تا آنجا که ممکن است بسیاری از جنبه های کار خود را کنترل کنید.
بخش سطح هسته NVMM کاملاً با هسته NetBSD ادغام شده است و با کاهش تعداد سوئیچ های متنی بین سیستم عامل مهمان و محیط میزبان امکان بهبود عملکرد را فراهم می کند. در سمت فضای کاربر، libnvmm تلاش میکند تا عملیات مشترک ورودی/خروجی را جمعآوری کند و از برقراری تماسهای غیرضروری سیستمی خودداری کند. سیستم تخصیص حافظه مبتنی بر زیرسیستم pmap است که به شما امکان می دهد در صورت کمبود حافظه در سیستم، صفحات حافظه مهمان را به پارتیشن swap خارج کنید. NVMM بدون قفل جهانی و مقیاس است و به شما این امکان را می دهد که به طور همزمان از هسته های مختلف CPU برای اجرای ماشین های مجازی مهمان مختلف استفاده کنید.
یک راه حل مبتنی بر QEMU تهیه شده است که از NVMM برای فعال کردن مکانیسم های مجازی سازی سخت افزار استفاده می کند. کار برای گنجاندن پچ های آماده شده در ساختار اصلی QEMU در حال انجام است. ترکیب QEMU+NVMM قبلاً وجود دارد
منبع: opennet.ru