در علم کامپیوتر، هسته (kernel) اساسیترین بخش یک سیستم عامل است. هسته سیستم عامل برنامهای است که دسترسی ایمن به سختافزار را برای برنامههای گوناگون فراهم میکند. به علت تعدد برنامههای کامپیوتری، همچنین از آنجایی که دسترسی به سختافزار محدود است، هسته از طریق تکنیکی که Multiplexing نامیده میشود، تصمیم میگیرد که یک برنامه چه وقت و به چه مدت میتواند بخشی از سختافزار را در اختیار بگیرد. از آنجایی که دسترسی مستقیم به سختافزار میتواند بسیار پیچیده باشد، معمولا هسته سیستمهای عامل مجموعهای از سختافزارهای مجرد را پیادهسازی میکنند. این مجردسازی پیچیدگیهای سختافزاری را پنهان میکند و رابطی (Interface) ساده و یکنواخت برای سختافزار فراهم میکند که استفاده از آن را برای برنامهنویسان آسانتر میکند.
برای اجرای یک برنامه بر روی کامپیوتر وجود هسته در سیستم عامل ضروری نیست. برنامهها میتوانند مستقیما بر روی کامپیوتر بارگذاری و اجرا شوند، به شرط آنکه نویسنده برنامه توانایی نوشتن چنین برنامههایی را، بدون پشتیبانی سیستم عامل و انتزاع سختافزاری داشته باشد. اجرای برنامهها بدون استفاده از سیستم عامل، در بسیاری از کامپیوترهای اولیه روش معمولی بوده است. البته، در این روش برای اجرای برنامههای مختلف لازم بود که مجددا کامپیوتر راهاندازی (Reset) و برنامه بارگذاری شود. سرانجام برای رفع این مشکل برنامههای کمکی کوچکی مثل loaderها و debuggerها ایجاد شدند، که حین اجرای برنامههای مختلف در حافظه باقیمیماندند یا از حافظه ROM بارگذاری میشدند. با تولید این برنامههای کمکی پایه و اساس چیزی که ما آن را هسته سیستم عامل میخوانیم شکل گرفت.
چهار نوع دسته بندی کلی برای هسته سیستمهای عامل وجود دارد:
1. هسته یکپارچه (Monolithic)، که انتزاع (abstraction) [1] سختافزاری نیرومندی را فراهم میآورد.
2. ریزهسته (Microkernel)، که مجموعهای کوچک از انتزاع ساده سختافزاری را به وجود میآورد و از نرمافزارهایی با نام سرویسدهنده (Server) استفاده میکنند تا قابلیت بیشتری را ارایه دهند.
3. هسته دورگه (Hybrid) یا "ریزهسته اصلاح شده"، که شباهت زیادی به ریزهسته دارد، با این تفاوت که به منظور اجرای سریعتر، شامل کدهایی اضافی در فضای هسته میباشد.
4. برونهسته (Exokernel)، که هیچ گونه انتزاعی را فراهم نمیکنند، ولی با استفاده از کتابخانهای از توابع (libraries) برای افزایش کارایی، دسترسی مستقیم یا نیمهمستقیم به سختافزار را فراهم میکنند.
هسته یکپارچه (Monolithic)
هسته یکپارچه (Monolithic)، یک رابط مجازی سطح بالا بر روی سختافزار تعریف میکند. همچنین مجموعهای از توابع برای پیادهسازی سرویسدهندههای سیستم عامل، مانند مدیریت پردازشها (Process Management)، همزمانی (Concurrency) و مدیریت حافظه را فراهم میآورد.
حتی اگر تمام اجزایی که به این عملیات سرویس میدهند از کل مجموعه هسته جدا باشند، از لحاظ همبستگی کد در تنگنا سختی خواهیم بود و با توجه به اینکه تمام اجزا در یک فضا اجرا میشوند، بروز خطایی در یکی از آنها میتواند کل سیستم را مختل کند. از طرفی دیگر، وقتی که پیادهسازی تکمیل و قابل اطمینان شد، شرایط همبستگی تنگاتنگ بین اجزای داخلی باعث میشود که امکانات سطح پایین سیستم به طور موثری در دسترس قرار گیرد و منجر به یک هسته یکپارچه، با کارآیی بسیار بالا شود.
طرفداران هستههای یکپارچه عقیده دارند که اگر کدی خطا دارد نبایستی در هسته قرار داشته باشد (متعلق به هسته باشد). چرا که در غیر این صورت، برتری اندکی نسب به ریزهستهها خواهند داشت. سیستمهای عامل Linux و Unix را میتوان جزو پیشرفتهترین هستههای یکپارچه دانست.
[1] ویراستار: منظور از انتزاع سختافزاری، امکان عمل نمودن مستقل یک برنامه بدون توجه به سختافزاری است که بر روی آن اجرا میشود. در زمان پیش از کامپیوترهای شخصی (PC)، برنامههای کامپیوتری تنها بر روی یک سختافزار مشخص اجرا میشدند و امکان اجرای آنها بر روی سیستم دیگری نبود. از جمله دلایل آن میتوان به تفاوت ساختار و عملکرد CPU های مختلف (مانند CPU های اینتل و موتورولا) با یکدیگر اشاره کرد. در این میان، سیستم عامل، از این نظر که به برنامهها امکان اجرا بر روی سختافزارهای متفاوتی را بدهد، نقشی بسیار حیاتی را بر عهده دارد.
هسته سیستم عامل (Operating System's Kernel) یا به اختصار «هسته» مهمترین قسمت هر سیستم عامل است.
هسته سیستم عامل، عبارت است از یک مجموعه نرمافزار، که وظیفه مدیریت منابع سیستم، و ارتباطات بین نرم افزارها و سخت افزار سیتم را بر عهده دارد.
هسته به مولفه هایی تقسیم شده است که هر کدام، وظیفه خاصی بر عهده دارد. مولفه های اصلی هر هسته سیستم عامل، در شکل زیر نشان داده شده است.
در شکل بالا، قسمتی که با رنگ قرمز نشان داده شده، هسته سیستم عامل است. همانطور که ملاحظه میشود، تمام عملکرد اصلی سیستم عامل (یعنی مدیریت منابع سخت افزار، مدیریت پردازش ها، مدیریت حافظه و...) را هسته آن انجام میدهد.
هستهٔ لینوکس یک هسته سیستمعامل آزاد شبیه یونیکس است که توسط لینوس توروالدز در سال ۱۹۹۱ ساخته شد و سپس با کمک توسعهدهندگان در سراسر جهان پیشرفت داده شد.
این نرمافزار در اصل بر روی پردازندهٔ اینتل مدل 80386 و تقریباً بطور کامل با استفاده از زبان برنامهنویسی سی نوشته شدهاست. این هستهٔ سیستمعامل تحت مجوز عمومی گنو بصورت نرمافزار آزاد توزیع میشود.
هستهٔ لینوکس بهترین هستهٔ شناخته شده برای هسته سیستمعامل گنو/لینوکس است. توزیع نرمافزار براساس این هسته «توزیع گنو/لینوکس» نامیده میشود.
در سال ۱۹۹۱ توروالدز بوجود آمدن این هسته را با یک رایانامهٔ تاریخی و مشهور بر روی یوزنِت در گروه خبری comp.os.minix اعلام کرد :
در این زمان پروژه گنو تعداد زیادی از اجزاء مورد نیاز یک سیستمعامل آزاد را ساخته بود اما هستهٔ آن ناقص و خارج از دسترس بود. بنابراین هستهٔ نوشته شده توسط توروالدز برای این سیستمعامل آزاد استفاده شد.
در سال ۱۹۹۱، سیستمعامل بی.اس.دی هنوز نتوانسته بود خود را از قید و بندهای عرفی رها کند با این وجود، شرکت یک فضا برای هستهٔ لینوکس باز کرد و با وجود عاملیت محدود، نسخههای اولیه آن به سرعت توسعهدهندگان و کاربرهای خود را جمع کرد. به زودی هکرها در بهینهسازی دستورالعملها و ایدههای هسته لینوکس شرکت کردند و امروزه تعداد افرادی که در این موراد همکاری میکنند به صدها برنامهنویس رسیده است.