درود به همراهان می مارکت. امروز با یک موضوع خیلی جذاب در خدمت شما هستم. همه چیز درباره هسته در سیستم عامل. جالب به نظر میرسه نه؟ پس بیاین در موردش بحث کنیم.
هسته یا همون Kernel چیه؟
کرنل یک برنامه کامپیوتری هست که به عنوان قلب و هسته یک سیستم عامل محسوب میشه. به طور ساده سیستم عملیاتی کنترل سیستم عامل رو برعهده داره و هسته یا کرنل بر کل سیستم (عملیاتی) کنترل داره. یعنی اگر رابط کاربری شما اندروید هست و سیستم عامل اندروید اون رو کنترل میکنه، کرنل یا هسته سیستم عامل اندروید رو کنترل میکنه. این مهمترین قسمت سیستم عامل هست. هرجایی که سیستم شروع به کار کنه، اولین برنامهای که بعد از بوت لودر برای راه اندازی بقیه سیستم شروع به کار میکنه کرنل هست تا بعد از اون بقیه سیستم شروع به کار کنه. کرنل توی حافظه تا زمان خاموش شدن سیستم عامل باقی میمونه. به عکس زیر یه نگاه بندازید تا بهتر متوجه عملکرد اون توی سیستم بشید.
کرنل مسئولیت وظایف سطح اولیه سیستم مثل مدیریت دیسک، مدیریت رم و حافظه، مدیریت کارها و … رو بر عهده داره. این یک رابط بین کاربر و اجزای سخت افزاری سیستمه. زمانی که یک فرایندی درخواست خودشو به کرنل میده بهش میگن درخواست سیستم یا System Call. کرنل با یک فضای محافظت شده ارائه میشه که یک منطقه جداگونه از حافظه هست و توسط کاربر و برنامهها قابل دسترسی نیست. حالا یه سری که گوشیشون روت میکنن و با یه سری نرمافزارها کارهای غیر معمول انجام میدن توسط همین سطح کنترل هم هست. بنابراین کرنل داخل این فضای محافظت شده قرار داده میشه. جدا از اون، حافظه ای که توسط اپلیکیشنها استفاده میشه به عنوان حافظه کاربر تلقی میشه. ازاونجایی که اینا دو فضای مستقل در حافظه هستن پس ارتباط بین اونا یکم کند تره.
توابع کرنل یا هسته
دسترسی به منابع رایانه یا موبایل: یک کرنل میتونه به منابع مختلف کامپیوتر مثل پردازنده، دستگاههای ورودی و خروجی، و بقیه منابع دسترسی داشته باشه. کرنل در واقع مثل یک پل بین کاربر و منابع سیستم میمونه.
مدیریت منابع: وظیفه کرنل اینکه منابع رو بین پردازشهای مختلف تقسیم کنه و راهی برای دسترسی یکنواخت به منابع در هر فرآیند ایجاد کنه.
مدیریت حافظه: هر فرآیندی به مقداری فضای اختصاصی یا همون حافظه نیاز داره. بنابراین، یه مقدار حافظه باید بهش اختصاص داده بشه و بعدا برداشته بشه و تمام این مدیریت حافظ توسط یک کرنل یا هسته انجام میشه.
مدیریت دستگاهها: دستگاههای جانبی که به سیستم وصل میشن توسط این فرآیند مدیریت میشن. بنابراین تخصیص دستگاهها توسط هسته مدیریت میشه.
حالت کرنل و حالت کاربر
دستورالعملهای خاصی وجود دارن که فقط باید توسط هسته اجرا بشن. پس، مثلا دستورالعملهای سی پی یو فقط در حالت کرنل یا هسته اجرا میشن و نرمافزارهای عادی نمیتونن به اون دسترسی داشته باشن. مثلا، مدیریت حافظه فقط توی حالت کرنل باید انجام بشه. درحالیکه در حالت کاربر، پردازنده پردازشهایی که توسط کاربر در فضای کاربر داده میشه رو اجرا میکنه. پیچیده شد؟
ساده تر بگم: کرنل تعیین میکنه که چه مقدار از سی پی یو در دسترس سیستم عامل، یا یک نرم افزار خاص باشه. بعد شما با استفاده از اون نرم افزار میتونید اون مصرف رو کنترل کنید مثلا به شما 10 تومن میدن، شما میتونید از 1 تا 10 هرچقدر میخواید استفاده کنید. حالا یه نرم افزار ادیت عکس روی گوشی داریم. کرنل به 50 درصد پردازنده اجازه میده در اختیار این نرمافزار باشه، اگر شما عکس سنگین ادیت کنید میتونه حداکثر استفاده در حالت کاربر ببره.
هسته یکپارچه Monolithic Kernel
هستههای یکپارچه اونایی هستن که خدمات کاربر و خدمات هسته رو در همان فضای حافظه اجرا میکنن. یعنی، حافظههای مختلف برای خدمات کاربر و سرویسهای هسته در این مورد نیست. با این کار، اندازه هسته افزایش پیدا میکنه و باعث افزایش حجم سیستم عامل میشه. از اونجا که فضای کاربری و فضای هسته جداگانه وجود نداره، بنابراین روند کار در هستههای یکپارچه سریعتر میشه.
مثل:
یونیکس، لینوکس و ….
مزایا:
- این باعث زمان بندی CPU، زمانبندی حافظه، مدیریت سیستم از طریق درخواستهای سیستم میشه.
- اجرای فرآیندها سریعتره چون حافظه جداگونه ای بین کاربر و هسته وجود نداره.
معایب:
- اگر هر سرویسی به مشکل بخوره، منجر به هنگ کردن و خرابی کل سیستم میشه.
- اگر قراره سرویس جدیدی اضافه بشه، کل سیستم عامل باید اصطلاح بشه.
ریزهسته MicroKernel
میکروکرنل با هسته یکپارچه متفاوته چون در میکروکرنل، خدمات کاربر و سرویسهای هسته در فضاهای مختلف پیاده سازی میشن، یعنی، ما از فضای کاربر و فضای کرنل در میکروکرنل استفاده میکنیم. از اونجا که ما از فضای کرنل استفاده میکنیم، حجم کرنل و حجم سیستمعامل کاهش پیدا میکنه.
مثلا:
L4، AmigaOS، Match و ….
مزایا:
- سرویسهای جدید در صورت نیاز به سادگی میتونن اضافه بشن.
معایب:
- ازونجایی که ما از فضای کاربر و فضای کرنل به صورت جداگانه استفاده میکنیم، به طور کلی زمان ارتباط بین اینها میتونه افزایش پیدا کنه.
کرنل هیبریدی Hybrid Kernel
هیبرید کرنل یک ترکیب از هر دو هسته یکپارچه و ریز هسته هست. به این معنی که مثل هسته یکپارچه سریع، و مثل ریزهسته از حافظه جداگانه استفاده میکنه. هیبرید کرنلها همون میکرو کرنل هستن که کمی از کدهای غیرضروری در فضای کرنل دارن تا باعث اجرای سریعتر عملیات در فضای کاربر بشه. بنابراین برخی از سرویسها مثل شبکه یا فایلهای سیستم توی فضای کرنل اجرا میشن تا بار کاهش پیدا کنه اما بازم کدهای کرنل به عنوان سرور در فضای کاربر اجرا میشن که باعث افزایش سرعت عملکرد بشه.
مثلا:
- ویندوز، Netware، BeOS
مزایا:
- هر دو حالت هسته یکپارچه و ریزهسته رو ترکیب میکنه.
معایب:
- مشابه هسته یکپارچست.
اگزو کرنل Exo Kernel
اگزوکرنل یک هسته سیستمعامل هست که توسط MIT و گروه سیستمعاملهای توزیع شده توسعه یافته. نوع هسته به این شکله، منابع محافظت شده از مدیریت جدا شدن در عوض، این منجر میشه که ما بتونیم سفارشی سازی دلخواه برای برنامهها رو انجام بدیم. در اگزوکرنل قرار نیست بتونیم هر مفهومی (انتزاع) رو اجرا کنیم. اما ایده اینکه تا حد امکان فقط در صورت لزوم از اون استفاده کنیم. این تفاوت اصلی این نوع از کرنل با یکپارچه و میکروکرنل هست اما طراحی اگزوکرنل بسیار پیچیدست.
مثلا:
Nemesis، EXOS.
مزایا:
- کمترین میزان انتزاع سخت افزاری رو داره.
معایب:
- کار برای برنامه نویسان خیلی سخت تره.
نانو کرنل Nano Kernel
در این نوع هسته انتزاع سختافزاری وجود داره اما فاقد خدمات سیستمی هست. میکروکرنل هم خدمات سیستمی نداره و این دو مشابه هم هستن.
مثلا:
EROS
مزیا:
- امکان انتزاع سختافزاری بدون سرویسهای سیستمی.
معایب:
- تقریبا خیلی شبیه به میکروکرنل هست و به همین دلیل کمتر مورد استفاده قرار میگیره.
جمع بندی:
به طور کلی، تمام این هستهها و پیاده سازیها به دنبال یک چیز هستن، حالا بعضی از اونا انعطاف پذیری بیشتر و بعضی از اونا امینت رو افزایش میدن.
امیدوارم که این مقاله رو به خوبی درک کرده باشید.
سوالی داشتید توی کامنتها بپرسید.
منابع: گوگل، ویکی پدیا، انجمن شیائومی، سایت لینوکس، تحقیقات شخصی
این مقاله ممکنه شامل مواردی باشد که صحیح ترجمه نشدهاند.