Ezen az oldalon arról lesz szó, hogyan jutunk el a számítógép bekapcsolásától a működő programokig, vagyis hogyan épül fel egy operációs rendszer, miért van egyáltalán szükség rá.
Szoftver
Ha bekapcsolunk egy számítógépet, akkor mindig az történik, hogy a szoftver kezd el a gépen futni. Lássuk, mit is jelent ez.
A szoftver maga hagyományos digitális információ, de nem csak egyszerű adat, mert amikor “futtatjuk,” akkor ez a szoftver (más néven: program) irányítja a számítógépet – enélkül az csak egy nagyon drága dísztárgy lenne. Amikor egy szoftver úgymond fut, az azt jelenti, hogy nem csak ott van egy fájlban valahol a számítógépen, de be is van töltve a számítógép memóriájába, és éppen teljesíti a benne foglalt parancsokat (még ha az per pillanat azt is jelenti, hogy a program csak ül és vár).
A szoftver csak és kizárólag parancsokból áll; a processzor és a többi hardver ugyanis csak egyértelmű utasításokat tud végrehajtani, nem tudnak önálló döntéseket hozni, meg úgy általában semmit se tehetnek azon kívül, hogy parancsokat hajtanak végre. Ha egy “döntésképes” programot akarunk írni, akkor is olyan egyszerű parancsokból kell azt felépíteni, amik meghatározzák, hogy a programnak milyen esetben hogyan kell döntenie. Ha intelligens programot akarunk írni, akkor is konkrétan meg kell határoznunk, hogy a programnak milyen körülmények közt mit kell csinálnia. Végső soron minden esetben a programozó által megadott szabályok szerint tud csak egy program cselekedni.
Azt kell még tudni, hogy a processzor csak nagyon elemi műveleteket tud végrehajtani. Ez kis túlzással kimerül abban, hogy a memória tartalmát módosítani tudja, alapvető matematikai és logikai műveleteket tud elvégezni, és egyszerű jelekkel tud a többi eszközzel kommunikálni. Ezeket az elemi műveleteket használva önmagukban csak egyszerű programokat lehet írni, miközben a legtöbb általunk használt program ennél sokkal összetettebb. Egy mondatban összefoglalva az operációs rendszer szerepét: a legbonyolultabb programok megírását is leegyszerűsíti, és lehetővé teszi azoknak a használatát.
Az operációs rendszernek és az alább megemlítendő részeinek mind az a feladata, hogy egymásra épülve egyre összetettebb szolgáltatásokat nyújtsanak a különböző programoknak. Ezek mind olyan szolgáltatások, amik a programok működését egyszerűsítik le, vagy ha úgy tetszik, ugyanakkora befektetéssel összetettebb programok megírását teszik lehetővé. Ezen túl az operációs rendszer osztja el a programok közt a fizikai erőforrásokat.
Lássuk, ez mit jelent.
Hardver és szoftver határán: driverek
A driverek vagy magyar fordításban (hardver-)illesztőprogramok teszik lehetővé, hogy a számítógépünk mindenféle hardverrel együtt tudjon működni.
Amikor egy operációs rendszer vagy egy program kiad egy parancsot egy eszkönek, azt meglehetősen nagyvonalúan teszi, úgy hogy az a parancs bármelyik konkrét eszköznek szólhatna – “jelenítsd meg ezt a monitoron!”; “töltsd be ezt a fájlt erről a DVD-ről!”; stb. A hardverelemek viszont nagyon egyszerű lények, az ilyen parancsokat nem tudják értelmezni. (Sőt: gyakran egyáltalán nem tudnak parancsokat értelmezni saját processzor híján). A driver az, ami a számítógép parancsait leegyszerűsíti, lefordítja olyan jelekké, amivel a hardver tud kezdeni valamit, és ugyanez a driver az, ami a hardvereszközök visszajelzéseit a számítógépnek tolmácsolja. Van az a vicc, hogy:
Egy zsiráfot hogy raksz be egy hűtőbe? Hát megfogod a hűtő ajtaját, kinyitod, megfogod a zsiráfot, belerakod a hűtőbe, elengeded a zsiráfot, behajtod a hűtőajtót. (Aztán amikor az elefántot rakod be, előtte ki kiveszed a zsiráfot.)
— Na, a hardvereknek pont ilyen szintre kell lefordítani azt az ukázt, hogy “zsiráfot a hűtőbe!”.
Hogy miért nem adja ki már eleve ilyen egyszerűen a parancsokat a számítógép driver nélkül? Azért, mert a konkrét hardver számára értelmezhető konkrét parancsok mind-mind eltérnek a különböző hardverelemek esetén. Ha a számítógép programjában csak általános parancsok szerepelnek, és csak az épp csatlakoztatott hardverhez telepítünk drivereket – amik ezen parancsokat lefordítják -, akkor sok helyet spórolhatunk. Ha pedig kicseréljük a hardvereinket, egy új driverrel ugyanúgy együtt tud működni a számítógép.
Olyan is van viszont, hogy több hardver ugyanazon a szabványszerű módon működik (ugyanazon parancsokból ért, és ugyanolyan jeleket küld a gépnek), így egyetlen illesztőprogrammal működik az összes hasonló eszköz – ilyenek például az USB-memóriák, egerek, billentyűzetek.
Ugyanez összefoglalva egy egyszerű ábrán: Ahhoz, hogy egy hardverelemet az operációs rendszer kezelni tudjon, a drivernek kell kezelnie a köztük folyó kommunikációt. Szabványosított hardverelemek esetén elég egyetlen szabványdriver.
Az operációs rendszer
Technikai szempontból
Az, amit operációs rendszer néven a boltban megveszel vagy akárhonnan letöltesz, nem pusztán operációs rendszer, hanem tartalmaz egy rakat drivert, az operációs rendszertől független pluszszolgáltatást és alkalmazást is. Amikor itt operációs rendszerről beszélek, akkor azalatt csak a technikai értelemben vett operációs rendszert kell érteni – nem tartozik bele semmilyen alkalmazás, még ha eleve telepítve is volt a rendszerre.
Az operációs rendszer részei és az azon futó programok bizonyos egységekre bonthatók, és egy hierarchiát alkotnak, függnek egymástól, vagyis egy bizonyos elem működéséhez működnie kell egy sor másik elemnek is – például ahhoz, hogy a böngésződ használni tudd, működnie kell az alkalmazások futtatását lehetővé tevő rendszernek, a hálózati rendszernek – amik működése megint másik rendszereket igényelhet -, és pár olyan alapvető rendszernek is operálnia kell, ami az emberi interakciót lehetővé teszi (egér, billentyűzet, monitor által). És a legfontosabb, amitől minden függ, aminek mindenképp működnie kell – a kernel.
A kernel az operációs rendszer magja, vagy ha úgy tetszik: ez a legszűkebb értelemben vett operációs rendszer, minden más csak adalék. Ez az a rész, ami alapvetően lehetővé teszi bármilyen kód vagy program futtatását, minden más konkrét funkció erre épül. Ez egy meglehetősen egyszerű, sallangmentes rendszer, mérete a megabájtok szintjén mozog, így összességében nagyon kis hányadát teszi ki a bővebb operációs rendszernek.
Mire jó, miért van? – avagy a programozó szemszögéből
Hogy megértsük, a kernelen túli bővebb, sallangos operációs rendszer miért van, egy programozó (vagy egy alkalmazásokat gyártó vállalat) helyébe kell képzelnünk magunkat.
Tegyük fel, hogy a nulláról indulva kezdünk el programokat írni a számítógépekre. Ekkor minden egyes (mind a sokmillió) program megírásánál külön meg kell írni azt a részt, ami a billentyűzettel kommunikál, és bizonyos jelek fogadása esetén beszúr egy megfelelő betűt a megfelelő helyre. Mindig meg kell írni azt a részt, ami lehetővé teszi, hogy ablakokban és azokon belül különböző grafikus eszközökkel (gombokkal, kapcsolókkal stb.) dolgozzon a felhasználó. Meg kell írni külön azokat a részeket, amik egy fájl elmentése esetén a merevlemezzel (vagy akárcsak annak az illesztőprogramjával) kommunikálnak, és a megfelelő biteket elmentik a megfelelő helyre. Meg kell írni azokat a részeket, amik egy fájl letöltésénél elvégzik a – majd látni fogjuk, nem is kevés – protokolláris feladatokat. És így tovább.
És ekkor még mindig csak egy programunk tud egyszerre futni, mert nem hangoltuk össze a különböző programokat, amik egyszerre akarnak a képernyőn megjelenni, a merevlemezre írni, a processzort használni és egyszerre fogadnának jeleket a billentyűzettől és az egértől. Ez a sor is csak folytatódik. Még ha nem is tudunk valójában programozni, akkor is elhihetjük, hogy a fentebbi dolgok leprogramozása – főleg azon a zsiráfos-hűtős szinten – nem kis feladat.
Az operációs rendszer – a kernel és a pluszszolgáltatások – az itt felsorolt fáradságokat takarítja meg egy program írásakor.
Az operációs rendszer alapanyag.
Ha egy programot írunk, akkor felhasználhatjuk az operációs rendszer által rendelkezésre bocsátott szolgáltatásokat – nagyjából csak annyit kell írni, hogy “legyen egy ablak, legyen benne itt és itt egy gomb, ott meg ott egy szövegmező” és kész, ezek mind működnek, mi meg foglalkozhatunk a program lényegi részével. Ugyanúgy van ez egy csomó más, a felhasználó számára láthatatlan szolgáltatással is, például amikor a merevlemezre mentünk el egy fájlt, vagy az internethez kapcsolódunk. Gyakorlatilag ha van olyan dolog, amit egynél több program csinál, akkor az operációs rendszernek valószínűleg van olyan szolgáltatása, amire a programozónak csak hivatkoznia kell, és a probléma ezzel nagyjából meg van oldva.
Az operációs rendszer infrastruktúra.
Ugyanakkor az operációs rendszer nem csak egyszerű alapanyag, de aktívan foglalkozik is a rajta futó programokkal; megfelelően elosztja közöttük az erőforrásokat, és a felhasználó igényeinek megfelelően korlátozza, hogy egy program mit tehet meg. (Például egy program se foglalhatja le a processzor teljes kapacitását.) Egy operációs rendszer legfőbb feladata ez – hogy lehetővé tegye egyszerre több program futtatását -, így az ehhez kapcsolódó szolgáltatások jórészt a kernelben találhatók meg.
A többi funkció nagy része viszont már nem a kernelbe van beépítve, hanem “pluszszolgáltatásként” érhető el. Ezeknek is különféle alapanyag- és infrastruktúraszerepük van, illetve a nem létfontosságú driverek is ennek a részét képezhetik. Ha ezek nem a kernelbe vannak építve, akkor a kernel egy kis méretű, egyszerű, hatékony rendszer lesz. Ez azt jelenti, hogy sokkal könnyebb azt fejleszteni, karban tartani, sokkal kevesebb benne a hibalehetőség, és végül a pluszszolgáltatások közül is kikapcsolhatóak azok, amikre nincs szükség – amivel erőforrásokat takaríthat meg a felhasználó.
Alkalmazások
Egy alkalmazás egyetlen egyszerű program is lehet, ami csak a kerneltől függ, de akár egy olyan összetett programcsomag is lehet, ami támaszkodhat azon túl mindenféle pluszszolgáltatásra is. Technikailag illik különbséget tenni program és alkalmazás közt: míg az előbbi konkrét technológiai fogalom (szoftvert jelent), addig alkalmazás alatt azt a “programot” értjük, amit a felhasználó telepít, használ, és program néven ismer.
A programok (alkalmazások) úgy működnek, hogy az alattuk lévő rétegeknek (a pluszszolgáltatásoknak, operációs rendszernek és közvetlenül a processzornak) adnak parancsokat, ezekkel a rendszerekkel kommunikálnak. A sablonszerű parancsok (tölts le valamit!, nyiss meg valamit!, jeleníts meg valamit!, stb.) esetén általában az operációs rendszer valamelyik alapszolgáltatását vagy egy más szolgáltatást vesznek igénybe, a többi esetben pedig maguk végzik el a megfelelő műveleteket.
Mindenki függ valamitől – összefoglaló
A hardveren futó szoftverek tehát a következő kategóriákra oszthatók: Operációs rendszer (kernel és plusszolgáltatások, ezeken belül driverek) és programok. A táblázat és a nyilak azt mutatják, hogy melyik elem mitől függ, mire van szüksége a működéshez. A driverek a hardvertől függnek. A kernel a kritikus driverektől függ. A pluszszolgáltatások függnek a kerneltől, saját drivereiktől és sok esetben egyéb pluszszolgáltatásoktól is. Végül a programok függnek a kerneltől és bizonyos pluszszolgáltatásoktól.
Amikor a számítógépet bekapcsoljuk, megintcsak a függőségi viszonyokat kell nézni, ha ki akarjuk találni, hogy milyen sorrendben indulnak el a rendszer különböző részei: először a kernel, majd a pluszszolgáltatások, aztán még mindig a pluszszolgáltatások, és amikor a pluszszolgáltatások elindultak, akkor indíthatjuk el mi a programjainkat – leállásnál pedig ez pont fordítva történik.

A következő részben ebből a legfontosabb tanulság az lesz, hogy mindenki függ valamitől, és végső soron mindenki függ az operációs rendszertől, azon belül is a kerneltől.
Lazán kapcsolódik a témához a Hiperkarmától a Mindenki függ című szám.
[youtube=http://www.youtube.com/watch?v=9EUa5Kgt8Nc&w=300&h=248]
***
Ha ezzel kapcsolatban bármi kérdés van, írjátok meg a hozzászólások közt.
A következő részben arról lesz szó, hogy mi történik, ha ebben a rendszerben hiba lép fel: Ha beüt a krach →