یونیکرنل

یونیکرنل (به انگلیسی: unikernel) یک برنامهٔ رایانه‌ای است که به طور  با کد سیستم‌عاملی که به آن وابسته است، پیوند داده شده‌است. یونیکرنل‌ها با یک کامپایلر تخصصی ساخته می‌شوند که سرویس‌های سیستم‌عاملی را که یک برنامه استفاده می‌کند را شناسایی می‌کند و آن را با یک یا چند کتابخانهٔ سیستم‌عامل که آن‌ها را ارائه می‌دهد پیوند می‌دهد. چنین برنامه‌ای به هیچ سیستم‌عامل جداگانه‌ای احتیاج ندارد و به‌جای آن می‌تواند به عنوان یک مهمان برای هایپروایزر اجرا شود.

معماری یونیکرنل براساس مفهومی که توسط اگزوکرنل و نمسیس در اواخر دهه ۱۹۹۰ توسعه پیدا کردند، ساخته شده‌است.

یک توسعه‌دهنده، یک مجموعه از حداقل تعداد کتابخانه‌هایی را که با ساختارهای سیستم‌عامل مورد نیاز برای اجرای برنامه مطابقت دارد را از یک پشته مدولار انتخاب می‌کند. سپس این کتابخانه‌ها، با برنامه کاربردی و کد پیکربندی برای ساخت تصاویر مهر و موم شده و با هدف ثابت (یونیکرنل‌ها) که مستقیماً روی یک هایپروایزر یا سخت‌افزار بدون مداخله سیستم‌عامل‌هایی مانند لینوکس یا ویندوز اجرا می‌شوند، کامپایل می‌شوند.

طرح 
در یک سیستم‌عامل کتابخانه، مرزهای حفاظتی به پایین‌ترین لایه‌های سخت‌افزاری کشیده می‌شوند و بر موارد زیر اثر می‌گذارند:

 مجموعه‌ای از کتابخانه‌ها که مکانیسم‌هایی مانند موارد مورد نیاز برای راه‌اندازی سخت‌افزار یا گفتگوی پروتکل‌های شبکه را اجرا می‌کنند.
 مجموعه ای از سیاست‌ها که کنترل دسترسی و انزوا (isolation) را در لایه‌های برنامه اعمال می‌کنند.

معماری سیستم‌عامل کتابخانه دارای مزایا و معایب متعددی در مقایسه با طرح‌های سیستم‌عامل‌های معمولی است. یکی از مزیت‌ها این است که از آنجایی که تنها یک فضای آدرس وجود دارد، برای انتقال داده‌ها بین فضای‌کاربر و فضای هسته، نیازی به انتقال پی‌درپی دسترسی نیست. بنابراین، یک سیستم‌عامل کتابخانه‌ای می‌تواند با دسترسی دادن مستقیم به سخت‌افزار، بدون نیاز به انتقال بین حالت کاربر و حالت هسته، عملکرد بهتری را فراهم سازد (در یک هسته مرسوم، این انتقال شامل یک دستورالعمل TRAP است و مانند تغییر زمینه  نیست). دستاوردهایی که در عملکرد بدست می‌آید، ممکن است با از بین بردن نیاز به کپی داده‌ها بین فضای کاربر و فضای هسته محقق شود، اگرچه این امر با درایورهای دستگاه بدون کپی در سیستم‌عامل‌های مرسوم نیز امکان پذیر است.

در کنار این‌ها، یکی از معایب این است که چون جدایی وجود ندارد، تلاش برای اجرای چندین برنامه در کنار هم، در یک سیستم‌عامل کتابخانه، همراه‌با جداسازی منابع قوی، می‌تواند پیچیده شود. علاوه بر این، درایورهای دستگاه برای سخت‌افزار خاصی که سیستم‌عامل کتابخانه روی آن اجرا می‌شود مورد نیاز است. از آنجایی که سخت‌افزار به سرعت در حال تغییر است، بار درایورها به طور منظم بازنویسی می‌شوند تا به‌روز بمانند.

مجازی‌سازی سیستم‌عامل می‌تواند بر برخی از این اشکالات بر روی سخت افزار کالا غلبه کند. یک هایپروایزر مدرن، ماشین‌های‌مجازی همراه با زمان CPU و دستگاه‌های‌مجازی به شدت ایزوله‌شده را فراهم می‌کند. یک سیستم‌عامل کتابخانه‌ای که به‌عنوان یک ماشین مجازی اجرا می‌شود، فقط نیاز به پیاده‌سازی درایورهای این دستگاه‌های سخت‌افزار مجازی پایدار دارد و می‌تواند برای هدایت سخت‌افزار فیزیکی واقعی به هایپروایزر وابسته باشد. با این حال، کتابخانه‌های پروتکل هنوز برای جایگزینی خدمات یک سیستم‌عامل مرسوم مورد نیاز هستند. ایجاد این کتابخانه‌های پروتکل، جایی است که بخش عمده کار در پیاده‌سازی یک سیستم‌عامل کتابخانه مدرن در آن نهفته‌است. علاوه بر این، اتکا به یک هایپروایزر ممکن است باعث ایجاد دوباره سربار در عملکرد هنگام جابجایی بین یونیکرنل و هایپروایزر و همچنین هنگام انتقال داده‌ها بین دستگاه‌های مجازی هایپروایزر شود.

با کاهش مقدار کد استقرار یافته، یونیکرنل‌ها قطعا سطح حمله احتمالی را کاهش می‌دهند و درنتیجه ویژگی‌های امنیتی را بهبود می‌بخشند.

یک سرویس گیرنده پیام‌رسانی مبتنی بر یونیکرنل، حدود ۴ درصد حجم کد پایه معادل با استفاده از لینوکس را دارد.

همچنین، با توجه به ماهیت ساخت آنها، می‌توان بهینه سازی کل سیستم را در درایورهای‌دستگاه و منطق برنامه انجام داد و در نتیجه تخصص را بهبود بخشید. به عنوان مثال، برنامه‌های کاربردی مانند Nginx، SQLite و Redis که بر روی یک یونیکرنل اجرا می‌شوند، بهبود عملکرد ۱٫۷ تا ۲٫۷ برابری را نشان داده‌اند.

به طور مکرر نشان داده شده‌است که یونیکرل‌ها در زمان پاسخگویی به درخواست‌های دریافتی، قبل از اتمام زمان درخواست‌ها، بسیار سریع راه‌اندازی می‌شوند.

یونیکرنل‌ها خود را در ایجاد سیستم‌هایی که از معماری‌های نرم‌افزاری سرویس‌گرا یا میکروسرویس پیروی می‌کنند، مشارکت می‌دهند.

درجه بالای تخصص به این معنی است که یونیکرنل‌ها برای آن نوع محاسبات عمومی و چند کاربره ای که سیستم‌عامل‌های مروسوم برای آن استفاده می‌شوند، مناسب نیستند. افزودن عملکرد اضافی یا تغییر یک یونیکرنل کامپایل شده به طور کلی امکان پذیر نیست. درواقع رویکرد، کامپایل و استقرار یک یونیکرنل جدید با تغییرات مورد نظر است.

پاورقی‌ها

جستارهای وابسته 

 ریز هسته
 مجازی‌سازی سطح سیستم‌عامل

پیوندهای خارجی 

 History and business model; coverage of IncludeOS. (LWN.net)

منابع 

هسته‌های سیستم‌عامل