موضوع مقاله: هسته (سیستم‌عامل) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # هسته (سیستم‌عامل) | مقدمه: در علوم رایانه، هستههسته برابرنهاد «واژه‌نامه مرجع برای ترجمه محیط لینوکس» برای واژهٔ کرنل است. | ## بخش 1: هسته (سیستم‌عامل) | (که کِرنِل نیز خوانده می‌شود) یک برنامه رایانه است که هسته مرکزی یک سیستم عامل رایانه را تشکیل می‌دهد و کنترل تمام چیزهایی را که در سیستم اتفاق می‌افتد را در دست دارد؛ این یک بخش جدایی ناپذیر از هر سیستم عامل است. این «بخشی از کد سیستم عامل است که همیشه در حافظه ساکن است» در اکثر سیستم‌ها، این اولین برنامه بارگیری شده در هنگام راه اندازی است (بعد از بوت لودر)، همچنین کنترل درخواست‌های ورودی و خروجی توسط نرم‌افزارها و ترجمه آن‌ها به ساختارهای قابل پردازش برای واحد پردازش مرکزی را به عهده دارد. علاوه بر آن مدیریت حافظه و ارتباط با دستگاه‌های جانبی مثل صفحه کلید، مانیتور، چاپگر و بلندگو هم بر عهده این برنامه است. هسته قسمت اساسی سیستم عاملهای مدرن امروزی است.Wulf 1974 pp.337–345 کد بحرانی هسته معمولاً در یک قسمت جداگانه از حافظه بارگذاری می‌شود، که از دسترسی برنامه‌های کاربردی یا سایر قسمت‌های کم‌اهمیت سیستم عامل محافظت می‌شود. هسته در این فضای محافظت شده وظایف خود مانند اجرای فرایندها، مدیریت دستگاه‌های سخت‌افزاری مانند دیسک سخت و کار با وقفه را انجام می‌دهد. در مقابل، برنامه‌های کاربردی مانند مرورگرها، واژه پرداز‌ها یا پخش کننده‌های صوتی یا تصویری از یک فضای مجزا از حافظه، فضای کاربر استفاده می‌کنند. این جداسازی از دخالت داده‌های کاربر و هسته با یکدیگر و ایجاد بی‌ثباتی و کندی و همچنین از خرابی برنامه‌های کاربردی در کل سیستم عامل جلوگیری می‌کند. هنگامی که یک فرایند درخواست خدمات از هسته می‌کند، باید یک فراخوانی سیستمی انجام دهد. هسته‌های یکپارچه (مونولیتیک) کاملاً در یک فضای آدرس واحد اجرا می‌شوند که در آن، CPU در حالت ناظر اجرا می‌شود، عمدتاً برای سرعت. در عوض، هسته لینوکس یکپارچه است، اگرچه ماژولار نیز هست، زیرا می‌تواند ماژول‌های هسته قابل بارگذاری را در زمان اجرا وارد و حذف کند. هسته که در واقع مؤلفه اصلی یک سیستم رایانه‌ای است وظیفه اجرای برنامه‌ها را بر عهده دارد. هسته این مسئولیت را بر عهده دارد تا در هر زمان تصمیم بگیرد تا از میان بسیاری از برنامه‌های در حال اجرا، کدام یک پردازنده یا پردازنده‌ها را در اختیار بگیرد. حافظه دسترسی تصادفی (RAM) حافظه با دسترسی تصادفی برای ذخیره موقت ساختارهای برنامه و همچنین اطلاعات به کار می‌رود. هسته مسئولیت تصمیم‌گیری این را بر عهده دارد که هر پروسه می‌تواند از کدام حافظه استفاده کند و تصمیم بگیرد و زمانی که حافظه کافی وجود ندارد چه کاری را انجام دهد. دستگاه‌های ورودی / خروجی (I / O) دستگاه‌های I / O شامل موارد جانبی مانند صفحه کلید، ماوس، درایو دیسک، چاپگر، دستگاه‌های USB، آداپتورهای شبکه و دستگاه‌های صفحه نمایش هستند. کرنل درخواست‌های برنامه‌ها را برای انجام I / O به یک دستگاه مناسب اختصاص می‌دهد و روش‌های مناسبی را برای استفاده از دستگاه فراهم می‌کند (به‌طور معمول در جایی خلاصه می‌شود که برنامه نیازی به دانستن جزئیات اجرای دستگاه نداشته باشد). کرنل همچنین روش‌هایی را برای هماهنگ سازی و ارتباط بین فرایند (IPC) ارائه می‌دهد. این پیاده سازیها ممکن است درون خود هسته باشد یا هسته نیز می‌تواند به دیگر فرآیندهای اجرا شده تکیه کند. اگرچه برای دستیابی به امکانات ارائه شده توسط یکدیگر، هسته باید IPC را فراهم کند، اما هسته‌ها نیز باید روشی را اجرا کنند تا درخواست‌هایی برای دسترسی به این امکانات را انجام دهند. مدیریت حافظه هسته دسترسی کامل به حافظه سیستم دارد و باید به فرایندها اجازه دهد تا با اطمینان از این حافظه به محض نیاز خود دسترسی پیدا کنند. اغلب اولین قدم در انجام این کار، آدرس دهی مجازی است که معمولاً با صفحه بندی یا تقسیم‌بندی انجام می‌شود. حافظهٔ مجازی این اجاره را به هسته می‌دهد تا مثل یک آدرس فیزیکی داده به نظر می‌رسد. حافظهٔ مجازی حافظه ایست که یک فرایند دسترسی در یک آدرس خاص با فرایند دیگری در همان آدرس حافظه‌ای متفاوت داشته باشد. استفاده از ان آدرس این اجازه را می‌دهد که هر برنامه در حال اجرا مانع اجرای برنامه‌های کاربردی دیگر نشود. حافظهٔ مجازی همچنین این اجازه را می‌دهد حافظه به دو دسته (مد هسته) و (مد کاربر) تقسیم کرده و از آسیب به یک برنامهٔ در حال اجرا در هسته می‌شود. در بسیاری از سیستم‌ها، آدرس مجازی برنامه ممکن است به داده‌هایی که در حال حاضر در حافظه نیستند، اشاره کند. لایه indirection ارائه شده توسط آدرس دهی مجازی به سیستم عامل اجازه می‌دهد تا از مخزنهای داده دیگر مانند هارد دیسک استفاده کند تا آنچه را که در غیر این صورت باید در حافظه اصلی (RAM) باقی بماند، ذخیره کند. در نتیجه، سیستم‌های عامل می‌توانند به برنام‌ها اجازه دهند از حافظه بیشتری نسبت به سیستم موجود در سیستم فیزیکی استفاده کنند. هنگامی که یک برنامه به داده‌هایی نیاز دارد که در حال حاضر در RAM نباشد، CPU به هسته سیگنال می‌دهد که این اتفاق افتاده‌است، و هسته با نوشتن محتویات یک بلوک حافظه غیرفعال به دیسک (در صورت لزوم) و جایگزین کردن آن با داده‌های درخواست شده پاسخ می‌دهد. آدرس دهی مجازی همچنین امکان ایجاد پارتیشن‌های مجازی حافظه را در دو منطقه جداگانه فراهم می‌آورد، یکی برای هسته (فضای هسته) و دیگری برای برنامه‌ها (فضای کاربر) رزرو می‌کند. این پردازشگرها اجازه دسترسی به حافظه هسته را ندارند، بنابراین از آسیب دیدن هسته در حال اجرا جلوگیری می‌شود. | ## بخش 2: هسته (سیستم‌عامل) | این بخش اساسی بنیادی فضای حافظه در طراحی‌های فعلی هسته‌های هدف اصلی بسیار مؤثر بوده و در چنین سیستم‌هایی تقریباً جهانی است، اگرچه برخی از هسته‌های تحقیقاتی (به عنوان مثال، تکینگی) رویکردهای دیگری دارند. مدیریت دستگاه برای انجام کارکردهای مفید، فرایندها نیاز به دسترسی به لوازم جانبی متصل به رایانه دارند که توسط هسته از طریق درایورهای دستگاه توسط هسته کنترل می‌شوند. درایور دستگاه یک برنامه رایانه ای است که سیستم عامل را قادر می‌سازد با یک دستگاه سخت‌افزاری ارتباط برقرار کند. این سیستم عامل اطلاعاتی در مورد چگونگی کنترل و برقراری ارتباط با یک قطعه خاص از سخت‌افزار را در اختیار شما قرار می‌دهد. وظیفه درایور ترجمه مکالمات عملکرد انتزاعی انتصاب شده توسط سیستم عامل (تماس‌های برنامه‌نویسی) در تماس‌های خاص دستگاه است. درایورهای دستگاه برای مواردی مانند کارتهای ویدئویی، کارتهای صوتی، چاپگرها، اسکنرها، مودمها و کارتهای LAN استفاده می‌شوند. فراخوان سیستمی یک مکانیسم است که توسط برنامه نرم‌افزار به درخواست یک سرویس از سیستم عامل استفاده می‌شود. به‌طور کلی سیستم عامل یک کتابخانه است که بین سیستم عامل و برنامه‌های عادی می‌باشد. برای فراخوانی‌های سیستمی چند راه وجود دارد: با استفاده از یک وقفهٔ نرم‌افزاری با استفاده از یک دروازهٔ پاسخ با استفاده از یک دستتورالعمل سیستم پاسخ خاص با استفاده از یک صف مبتنی بر حافظه تصمیمات طراحی هسته حفاظت نکته مهمی که در طراحی هسته وجود دارد، پشتیبانی در حمایت از خطا (تحمل گسل) و رفتارهای مخرب (امنیت) است. این دو جنبه معمولاً کاملاً مشخص نیستند و اتخاذ این تمایز در طراحی هسته منجر به رد یک ساختار سلسله مراتبی برای محافظت می‌شود. مکانیسم‌ها یا خط مشی‌های ارائه شده توسط هسته با توجه به معیارهای مختلفی از جمله طبقه‌بندی می‌شوند: استاتیک (در زمان کامپایل) یا پویا (در زمان اجرا) اجرا می‌شود. پشتیبانی از حوزه‌های حفاظت سلسله مراتبی معمولاً با استفاده از حالتهای CPU انجام می‌شود. بسیاری از هسته‌ها اجرای «قابلیت‌ها»، یعنی اشیایی را که به کد کاربر ارائه می‌شود امکان دسترسی محدود به یک شیء اساسی را که توسط هسته کنترل می‌شود فراهم می‌کنند. مثال متداول، دست زدن به پرونده است: یک پرونده بازنمایی اطلاعات ذخیره شده در یک دستگاه ذخیره‌سازی دائمی است. هسته ممکن است قادر به انجام بسیاری از عملیات‌های مختلف، از جمله خواندن، نوشتن، حذف یا اجرای آن باشد، اما یک برنامه در سطح کاربر فقط ممکن است مجاز به انجام برخی از این عملیات‌ها باشد (به عنوان مثال، فقط خواندن پرونده مجاز است). اجرای مشترک این امر این است که کرنل یک شیء را برای برنامه ارائه دهد (معمولاً به اصطلاح «دسته پرونده» نامیده می‌شود) و سپس برنامه می‌تواند عملیات را فراخوانی کند، اعتبار آن در زمان درخواست عملیات هسته را بررسی می‌کند. چنین سیستمی ممکن است گسترش یابد تا تمام اشیاء هسته را مدیریت کند، و در واقع به اشیاء ارائه شده توسط برنامه‌های کاربردی کاربر دیگر باشد. یک روش کارآمد و ساده برای ارائه پشتیبانی سخت‌افزاری از قابلیتها، واگذاری مسئولیت بررسی حقوق دسترسی برای هر دسترسی به حافظه، مکانیزمی به نام آدرس دهی مبتنی بر قابلیت است. یک روش جایگزین شبیه‌سازی قابلیت‌ها با استفاده از دامنه‌های سلسله مراتبی است که معمولاً پشتیبانی می‌شوند. در این روش، هر شیء محافظت شده باید در یک فضای آدرس قرار بگیرد که برنامه به آن دسترسی ندارد. هنگامی که یک برنامه کاربردی باید به یک شیء محافظت شده توسط یک قابلیت دسترسی داشته باشد، تماس تلفنی سیستم را انجام می‌دهد و هسته بررسی می‌کند که آیا توانایی برنامه به شما اجازه می‌دهد تا عملکرد درخواست شده را انجام دهد یا خیر، اگر اجازه داشته باشد دسترسی به آن را انجام می‌دهد (یا مستقیم، یا با ارسال درخواست به یک فرایند سطح کاربر دیگر). هزینه عملکرد تعویض فضای آدرس، عملی بودن این روش را در سیستمهایی با تعامل پیچیده بین اشیاء محدود می‌کند، اما در سیستم عامل‌های فعلی برای اشیاء که به‌طور مکرر قابل دسترسی نیستند یا از آنها انتظار نمی‌رود که به سرعت انجام شوند، استفاده می‌شود. اگر سیستم عامل از مکانیزم‌های محافظت پشتیبانی نمی‌کند، می‌توان محافظت را در سطح بالاتری شبیه‌سازی کرد، به عنوان مثال با شبیه‌سازی قابلیت‌ها با دستکاری جداول صفحه، اما پیامدهای عملکردی نیز وجود دارد. با وجود این، عدم وجود پشتیبانی سخت‌افزاری ممکن است برای سیستم‌هایی که تصمیم به استفاده از محافظت مبتنی بر زبان دارند، مسئله ای نباشد. تصمیم مهم در مورد طراحی هسته ، انتخاب سطوح انتزاعی است که مکانیسم‌ها و سیاست‌های امنیتی باید در آن اعمال شود. یک رویکرد استفاده از سیستم عامل و پشتیبانی هسته برای تحمل خطا است (ایجاد بالا) و ایجاد سیاست امنیتی برای رفتارهای مخرب در بالا از آن (اضافه کردن ویژگی‌هایی مانند مکانیزم‌های رمزنگاری در صورت لزوم)، واگذاری برخی مسئولیت‌ها به کامپایلر. رویکردهایی که اجرای سیاستهای امنیتی را به کامپایلر و / یا سطح برنامه واگذار می‌کنند، معمولاً امنیت مبتنی بر زبان نامیده می‌شوند. فقدان بسیاری از سازوکارهای مهم امنیتی در سیستم‌های عامل اصلی فعلی مانع از اجرای سیاست‌های امنیتی کافی در سطح انتزاع برنامه می‌شود. در حقیقت، یک تصور غلط رایج در امنیت رایانه این است که هرگونه سیاست امنیتی بدون در نظر گرفتن پشتیبانی از هسته می‌تواند در یک برنامه اجرا شود. محافظت از سخت‌افزار یا مبتنی بر زبان امروزه سیستم‌های رایانه ای معمولی دربارهٔ قوانین برنامه مجاز به دسترسی به داده‌ها از قوانینی که به سخت‌افزار اعمال شده استفاده می‌کنند. پردازنده بر اجرای آن نظارت می‌کند و برنامه ای را که نقض یک قانون است، متوقف می‌کند، مانند یک فرایند کاربری که سعی در نوشتن آن به حافظه هسته دارد. | ## بخش 3: هسته (سیستم‌عامل) | در سیستم‌هایی که فاقد پشتیبانی از قابلیت‌ها هستند، فرایندها با استفاده از فضاهای آدرس جداگانه از یکدیگر جدا می‌شوند. تماس با استفاده از فرآیندهای کاربر به درون هسته تنظیم می‌شود و آنها را ملزم به استفاده از یکی از روش‌های تماس سیستم فوق بیان می‌کند. در سیستم حفاظت مبتنی بر زبان، هسته فقط اجازه اجرای کد را می‌دهد که توسط یک کامپایلر زبان قابل اعتماد تولید شده‌است. سپس زبان ممکن است به گونه ای طراحی شده باشد که غیرممکن باشد که برنامه‌نویس بتواند دستور دهد کاری را انجام دهد که یک مورد امنیتی را نقض کند. جابجایی بین فضاهای آدرس عملیاتی کند است که باعث سربار زیاد می‌شود و در حال حاضر کارهای بهینه‌سازی زیادی انجام می‌شود تا از سوئیچ‌های غیر ضروری در سیستم عامل‌های فعلی جلوگیری شود. سوئیچینگ در یک سیستم محافظتی مبتنی بر زبان کاملاً غیر ضروری است، زیرا همه کدها می‌توانند با خیال راحت در همان فضای آدرس کار کنند. انعطاف‌پذیری هر طرح محافظتی که می‌تواند از طریق یک زبان برنامه‌نویسی بیان شود، می‌تواند با استفاده از این روش عملی شود. تغییرات در طرح حفاظت (به عنوان مثال از یک سیستم سلسله مراتبی به سیستم مبتنی بر قابلیت) نیازی به سخت‌افزار جدید ندارد. برنامه‌ها باید هنگام شروع تأیید شوند تا اطمینان حاصل شود که توسط کامپایلر صحیح کامپایل شده‌اند، یا ممکن است نیاز به بازپرداخت یا از کد منبع یا از طریق کد دیگر باشد. در سیستم‌های سنتی، برنامه‌های کاربردی اغلب کارهایی انجام می‌دهند که از نوع بی خطر نیستند. چنین عملیاتی در سیستم حفاظت مبتنی بر زبان مجاز نیست، به این معنی که برنامه‌ها ممکن است نیاز به بازنویسی داشته باشند و در برخی موارد ممکن است عملکرد خود را از دست دهند. همکاری فرایند Edsger Dijkstra ثابت کرد که از دیدگاه منطقی، عملیات قفل و باز کردن قفل اتمی که در سمفورهای باینری کار می‌کند ابتدایی کافی برای بیان هرگونه عملکرد همکاری فرایند هستند. با این حال، این رویکرد به‌طور کلی از نظر ایمنی و کارایی به نظر می‌رسد، در حالی که یک رویکرد انتقال پیام انعطاف پذیرتر است. تعداد زیادی از رویکردهای دیگر (یا سطح پایین یا بالاتر) نیز موجود است، که بسیاری از هسته‌های مدرن پشتیبانی از سیستم‌هایی مانند حافظه مشترک و تماس‌های از راه دور را پشتیبانی می‌کنند. مدیریت دستگاه I / O ایده هسته ای که دستگاه‌های I / O به‌طور یکنواخت با سایر فرایندها به کار گرفته می‌شوند، به عنوان فرآیندهای همکاری موازی، ابتدا توسط برینچ هانسن پیشنهاد و اجرا شد (اگرچه ایده‌های مشابه در سال ۱۹۶۷ پیشنهاد شد). در توضیحات هانسن در مورد این، فرآیندهای «رایج» فرایندهای داخلی نامیده می‌شوند، در حالی که دستگاه‌های I / O فرایندهای خارجی نامیده می‌شوند. مشابه حافظه فیزیکی، اجازه دسترسی مستقیم به برنامه‌ها به درگاه‌ها و ثبت‌های کنترل‌کننده می‌تواند باعث خراب شدن کنترلر یا خراب شدن سیستم شود. با این کار بسته به پیچیدگی دستگاه، برخی از دستگاه‌ها می‌توانند به طرز شگفت‌آوری پیچیده‌ای برای برنامه‌ریزی شوند و از چندین کنترلر مختلف استفاده کنند. هنگامی که یک برنامه کاربردی را روی یک دستگاه درخواست می‌کند (مانند نمایش کاراکتر)، هسته باید این درخواست را به درایور ویدیوی فعال فعلی ارسال کند. رویکردهای طراحی گسترده هسته به‌طور طبیعی، کارها و ویژگی‌های ذکر شده در بالا می‌تواند از جهات مختلفی ارائه شود که در طراحی و اجرای متفاوت از یکدیگر هستند. در اینجا مکانیسم پشتیبانی است که اجرای بسیاری از سیاستهای مختلف را امکان‌پذیر می‌سازد، در حالی که یک سیاست «حالت عملکرد» خاص است. مثال: مکانیسم: تلاش برای ورود به کاربر به یک سرور مجوز هدایت می‌شود خط مشی: سرور مجوز نیاز به رمزعبور دارد که در برابر رمزهای ذخیره شده در یک پایگاه داده تأیید شود از آنجا که مکانیسم و خط مشی جدا شده‌اند، می‌توان به عنوان مثال سیاست را به راحتی تغییر داد. در حداقل ریزگردها فقط برخی از سیاستهای اساسی وجود دارد، و مکانیسم‌های آن به آنچه در بالای هسته (قسمت باقیمانده سیستم عامل و برنامه‌های دیگر) در حال اجراست اجازه می‌دهد تا تصمیم بگیرد که کدام سیاست‌ها را اتخاذ کند (به عنوان مدیریت حافظه، زمانبندی فرایند سطح بالا، مدیریت سیستم فایل و غیره). در عوض، یک هسته یکپارچه تمایل دارد بسیاری از سیاست‌ها را شامل شود، بنابراین بقیه سیستم را برای تکیه بر آنها محدود می‌کند. عدم انجام صحیح این جدایی یکی از مهمترین دلایل عدم نوآوری اساسی در سیستم عامل‌های موجود است، مشکلی که در معماری رایانه رایج است. طراحی یکپارچه با روش معماری «حالت هسته» / «حالت کاربر» ناشی از حفاظت (که از لحاظ فنی به آن دامنه‌های محافظت از سلسله مراتبی گفته می‌شود) القا می‌شود، که در سیستم‌های تجاری معمولی رایج است؛ در حقیقت، بنابراین هر ماژول نیاز به محافظت را ترجیح می‌دهد. این پیوند بین طراحی یکپارچه و «حالت ممتاز» را می‌توان به مسئله اصلی تفکیک مکانیسم - سیاست مورد استفاده قرار داد؛ در حقیقت رویکرد معماری «حالت ممتاز» سازوکار حفاظت با سیاست‌های امنیتی را می‌بخشد، در حالی که اصلی‌ترین گزینه معماری. رویکرد، آدرس دهی مبتنی بر قابلیت، به‌طور واضح بین این دو تمایز قایل می‌شود، و به‌طور طبیعی به یک طرح ریزگرد منجر می‌شود (نگاه کنید به تفکیک حفاظت و امنیت). در حالی که هسته‌های یکپارچه تمام کدهای خود را در همان فضای آدرس (فضای هسته) اجرا می‌کنند، میکروکرنل‌ها سعی می‌کنند اکثر خدمات خود را در فضای کاربر اجرا کنند، با هدف بهبود قابلیت حفظ و مدولار بودن پایه کد. بیشتر هسته‌ها دقیقاً در یکی از این دسته‌ها جای نمی‌گیرند، بلکه در بین این دو طرح وجود دارد. | ## جمع‌بندی | طرح‌های عجیب و غریب تری از قبیل نانو هسته و اگزوکلنل موجود است، اما به ندرت برای سیستم‌های تولید استفاده می‌شود.