Az Operációs rendszerek meséje
Nemrég olvastam Andrew S. Tanenbaum kiváló könyvét, az „Operating Systems Design and Implementation”-t. Tanenbaum fizikusként foglalkozott a számítógépek működését biztosító operációs rendszerek tervezésével, kimondottan oktatási célokkal. Azt akarta megmutatni, milyen alapvető szervezési problémákat kell megoldani ahhoz, hogy egy bonyolult gép működőképes maradjon.
A könyvet olvasva jöttem rá, hogy a modern számítógépek multitasking, time-sharing operációs rendszerei (UNIX-Linux-MacOS, Windows) is olyan ember alkotta összetett rendszerek, melyek felépítése jobban hasonlít a tudatosság szerveződéséhez, mint azt valaha is gondoltam volna.
Persze nem állítom, hogy egy számítógép tudatos, érezne vagy átélne bármit is, ahhoz még sok minden hiányzik belőle (lásd a későbbi filozófiai beütésű bejegyzéseket, amiket még meg kell írnom), de az összehangolás, az erőforrás-elosztás és a prioritásképzés dilemmái feltűnően hasonlóak.
Míg a külső szemlélő számára a számítógép egyszerre lát el több feladatot (párhuzamosan dolgozik), a valóságban egy processzormagon mindig csak egy utasítás futhat, egyszerre csak egy dologgal foglalkozhat a gép. Hogy számos feladatot időben lehessen elvégezni, a rendszer rendkívül gyors váltásokkal, apró időszeletekre osztja szét a végrehajtást –a feladatokat időben gyorsan váltogatja (multiplexeli). Ez a mechanizmus teremti meg egy számítógép használatakor a folyamatosság érzetét. A Tanenbaum által tervezett, oktató célú MINIX és a modern UNIX-szerű rendszerek arra a kérdésre keresnek választ: Miként lehet rengeteg, egymással versengő folyamatot időosztásban úgy működtetni, hogy a felhasználó mindebből csak gördülékenységet érzékeljen? Egy modern számítógép nem „egy dolgot” csinál. Egyszerre futtat szövegszerkesztőt, hálózati kommunikációt, titkosítást, grafikus megjelenítést, vírusellenőrzést, háttérmentéseket. A felhasználó mindebből csupán annyit lát, hogy az ablakok reagálnak, a kurzor mozog, a billentyűzet engedelmeskedik. Ha azonban az összes futó folyamat közvetlenül és kontroll nélkül férne hozzá a hardverhez, másodpercek alatt káosz alakulna ki: lefoglalnák egymás memóriáját, ütköznének az eszközhasználatban, és a rendszer megbénulna.

Ezt a káoszt akadályozza meg az operációs rendszer. A feladata első pillantásra prózai: közvetít a hardver és az alkalmazások között, elrejti a fizikai eszközök egyediségét, használhatóvá teszi azokat, és biztosítja, hogy az egy időben futó programok ne tegyék tönkre egymást. Láthatatlan, arctalan, mégis minden rajta múlik. A részletekbe nézve azonban kiderül, hogy ez a „közvetítés” valójában folyamatos döntéshozatal.
De ki dönti el: Ki kapjon hozzáférést? Mikor? Mennyi ideig? Mi történjen, ha váratlan esemény érkezik? Hogyan osszuk el a véges erőforrásokat úgy, hogy a rendszer egészének stabilitása fennmaradjon? Egy operációs rendszer ugyanis nem engedheti meg magának, hogy figyelmen kívül hagyjon egy kritikus eseményt. Ha hardverhiba, hálózati jelzés vagy felhasználói input érkezik, a futó folyamatot félre kell tenni és kezelni a feladatot. Az operációs rendszer szívében ezt a kernel oldja meg. Ez a magprogram mindig fut (angolul a kernel a termések közepén lévő kemény magot, pl. szilvamag jelenti). Nem jelenik meg ikonként, nincs saját ablaka, mégis ő indít és állít le folyamatokat, kiosztja a CPU-időt, felügyeli a memóriát, megszervezi a perifériákkal való kommunikációt, és lehetővé teszi, hogy a programok adatot cseréljenek egymással.
Ha a kernel megáll, minden megáll. A sok feladat közül a CPU-idő kiosztása talán a legfontosabb feladat. A számítógépben ezt a kernel scheduler (időzítő) része teszi, figyelembe véve a mindenkori fontossági sorrendet (prioritásokat). De ennek felülírására a váratlan és pontos időzítést igénylő feladatok jelzésére a processzor megszakítás utasításokat (interrupt) képes fogadni, és ha ezek aktiválódnak a probléma scheduler általi kezelése elsőbbséget élvez. Ilyesmi történik, ha lenyomunk egy billentyűt, egy időzített feladatnak indulnia kell, adatcsomag érkezik a perifériák felől vagy hibás eredmény, hibás memória foglalás kérés történik. Az interrupt szó szerint kirántja a processzort az aktuális feladatból.
Ha mindezt az idegrendszer felől nézzük, a problémák ijesztően ismerősek. Az agy szintén megszámlálhatatlan feladatot végez párhuzamosan. Folyamatosan szabályozza a vegetatív működéseket, ellenőrzi a külvilágot, frissíti a test állapotának modelljét, előrejelzéseket készít, emlékeket hív elő, mozgást tervez. A legtöbb folyamat észrevétlen. Csak néhány jut be abba a szűk tartományba, amit tudatos élménynek nevezünk, mégis ez adja az egység élményét.
No de: Melyik reprezentáció maradjon aktív? Mi jusson munkamemóriába? Mely szenzoros bemenet kapjon elsőbbséget? Mely motoros terv induljon el? Mi kapjon több erőforrást?
Az operációs rendszerek kerneljéhez hasonlóan úgy tűnik, mintha az agyban is lenne valami központ, ami kezeli a fenti kérdéseket, ahol „összefutnak a szálak”.

Az agyban azonban ez nem egyetlen dobozba zárt modul, hanem egy funkcionálisan felismerhető irányító koalíció. A prefrontális kéreg, a figyelmi hálózatok, a talamikus kapuzás és az agytörzsi modulátor rendszerek együtt valami nagyon hasonlót tesznek: eldöntik, mi kapjon hozzáférést az agy kiterjedt feldolgozási kapacitásához (GNW). Mindkét esetben összetett erőforrás-elosztás történik. A háttérben rengeteg aktivitás zajlik párhuzamosan, de a globális munkatérbe –ahol a rugalmas döntés és a tervezés történik– egyszerre csak korlátozott mennyiségű tartalom jut be, egymás után rendezve. Ezért érezzük úgy, hogy gondolataink sorban követik egymást. A rendszer vált, de a váltás gyorsabb, mint amit észrevennénk.
A szervezés azonban nem merül ki az időosztásban. A számítógépnek és az agynak reagálnia kell a váratlanra. Egy megszakítás – legyen az billentyűleütés vagy hardveres hiba – azonnal elsőbbséget élvez. Az idegrendszerben hasonló hatása van a váratlanságnak, a fenyegetésnek vagy a jutalomnak. A salience-detektáló rendszerek (SN) – az insula, az elülső cinguláris kéreg, az amigdala, valamint a kéreg alatti moduláló központok (MK-k) hasonló szerepet játszanak. Vész, fájdalom, jutalom, váratlanság: ezek képesek felülírni a futó „programot”. Egy hang a sötétben azonnal felülírja a filozofálást.
Miközben mindez zajlik, a rendszer számos olyan folyamatot tart fenn, amely a felszínen nem látható. Az operációs rendszerben démonok és szolgáltatások dolgoznak csendben: kommunikálnak, ellenőriznek, optimalizálnak, energiát menedzselnek. Az agyban ugyanígy működnek a tudatalatti automatikus háttérmechanizmusok. A tudatos élmény csak a kirakat; mögötte hatalmas infrastruktúra dolgozik, ugyanúgy, mint a képernyőn megjelenő kép mögött.
A számítógép és az agy még akkor is hasonlóan viselkedik, amikor látszólag semmi nem történik. Ha a felhasználó épp nem indít programot, a számítógép nem üresjáratban van, hanem fut az ’idle process’-’nyugalmi folyamat’: karbantart, optimalizál, rendszerez, frissít, vírusellenőrzést végez. Mint meglepve tapasztaltuk, az emberi agy sem némul el soha. A DMN (bővebben itt és itt) belső modelleket futtat, múltat és jövőt szimulál, az önéletrajzi identitást frissíti, az ÉN-t csiszolgatja, amikor alszunk akkor is dolgozik agyunk, tanul, újraszervez. A külső csend mögött intenzív belső aktivitás zajlik. A laptopok és okostelefonok operációs rendszerei még ráadásul különféle üzemmódokkal is dolgoznak: energiatakarékosság, éjszakai működés, repülő mód. Ezek nem konkrét feladatokat változtatnak meg, hanem az egész rendszer hangolását. Agyunknak, tudatunknak is vannak ilyen nagyobb időléptékű állapotai: éberek, álmosak lehetünk, alhatunk, kedvtelenek vagy motiváltak, feszültek vagy ellazultak vagyunk. Ezen állapotok kialakításában a kéreg alatti MK-ból felszabaduló ingerületátvivő anyagok fontosak, átállítják, milyen módon jut be valami a feldolgozás központi szintjeire.
Mára ennyi. Azzal folytatjuk, miben hasonlít egy akadozó számítógép és egy megbomlott egyensúlyú agy egymásra.
Szerző: Gulyás Attila