Izklopljen računalnik, v katerem ne teče noben program, je zgolj inerten kup elektronskih vezij. Prva stvar, ki jo mora računalnik ob vklopu opraviti, je pognati poseben program, ki se imenuje operacijski sistem. Njegova naloga je, da drugim programom pomaga tako, da nase prevzame umazane podrobnosti komuniciranja s strojno opremo.
Angleški izraz za zagon operacijskega sistema je ,,booting``, kar izvira iz besede ,,bootstrap`` (jermenček na škornju, denimo kavbojskem). Zagon računalnika iz začetnega mrtvila z lastno močjo je namreč nekaj podobnega, kot če bi se hoteli sami dvigniti v zrak, tako da bi se prijeli za jermenčke na škornjih in vlekli navzgor. Ne bo šlo. Računalnik pa se lahko zažene z lastno močjo, ker ima navodila za zagon zapisana v enem od svojih čipov, tako imenovanem BIOS (Basic Input/Output System, osnovni vhodno-izhodni sistem).
BIOS naroči procesorju, naj pogleda na dogovorjeno mesto, navadno na disk z najnižjo številko (tako imenovani zagonski disk), in na njem poišče poseben program, zagonski nalagalnik. V Linuxu se ta imenuje LILO. Zagonski nalagalnik se naloži v pomnilnik in požene. Njegova naloga je, da požene pravi operacijski sistem.
Nalagalnik mora zato poiskati jedro operacijskega sistema, ga naložiti v pomnilnik in pognati. Ob zagonu Linuxa vidite napis ,,LILO``, ki mu sledi vrsta pikic. Takrat LILO nalaga jedro operacijskega sistema. Vsaka pikica pomeni, da je naložil en diskovni blok kode v pomnilnik.
Zakaj je potreben vmesni korak z zagonskim nalagalnikom, namesto da bi BIOS kar sam naložil jedro v pomnilnik? Dva razloga sta za to. Prvič, BIOS za osebne računalnike IBM PC in njim podobne je bil napisan pred več kot dvajsetimi leti in v resnici ni sposoben uporabljati tako velikih diskov, kot so v rabi danes. In drugič, vmesna stopnja z zagonskim nalagalnikom nam takrat, ko imamo na disku nameščenih več operacijskih sistemov, ponuja možnost, da izberemo, katerega bomo zagnali.
Ko je jedro naloženo, se mora razgledati naokoli, poiskati preostanek strojne opreme in pripraviti na poganjanje programov. Najprej se loti natančnejšega evidentiranja priključenih naprav. Prečeše tisti del naslovnega prostora, ki se imenuje vhodno-izhodna vrata (angl. I/O port). To je dogovorjeni način sporazumevanja procesorja z vhodno-izhodnimi enotami. Iz odziva na V/I vratih jedro poskusi ugotoviti, katere naprave ima na voljo. Ta stopnja je znana kot ,,autoprobing``. Opazujemo jo lahko ob zagonu, ko jedro sproti izpisuje na zaslon, katere naprave je našlo.
Jedro Linuxa je zelo dobro pri prepoznavanju strojne opreme, boljše od večine drugih Unixov in veliko boljše od sistemov DOS ali Windows. Mnogi stari linuxovski mački so celo mnenja, da je spretnost Linuxa pri prepoznavanju strojnega okolja -- kar posledično pomeni relativno enostavnost namestitve -- bila ključna za to, da je od vseh prostih izvedb Unixa ravno Linux pridobil kritično maso uporabnikov.
S tem, ko se je jedro naložilo v pomnilnik in teče, zagona še ni
konec. To je le prva raven delovanja (angl. run level
1). Po prvi stopnji, jedro preda nadzor posebnemu procesu,
imenovanemu init
, ki nadalje požene še več strežniških
procesov.
Init najprej pregleda, ali je zapis na diskih videti normalen. Če je, jih priklopi. Lahko pa se zgodi, da ni -- morda je z diskom v resnici kaj narobe ali pa samo sistem nazadnje ni bil pravilno ugasnjen in so podatki na disku ostali nekako napol zapisani. To se rado zgodi, če sredi dela zmanjka elektrike. Jedro poskusi zapise na disku spraviti v red in če misli, da je uspelo, disk priklopi. Pozneje si bomo v razdelku Kako gredo stvari narobe ogledali spravljanje zapisov v red bolj v podrobnosti.
V naslednjem koraku init
požene vrsto specializiranih
strežniških procesov. Angleški izraz zanje je daemon. To so
programi, ki tečejo, ne da bi karkoli brali s tipkovnice ali pisali na
zaslon. Vsak od njih skrbi za svoje opravilo, na primer tiskanje,
izvajanje periodičnih opravil in podobno. Vsak od njih mora
koordinirati potencialno konfliktne zahtevke. Zakaj vsakega zahtevka
ne obdeluje svoj proces? Zaradi enostavnosti. Bolj enostavno je
napisati strežniški proces, ki ves čas teče in ve vse o zahtevkih, kot
pa skrbeti, da si cel trop procesov, ki obdelujejo vsak svoj zahtevek,
tečejo pa lahko tudi vsi hkrati, ne hodi po prstih. Nabor strežniških
procesov, ki se zaženejo ob zagonu, se razlikuje od sistema do
sistema; skoraj vedno pa je med njimi tiskalniški strežnik.
Še en korak naprej se init
pripravi na gostitev uporabnikov,
in požene program, imenovan getty
. Ta pazi, kaj se dogaja na
konzoli, torej tipkovnici. Dodatne kopije istega programa morda pazijo
tudi na terminalske in telefonske linije. Getty je tisti, ki izpiše
pozivnik login
, ki ga srečamo ob prijavi. Ko tečejo vsi
strežniški procesi, in procesi getty
pazijo na tipkovnico in
vse terminalske linije, smo na drugi ravni delovanja (run
level 2). Na tej točki se lahko prijavimo v sistem in poženemo
svoje programe.
A nismo še končali. Ko sistem teče, je naslednji korak zagon strežnikov za različne omrežne storitve (sprejemanje in pošiljanje pošte, streženje spletnim zahtevkom ipd.). Ko se zaženejo ti, smo na tretji ravni delovanja (run level 3), sistem pa je v celoti pripravljen za delo.