Most, hogy rátok zúdítottunk egy csomó adatot arról, mi is történik a bekapcsológomb lenyomása után, nézzünk néhány specifikus témát! Milyen rendszerindító firmware van a gépedben? És hogy indulnak a mobilok?
BIOS és UEFI
Bár mindkét elnevezés az alaplapon található firmware-t takarja, felépítésük és működésük merőben különbözik. A BIOS már elavultnak számít, mégis mindmáig ez maradt meg a köztudatban, köszönhetően annak, hogy sokszor az UEFI-t is ezzel a névvel illetik. Pedig ez utóbbi minden tekintetben fejlettebb nála: sokkal gyorsabb indításra képes, több modern hardverrel kompatibilis, a secure boot és a fast boot mellett hálózati funkciókat is támogat (egyes változatokban még levelezőkliens és böngésző is helyet kapott, ami már túlzás, de jól mutatja az újabb környezet lehetőségeit). Komplexitása azonban magában hordoz bizonyos problémákat. Működési elve és ezáltal esetleges hibáinak felderítése bonyolult, ráadásul az UEFI sérülékenyebb is: tavaly élesben is megjelentek az addig csak elméleti síkon létező firmware-t érintő kártevők, úgynevezett rootkitek. Ezek felismerése és eltüntetése egyaránt komoly szakértelmet igényel, így a fejlesztőknek minden korábbinál nagyobb hangsúlyt kell fektetnie a megelőzésre.
Gyorsindítás
Rögtön két dolgot is értünk az elnevezés alatt: az egyik az UEFI beállításai között található fast boot opció, a másik pedig a Windows 10-ben bekapcsolható gyors rendszerindítás. Előbbi a POST egyes részeit gyorsítja fel, illetve párhuzamosítja a hardverelemek elindítását, de ehhez megfelelő elemek is szükségesek (például GOP-támogatás a GPU-ban). Utóbbi pedig egyfajta hibernációt jelent: ilyenkor a Windows lekapcsoláskor nem áll le a rendszer a hagyományos értelemben, hanem az aktuális állapotot egyetlen fájlba menti, amelyből aztán a következő elindításkor pillanatok alatt fel tud állni. Fontos, hogy ez csak az operációs rendszer állományaira vonatkozik, a futó alkalmazásokat a Windows ilyenkor is bezárja, a felhasználót pedig kijelentkezteti. Mindkét lehetőség kizárólag UEFI boot esetén használható.
Biztonságos indítás
Ez egy UEFI-specifikus szolgáltatás, nevéhez hűen az indítási folyamat biztonságáért felel. Lényege, hogy a firmware kizárólag olyan illesztőprogramokat engedélyez, amelyek megfelelő privát kulccsal, vagyis digitális aláírással rendelkeznek, a nem megfelelő szoftvereket pedig meg sem próbálja betölteni. A kifejezetten UEFI-re írt vírusok és kémprogramok elterjedésével ez a hardver és szoftver közötti kézfogás létfontosságú szerepet tölt be, hiszen megakadályozza, hogy egy rosszindulatú illesztőprogram hozzáférjen az firmware-hez, és azon módosításokat végezzen, akár végérvényesen használhatatlanná téve az adott hardvert. UEFI boot mellett Windows 8 óta támogatott, illetve a kezdeti nehézségek ellenére ma már használható a nagyobb Linux disztribúciókkal (Ubuntu, Fedora, openSUSE, CentOS) is.
iOS
Az iOS - asztali testvéréhez hasonlóan - UNIX-szerű rendszer, és mivel ugyanarra a XNU kernelre épülnek, a bootfolyamat is nagyon hasonló a két operációs rendszerben. Különbségek azért akadnak, főleg ami biztonságtechnikai megoldásokat illeti. Az iOS-eszközök bekapcsolásakor egy Boot ROM nevű, a gyártás során a hardverre kerülő, módosíthatatlan kód indítja el az A10-es chip előtti készülékekben az alacsony szintű bootloadert (LLB), az újabbakban pedig egyből az iBoot nevű segédprogramot, de csak akkor, ha ez utóbbiak rendelkeznek az Apple Root CA által aláírt, publikus kulccsal. Ez a folyamat nagyon hasonló ahhoz, amit az UEFI szabvány is használ (secure boot), és a célja is ugyanaz. Amennyiben a Boot ROM hibát észlel, a készülék DFU-módba kerül.
A Boot Process Register (BPR) felelős a felhasználói adatok védelméért a különböző módokban. Ezt a regisztert közvetlenül a Secure Enclave elnevezésű segédprocesszor használja, amely a központi CPU-val egy időben kel életre, és a telefon teljes működési ciklusa alatt felügyel a titkosításért. Ez a chip gyakorlatilag külön bootol, saját Boot ROM és mikrokernel (Secure Enclave OS) kapcsolódik hozzá, hogy teljesen független legyen az iBoot által a memóriába töltött XNU kerneltől. Amint ez utóbbi megkapja az irányítást, az indítási folyamat a megszokott mederben zajlik: a rendszermag inicializálja a hardvert és az illesztőprogramokat (illetve kernelkiterjesztéseket), felcsatolja a fájlrendszert, és elindítja a felhasználói felület futásához szükséges modulokat.
Android
A Google által fejlesztett Android egy Linux kernelre épülő operációs rendszer, így nem meglepő módon az indítás folyamata mutat némi átfedést az asztali rendszereken látottakkal, persze csak amolyan androidosan - hasonlít, de csupán messziről és hunyorítva, mert ha az alapoktól eltávolodunk, azért mégiscsak egy tetőtől talpig testre szabott céleszközről van szó. Az elindítás rögtön a teljesen egyedi Boot ROM betöltésével kezdődik, amely üzembe helyezi a hardvert, és elindítja a fix lokáción tárolt bootloadert. Ez a segédprogram jelen esetben nem pusztán a kernel betöltéséért felel: itt zajlik a gyártói ellenőrzés, a külső RAM inicializálása, illetve a hálózati interfész elindítása is.
A rendszermag ezután beállítja a gyorsítótárakat, betölti az illesztőprogramokat, felcsatolja a gyökér fájlrendszert, és inicializálja a bemeneti és kimeneti egységeket. Ha mindezzel elkészül, elindítja az "init" eljárást, amely futtatja az init.rc programot, illetve ennek egy készülékspecifikus változatát is. Androidon az applikációkért felelős modul a Zygote, az init eljárás leszármazottja, és gyakorlatilag minden applikációhoz tartozó folyamatot ez futtat. Amint elindul, létrehozza az első Dalvik virtuális gépet a szükséges osztályokkal és erőforrásokkal. Amikor a felhasználó megnyit egy applikációt, a Zygote ezt a VM-et klónozza. Miután ez az ősobjektum elkészül, elindul a System Server és a hozzá tartozó összes rendszerprogram. Ezután az operációs rendszer már bevetésre kész.