Rendszermag

Rendszermag (angolul kernel): az operációs rendszer alapja (magja), amely felelős a hardver erőforrásainak kezeléséért (beleértve a memóriát és a processzort is). 

A többfeladatos rendszerekben – ahol egyszerre több program is futhat – a kernel felelős azért, hogy megszabja, hogy melyik program és mennyi ideig használhatja a hardver egy adott részét (ezen módszer neve a multiplexálás). A hardverelemek használata gyakran bonyolult programrészeket igényel, ezért ezt a feladatot gyakran egységes, absztrakt hardverelérést biztosító részekkel támogatja. Ezek a részek elrejtik a bonyolult módszereket és egy tiszta, egyszerű felületet biztosítanak, amivel megkönnyítik a hardverelemeket használó programozók munkáját.

A rendszermag nem „látható” program, hanem a háttérben futó, a legalapvetőbb feladatokat ellátó program.

Egy számítógép működéséhez nem feltétlenül szükséges operációs rendszer és annak magja: az egyes programok közvetlenül betölthetőek és használhatóak a „csupasz vason”, feltéve, hogy a programozó vállalja azt, hogy mindent közvetlenül, operációs rendszeri segítség nélkül fog kezelni. A kezdeti számítógépek esetén ez volt a normális működési mód: minden egyes új program elindításához a gépet újra kellett indítani. Az idő előrehaladtával apró segédprogramok, rutinok állandósulni kezdtek, azokat több programhoz is használták, és kialakultak azok a szokásos programrészek, melyeket újraindítás után újra használni szerettek volna, mint például egyes betöltő (indító, boot) programok vagy hibakeresők. Ezekből alakultak ki a kezdeti operációs rendszerek.

A kerneleknek négy fő kategóriáját különböztethetjük meg (eltekintve azon programkörnyezetektől, melyek kernel nélkül futnak):
 a monolitikus kernelek gazdag és hatékony absztrakciókat biztosítanak az alattuk található hardware elemekhez;
 a mikrokernelek egy kis méretű alapkészletet biztosítanak a hardware kezeléséhez, és számos alkalmazással – amiket „szervereknek” nevezünk – biztosítják a további, részletesebb funkcionalitást; 
 a hibrid vagy módosított mikrokernelek hasonlóak a színtiszta mikrokernelekhez de több, részletesebb kódot tartalmaznak a kernelmagban, hogy nagyobb sebességet érjenek el;
 az exokernelek (vagy rendszer rutinkönyvtárak) nem biztosítanak absztrakciókat vagy állandó rendszermagot, hanem egy programokban használható rutinkönyvtárból állnak, ami a hardver közvetlen vagy közvetett elérését biztosítja.

Monolitikus kernelek 

A monolitikus kernel, a számítógépes operációs rendszerek között, az egyetlen nagy programból álló rendszermag, nem pedig különálló, egymással különböző interfészeken keresztül kommunikáló programok összessége, mint napjaink mikrokernelei. A Linux rendszer magja még kifejlesztése után 15 év elteltével is monolitikus felépítésű, noha Andrew S. Tanenbaum professzor már kezdetben elavultnak nevezte a monolitikus struktúra miatt.

Az operációs rendszerek kutatói manapság már inkább mikrokernellel működő rendszereket javasolnak, hiszen így könnyebb fejleszteni, és a rendszer funkcionalitása is gazdagabb lehet.

Példák monolitikus kernelre:
 tradicionális UNIX kernelek, mint amilyenek a BSD-k,
 a Linux kernel kifejezetten ilyen

Fontos megjegyezni, hogy bár a Linux képes modulokat dinamikusan betölteni, azokat nem felhasználói szinten, elkülönített címtérben futtatja, hanem a saját, ún. kernel-space-ben, ezért tévedés azt feltételezni, hogy mikrokernel lenne.

Mikrokernelek 

A mikrokernelek azáltal, hogy az általuk nyújtott funkciók nagy részét felhasználói szintre (userspace) helyezték egy plusz absztrakciós szintet biztosítanak. Ennek előnye, hogy a felhasználói szinten futó programrészek szeparáltak (a rendszermagtól éppúgy, mint egymástól), hibáinak vagy működési zavarainak esetén azok nem veszélyeztetik a rendszer egészének a működését, és így a rendszer stabilitása nagy mértékben nő. A Minix például rendelkezik egy ún. reinkarnációs szolgáltatással, melynek lényege, hogy az egyes rendszerkomponensek hibája esetén a kérdéses komponenst – a rendszer többi része számára teljesen transzparens módon – újraindítja, és a működöképességét helyreállítja (lásd öngyógyító rendszer). A mikrokernel hátránya azonban, hogy tervezése nagyobb odafigyelést igényel, mivel ha nem kellő körültekintéssel írják meg, akkor – mint minden új absztrakciós szint bevezetésének köszönhetően – csökken a rendszer teljesítménye, és így esetleg egyes kritikus feladatokat (nagyon gyors és pontos elérést igénylő hardware elemek kezelését) nem tudja hatékonyan megoldani. A múlt században sokáig vitatott téma volt, hogy lehetséges-e hatékonyra írni egy mikrokernelt, míg végül Jochen Liedtke német egyetemista bizonyításképpen meg nem alkotta 1993-ban az L3 kernelt.
Érdekesség, hogy felépítésre az AmigaOS is mikrokernel, azonban a komponensek ugyanazon címtéren belül futottak, így sokan nem tekintenek rá igazi mikrokernelként. Ugyanakkor a közös címtér lehetővé tette, hogy a rendszerkomponensek közötti üzenetküldéshez elég legyen egy mutató átadása, ezáltal teljesítményben nem maradt el a monolitikus kernelektől.

Példák mikrokernelekre és olyan operációs rendszerekre, melyek mikrokernelt használnak 
 AmigaOS az egyik legkorábbi kereskedelmi forgalomban megjelent mikrokernel
 AIX
 Chorus mikrokernel
 EROS
 K42
 KeyKOS (nanokernel)
 az L4 mikrokernel család, az L3 kernel utóda
 Mach (kernel), amit a GNU Hurd és a Mac OS X használ
 Minix
 MorphOS
 QNX
 RadiOS
 Spring mikrokernel
 VSTa
 Singularity a Microsoft kísérleti rendszere, mely egyetlen címteret használ, így sebessége megegyezik a monolitikus kernelekkel

Hibrid kernelek 

A hibrid kernelek alapjában véve olyan mikrokernelek, amelyekben néhány „nem létfontosságú” kódrészletet átmozgattak a felhasználói szintről (userspace) a kernel szintre (kernelspace) azért, hogy az kevesebb absztrakciót használva, gyorsabban fusson.

Néhányan összetévesztik a „hibrid kerneleket” az olyan monolitikus kernelekkel, amelyek indulásuk után modulokat képesek betölteni. Ez helytelen: a „hibrid” kifejezés utal arra, hogy a kérdéses kernelnek mind a monolitikus, mind a mikrokernelek elveit és mechanizmusait alkalmazza; különösen az üzenetcserét (message passing) és a „nem létfontosságú” kódok felhasználói szintre való áthelyezését amellett, hogy néhány ilyen kód teljesítményi okokból a kernelmagba kerül.

Példa hibrid kernelekre 
 Windows NT, amit a Microsoft Windows NT alapú termékek használnak
 XNU
 DragonFly BSD
 ReactOS
 BeOS kernel

Exokernelek 
Az exokernelek radikálisan új megközelítést jelentenek, és az eredmény egy nagyon kis méretű rendszermag. Gyakorlatilag a programozó tudja eldönteni, hogy a kernel mely részeit kívánja alkalmazni, és így a lehető legpontosabban szabályozhatja a hardware hozzáférések módját, és nem alkalmaz olyan rendszermag–részeket, melyekre nincs szüksége.

Az exokernelek elve legalább 1995 óta létezik , de 2004-ben még mindig inkább csak fejlesztési és kutatási stádiumról beszélhetünk, és jelenleg még nem használják kereskedelmi forgalomban levő vagy elterjedt rendszerekben. Egy exokernelen alapuló rendszer a Nemesis, melyet a Cambridge-i Egyetem, a Glasgow-i Egyetem, a Citrix Systems és a Svéd Számítógéptudományi Intézet dolgozott ki. Az MIT is számos exokernel alapú rendszert épített már.

További információk 
 Operációs rendszerek magjai a Sourceforge-on
 MIT Exokernel Operating System
 kernel image
 A KeyKOS Nanokernel Architektúra, Norman Hardy és mások 1992-es munkája

Operációs rendszerek