هسته (سیستم‌عامل)
تصمیمات طراحی هسته

حفاظت
نکته مهمی که در طراحی هسته وجود دارد، پشتیبانی در حمایت از خطا (تحمل گسل) و رفتارهای مخرب (امنیت) است. این دو جنبه معمولاً کاملاً مشخص نیستند و اتخاذ این تمایز در طراحی هسته منجر به رد یک ساختار سلسله مراتبی برای محافظت می‌شود.
مکانیسم‌ها یا خط مشی‌های ارائه شده توسط هسته با توجه به معیارهای مختلفی از جمله طبقه‌بندی می‌شوند: استاتیک (در زمان کامپایل) یا پویا (در زمان اجرا) اجرا می‌شود. پیشگیرانه یا پس از تشخیص. مطابق با اصول محافظت از آنها راضی (به عنوان مثال، Denning). آیا آنها از سخت‌افزار پشتیبانی می‌شوند یا مبتنی بر زبان هستند. خواه آنها بیشتر یک مکانیسم باز باشند یا یک سیاست الزام‌آور. و خیلی بیشتر.
پشتیبانی از حوزه‌های حفاظت سلسله مراتبی معمولاً با استفاده از حالتهای CPU انجام می‌شود.
بسیاری از هسته‌ها اجرای «قابلیت‌ها»، یعنی اشیایی را که به کد کاربر ارائه می‌شود امکان دسترسی محدود به یک شیء اساسی را که توسط هسته کنترل می‌شود فراهم می‌کنند. مثال متداول، دست زدن به پرونده است: یک پرونده بازنمایی اطلاعات ذخیره شده در یک دستگاه ذخیره‌سازی دائمی است. هسته ممکن است قادر به انجام بسیاری از عملیات‌های مختلف، از جمله خواندن، نوشتن، حذف یا اجرای آن باشد، اما یک برنامه در سطح کاربر فقط ممکن است مجاز به انجام برخی از این عملیات‌ها باشد (به عنوان مثال، فقط خواندن پرونده مجاز است). اجرای مشترک این امر این است که کرنل یک شیء را برای برنامه ارائه دهد (معمولاً به اصطلاح «دسته پرونده» نامیده می‌شود) و سپس برنامه می‌تواند عملیات را فراخوانی کند، اعتبار آن در زمان درخواست عملیات هسته را بررسی می‌کند. چنین سیستمی ممکن است گسترش یابد تا تمام اشیاء هسته را مدیریت کند، و در واقع به اشیاء ارائه شده توسط برنامه‌های کاربردی کاربر دیگر باشد.
یک روش کارآمد و ساده برای ارائه پشتیبانی سخت‌افزاری از قابلیتها، واگذاری مسئولیت بررسی حقوق دسترسی برای هر دسترسی به حافظه، مکانیزمی به نام آدرس دهی مبتنی بر قابلیت است. بیشتر معماری‌های رایانه‌های تجاری فاقد چنین پشتیبانی MMU برای قابلیت‌ها هستند.
یک روش جایگزین شبیه‌سازی قابلیت‌ها با استفاده از دامنه‌های سلسله مراتبی است که معمولاً پشتیبانی می‌شوند. در این روش، هر شیء محافظت شده باید در یک فضای آدرس قرار بگیرد که برنامه به آن دسترسی ندارد. هسته همچنین لیستی از قابلیتهای موجود در چنین حافظه ای را حفظ می‌کند. هنگامی که یک برنامه کاربردی باید به یک شیء محافظت شده توسط یک قابلیت دسترسی داشته باشد، تماس تلفنی سیستم را انجام می‌دهد و هسته بررسی می‌کند که آیا توانایی برنامه به شما اجازه می‌دهد تا عملکرد درخواست شده را انجام دهد یا خیر، اگر اجازه داشته باشد دسترسی به آن را انجام می‌دهد (یا مستقیم، یا با ارسال درخواست به یک فرایند سطح کاربر دیگر). هزینه عملکرد تعویض فضای آدرس، عملی بودن این روش را در سیستمهایی با تعامل پیچیده بین اشیاء محدود می‌کند، اما در سیستم عامل‌های فعلی برای اشیاء که به‌طور مکرر قابل دسترسی نیستند یا از آنها انتظار نمی‌رود که به سرعت انجام شوند، استفاده می‌شود.
اگر سیستم عامل از مکانیزم‌های محافظت پشتیبانی نمی‌کند، می‌توان محافظت را در سطح بالاتری شبیه‌سازی کرد، به عنوان مثال با شبیه‌سازی قابلیت‌ها با دستکاری جداول صفحه، اما پیامدهای عملکردی نیز وجود دارد. با وجود این، عدم وجود پشتیبانی سخت‌افزاری ممکن است برای سیستم‌هایی که تصمیم به استفاده از محافظت مبتنی بر زبان دارند، مسئله ای نباشد.
تصمیم مهم در مورد طراحی هسته ، انتخاب سطوح انتزاعی است که مکانیسم‌ها و سیاست‌های امنیتی باید در آن اعمال شود. مکانیسم‌های امنیتی هسته نقش اساسی در حمایت از امنیت در سطوح بالاتر دارند.
یک رویکرد استفاده از سیستم عامل و پشتیبانی هسته برای تحمل خطا است (ایجاد بالا) و ایجاد سیاست امنیتی برای رفتارهای مخرب در بالا از آن (اضافه کردن ویژگی‌هایی مانند مکانیزم‌های رمزنگاری در صورت لزوم)، واگذاری برخی مسئولیت‌ها به کامپایلر. رویکردهایی که اجرای سیاستهای امنیتی را به کامپایلر و / یا سطح برنامه واگذار می‌کنند، معمولاً امنیت مبتنی بر زبان نامیده می‌شوند.
فقدان بسیاری از سازوکارهای مهم امنیتی در سیستم‌های عامل اصلی فعلی مانع از اجرای سیاست‌های امنیتی کافی در سطح انتزاع برنامه می‌شود. در حقیقت، یک تصور غلط رایج در امنیت رایانه این است که هرگونه سیاست امنیتی بدون در نظر گرفتن پشتیبانی از هسته می‌تواند در یک برنامه اجرا شود.
محافظت از سخت‌افزار یا مبتنی بر زبان
امروزه سیستم‌های رایانه ای معمولی دربارهٔ قوانین برنامه مجاز به دسترسی به داده‌ها از قوانینی که به سخت‌افزار اعمال شده استفاده می‌کنند. پردازنده بر اجرای آن نظارت می‌کند و برنامه ای را که نقض یک قانون است، متوقف می‌کند، مانند یک فرایند کاربری که سعی در نوشتن آن به حافظه هسته دارد. در سیستم‌هایی که فاقد پشتیبانی از قابلیت‌ها هستند، فرایندها با استفاده از فضاهای آدرس جداگانه از یکدیگر جدا می‌شوند. تماس با استفاده از فرآیندهای کاربر به درون هسته تنظیم می‌شود و آنها را ملزم به استفاده از یکی از روش‌های تماس سیستم فوق بیان می‌کند.
یک روش جایگزین استفاده از حفاظت مبتنی بر زبان است. در سیستم حفاظت مبتنی بر زبان، هسته فقط اجازه اجرای کد را می‌دهد که توسط یک کامپایلر زبان قابل اعتماد تولید شده‌است. سپس زبان ممکن است به گونه ای طراحی شده باشد که غیرممکن باشد که برنامه‌نویس بتواند دستور دهد کاری را انجام دهد که یک مورد امنیتی را نقض کند.
مزایای این رویکرد شامل موارد زیر است:
نیازی به فضای آدرس جداگانه نیست. جابجایی بین فضاهای آدرس عملیاتی کند است که باعث سربار زیاد می‌شود و در حال حاضر کارهای بهینه‌سازی زیادی انجام می‌شود تا از سوئیچ‌های غیر ضروری در سیستم عامل‌های فعلی جلوگیری شود. سوئیچینگ در یک سیستم محافظتی مبتنی بر زبان کاملاً غیر ضروری است، زیرا همه کدها می‌توانند با خیال راحت در همان فضای آدرس کار کنند.
انعطاف‌پذیری هر طرح محافظتی که می‌تواند از طریق یک زبان برنامه‌نویسی بیان شود، می‌تواند با استفاده از این روش عملی شود. تغییرات در طرح حفاظت (به عنوان مثال از یک سیستم سلسله مراتبی به سیستم مبتنی بر قابلیت) نیازی به سخت‌افزار جدید ندارد.
معایب عبارتند از:
زمان راه اندازی برنامه طولانی‌تر. برنامه‌ها باید هنگام شروع تأیید شوند تا اطمینان حاصل شود که توسط کامپایلر صحیح کامپایل شده‌اند، یا ممکن است نیاز به بازپرداخت یا از کد منبع یا از طریق کد دیگر باشد.
سیستم‌های نوع انعطاف‌پذیر. در سیستم‌های سنتی، برنامه‌های کاربردی اغلب کارهایی انجام می‌دهند که از نوع بی خطر نیستند. چنین عملیاتی در سیستم حفاظت مبتنی بر زبان مجاز نیست، به این معنی که برنامه‌ها ممکن است نیاز به بازنویسی داشته باشند و در برخی موارد ممکن است عملکرد خود را از دست دهند.
نمونه‌هایی از سیستم‌های دارای محافظت مبتنی بر زبان شامل JX و Singularity مایکروسافت است.