از صفر تا صد هسته (کرنل)؛ مغز فرماندهی سیستمعامل
تصور کنید کامپیوترتان مانند شهری پیشرفته است و برنامهها، شهروندانی هستند که هرکدام وظایف مشخصی دارند: یکی فیلم پخش میکند، یکی آهنگ مینوازد، یکی در حال دانلود است و دیگری در حال ذخیرهسازی داده.
اما چه کسی این شهر را اداره میکند؟ چه نهادی مسئول برقراری نظم است، منابع را تخصیص میدهد و حواسش جمع است که هیچ شهروندی از حد خود فراتر نرود یا کار دیگری را مختل نکند؟ پاسخ این پرسش در قلب تپندهی سیستم نهفته است: هستهی سیستمعامل یا کرنل.
در این مقاله، سفری خواهیم داشت به درون این ساختار کلیدی تا ببینیم هسته دقیقاً چیست، چگونه کار میکند و چرا درک آن برای هر علاقهمند به دنیای فناوری حیاتی است.
هسته (Kernel) چیست؟
هسته یا کرنل، قلب تپندهی سیستمعامل است؛ یا بهطور دقیقتر، مغز متفکر پشت پردهای است که بدون آن هیچ برنامهای اجرا نمیشود و هیچ ارتباطی بین سختافزار و نرمافزار برقرار نمیگردد. اگر سیستمعامل را یک ارکستر تصور کنیم، هسته، رهبر ارکستر است که وظیفهی هماهنگسازی تمام اجزا را برعهده دارد.
هسته مسئول فراهمسازی خدمات پایهای و حیاتی برای سایر اجزای سیستمعامل است؛ خدماتی که اجرای برنامهها، دسترسی به حافظه، ارتباط بین فرایندها و مدیریت منابع سختافزاری را ممکن میسازند.
یکی از مهمترین ویژگیهای هسته این است که در حالت خاصی از پردازنده اجرا میشود که به آن «حالت هسته» (Kernel Mode) میگویند. این حالت امکان دسترسی کامل به تمام منابع سیستم را فراهم میکند؛ چیزی که در حالت عادی برای برنامههای کاربر مجاز نیست.
البته حواستان باشد که هسته را با بایوس (BIOS) اشتباه نگیرید. بایوس یک برنامهی مستقل است که روی یک تراشه در برد مدار کامپیوتر ذخیره شده و قبل از بارگذاری سیستمعامل، سختافزار را راهاندازی و مدیریت میکند. بهعبارت دیگر، بایوس پیش از بارگذاری سیستمعامل و اجرای هسته وارد عمل میشود؛ درحالیکه هسته پس از بوت شدن، کنترل کامل سیستم را در دست میگیرد.
نقش اصلی هسته چیست؟
بهطور کلی، هستهی سیستمعامل سه وظیفهی کلیدی برعهده دارد. اولین وظیفه، فراهم کردن رابطهای لازم برای برقراری ارتباط میان کاربران و نرمافزارها با سختافزار کامپیوتر است. وظیفهی دوم، راهاندازی و مدیریت اجرای نرمافزارهاست. سومین مسئولیت اصلی هسته، شامل مدیریت سختافزار سیستم و منابع آن میشود.
برای انجام وظایف یاد شده، هسته باید مجموعهای از توابع سیستمی را مدیریت کند. این مدیریت، از بخشهای کماهمیت مانند درایورهای سختافزار شروع میشود و تا بخشهایی با اولویت زیاد مانند رابط کاربری ادامه دارد.
در کنار مدیریت اولویتدار بخشهای مختلف، هسته همچنین فرایندهای ایجادشده توسط نرمافزارها را سازماندهی میکند. سختافزار کامپیوتر تنها میتواند یک کار را در لحظه انجام دهد، اما سیستمعامل و نرمافزارهای اجرا شده ممکن است دهها و حتی صدها پردازش ایجاد کنند که نیاز به منابع سختافزاری دارند. بنابراین، هسته زمانبندی اجرای برنامهها را تعیین میکند و نظارت دارد که هر نرمافزار فقط در زمان اختصاصیافته از منابعی که در اختیار دارد، به درستی استفاده کند.
یکی از دیگر وظایف مهم هسته، تخصیص فضای حافظه به فرایندهای مختلف است. علاوهبر تخصیص، هسته باید از بروز تداخلها یا خطاهای در حافظهی مربوط به هر فرایند جلوگیری کند. همچنین، هسته مدیریت منابع سختافزاری مانند پردازندهی مرکزی (CPU)، حافظهی کش، فایلسیستم و مکانیزمهای ارتباطی شبکه را نیز زیر نظر میگیرد.
سیستمعامل هم حافظه را به هر برنامه اختصاص میدهد و هم امنیت حافظهی اختصاص داده شده را تامین میکند
سیستمعاملهای مدرن (مانند ویندوز یا مکاواس) از حافظه مجازی پشتیبانی میکنند. به این منظور، فضایی وسیع را در اختیار برنامه قرار میدهند. از دید هر برنامه، فضایی بسیار زیادی از رم برای استفاده وجود دارد، اما از دید سیستمعامل (و هسته)، فضای محدود رم باید بین برنامهها طوری تقسیم شود که هر کدام از فضای دیگری مطلع نباشند. این ترفند، علاوه بر ایجاد امنیت برای دادههای هر برنامه، توسعهی نرمافزار را آسانتر میکند، زیرا برنامهنویس نگرانی اختصاص و مدیریت حافظه را ندارد.
در کنار وظایف یاد شده، هسته مسئول کنترل و مدیریت ورودی و خروجی (I/O) از دستگاههایی مانند صفحهی کلید، ماوس، درایوهای ذخیرهسازی، درگاههای USB، کارتهای شبکه، چاپگر و نمایشگر است. پردازش درخواستهای سختافزاری و نرمافزاری نیز از طریق هسته انجام میشود که برای این کار از مکانیزمهایی مانند وقفههای سختافزاری (Interrupts) و درایورهای مخصوص استفاده میکند.
هسته تمامی تعاملات میان نرمافزارها و سختافزار را مدیریت میکند
بهدلیل محدودیت منابع، امکان اجرای همزمان تمامی این فرایندها وجود ندارد. در اینجا هسته، نقش اصلی را ایفا و مشخص میکند که کدام فرایند و در چه زمانی به منابعی مانند پردازنده یا حافظه دسترسی داشته باشد.
فضای حفاظت شده هسته کجاست؟
هسته نقش حیاتی در عملکرد یک کامپیوتر دارد و به همین دلیل، فضای حافظهای که هسته در آن بارگذاری میشود، بهصورت محافظتشده طراحی شده است تا از دسترسی یا تغییرات ناخواسته توسط سایر نرمافزارها جلوگیری شود. این حفاظت از طریق جداسازی فضاهای آدرسدهی توابع سیستمعامل پیادهسازی میشود که به آن فضای هسته گفته میشود.
اگر هسته به درستی بارگذاری نشود، کامپیوتر قادر به راهاندازی کامل نخواهد بود
فضاهای جدای آدرس، مانع از آن میشود که برنامههای دیگر، بهطور تصادفی یا عمدی، توابع هسته را بازنویسی کرده و باعث بروز مشکلات عملکردی، بیثباتی یا سایر پیامدهای نامطلوب شوند. در مقابل، سایر نرمافزارها و برنامههای اجرایی، در فضای عمومی از حافظه، موسوم به فضای کاربری، بارگذاری و اجرا میشوند.
هسته معمولاً در برابر پوسته (Shell) قرار میگیرد، که بهعنوان بخش بیرونی سیستمعامل شناخته میشود و امکان تعامل کاربران با سیستم را از طریق دستورات فراهم میکند. به بیانی تخصصیتر، پوسته همان رابط کاربری گرافیکی (GUI) است. اصطلاحات هسته و پوسته بیشتر در سیستمعاملهای مبتنی بر یونیکس (مانند لینوکس) به کار میروند و در سیستمهای مبتنی بر ویندوز و سرورهای آیبیام کمتر رایج هستند.
درایور سختافزار چیست؟
به طور کلی برقراری ارتباط با دستگاههای سختافزاری داخلی و خارجی کامپیوتر برعهدهی هسته است. اما طراحی یک سیستمعامل که بتواند مستقیماً با تمامی سختافزارهای موجود در بازار تعامل کند، غیر ممکن به نظر میرسد. به همین دلیل، هستهها به درایورهای هر سختافزار متکی هستند.
درایور مترجمی است که زبان سختافزار را به زبان سیستمعامل ترجمه میکند
درایورها، پشتیبانی از دستگاههای خاصی مانند چاپگرها و کارتهای گرافیک را به سیستمعامل اضافه میکنند. درایورهای سختافزاری همچنین به دو دسته کلی تقسیم میشوند:
- درایورهای حالت هسته: این درایورها بهطور مستقیم با سیستمعامل بارگذاری میشوند و معمولاً برای سختافزارهای اصلی مانند پردازنده و مادربورد استفاده میشوند.
- درایورهای حالت کاربری: این دسته شامل درایورهای جانبی است که برای دستگاههای اضافه شده توسط کاربر، مانند چاپگرها، کارتهای گرافیک، ماوسها، سیستمهای صوتی پیشرفته و سایر دستگاههای پلاگاندپلی (Plug and Play) استفاده میشوند.
هنگامی که یک سیستمعامل روی کامپیوتر نصب میشود، درایورهای موردنیاز برای سختافزارهای شناساییشده، همراه با آن نصب میشوند. این کار باعث میشود که سیستمعامل متناسب با سختافزار موجود تنظیم شده و به اندازهی کافی مؤلفههای لازم برای پشتیبانی از دستگاههای متصل را داشته باشد. اگر یک دستگاه جدید جایگزین سختافزار قبلی شود یا سختافزار موجود ارتقا یابد، درایور مربوطه نیز باید بهروزرسانی یا جایگزین شود.
درایورهای سختافزار در انواع مختلفی دستهبندی میشوند که هر یک برای نوع خاصی از انتقال داده طراحی شدهاند. برخی از مهمترین انواع درایورها عبارتند از:
- درایورهای دستگاههای کاراکتری: این نوع درایورها وظایفی مانند باز کردن، بستن، خواندن و نوشتن دادهها را انجام میدهند و امکان دسترسی به جریان دادهها را در فضای کاربری فراهم میکنند.
- درایورهای دستگاههای بلوکی: این درایورها برای سختافزارهایی طراحی شدهاند که دادهها را بهصورت بلوکهای ثابت منتقل میکنند.
- درایورهای دستگاههای شبکهای: این نوع درایورها برای انتقال بستههای داده در سختافزارهایی که به سیستمهای خارجی متصل میشوند، مورد استفاده قرار میگیرند.
سیستمعامل به کدهای تشکیلدهندهی هر درایور نیاز دارد تا با فراخوانی آنها، با سختافزار در ارتباط باشد. بنابراین درایورها معمولاً در بخشی از حافظهی سیستمعامل کامپیوتر قرار میگیرند که در برابر دسترسی بدون اجازهی سیستمعامل یا تغییرات تصادفی محافظتشده باشد.
حالت هسته و حالت کاربری چیست؟
از دیرباز، طراحان کامپیوتر به اهمیت امنیت و نیاز به محافظت از بخشهای حیاتی سیستم پی بردهاند. حتی پیش از ظهور اینترنت و شبکهها، مهندسان نرمافزار بهدقت نحوهی دسترسی اجزای نرمافزاری به سختافزار و منابع سیستم را مدیریت میکردند. درنتیجه، پردازندهها بهگونهای طراحی شدند که از دو حالت عملیاتی پشتیبانی کنند: حالت هسته (Kernel Mode) و حالت کاربری (User Mode). حالت هسته و حالت کاربری در واقع به وضعیتهای توابع سیستمعامل در حافظه اشاره دارند که پردازنده آن توابع را در دو حالت عملیاتی یادشده اجرا میکند.
برای هر تابعی که در حافظه بارگذاری میشود، یک پرچم (Flag) حافظه ایجاد میشود که در واقع یک بیت (Bit) است. مقدار صفر یا یک این پرچم تعیین میکند که تابع در چه حالتی از پردازنده اجرا میشود. به بیانی سادهتر، مقدار این پرچم تعیین میکند که تابع در بخش محافظتشده یا عمومی حافظه قرار دارد.
حالت هسته
حالت هسته به حالتی از توابع سیستمعامل گفته میشود که در آن نرمافزار (یا فرایندهای نرمافزار) دسترسی کامل و بدون محدودیتی به سیستم و منابع دارد. این حالت برای اجرای هستهی سیستمعامل و توابع اصلی آن، از جمله درایورهای سختافزاری، فراخوانیهای سیستمی (System Calls) و کنترلکنندههای وقفهها (Interrupt Handlers) مورد استفاده قرار میگیرد.
اگرچه هسته در فضای محافظتشدهای از حافظه بارگذاری میشود، خطاهای موجود در کدهای هسته یا خرابی درایورهای آن همچنان میتوانند منجر به بروز ناپایداری، کاهش عملکرد و حتی از کار افتادن کل سیستمعامل شوند. همچنین، ویروسهای کامپیوتری با هدف رسوخ در توابع سیستمعامل، اغلب از ضعفها و باگهای موجود استفاده کرده تا توابع سیستمعامل را به نفع اهداف خود تغییر دهند.
حالت کاربری
برنامهها و فرایندهایی که بخشی از هستهی سیستمعامل نیستند، در حالت کاربری اجرا میشوند. این حالت به نرمافزارهایی مانند ویرایشگرهای متن، مرورگرهای اینترنت و بازیهای کامپیوتری اجازه میدهد تا بدون دسترسی مستقیم به سختافزار اجرا شوند. در این وضعیت، هسته حافظه و منابع موردنیاز برنامهها را آماده کرده و برای پردازش فرایندها، در اختیارشان قرار میدهد.
در حالت کاربری، هسته ارتباط بین هر فرایند و سختافزار را برقرار میکند
برنامههایی که در حالت کاربری اجرا میشوند، از سطح دسترسی محدودی برخوردارند و نمیتوانند بهطور مستقیم به منابع سیستمی دسترسی داشته باشند. در عوض، هر برنامهای که نیاز به دسترسی به منابع سختافزاری داشته باشد، باید از طریق فراخوانیهای سیستمی درخواست خود را به هسته ارسال کند. هسته در اینجا بهعنوان یک مدیر زمانبند و کنترلکنندهی منابع عمل میکند و از وقوع تداخل بین درخواستهای مختلف جلوگیری میکند.
وقتی فرایندی نیاز به دسترسی به منابع سیستمی دارد، پردازنده از حالت کاربری به حالت هسته تغییر وضعیت داده و پس از پردازش درخواست، مجدداً به حالت کاربری بازمیگردد تا اجرای فرایند بدون ایجاد اختلال در عملکرد سیستم ادامه یابد.
هستهها به چند دسته تقسیم میشوند؟
هستهها بنا به نوع پیادهسازی به معماریهای مختلفی تقسیم میشوند. تفاوت اصلی بین این انواع در نحوهی مدیریت فضای آدرسدهی، انعطافپذیری و عملکرد آنها نهفته است.
- یکپارچه (Monolithic Kernel): همه توابع سیستمعامل را در همان فضای آدرسدهی هسته اجرا میکند؛ درست مانند هستهی لینوکس.
- میکروکرنل (Microkernel): پردازشهای کاربری و توابع سیستمعامل را در فضاهای آدرسدهی مجزا اجرا میکند.
- ترکیبی (Hybrid Kernel): مانند هستههای ویندوز NT و MacOS، تلاش برای ترکیب رفتار و مزایای هستههای از نوع مایکروکرنل و یکپارچه است.
- نانوکرنل (Nanokernel): حداقل توابع را در سطح هسته ارائه میدهد تا وظایف مدیریت سختافزار سطح پایین را انجام دهد و سایر توابع را به ماژولهای سطح کاربری واگذار میکند.
- اگزوکرنل (Exokernel): منابع سختافزاری را مستقیماً در اختیار برنامهها قرار میدهد و به آنها کنترل بیشتری بر روی سختافزار میدهد.
- مالتیکرنل (Multikernel): از چندین هسته برای مدیریت منابع سختافزاری استفاده میشود که اغلب در محیطهای توزیعشده پیادهسازی شدهاند.
- یونیکرنل (Unikernel): یونیکرنلها با حذف لایههای غیرضروری، هسته را مستقیماً درون برنامه جاسازی میکنند و برای محیطهای ابری با مقیاسپذیری بالا ایدهآل هستند.
به طور کلی، انواع پیادهسازیهای هسته دارای مزایا و معایبی هستند. برای مثال، میکروکرنلها انعطافپذیری بیشتری دارند، اما نیازمند کد منبع گستردهتری هستند، در حالی که هستههای یکپارچه امنیت بیشتری دارند اما از نظر قابلیت سفارشیسازی و نگهداری بلندمدت کد، محدودتر هستند.
هستههای یکپارچه
هستههای یکپارچه به دلیل اجرای تمام توابع در یک فضای آدرسدهی، از نظر عملکرد سریعتر از سایر پیادهسازیها هستند. آنها از یک پروتکل ارتباطی سریعتر برای اجرای فرایندها بین سختافزار و نرمافزار استفاده میکنند. مزیت کلیدی هستههای یکپارچه این است که به برنامهنویسی کمتری نیاز دارند، که باعث کاهش باگها و نیاز کمتر به اشکالزدایی میشود.
بااینحال، هستههای یکپارچه نسبتبه سایر، انعطافپذیری کمتری دارند و برای افزودن یک تابع جدید، کل هسته باید بازسازی شود. از نظر امنیت نیز ریسک بالاتری دارند؛ در صورتی که یکی از توابع دچار خرابی شود، کل سیستم متوقف میشود.
نمونهی بارز یک هستهی یکپارچه، هستهی لینوکس است. این هسته شامل چندین زیربخش اصلی مانند رابط فراخوانی سیستم، مدیریت فرایندها (Process Management)، پشتهی شبکه (Network Stack)، مدیریت حافظه (Memory Management)، فایلسیستم مجازی (Virtual File System) و درایورهای دستگاه (Device Drivers) میشود.
به عنوان مزیتی مهم، هستهی لینوکس را میتوان به سیستمعاملهای مختلف منتقل کرد و همچنین از بهروزرسانی زنده (Live Updates) پشتیبانی میکند. به دلیل متنباز بودن لینوکس، این هسته معمولاً برای سیستمهای سروری و محیطهایی که نیاز به تعمیر و نگهداری بلادرنگ دارند، مناسبتر است.
میکروکرنلها
سیستمعامل بر اساس معماری میکروکرنل (ریزهسته)، تمام توابع خود را در فضای آدرسدهی جدا از هسته اجرا میکند. این نوع هسته از پروتکل ارتباطی پیامرسانی (Message Passing) استفاده میکنند که دادهها، سیگنالها و توابع را به فرایندهای مناسب ارسال میکند.
میکروکرنلها از انعطافپذیری بالایی برخوردارند؛ برای افزودن یک تابع جدید، بدون نیاز به تغییر هستهی اصلی میتوان فضای آدرسدهی کاربر را تغییر داده شود. به دلیل ساختار ایزوله، امنیت میکروکرنلها بالاتر است؛ اگر یکی از توابع دچار مشکل شود، کل سیستم تحت تأثیر قرار نمیگیرد.
میکروکرنلها بهعنوان یکی از جاهطلبانهترین معماریهای هسته، از دههی ۱۹۸۰ تاکنون مسیر پر چالشی را طی کردهاند. مفهوم اولیهی این معماری توسط ریچارد رشید و اوی تونانیان در دانشگاه کارنگی ملون با توسعهی هستهی ماک (Mach) در سال ۱۹۸۵ شکل گرفت. هدف اصلی ماک، ایجاد یک زیرساخت نرمافزاری ماژولار برای پشتیبانی از سیستمعاملهای چندمنظوره بود که قابلیت اجرا روی معماریهای مختلف سختافزاری را داشته باشد.
ماک با جداسازی توابعی مانند مدیریت حافظه و درایورها از فضای هسته، الگویی را پایهریزی کرد که در آن تنها حداقل توابع ضروری (مانند ارتباطات بینفرایندی و مدیریت رشتهها) در حالت هسته اجرا میشوند.
در دههی ۱۹۹۰، یوخن لیدتکه با معرفی خانوادهی هستهی L4 تحولی در بهینهسازی عملکرد میکروکرنلها ایجاد کرد. L4 با کاهش زمان تأخیر در تبادل پیامها از طریق سادهسازی معماری و استفاده از مکانیزمهای سختافزار محور، اثبات کرد که مایکروکرنلها میتوانند به اندازهی هستههای یکپارچه کارآمد باشند.
هستههای ترکیبی
امروزه، بیشتر سیستمعاملهای تجاری از هستههای ترکیبی (هیبرید) استفاده میکنند. این هستهها شباهت زیادی به معماری میکروکرنل دارند، اما کدهای بیشتری در فضای هسته دارند تا عملکرد را بهبود دهند. همچنین، فرایند توسعهی نرمافزارهای جانبی را برای برنامهنویسان تسهیل میکنند.
هستههای ترکیبی با الهام از مزایای هستههای یکپارچه و مایکروکرنلها، تلاش میکنند تعادلی بین عملکرد بالا و امنیت ماژولار ایجاد کنند. در این معماری، برخی توابع حیاتی مانند درایورهای دستگاهها یا مدیریت حافظه در فضای هسته اجرا میشوند، در حالی که ماژولهای کماهمیتتر به فضای کاربر منتقل میشوند. این طراحی نه تنها از توقف کل سیستم در صورت خطای یک تابع جلوگیری میکند، بلکه با کاهش تعداد جابهجاییهای بین فضای هسته و کاربر، عملکرد را بهبود میبخشد.
هستههای ترکیبی از ماژولاریتی بیشتری برخوردارند و بخشهایی از سیستمعامل در برابر خرابیها محافظت حافظهای بیشتری دریافت میکنند. اپل در سال ۱۹۹۶ هستهی XNU را به عنوان ترکیبی از هستههای ماک و سیستمعامل شبهیونیکس برکلی (BSD) توسعه داد و آن را با یک رابط برنامهنویسی کاربردی (API) مبتنی بر Objective-C ادغام کرد.
پس از موفقیت XNU اپل و ویندوز NT، هستههای ترکیبی به عنوان استانداردی برای سیستمعاملها مطرح شدند
ویندوز NT، که در سال ۱۹۹۳ توسط دیوید کاتلر در مایکروسافت توسعه یافت، یکی از اولین نمونههای موفق معماری هستهی هیبرید است. هستهی NT با ترکیب مفاهیم یکپارچه (مانند مدیریت مستقیم سختافزار) و مایکروکرنل (مانند جداسازی توابع شبکه)، پایهای برای سایر نسخههای مدرن ویندوز شد.
هستهی ReactOS، یک پروژهی متنباز که از سال ۱۹۹۶ توسعه یافت، نمونهای جالب توجه است. این هسته با شبیهسازی ساختار داخلی ویندوز NT، سازگاری باینری با برنامههای ویندوز را فراهم میکند و ثابت میکند که معماری ترکیبی انعطافپذیری لازم برای تقلید از سیستمعاملهای رقیب را دارد.
نانوکرنلها
نانوکرنلها فقط خدمات پایهای مدیریت سختافزار سطح پایین را ارائه میدهند و تقریباً تمام توابع سیستمعامل را به درایورهای دستگاه محول میکنند.
مزیت اصلی نانوکرنلها، در قابلیت جابهجایی (Portability) آنها در سختافزارهای مختلف خلاصه میشود، به طوری که میتوان آنها را روی چندین معماری سختافزاری اجرا کرد. همچنین، به دلیل حجم کوچک کد، سطح حمله و آسیبپذیری آنها کمتر است، که موجب امنیت بیشتر میشود.
نانوکرنلها گام را فراتر از مایکروکرنلها گذاشتهاند و فلسفهی «کمترین امتیازات ممکن» را به اوج رساندهاند. در این معماری، فقط توابع بنیادین مانند مدیریت وقفهها، زمانبندی رشتهها، و ارتباطات بینفرایندی (IPC) در فضای هسته باقی میمانند، و توابعی مانند مدیریت حافظه یا درایورهای سختافزاری به فضای کاربر منتقل میشوند. این رویکرد نه تنها قابلیت جابهجایی را افزایش میدهد، بلکه امکان بروزرسانی زنده (Live Patching) اجزای سیستم را بدون نیاز به راهاندازی مجدد فراهم میکند.
توجه خاص گوگل به هستهی seL4، به توسعه سیستمعاملی برای برنامهنویسی هوشمصنوعی انجامید
یکی از نمونههای کلیدی، سیستمعامل KeyKOS است که در دههی ۱۹۸۰ توسط شرکت Key Logic توسعه یافت و بهعنوان یکی از اولین پیادهسازیهای نانوکرنل شناخته میشود. این سیستم با هدف ایجاد محیطی امن برای تراکنشهای مالی طراحی شد و معماری آن الهامبخش پروژههای مدرنی مانند seL4 گردید.
اگرچه نانوکرنلها از نظر تئوری ایدهآل هستند، پیادهسازی عملی آنها با چالشهایی همراه است. افزایش تعداد پیامهای مبادله شده بین فضای کاربر و هسته میتواند به کاهش عملکرد منجر شود، اما پیشرفتهای اخیر در الگوریتمهای ارتباط ناهمزمان (Asynchronous IPC) این مشکل را تا حدی مرتفع ساختهاند.
امروزه، نانوکرنلها در سیستمهای بلادرنگ (Real-Time) و حوزههای امنیتی حیاتی به کار میروند. برای مثال، سیستمعامل Integrity از شرکت Green Hills Software که در اواخر دههی ۱۹۹۰ توسعه یافت، از یک نانوکرنل بهره میبرد و در صنایع هوایی و خودروسازی (مانند سیستمهای کنترل خودروهای تسلا) استفاده گسترده دارد. توسعهدهندگان این کرنل، با حذف لایههای غیرضروری، تأخیر در پاسخگویی به وقفهها را به مقیاس مایکروثانیه کاهش دادهاند.
اگزوکرنلها
اگزوکرنلها منابع سختافزاری را مستقیماً در اختیار برنامهها قرار میدهند، برخلاف سایر هستهها که معمولاً عملکرد سختافزار را انتزاعسازی میکنند. به جای ارائهی یک مدل ثابت برای دسترسی به سختافزار، اگزوکرنلها به برنامهها اجازه میدهند که مدلهای سفارشی مدیریت منابع خود را پیادهسازی کنند.
روش پیاده شده در اگزوکرنل باعث میشود که برنامهها بتوانند از منابع سختافزاری با بیشترین بهرهوری استفاده کنند و عملکرد بهتری داشته باشند. علاوه بر این، اگزوکرنلها معمولاً شامل سیستمعاملهای کتابخانهای (Library OSes) هستند که به برنامهها امکان دسترسی به APIهای مختلف را میدهد.
مالتیکرنلها
مالتیکرنلها از چندین هسته برای مدیریت منابع سختافزاری مختلف استفاده میکنند. این نوع هستهها معمولاً در سیستمهای چندپردازندهای یا محیطهای توزیعشده به کار میروند.
در سیستمهای چندپردازندهای، مالتیکرنلها هر هستهی پردازنده را به عنوان یک واحد مجزا با نمونهی مخصوص به خود از هسته در نظر میگیرند. در سیستمهای توزیعشده، چندکرنلها هر گره (Node) را با نمونهی مخصوص به خود از هسته مدیریت میکنند و ارتباط بین آنها از طریق پروتکلهای پیامرسانی شبکه انجام میشود.
مزیت مالتیکرنلها در این است که استفاده از پردازندههای چند هستهای و سیستمهای توزیعشده را بهینه میکنند، که منجر به بهبود مقیاسپذیری و تحمل خطا (Fault Tolerance) میشود.
یونیکرنلها
یونیکرنلها رویکردی انقلابی در معماری سنتی سیستمهای عامل ارائه میدهند و بر کمینهسازی و تخصصیسازی تمرکز دارند. یک یونیکرنل، برنامهی کاربردی، کتابخانههای مورد نیاز و اجزای ضروری سیستم عامل (مانند درایورها و پشتهی شبکه) را در یک فرایند سبکوزن ادغام میکند. این فرایند مستقیماً روی هایپروایزر یا سختافزار اجرا میشود و جداسازی حالت کاربر-هسته در سیستمهای عامل سنتی را حذف میکند.
با تطبیق سیستم عامل برای یک کاربرد خاص، یونیکرنلها سطح دسترسی، زمان بارگذاری و مصرف منابع را کاهش میدهند و آنها را برای سرویسهای ابری، اینترنت اشیا (IoT) و رایانش فوق سریع ایدهآل میسازند.
اگرچه هر دو معماری یونیکرنل و نانوکرنل بر کمینهسازی تأکید دارند، فلسفهی طراحی آنها متفاوت است. یک نانوکرنل هسته را به حداقل اجزای ضروری (مانند مدیریت وقفه و زمانبندی اولیه) محدود میکند و توابعی مانند مدیریت حافظه را به فرایندهای فضای کاربر واگذار میکند. این رویکرد، مقداری ماژولار بودن و پشتیبانی از چندفرایندی را حفظ میکند. در مقابل، یونیکرنل مرز بین کاربر و هسته را به کلی از بین میبرد و تمام اجزا را در یک فضای آدرس واحد کامپایل میکند.
چنین تلفیقی، ماژولاریتی را فدای عملکرد میکند: فراخوانیهای سیستمی به فراخوانی تابع تبدیل میشوند و تعویض فرایند (Context Switch) حذف میگردد. با این حال، یونی کرنلها تکمنظوره هستند و ایزولهسازی بین فرایندها را پشتیبانی نمیکنند.
تاریخچه توسعه هسته
پیش از ظهور هسته، توسعهدهندگان بهطور مستقیم روی پردازنده کدنویسی میکردند، بدون اینکه به یک سیستمعامل برای مدیریت تعاملات بین سختافزار و نرمافزار متکی باشند. این امر، برنامهنویسی را برای توسعهدهندگان بسیار دشوار میکرد و سیستمعامل نهایی فقط روی یک دستگاه سازگار بود.
اولین تلاش برای ایجاد یک سیستمعامل که از معماری هسته برای انتقال پیامها استفاده کند، در سال ۱۹۶۹ با کامپیوتر RC 4000 انجام شد. پر برینچ هانسن (Per Brinch Hansen)، برنامهنویس این سیستم، دریافت که ایجاد یک هسته و سپس توسعهی یک سیستمعامل بر روی آن، بسیار سادهتر از تبدیل سیستمعاملهای موجود برای سازگاری با سختافزارهای جدید است. این هسته، تمام کدهای لازم برای تسهیل ارتباطات و پشتیبانی از سیستم را در خود داشت و نیاز به برنامهنویسی مستقیم روی پردازنده را از بین میبرد.
پس از RC 4000، پژوهشگران آزمایشگاههای بل (Bell Labs) توسعهی یونیکس را آغاز کردند که انقلابی در سیستمعاملها ایجاد کرد. هدف یونیکس، ایجاد ابزارهای کوچک و اختصاصی بود که هر یک وظایف خاصی را بهخوبی انجام دهند، بهجای اینکه ابزارهای سیستم چندین وظیفه را همزمان انجام دهند.
با افزایش محبوبیت یونیکس، سیستمعاملهای شبهیونیکس متنوعی در بازار ظاهر شدند، از جمله BSD، NeXTSTEP در دههی ۱۹۸۰ و لینوکس در سال ۱۹۹۱. ساختار یونیکس این ایده را تقویت کرد که ایجاد یک هسته بر روی یک سیستمعامل که از نرمافزارهای موجود و سختافزار سازگار استفاده میکند، آسانتر از طراحی سیستمی بدون سیستمعامل است.
هدف اصلی هستهی ماک، ایجاد نسخهای تمیزتر از یونیکس و جایگزینی قابلحملتر برای ارتباطات بینفرایندی بود
یونیکس سیستمعاملها را در دسترس کاربران بیشتری قرار داد، اما پژوهشگران دانشگاه کارنگی ملون نیز توسعهی سیستمعامل را گسترش داده و از سال ۱۹۸۵ تا ۱۹۹۴، روی هستهی ماک کار کردند. برخلاف BSD، هستهی ماک به سیستمعامل خاصی وابسته نبود و از معماری پردازندههای متعددی پشتیبانی میکرد. پژوهشگران هستهی ماک را بهگونهای توسعه دادند که با نرمافزارهای BSD سازگاری داشته باشد، بنابراین به سرعت در دسترس کاربران و توسعهدهندگان برای آزمایش و استفاده قرار گرفت.
مدتی پس از ماک، در سال ۱۹۸۶، اندرو تننبام (Andrew Tanenbaum) از دانشگاه Vrije Universiteit Amsterdam هلند، نسخهای شبیه به یونیکس به نام مینیکس (MINIX) را برای اهداف آموزشی و پژوهشی منتشر کرد. این سیستمعامل دارای ساختار مایکروکرنل، قابلیت چندوظیفگی، حالت محافظتشده و یک کامپایلر ANSI C بود و از حافظهی مجازی نیز پشتیبانی میکرد.
پیشرفت بزرگ بعدی در فناوری سیستمعامل در سال ۱۹۹۱ با انتشار هستهی لینوکس رخ داد. لینوس توروالدز این هسته را بهعنوان یک پروژهی شخصی توسعه داد، اما آن را تحت مجوز عمومی همگانی منتشر کرد تا به یک نرمافزار متنباز تبدیل شود. مناظرهی آنلاین بین تننبام و توروالدز دربارهی یکپارچه یا مایکروکرنل بودن هستهی لینوکس، برای علاقهمندان خواندنی است.
اکثر سیستمعاملهای امروزی ریشه در یونیکس دارند و در منابع تخصصی سیستمهای پوزیکس (Portable Operating System Interface یا POSIX) نامیده میشوند. اما یک استثنا وجود دارد: ویندوز. با محبوبیت کامپیوترهای شخصی سازگار با آیبیام و MS-DOS، مایکروسافت هستهی NT را توسعه داد و سیستمعامل خود را بر پایهی MS-DOS طراحی کرد. به همین دلیل، دستورات ویندوز با سیستمهای مبتنی بر یونیکس تفاوت دارند.
با ورود به عصر اینترنت اشیا و نیاز به امنیت بالا، میکروکرنلها بار دیگر به کانون توجه تبدیل شدهاند. پروژهی seL4، که در سال ۲۰۰۹ توسط تیمی در مؤسسهی NICTA استرالیا با رهبری گرت کلین توسعه یافت، اولین هسته در دنیاست که امنیت آن بهصورت ریاضی اثبات شده است. این هسته با حذف کامل خطاهای نرمافزاری در سطح طراحی، در سیستمهای حیاتی مانند هواپیماهای بدون سرنشین و ضربانسازهای پزشکی به کار میرود.
حملههای سایبری نظیر اسپکتر و مِلتداون در سال ۲۰۱۸ که ضعفهای امنیتی در سطح سختافزار و هسته را آشکار کردند، موجب تحولاتی اساسی در طراحی سیستمعاملها شد. برای مثال، هستهی لینوکس با معرفی تصادفیسازی فضای آدرس هسته (KASLR) و امضای ماژولهای هسته، لایههای دفاعی جدیدی ایجاد کرد.
از سوی دیگر، گوگل در پروژهی مرموز فوشیا (Fuchsia)، هستهی زیرکُن (Zircon) را معرفی کرد که با معماری ماژولار خود، قرارگیری در دستگاههای هوشمند آینده را در نظر دارد. زیرکُن با پشتیبانی از چندین سکو (Multi-Platform) و تمرکز بر امنیت، نمونهی مدرنی از تکامل مایکروکرنلها در عصر پردازش ابری است.
در عصر گوشیهای هوشمند و محاسبات ابری، هستههای مدرن با چالشهای جدیدی مانند بهینهسازی مصرف انرژی، امنیت سایبری، و پشتیبانی از معماریهای ناهمگون روبهرو شدند. سیستمعامل اندروید، که بر پایهی هستهی لینوکس ساخته شده، نمونهای بارز از این تحولات است.
از سال ۲۰۱۰ به بعد، توسعهدهندگان لینوکس با افزودن ویژگیهایی مانند قابلیتهای مدیریت باتری پیشرفته (مانند محدود کردن پردازش فرایندهای پسزمینه) و پشتیبانی از پردازندههای آرم، هسته را برای نیازهای موبایل بازتعریف کردند. در طرف مقابل، اپل با انتقال هستهی XNU به پردازندههای سری A و M در سال ۲۰۲۰، ادغام عمیقتری بین سختافزار و نرمافزار ایجاد کرد که بهینهسازیهای بیسابقهای را در عملکرد و مصرف انرژی ارائه میدهد.
رشد سریع رایانش ابری در دههی ۲۰۲۰، هستهها را به سمت پشتیبانی از هایپروایزرهای سبکوزن (مثل KVM در لینوکس) و مجازیسازی سطح هسته سوق داد. شرکتهایی مانند آمازون و گوگل، هستههای سفارشیسازی شدهای را توسعه دادهاند که امکان مدیریت هزاران ماشین مجازی را با کمترین تأخیر فراهم میکنند.
آینده هسته سیستمعامل
اگرچه هستههای یکپارچه (مانند لینوکس) و ترکیبی (مانند ویندوز و مکاواس) دهههاست که دنیای توسعهی سیستمعاملها غالب هستند، گوگل با توسعهی فوشیا نشان میدهد که ایدهی میکروکرنلها هنوز زنده است. زیرکُن با تمرکز بر امنیت، ماژولار بودن، و پشتیبانی از دستگاههای IoT، رویایی را محقق میکند. از سوی دیگر، هسته زفیر (Zephyr) که برای دستگاههای اینترنت اشیا طراحی شدهاند، ثابت میکنند که معماریهای سبکوزن و بلادرنگ همچنان جایگاه خود را در عصر هوش مصنوعی حفظ کردهاند.
روشهای توسعهی هسته نیز دستخوش تغییر شدهاند. جامعه متنباز لینوکس، با مشارکت شرکتهایی مانند ردهت، اینتل و گوگل، الگویی از همکاری بینالمللی را ایجاد کرده است که در آن هزاران توسعهدهنده به صورت همزمان روی بهبود هسته کار میکنند. ابزارهای ادغام پیوسته (CI/CD) و سیستمهای تست خودکار اکنون بخش جداییناپذیر فرایند توسعه هستند و تضمین میکنند که هر تغییر جدید در هسته، حتی در پیچیدهترین سناریوها، پایدار بماند.
امروزه مفاهیمی مانند مدیریت منابع مبتنی بر یادگیری ماشین در هستههای آزمایشی در حال بررسی است. برای مثال، پروژههایی مانند کوپرا (Kopera) از الگوریتمهای هوش مصنوعی برای پیشبینی الگوهای مصرف حافظه استفاده میکنند. در افق دورتر، ظهور رایانش کوانتومی چالشهای بنیادین جدیدی را برای طراحی هستهها ایجاد خواهد کرد، جایی که مفاهیم سنتی زمانبندی و همگامسازی نیاز به بازتعریف دارند.
بهنظر شما پردرآمدترین مشاغل جهان کدام شغلها هستند؟ برای یافتن پاسخ این سؤال در سال ۲۰۲۵ با ما همراه شوید.
گاهی لازم است برای نصب یا استفاده از یک برنامه، آنتی ویروس ویندوز را غیرفعال کنید. دراین مطلب نحوه غیرفعال کردن آنتی ویروس ویندوز 11 را آموزش ...
در بازهی قیمتی زیر ۲۰ میلیون تومان کدام گوشیهای سامسونگ ارزش خرید بالاتری دارند؟ در این راهنمای خرید برای انتخاب بهتر به شما کمک خواهیم کرد.
در لیست پرفروشترین گوشیهای فصل اخیر، موبایلی از سامسونگ به چشم میخورد که نه میانرده است و نه پرچمدار.
جدیدترین گوشی ریلمی با توجه به قیمتش امکانات بسیار مناسبی دارد.
زنجبیل گیاهی با خاصیت دارویی است که از دیرباز جایگاه برجستهای در طب سنتی داشته است. اما مصرف این گیاه دارویی همراه برخی از داروها مناسب نیست.
چه گوشیهایی با وزن مناسب بهترین عملکرد را دارند؟ در این مقاله با سبکترین گوشیهای سامسونگ در بازار ایران آشنا خواهید شد.