Rendszermag

A Wikipédiából, a szabad enciklopédiából
(Exokernel szócikkből átirányítva)

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[szerkesztés]

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[szerkesztés]

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[szerkesztés]

Hibrid kernelek[szerkesztés]

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[szerkesztés]

Exokernelek[szerkesztés]

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 [1], 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[szerkesztés]