هسته (سیستم‌عامل)
در علوم رایانه، هسته (که کِرنِل نیز خوانده می‌شود) یک برنامه رایانه است که هسته مرکزی یک سیستم عامل رایانه را تشکیل می‌دهد و کنترل تمام چیزهایی را که در سیستم اتفاق می‌افتد را در دست دارد؛ این یک بخش جدایی ناپذیر از هر سیستم عامل است. این "بخشی از کد سیستم عامل است که همیشه در حافظه ساکن است" در اکثر سیستم ها ، این اولین برنامه بارگیری شده در هنگام راه اندازی است (بعد از بوت لودر)، همچنین کنترل درخواستهای ورودی و خروجی توسط نرم افزارها و ترجمه آن‌ها به ساختارهای قابل پردازش برای واحد پردازش مرکزی را به عهده دارد. علاوه بر آن مدیریت حافظه و ارتباط با دستگاه‌های جانبی مثل صفحه کلید, مانیتور, چاپگر و بلندگو هم بر عهده این برنامه است. هسته قسمت اساسی سیستم عاملهای مدرن امروزی است.
کد بحرانی هسته معمولاً در یک قسمت جداگانه از حافظه بارگذاری می شود ، که از دسترسی برنامه های کاربردی یا سایر قسمت های کم اهمیت سیستم عامل محافظت می شود. هسته در این فضای محافظت شده وظایف خود مانند اجرای فرایندها ، مدیریت دستگاه های سخت افزاری مانند دیسک سخت و کار با وقفه را انجام می دهد. در مقابل ، برنامه های کاربردی مانند مرورگرها ، واژه پرداز ها یا پخش کننده های صوتی یا تصویری از یک فضای مجزا از حافظه ، فضای کاربر استفاده می کنند. این جداسازی از دخالت داده های کاربر و هسته با یکدیگر و ایجاد بی ثباتی و کندی و همچنین از خرابی برنامه های کاربردی در کل سیستم عامل جلوگیری می کند.
رابط هسته یک لایه انتزاعی سطح پایین است. هنگامی که یک فرآیند درخواست خدمات از هسته می‌کند، باید یک فراخوانی سیستمی انجام دهد. این فراخوانی سیستمی معمولاً از طریق یک تابع بسته بندی کننده(wrapper function) که در معرض برنامه های فضای کاربر توسط کتابخانه های سیستمی است که زبان اسمبلی را جاسازی می کند برای ورود به هسته پس از بارگیری ثبات های پردازنده های CPU با شماره syscall و پارامترهای آن (به عنوان مثال ، سیستم عامل های مشابه UNIX با استفاده از کتابخانه استاندارد C این کار را انجام می دهند).
طرح های مختلفی برای معماری هسته وجود دارد. هسته های یکپارچه(مونولیتیک) کاملاً در یک فضای آدرس واحد اجرا می شوند که در آن، CPU در حالت ناظر اجرا می شود ، عمدتا برای سرعت. میکروکرنل ها بیشتر و نه همه خدمات خود را در فضای کاربر اجرا می کنند ، همانند فرآیندهای کاربر ، و عمدتا با هدف انعطاف پذیری و مدولار بودن. MINIX 3 نمونه قابل توجهی از طراحی میکروکرنل است. در عوض ، هسته لینوکس یکپارچه است ، اگرچه ماژولار نیز هست ، زیرا می تواند ماژول های هسته قابل بارگذاری را در زمان اجرا وارد و حذف کند.
هسته که در واقع مؤلفه اصلی یک سیستم رایانه‌ای است وظیفه اجرای برنامه‌ها را بر عهده دارد. هسته این مسئولیت را بر عهده دارد تا در هر زمان تصمیم بگیرد تا از میان بسیاری از برنامه های در حال اجرا، کدام یک پردازنده یا پردازنده ها را در اختیار بگیرد.
حافظه با دسترسی تصادفی برای ذخیره موقت ساختارهای برنامه و همچنین اطلاعات به کار می‌رود. هسته مسئولیت تصمیم‌گیری این را بر عهده دارد که هر پروسه می‌تواند از کدام حافظه استفاده کند و تصمیم بگیرد و زمانی که حافظه کافی وجود ندارد چه کاری را انجام دهد.
دستگاه های I / O شامل موارد جانبی مانند صفحه کلید ، ماوس ، درایو دیسک ، چاپگر ، دستگاه های USB ، آداپتورهای شبکه و دستگاه های صفحه نمایش هستند. کرنل درخواست های برنامه ها را برای انجام I / O به یک دستگاه مناسب اختصاص می دهد و روش های مناسبی را برای استفاده از دستگاه فراهم می کند (به طور معمول در جایی خلاصه می شود که برنامه نیازی به دانستن جزئیات اجرای دستگاه نداشته باشد).
جنبه های اصلی لازم در مدیریت منابع ، تعریف دامنه اجرایی (فضای آدرس) و مکانیسم محافظت مورد استفاده برای واسطه دسترسی به منابع درون یک دامنه است. کرنل همچنین روش هایی را برای هماهنگ سازی و ارتباط بین فرایند (IPC) ارائه می دهد. این پیاده سازیها ممکن است درون خود هسته باشد و یا هسته نیز می تواند به دیگر فرآیندهای اجرا شده تکیه کند. اگرچه برای دستیابی به امکانات ارائه شده توسط یکدیگر ، هسته باید IPC را فراهم کند ، اما هسته ها نیز باید روشی را اجرا کنند تا درخواست هایی برای دسترسی به این امکانات را انجام دهند. هسته همچنین وظیفه تغییر متن بین فرآیندها یا موضوعات را بر عهده دارد.
هسته دسترسی کامل به حافظه سیستم دارد و باید به فرایندها اجازه دهد تا با اطمینان از این حافظه به محض نیاز خود دسترسی پیدا کنند. اغلب اولین قدم در انجام این کار ، آدرس دهی مجازی است که معمولاً با صفحه بندی و یا تقسیم بندی انجام می شود. حافظهٔ مجازی این اجاره را به هسته می‌دهد تا مثل یک آدرس فیزیکی داده به نظر می‌رسد. فضای آدرس مجازی ممکن است برای فرایندهای مختلف متفاوت باشد. حافظهٔ مجازی حافظه ایست که یک فرایند دسترسی در یک آدرس خاص با فرایند دیگری در همان آدرس حافظه‌ای متفاوت داشته باشد. استفاده از ان آدرس این اجازه را می‌دهد که هر برنامه در حال اجرا مانع اجرای برنامه‌های کاربردی دیگر نشود. حافظهٔ مجازی همچنین این اجازه را می‌دهد حافظه به دو دسته (مد هسته) و (مد کاربر) تقسیم کرده و از آسیب به یک برنامهٔ در حال اجرا در هسته می‌شود.
در بسیاری از سیستم ها ، آدرس مجازی برنامه ممکن است به داده هایی که در حال حاضر در حافظه نیستند ، اشاره کند. لایه indirection ارائه شده توسط آدرس دهی مجازی به سیستم عامل اجازه می دهد تا از مخزنهای داده دیگر مانند هارد دیسک استفاده کند تا آنچه را که در غیر این صورت باید در حافظه اصلی (RAM) باقی بماند ، ذخیره کند. در نتیجه ، سیستم های عامل می توانند به برنامه ها اجازه دهند از حافظه بیشتری نسبت به سیستم موجود در سیستم فیزیکی استفاده کنند. هنگامی که یک برنامه به داده هایی نیاز دارد که در حال حاضر در RAM نباشد ، CPU به هسته سیگنال می دهد که این اتفاق افتاده است ، و هسته با نوشتن محتویات یک بلوک حافظه غیرفعال به دیسک (در صورت لزوم) و جایگزین کردن آن با داده های درخواست شده پاسخ می دهد. این برنامه می تواند از جایی که متوقف شده است از سر گرفته شود. این طرح معمولاً به عنوان صفحه بندی تقاضا معروف است.
آدرس دهی مجازی همچنین امکان ایجاد پارتیشن های مجازی حافظه را در دو منطقه جداگانه فراهم می آورد ، یکی برای هسته (فضای هسته) و دیگری برای برنامه ها (فضای کاربر) رزرو می کند. این پردازشگرها اجازه دسترسی به حافظه هسته را ندارند ، بنابراین از آسیب دیدن هسته در حال اجرا جلوگیری می شود. این بخش اساسی بنیادی فضای حافظه در طراحی های فعلی هسته های هدف اصلی بسیار مؤثر بوده و در چنین سیستم هایی تقریباً جهانی است ، اگرچه برخی از هسته های تحقیقاتی (به عنوان مثال ، تکینگی) رویکردهای دیگری دارند.
برای انجام کارکردهای مفید ، فرایندها نیاز به دسترسی به لوازم جانبی متصل به رایانه دارند که توسط هسته از طریق درایورهای دستگاه توسط هسته کنترل می شوند. درایور دستگاه یک برنامه رایانه ای است که سیستم عامل را قادر می سازد با یک دستگاه سخت افزاری ارتباط برقرار کند. این سیستم عامل اطلاعاتی در مورد چگونگی کنترل و برقراری ارتباط با یک قطعه خاص از سخت افزار را در اختیار شما قرار می دهد. درایور یک قطعه مهم و یک برنامه اساسی است. هدف طراحی درایور انتزاع است. وظیفه درایور ترجمه مکالمات عملکرد انتزاعی انتصاب شده توسط سیستم عامل (تماس های برنامه نویسی) در تماس های خاص دستگاه است. از نظر تئوری ، دستگاه باید به درستی با درایور مناسب کار کند. درایورهای دستگاه برای مواردی مانند کارتهای ویدئویی ، کارتهای صوتی ، چاپگرها ، اسکنرها ، مودمها و کارتهای LAN استفاده می شوند.
در سطح سخت افزار ، انتزاعات مشترک درایورهای دستگاه شامل موارد زیر است:و در سطح نرم افزار ، انتزاعات درایور دستگاه شامل موارد زیر است:مقاله اصلی: فراخوان سیستمیفراخوان سیستمی یک برنامه درخواستی از سیستم عامل در مد ویژه است. یک فراخوان سیستمی رابط بین فرایند و سیستم عامل است. فراخوان سیستمی یک مکانیسم است که توسط برنامه نرم‌افزار به درخواست یک سرویس از سیستم عامل استفاده می‌شود. به‌طور کلی سیستم عامل یک کتابخانه است که بین سیستم عامل و برنامه‌های عادی می‌باشد. برای فراخوانی‌های سیستمی چند راه وجود دارد:
حفاظت
نکته مهمی که در طراحی هسته وجود دارد ، پشتیبانی در حمایت از خطا (تحمل گسل) و رفتارهای مخرب (امنیت) است. این دو جنبه معمولاً کاملاً مشخص نیستند و اتخاذ این تمایز در طراحی هسته منجر به رد یک ساختار سلسله مراتبی برای محافظت می شود.
مکانیسم ها یا خط مشی های ارائه شده توسط هسته با توجه به معیارهای مختلفی از جمله طبقه بندی می شوند: استاتیک (در زمان کامپایل) یا پویا (در زمان اجرا) اجرا می شود. پیشگیرانه یا پس از تشخیص. مطابق با اصول محافظت از آنها راضی (به عنوان مثال ، Denning). آیا آنها از سخت افزار پشتیبانی می شوند یا مبتنی بر زبان هستند. خواه آنها بیشتر یک مکانیسم باز باشند یا یک سیاست الزام آور. و خیلی بیشتر.
پشتیبانی از حوزه های حفاظت سلسله مراتبی معمولاً با استفاده از حالتهای CPU انجام می شود.
بسیاری از هسته ها اجرای "قابلیت ها" ، یعنی اشیایی را که به کد کاربر ارائه می شود امکان دسترسی محدود به یک شیء اساسی را که توسط هسته کنترل می شود فراهم می کنند. مثال متداول ، دست زدن به پرونده است: یک پرونده بازنمایی اطلاعات ذخیره شده در یک دستگاه ذخیره سازی دائمی است. هسته ممکن است قادر به انجام بسیاری از عملیات های مختلف ، از جمله خواندن ، نوشتن ، حذف یا اجرای آن باشد ، اما یک برنامه در سطح کاربر فقط ممکن است مجاز به انجام برخی از این عملیات ها باشد (به عنوان مثال ، فقط خواندن پرونده مجاز است). اجرای مشترک این امر این است که کرنل یک شیء را برای برنامه ارائه دهد (معمولاً به اصطلاح "دسته پرونده" نامیده می شود) و سپس برنامه می تواند عملیات را فراخوانی کند ، اعتبار آن در زمان درخواست عملیات هسته را بررسی می کند. چنین سیستمی ممکن است گسترش یابد تا تمام اشیاء هسته را مدیریت کند ، و در واقع به اشیاء ارائه شده توسط برنامه های کاربردی کاربر دیگر باشد.
یک روش کارآمد و ساده برای ارائه پشتیبانی سخت افزاری از قابلیتها ، واگذاری مسئولیت بررسی حقوق دسترسی برای هر دسترسی به حافظه ، مکانیزمی به نام آدرس دهی مبتنی بر قابلیت است. بیشتر معماری های رایانه های تجاری فاقد چنین پشتیبانی MMU برای قابلیت ها هستند.
یک روش جایگزین شبیه سازی قابلیت ها با استفاده از دامنه های سلسله مراتبی است که معمولاً پشتیبانی می شوند. در این روش ، هر شیء محافظت شده باید در یک فضای آدرس قرار بگیرد که برنامه به آن دسترسی ندارد. هسته همچنین لیستی از قابلیتهای موجود در چنین حافظه ای را حفظ می کند. هنگامی که یک برنامه کاربردی باید به یک شیء محافظت شده توسط یک قابلیت دسترسی داشته باشد ، تماس تلفنی سیستم را انجام می دهد و هسته بررسی می کند که آیا توانایی برنامه به شما اجازه می دهد تا عملکرد درخواست شده را انجام دهد یا خیر ، اگر اجازه داشته باشد دسترسی به آن را انجام می دهد (یا مستقیم ، یا با ارسال درخواست به یک فرآیند سطح کاربر دیگر). هزینه عملکرد تعویض فضای آدرس ، عملی بودن این روش را در سیستمهایی با تعامل پیچیده بین اشیاء محدود می کند ، اما در سیستم عامل های فعلی برای اشیاء که به طور مکرر قابل دسترسی نیستند یا از آنها انتظار نمی رود که به سرعت انجام شوند ، استفاده می شود.
اگر سیستم عامل از مکانیزم های محافظت پشتیبانی نمی کند ، می توان محافظت را در سطح بالاتری شبیه سازی کرد ، به عنوان مثال با شبیه سازی قابلیت ها با دستکاری جداول صفحه ، اما پیامدهای عملکردی نیز وجود دارد. با وجود این ، عدم وجود پشتیبانی سخت افزاری ممکن است برای سیستم هایی که تصمیم به استفاده از محافظت مبتنی بر زبان دارند ، مسئله ای نباشد.
تصمیم مهم در مورد طراحی هسته ، انتخاب سطوح انتزاعی است که مکانیسم ها و سیاست های امنیتی باید در آن اعمال شود. مکانیسم های امنیتی هسته نقش اساسی در حمایت از امنیت در سطوح بالاتر دارند.
یک رویکرد استفاده از سیستم عامل و پشتیبانی هسته برای تحمل خطا است (ایجاد بالا) و ایجاد سیاست امنیتی برای رفتارهای مخرب در بالا از آن (اضافه کردن ویژگی هایی مانند مکانیزم های رمزنگاری در صورت لزوم) ، واگذاری برخی مسئولیت ها به کامپایلر. رویکردهایی که اجرای سیاستهای امنیتی را به کامپایلر و / یا سطح برنامه واگذار می کنند ، معمولاً امنیت مبتنی بر زبان نامیده می شوند.
فقدان بسیاری از سازوکارهای مهم امنیتی در سیستم های عامل اصلی فعلی مانع از اجرای سیاست های امنیتی کافی در سطح انتزاع برنامه می شود. در حقیقت ، یک تصور غلط رایج در امنیت رایانه این است که هرگونه سیاست امنیتی بدون در نظر گرفتن پشتیبانی از هسته می تواند در یک برنامه اجرا شود.
محافظت از سخت افزار یا مبتنی بر زبان
امروزه سیستم های رایانه ای معمولی درباره قوانین برنامه مجاز به دسترسی به داده ها از قوانینی که به سخت افزار اعمال شده استفاده می کنند. پردازنده بر اجرای آن نظارت می کند و برنامه ای را که نقض یک قانون است ، متوقف می کند ، مانند یک فرآیند کاربری که سعی در نوشتن آن به حافظه هسته دارد. در سیستم هایی که فاقد پشتیبانی از قابلیت ها هستند ، فرایندها با استفاده از فضاهای آدرس جداگانه از یکدیگر جدا می شوند. تماس با استفاده از فرآیندهای کاربر به درون هسته تنظیم می شود و آنها را ملزم به استفاده از یکی از روش های تماس سیستم فوق بیان می کند.
یک روش جایگزین استفاده از حفاظت مبتنی بر زبان است. در سیستم حفاظت مبتنی بر زبان ، هسته فقط اجازه اجرای کد را می دهد که توسط یک کامپایلر زبان قابل اعتماد تولید شده است. سپس زبان ممکن است به گونه ای طراحی شده باشد که غیرممکن باشد که برنامه نویس بتواند دستور دهد کاری را انجام دهد که یک مورد امنیتی را نقض کند.
مزایای این رویکرد شامل موارد زیر است:معایب عبارتند از:نمونه هایی از سیستم های دارای محافظت مبتنی بر زبان شامل JX و Singularity مایکروسافت است.
Edsger Dijkstra ثابت کرد که از دیدگاه منطقی ، عملیات قفل و باز کردن قفل اتمی که در سمفورهای باینری کار می کند ابتدایی کافی برای بیان هرگونه عملکرد همکاری فرآیند هستند. با این حال ، این رویکرد به طور کلی از نظر ایمنی و کارآیی به نظر می رسد ، در حالی که یک رویکرد انتقال پیام انعطاف پذیرتر است. تعداد زیادی از رویکردهای دیگر (یا سطح پایین یا بالاتر) نیز موجود است ، که بسیاری از هسته های مدرن پشتیبانی از سیستم هایی مانند حافظه مشترک و تماس های از راه دور را پشتیبانی می کنند.
ایده هسته ای که دستگاه های I / O به طور یکنواخت با سایر فرآیندها به کار گرفته می شوند ، به عنوان فرآیندهای همکاری موازی ، ابتدا توسط برینچ هانسن پیشنهاد و اجرا شد (اگرچه ایده های مشابه در سال 1967 پیشنهاد شد). در توضیحات هانسن در مورد این ، فرآیندهای "رایج" فرایندهای داخلی نامیده می شوند ، در حالی که دستگاه های I / O فرایندهای خارجی نامیده می شوند.
مشابه حافظه فیزیکی ، اجازه دسترسی مستقیم به برنامه ها به درگاه ها و ثبت های کنترل کننده می تواند باعث خراب شدن کنترلر یا خراب شدن سیستم شود. با این کار بسته به پیچیدگی دستگاه ، برخی از دستگاه ها می توانند به طرز شگفت آوری پیچیده ای برای برنامه ریزی شوند و از چندین کنترلر مختلف استفاده کنند. به همین دلیل ، ارائه یک رابط انتزاعی تر برای مدیریت دستگاه مهم است. این رابط معمولاً توسط یک درایور دستگاه یا لایه انتزاعی سخت افزاری انجام می شود. بیشتر اوقات ، برنامه ها نیاز به دسترسی به این دستگاه ها دارند. هسته باید با پرس و جو در سیستم برای آنها به نوعی لیست این دستگاه ها را حفظ کند. این کار از طریق BIOS یا از طریق یکی از اتوبوسهای مختلف سیستم (مانند PCI / PCIE یا USB) قابل انجام است. هنگامی که یک برنامه کاربردی را روی یک دستگاه درخواست می کند (مانند نمایش کاراکتر) ، هسته باید این درخواست را به درایور ویدیوی فعال فعلی ارسال کند. درایور ویدیو نیز به نوبه خود باید این درخواست را انجام دهد. این نمونه ای از ارتباطات درون فرایندی (IPC) است.
به طور طبیعی ، کارها و ویژگی های ذکر شده در بالا می تواند از جهات مختلفی ارائه شود که در طراحی و اجرای متفاوت از یکدیگر هستند.
اصل تفکیک مکانیسم و ​​سیاست تفاوت اساسی بین فلسفه هسته های خرد و یکپارچه است. در اینجا مکانیسم پشتیبانی است که اجرای بسیاری از سیاستهای مختلف را امکان پذیر می سازد ، در حالی که یک سیاست "حالت عملکرد" ​​خاص است. مثال: از آنجا که مکانیسم و ​​خط مشی جدا شده اند ، می توان به عنوان مثال سیاست را به راحتی تغییر داد. نیاز به استفاده از یک نشانه امنیتی دارد.
در حداقل ریزگردها فقط برخی از سیاستهای اساسی وجود دارد ، و مکانیسم های آن به آنچه در بالای هسته (قسمت باقیمانده سیستم عامل و برنامه های دیگر) در حال اجراست اجازه می دهد تا تصمیم بگیرد که کدام سیاست ها را اتخاذ کند (به عنوان مدیریت حافظه ، زمانبندی فرآیند سطح بالا ، مدیریت سیستم فایل و غیره). در عوض ، یک هسته یکپارچه تمایل دارد بسیاری از سیاست ها را شامل شود ، بنابراین بقیه سیستم را برای تکیه بر آنها محدود می کند.
پرو برینچ هانسن استدلالهایی را به نفع تفکیک مکانیسم و ​​سیاست ارائه داد. عدم انجام صحیح این جدایی یکی از مهمترین دلایل عدم نوآوری اساسی در سیستم عامل های موجود است ، مشکلی که در معماری رایانه رایج است. طراحی یکپارچه با روش معماری "حالت هسته" / "حالت کاربر" ناشی از حفاظت (که از لحاظ فنی به آن دامنه های محافظت از سلسله مراتبی گفته می شود) القا می شود ، که در سیستم های تجاری معمولی رایج است ؛ در حقیقت ، بنابراین هر ماژول نیاز به محافظت را ترجیح می دهد. به هسته. این پیوند بین طراحی یکپارچه و "حالت ممتاز" را می توان به مسئله اصلی تفکیک مکانیسم - سیاست مورد استفاده قرار داد ؛ در حقیقت رویکرد معماری "حالت ممتاز" سازوکار حفاظت با سیاست های امنیتی را می بخشد ، در حالی که اصلی ترین گزینه معماری. رویکرد ، آدرس دهی مبتنی بر قابلیت ، به طور واضح بین این دو تمایز قایل می شود ، و به طور طبیعی به یک طرح ریزگرد منجر می شود (نگاه کنید به تفکیک حفاظت و امنیت).
در حالی که هسته های یکپارچه تمام کدهای خود را در همان فضای آدرس (فضای هسته) اجرا می کنند ، میکروکرن ها سعی می کنند اکثر خدمات خود را در فضای کاربر اجرا کنند ، با هدف بهبود قابلیت حفظ و مدولار بودن پایه کد. بیشتر هسته ها دقیقاً در یکی از این دسته ها جای نمی گیرند ، بلکه در بین این دو طرح وجود دارد. به اینها هسته ترکیبی گفته می شود. طرح های عجیب و غریب تری از قبیل نانو هسته و اگزوکلنل موجود است ، اما بندرت برای سیستم های تولید استفاده می شود. به عنوان مثال ، Hypervisor Xen یک اگزوکرونل است.