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