قاعدهٔ کلی جدایی سازوکار و خط مشی تفاوت اساسی بین ریز هستهها و هستههای یکپارچه است. هنگامی که خط مشی ما در حالت عملکرد است؛ ساز و کارَ، پشتیبانی است که اجازهٔ پیادهسازی خط مشیهای مختلف را میدهد. برای نمونه یک سازوکار جهت ورود کاربر به سیستم تهیه میشود تا با وصل شدن به سرور اجازهٔ مورد بحث تأیید شود؛ و خط مشی در اینجا میتواند برای سازوکار مورد نظر درخواست کلمه عبور کند و آن را با کلمهٔ عبور مورد نظر مطابقت دهد. از آنجایی که سازوکار کلی است خط مشی میتواند راحتتر تغییر کند تا آنکه این دو به صورت جداگانه در یک پیمانه باشند
در مینیمال ریز هسته تنها مقداری از خط مشیهای ابتدایی آورده شده و سازوکار آن اجازهٔ انتخاب خط مشیهای مختلف را به قسمتهای بالایی هسته میدهد (مانند مدیریت حافظه). اما هستهٔ یکپارچه دارای خط مشیهای بسیاری است از اینرو به بقیه سیستم اصرار دارم که از آنها استفاده و به آنها اعتماد کند
پر برینچ هانسن دلایلی به نفع جدایی سازوکار و خط مشی ارائه کرد. یک مشکل معمول در معماری کامپیوترها شکست در این جدایی است که یکی از عمدهترین دلایل در عدم وجود نوآوری در سیستمهای عامل است. طراحی یکپارچه ناشی از رویکرد معماری حالت هسته/حالت کاربر است، که در سیستمهای تجاری معمولی مشترک است در واقع هر واحدی که به حفاظت نیاز دارد ترجیحاً داخل هسته است. پیوند میان طراحی یکپارچه و حالت ویژه سبب مدیریت دوبارهٔ مسئله جدایی سازوکار و خط مشی میشود؛ در واقع رویکرد معمارگونهٔ حالت ممتاز سازوکار حفاظتی را با خط مشی امنیتی مخلوط میکند
در حالیکه هستههای یکپارچه تمام کد خود را در یک فضای آدرس دهی اجرا میکنند (فضای هسته), ریز هستهها تلاش بر انجام بیشتر سرمیس هایشان در فضای کاربر دارند. بسیاری از هستهها دقیقاً بر یکی از این دو روش نیستند بلکه از هردو طراحی استفاده میکنند که به آنها هستههای ترکیبی میگویند
هستههای یکپارچه
در هستهٔ یکپارچه تمامی سرویسهای سیستم عامل در رشتهٔ اصلی هسته اجرا میشوند بنابراین در قسمت مشترکی از حافظه قرار دارند. این روش احتیاج به دسترسی قدرتمند و سریعی به حافظه دارد. برخی از توسعه دهندگان یونیکس مانند کن تامسون از هستههای یکپارچه نسبت به ریزهستهها به دلیل راحتی پیادهسازی حمایت کردند. مشکل اصلی هستههای یکپارچه وابستگی قسمتهای مختلف یک سیستم به یک دیگر است به شکلی که مشکل در قسمت کوچکی از سیستم میتواند باعث خرابی در کل سیستم بشود و حفظ هستههای بزرگ بسیار سخت است
هستههای یکپارچه تمامی تابعهای هستهٔ سیستم و گردانندههای دستگاه را دارا میباشد که این یک طراحی سنتی در سیستمهای یونیکسی است. هستهٔ یکپارچه یک تک برنامهای است که شامل تمامی کدهای لازم جهت اجرا کردن هر دستور درون هسته میباشد. هر قسمتی که باید توسط برنامهها مورد دسترسی قرار بگیرد و در کتابخانه نمیتواند قرار بگیرد در فضای هستهاست. گردانندههای دستگاه، زمانبند، مدیریت حافظه، پروندههای سیستم، پشتههای شبکه. بسیاری از فراخوانهای سیستمی به نرمافزارها ارائه میشوند تا به آنها اجازهٔ دسترسی به دستگاههای نام برده شده را بدهد. هنگامی که در ابتدا هستهٔ یکپارچه با ریزسیستمهایی که در ابتدا به آنها نیازی نیست بارگذاری میشود میتواند مانند زمانی عمل کند (یا سریع تر از آن) که بهطور مشخص برای سختافزار تهیه شدهاست، هستههای یکپارچه نوین مانن یونیکس قابلیت اجرای پیمانههای در زمان اجرا را دارا میباشند ازینرو به راحتی تواناییهای مورد نیاز هسته را افزایش میدهد تا بتوان مقدار کدی که در فضای هسته در حال اجرا است را کمینه کرد و فضای بیشتری خالی شود تا کدهای دیگر هم وارد شوند. برتریهای این هسته وابسته به نکات زیر میباشد
هرچه تعداد کمتری نرمافزار درگیر شوند سریعتر است
اگر قسمتی از یک نرمافزار در کد منبع و فرم ترجمه شده باید کوچکتر از کل کد نرمافزار باشد
کدهای کمتر به معنی اشکالات کمتر است که منجر به مشکلات امنیتی کمتر میشود
بیشتر کارها در سیستمهای یکپارچه توسط فراخوانهای سیستمی انجام میگیرد. این رابطها معمولاً به صورت دادههای جدولی نگهداری میشوندکه به زیر سیستمهایی که داخل هسته هستند (مانند عملگرهای دیسک) دسترسی دارند. فراخوانهای اساسی توسط برنامهها ساخته میشوند و یک رونوشت چک شده از درخواست توسط فراخوان سیستمی فرستاده میشود. هستهٔ یکپارچهٔ لینوکس میتواند بسیار کوچک درست شود نه به دلیل بارگذاری پویای پیمانهها بلکه سهولت در سفارشی سازی. در واقع در برخی از نسخهها به اندازهای کوچک اند که میتوانند در کنارتعداد زیادی افزونه و نرمافزار دیگر بروی فلاپی دیسکی قرار بگیرند و یک سیستم عامل تمام عیار را ارائه دهند. این قابلیت هسته باعث رشد سریع این سیستم عامل در سیستمهای نهفته شدهاست
این نوع هستهها دارای تابعهای هستهٔ سیستم عامل و همینطور گردانندههای دستگاه (که باعث بارگذاری پیمانهها در اجراست) میباشند. آنها یک چکیدهٔ قدرتمند از سختافزارهای حیاتی را تهیه میکنند. آنان یک دسته از چکیدهٔ سادهٔ سخت افزارتهیه میکنند و با استفاده از نرمافزارهایی به نام سرور عملکردهای بیشتری را تأمین میکنند. این روش خاص یک رابط مجازی سطح بالا برای سختافزار با یک دسته از فراخوانهای سیستمی برای پیادهسازی سرویسهای سیستم عامل مانند مدیریت پردازه ها، مدیریت حافظه و همزمانی را تعریف میکند. این طرح نقصها و محدودیتهایی دارد
برنامهنویسی در هسته میتواند چالشبرانگیز باشد زیرا از هر کتابخانهای نمیتوان استفاده کرد، به یک دیباگر سطح کنبع نیاز است و به راه اندازی مجدد سیستم بهطور مکرر نیاز میشود. این مشکل برای راحتی توسعه دهنده نمیباشد زیرا هرچه توسعه و برنامهنویسی سختتر باشد اشکالات برنامه نیز بیشتر میشود
°معمولاً هستهها بسیار سخت حفظ میشوند
°حتی اگر پیمانههایی که به این عملگرها سرویس میدهند از بقیه جدا باشند، اما باز هم یکپارچه کردن خود برنامه سخت میباشد
°از آنجایی که پیمانهها در یک فضای آدرس دهی میباشند یک اشکال کوچک میتواند سبب اختلال یا نابودی کل سیستم شود
°هستههای یکپارچه قابل حمل و پرتابل نیستند ازینرو باید برای هر سیستم و معماری که سیستم عامل باید روی آن نصب شود دوباره نوشته شوند.
ریزهستهها
ریزهسته اصطلاحی است که روشی از طراحی سیستم عامل را توصیف میکند که آن مهاجرت از هستهٔ سنتی به دستهای از سرورها که توسط یک هستهٔ مینیمال ارتباط برقرار میکند و در حد امکان در فضای سیستم کم هستند و در فضای کاربر زیاد. ریز هستهای که برای دستگاه خاصی طراحی شدهاست تنها قابلیت انجام کاری که آن دستگاه نیاز دارد را دارد. روش ریز هسته شامل تعریفی خلاصه شده از سختافزار به همراه دستهای فراخوان سیستمی جهت پیادهسازی دستورها مینیمال سیستم عامل (مانند مدیریت حافظه) میباشد. سرویسهای دیگر شامل کارهای معمولی که توسط هسته انجام میگیرند (مانند شبکه) هستند که در فضای کاربر پیادهسازی میشود (به نام سرورها ارجاع داده میشوند) ریزهستهها نسبت به هستههای یکپارچه راحتتر حفظ میشوند اما تعداد زیاد فراخوانهای سیستمی و تعویض زمینهها دلیل کند شدن این سیستمها است زیرا سربار بیشتری نسبت به تابعهای ساده ایجاد میکند.