کرنل مهمترین برنامه یک سیستم عامل است. سیستم عامل اولیه یک رایانه به نام سیستم عامل میزبان شناخته میشود. روی این سیستم عامل میزبان میتوان سیستمهای دیگری را نیز اجرا کرد که در ادامه مقاله این وضعیت را توضیح میدهیم. این سیستمهای عامل اضافی به نام سیستم عامل میهمان شناخته میشوند.
کرنل را میتوان به مثابه پلی تصور کرد که اپلیکیشنهای نرمافزاری یک سیستم رایانهای را با پردازش دادهها روی سختافزار متصل میسازد.
اهمیت کرنل از این واقعیت ناشی میشود که در حیطه خاصی از حافظه که به خودش اختصاص داده قرار دارد. از این رو کرنل یک ناحیه اختصاصی از حافظه RAM را در اختیار دارد. این ناحیه از دیگر اپلیکیشنها جدا است. ماهیت طراحی کرنل به اپلیکیشنهای کاربر اجازه نمیدهد که کرنل سیستم عامل را دستکاری کرده یا خللی در آن وارد کنند.
زمانی که یک رایانه بوت میشود، کرنل یکی از نخستین برنامههای رایانه است که باید در سیستم رایانه بارگذاری شود. به علاوه کرنل تا زمانی که سیستم رایانهای خاموش شود، در حافظه باقی میماند.
کرنل در مرکز سیستم رایانهای و بین واحد پردازش مرکزی (CPU)، حافظه، سختافزار و اپلیکیشنهای کاربر قرار دارد.
کرنل ارتباط بین قطعههای سختافزاری مانند ماوس، صفحهکلید، نمایشگر، و پرینترها را برقرار میسازد. کرنل همچنین به تبدیل دستورالعملها برای CPU میپردازد. بدین ترتیب وظایف سطح پایین را به طرز مؤثری اجرا میکند.
دقت کنید که CPU دستورها را با تجزیه آنها به دستورهای فرعی اجرا میکند. CPU را میتوان به مثابه مغز رایانه تصور کرد.
نکته کلیدی که از روی نمودار فوق میتوان درک کرد این است که کرنل مسئول مدیریت حافظه در اپلیکیشنها است. این بخش اپلیکیشنها را راهاندازی کرده و در حافظه بارگذاری میکند و متعاقباً مسئولیت نگهداری از پردازشها را نیز بر عهده دارد.
مقدمه کوتاهی در مورد Hypervisor
کرنلها دسترسی نامحدودی دارند، در حالی که اپلیکیشنهای کاربر باید به از طریق پردازشهای دیگر به سختافزار دسترسی داشته باشند. یکی از این پردازشهای کلیدی به نام Hypervisor شناخته میشود. Hypervisor بین اپلیکیشنهای سیستم رایانهای و سختافزار فیزیکی قرار میگیرد. در نتیجه اگر اپلیکیشنی بخواهد با یک CPU تعامل داشته باشد، باید از سیستم عامل و سپس از Hypervisor عبور کند. در این طراحی چند مشکل پدید میآید که نیازمند توجه هستند. این موارد در ادامه ارائه شدهاند.
این طراحی چندلایه میتواند روی تجربه کاربری تأثیر منفی بگذارد. بدین ترتیب ما نمیتوانیم دو سیستم عامل میزبان را به طور همزمان روی یک سیستم سختافزاری اجرا کنیم. به علاوه یک اپلیکیشن میتواند موجب وقفه یا خللی در اپلیکیشنهای دیگر شود. راهاندازی زیرساخت سیستم سختافزاری زمانبر و پرهزینه است.
برای حل این مشکل و ایجاد صرفه جویی زمانی، بهبود قابلیت نگهداری، مقیاسپذیری، بهبود بیشتر تجربه کاربری و کاهش زمان عرضه یک اپلیکیشن، کانتینرها مطرح شدند. ما تا به این جا مشغول توضیح موارد مقدماتی جهت درک طرز کار کانتینرها و مزیتهایی که ارائه میکنند بودیم. پیش از آن که اندکی جلوتر برویم و کانتینرها را بهتر معرفی کنیم، باید درکی از یک مفهوم مهم دیگر به نام ماشین مجازی نیز داشته باشیم.
ماشینهای مجازی (VM)
ماشینهای مجازی اپلیکیشنهای نرمافزاری را از سختافزار یک سیستم رایانه جدا میسازند. ما میتوانیم یک سیستم رایانهای را با افزایش ماشین مجازی کلون کنیم. ماشین مجازی یک لایه انتزاع میسازد و پیچیدگیهای زیرساختی تشکیلدهنده اجزای سختافزاری را از دید پنهان نگاه میدارد. ماشینهای مجازی میتوانند برای بهرهبرداری از سیستمهای سختافزاری فیزیکی استفاده شوند. ماشین مجازی بیش از یک دهه است که به طور گستردهای در صنعت سختافزارهای محاسباتی مورد استفاده قرار میگیرد. به این ترتیب یک پردازش hypervisor ماشینهای مجازی را اجرا میکند.
یک ماشین مجازی اقدام به ساخت یک سیستم سختافزاری مجازی میکند.
ما میتوانیم یک ماشین مجازی را روی یک سیستم عامل مایکروسافت ویندوز اجرا کنیم و یک سیستم عامل لینوکس را روی آن نصب نماییم. بدین ترتیب انعطافپذیری زیادی در اختیار کاربران IT قرار میگیرد.
ماشین مجازی را میتوان نسخهای از سیستم عامل دانست
سیستمهای عامل میهمان همگی روی یک سیستم عامل میزبان نصب میشوند. هر سیستم عامل میهمان درون یک ماشین مجازی مجزا راهاندازی میشود.
نصب، توزیع و تکرار یک ماشین مجازی ارزانتر از خرید یک مجموعه کامل از زیرساختها است. بدین ترتیب میتوان یک اپلیکیشن خاص را روی یک ماشین مجازی نصب کرد. این فرایند نیازمند یک سیستم عامل مجزا (که سیستم عامل میزبان نامیده میشود) است تا بتوانیم اپلیکیشنها را روی یک ماشین مجازی اجرا کنیم.
در نتیجه ماشینهای مجازی سیستم عامل میهمان خاص خود را دارند که شامل کرنل، درایورها، و فایلهای باینری اپلیکیشنها هستند. متعاقباً ماشین مجازی روی یک hypervisor عمل میکند که آن نیز به نوبه خود روی سیستم عامل میهمان اجرا میشود. در نتیجه اگر یک اپلیکیشن بخواهد با یک CPU تعامل داشته باشد، باید از سد سیستم عامل و سپس hypervisor عبور کند.
گذر از hypervisor و سیستم عامل میزبان میتواند تأثیر منفی روی تجربه کاربری داشته باشد.
ماشینهای مجازی مشکلاتی را نیز دارند چون نه تنها نیازمند حافظه سنگینی هستند؛ بلکه مشکل تکراری بودن اپلیکیشنهای باینری بین ماشینهای مجازی مختلف نیز وجود دارد. به علاوه در این وضعیت زمان بیشتری برای بوت شدن یک ماشین مجازی مورد نیاز است.
سناریوی اول
تصور کنید میخواهید دو ماشین مجازی را درون سیستم عامل ویندوز اجرا کنید. به علاوه قصد دارید کد سرور (سرویسها) را روی یک ماشین مجازی و کد کلاینت (رابط کاربری) اپلیکیشن خود را روی ماشین مجازی دیگر میزبانی کنید. در این حالت ممکن است بخواهید یک ماشین مجازی را با سیستم عامل ویندوز آمادهسازی کنید و سپس آن را کلون کنید. واقعیت این است که شما اینک یک ماشین مجازی را کلون کردهاید که موجب ایجاد نسخههای تکراری از سیستم عامل و کتابخانهها میشود. همچنین بدین معنی است که درایورهایی که نیاز داریم در هر دو سیستم عامل اجرا میشوند. از این رو هر دو ماشین مجازی به نوبه خود فضای زیادی از حافظه را مصرف میکنند. متعاقباً میتوانید چندین ماشین مجازی را روی سرور فیزیکی اجرا کند.
ماشینهای مجازی برنامههای رایانهای سنگینی هستند. آنها نیازمند بخش زیادی از حافظه سرور هستند و علاوه بر آن چند ماشین مجازی میتوانند به طور همزمان روی یک سیستم رایانهای اجرا شوند.
نیاز به حل مشکل زمان بوت شدن ماشین مجازی، نصب، عملکرد، نگهداری و ایجاد نسخه تکراری از آن موجب شد که تکنیک جدیدی که به نام کانتینرسازی (containerisation) معروف شده، مطرح شود.