در سطحی کاملاً فنی، هسته (Kernel) یک لایه واسط میان سختافزار و نرمافزار است. وظیفه آن ارسال درخواست برنامههای کاربردی به سختافزار است و به عنوان مولفه سطح پایینی از سیستم کامپیوتری میان سیستم عامل و سختافزار عمل می کند. به طوری کلی تمرکز کتابها و منابع درس سیستم عامل در دوره کاردانی و کارشناسی شاخههای کامپیوتر بر روی هسته سیستم عامل است.
درواقع هسته کنترل کننده رفتار یک سیستم عامل و واسطه ای میان نرمافزار (سیستم عامل و دیگر نرم افزارها) و سختافزار (مانند هارد دیسک، پردازنده و غیره) است. به طور مثال انتقال دادهها از روی دیسک به حافظه اصلی بر عهده هسته سیستم عامل است به طوری که هسته سیستم عامل تصمیم میگیرد که این کار را چگونه صورت گیرد. در این حالت برنامه کاربردی که لازم دارد تا دادهها از دیسک به حافظه اصلی منتقل شود تنها درخواست لازم را به سیستم عامل می دهد.
به طور کلی هیچ برنامه کاربردی به صورت مستقیم با سختافزار ارتباط ندارد، بلکه همانطور که گفته شد هدف از سیستم عامل (هسته آن) به عنوان واسطه میان برنامههای کاربردی و سختافزار است تا استفاده از سختافزار به سادگی و بدون دخالت کاربران سیستم عامل و توسعه دهندگان نرمافزارها صورت گیرد.
ز نقطه نظر دیگر هسته سیستم عامل به عنوان مدیر منابع (Resource Management) است در جایی که چندین برنامه کاربردی به صورت همزمان (Cuncurrent) در حال اجرا بر روی سیستم هستند. در این حالت هسته به عنوان مسئول اشتراک منابع موجود (مانند پردازنده، فضای دیسک، اتصال های شبکه و غیره) میان فرایندهای مختلف سیستم است به طوری که یکپارچگی سیستم (System Integrity) تضمین می شود.
هسته سیستم عامل به عنوان مجموعهای از کتابخانهها است که توابعی را برای دسترسی برنامههای کاربردی به هسته فراهم می کند. این توابع که درون هسته سیستم عامل فراهم شدهاند را فراخوان سیستم می نامند. فرخوان سیستمی این امکان را میدهد تا برنامههای فضای کاربر از طریق این توابع به عملکردهای هسته سیستم عامل دسترسی داشته باشند.
به عنوان یک نمونه میتوان فراخوان سیستمی ()sys_open را در لینوکس نام برد. در لینوکس هسته و به طبع آن فرخوانی های سیستمی به زبان C هستند. حال برنامه نویسی میخواهد درون برنامه خود یک فایل ذخیره شده درسیستم فایل لینوکس را بخواند. به دلیل آنکه دسترسی به سیستم فایل و چگونگی دسترسی به فایلهای ذخیره شده تحت کنترل سیستم عامل (و قاعدتاً هسته آن) است، بنابراین برنامه نویس باید از فرخوان سیستمی ()sys_open برای بازکردن و خواندن آن فایل استفاده کند. از این رو میتوان هسته سیستم عامل را به عنوان واسطه ای عنوان کرد که با استفاده از آن برنامه نویسان به سختافزار دسترسی داشته باشند.
همچنین هسته سیستم عامل مکانیزم های لازم برای راتباط میان فرایندها را فراهم میکند . IPC (یا InerProcess Comunication) روشی برای ارتباط میان فرایندها است و به برنامه ها اجازه میدهد تا با یکدیگر ارتباط داشته باشند. کنترل سخت افزارها و درایورهای آنها نیز بر عهده هسته سیستم عامل است. هسته سیستمهای عامل مسئول راه اندازی درایورهای سخت افزاری هستند به طوری که هسته های امروزی این قابلیت را دارند زمانی که سیستم عامل در حال اجرا است، سختافزار متصل شده را شناسایی کنند.
با توجه به آنچه که گفته شد میتوان کرنل سیستم عامل را به منزله هسته (Core) مرکزی سیستم عامل است که بر تمامی سیستم عامل و هر آنچه که در آن روی میدهد کنترل کامل دارد.کاربران به طور مستقیم با هسته سیستم عامل تعامل نیستند.
هسته سیستم عامل اولین بخش از سیستم عامل است که در زمان راه اندازی (Boot) سیستم درون حافظه اصلی (Main Memory) بار (Load) میشود و تا زمانی که سیستم عامل در حال اجرا باشد، در حافظه اصلی باقی خواهد ماند. پس میتوان نتیجه گرفت که کوچک شدن هسته تا حد ممکن مهم است به طوری که تمامی سرویس های لازم (مراجعه به بخش عناصر هسته سیستم عامل) برای سیستم عامل و دیگر برنامهها را فراهم کند. یکی از اصلیترین جنبههای طراحی سیستم عامل محافظت هسته از دیگر برنامههای (فرایندهای) موجود در حافظه اصلی است. از این رو کدهای هسته درون ناحیه محافظت شدهای از حافظه اصلی بار می شوند. هسته سیستم عامل وضایف خود (مانند اجرا و مدیریت فرایندها، مدیریت و اداره وقفه و غیره) را در فضای هسته انجام می دهد. از سوی دیگر برنامهها و فرایندهای کاربران در فضای کاربر اجرا می شوند.
فرایندها و هسته برای اجرا شدن باید در فضای آدرس حافظه اصلی قرار بگیرند، از این رو فضای آدرس به دو قسمت فضای آدرس مد هسته (فضای هسته یا Kernel Space یا Kernel Mode) و فضای آدرس مد کاربر (فضای کاربر یا User Mode یا User Space) تقسیم میشوند و به دلیل محافظت از هسته در مقابل خرابی های فرایند های مد کاربر، فرایندهای مد کاربر (فضای کاربر) قادر به دسترسی به فضای آدرس مد هسته نمی باشند. به طور مثال در سیستم عامل لینوکس ،فضای حافظه اصلی به دو قسمت فضای هسته و فضای کاربر تقسیم می شود. در فضای کاربر فرایند ها و برنامههای کاربران میتوانند از کتابخانههای فراهم شده توسط سیستم عامل استفاده کنند. به طور مثال در سیستم عامل لینوکس یک برنامه کاربردی میتواند درون قطعه کد خود از یک کتابخانه لینوکس که به زبان C است استفاده کند. شکل زیر (شکل ۱) نمایی از فضای کاربر و هسته را نشان می دهد.
پس فضای کاربر و هسته به صورت خلاصه :
- فضای حافظه اصلی به دو قسمت فضای کاربر و فضای هسته تقسم می شود. به عبارتی فضای آدرس دهی حافظه اصلی به دو قسمت فضای هسته و فضای کاربر تقسیم می شود.
- هسته سیستم عامل در مد (فضای) هسته تا زمانی که سیستم عامل در حال اجرا باشد، مقیم خواهد ماند.
- با قرار گیری هسته در فضا (مد) هسته ، از آن در مقابل فرایندهای فضای کاربر محافظت می شود. به عبارتی هیچ فرایندی از فضای کاربر حق دسترسی و نوشتن بر روی فضای هسته را ندارد. به عبارتی فرایندهای موجود در فضای کاربر در بخش محدود شدهای از حافظه قرار دارند . از طرفی هسته که در مد (فضای) هسته قرار دارد میتواند به تمامی فضای آدرس حافظه اصلی (فضای هسته و کاربر) دسترسی داشته باشد. تنها روشی که اجازه دسترسی به هسته را از فضای کاربر می دهد، استفاده از فراخوان سیستمی است.
- در صورتی که یک فرایند در فضای کاربر توسط یک فرخوان سیستمی قصد دسترسی به سرویس های هسته را بکند، از این رو یک وقفه نرم افزاری رخ خواهد داد.
- به دلیل آنکه هر فرایند برای اجرا شدن توسط پردازنده ابتدا باید در حافضه اصلی قرار گیرند، از این رو فرایند ها یا در مد هسته و یا در مد کاربر قرار دارند. همچنین امکان سوئیچ فرایند میان این دو فضا تنها توسط فرخوان سیستمی وجود دارد.
- قاعدتاً فضای آدرس مد هسته از فضای آدرس مد کاربر مجزا و متفاوت است.
هسته سیستم عامل چیست – بخش دوم
هسته سیستم عامل چیست – بخش سوم
هسته سیستم عامل چیست – بخش چهارم