Een computer zonder een draaiend programma is gewoonweg een logge homp elektronica. Het eerste wat een computer moet doen als het wordt aangezet is een speciaal programma opstarten dat een besturingssysteem wordt genoemd. De taak van het besturingssysteem is te helpen bij het aan het werk krijgen van andere computerprogramma's door de lastige details met betrekking tot het besturen van de computerhardware af te handelen.
Het proces om het besturingssysteem aan de gang te krijgen wordt booten genoemd. (van origine was dit bootstrapping en zinsspeelde op de moeilijkheid om jezelf ``aan je laarzen'' op te trekken). Je computer weet hoe het moet booten omdat de instructies voor het booten in één van z'n chips zijn ingebouwd, de BIOS (of Basic Input/Output System) chip.
De BIOS chip vertelt het op een vaste plaats op de laagst-genummerde harddisk (de bootdisk) te zoeken naar een speciaal programma dat een bootloader wordt genoemd (onder Linux wordt de bootloader LILO genoemd). De bootloader wordt in het geheugen geladen en gestart. De taak van de bootloader is het echte besturingssysteem op te starten.
De loader doet dit door naar een kernel te zoeken, deze in het geheugen te laden en het te starten. Als je Linux opstart en je ziet op het scherm "LILO" gevolgd door een groep punten, is het de kernel aan het laden. (Iedere punt betekent dat het een ander diskblok van de kernelcode heeft geladen.)
(Het zou kunnen dat je je afvraagt waarom de BIOS de kernel niet direct laadt -- waarom het twee-staps proces met de bootloader? Dit komt omdat de BIOS niet erg slim is. In feite is het erg dom, en Linux gebruikt het in het geheel niet na het opstarten. Het werd van origine geschreven voor primitieve 8-bits PC's met hele kleine disks, en het kan letterlijk niet voldoende toegang tot de disk krijgen om de kernel direct te kunnen laden. De bootloader-stap laat je ook één van de verscheidene besturingssystemen vanaf verschillende plaatsen van de disk opstarten, (in het onwaarschijnlijke geval dat Unix niet goed genoeg voor je is.)
Zodra de kernel opstart, moet het om zich heenzoeken om de rest van de hardware te vinden, en zorgen dat het gereed is om programma's te draaien. Het doet dit niet door rond te snuffelen in gewone geheugenlokaties maar eerder via I/O poorten -- speciale bus adressen waar zich naar alle waarschijnlijkheid device controllerkaarten kunnen bevinden die luisteren in afwachting van commando's. De kernel snuffelt niet willekeurig rond; het heeft een heleboel ingebouwde kennis over wat het vermoedelijk waar kan vinden, en hoe controllers zullen reageren als ze aanwezig zijn. Dit proces wordt autoprobing genoemd.
De meeste meldingen die je tijdens het booten ziet, komen voort uit het autoprobing-proces van de hardware via de I/O poorten, door de kernel, uitzoekend wat er beschikbaar is en het zichzelf aanpast aan je computer, beter dan de meeste andere Unixes en veel beter dan DOS of Windows. In feite, denken vele Linux gebruikers van de oude stempel dat de slimheid van Linux's onderzoeken tijdens de systeemstart (wat het relatief gemakkelijk maakt om het te installeren) een belangrijke reden was voor de doorbraak van de vrije-Unix experimenten door een kritische massa gebruikers aan te trekken.
Maar de kernel volledig geladen en draaiend krijgen is niet het einde van het bootproces; het is pas de eerste fase (soms run level 1 genoemd). Na deze eerste fase, geeft de kernel de controle over aan een speciaal proces, genaamd `init', welke verscheidene beheertaken verricht.
De eerste taak van het init-proces is meestal een controle om er zeker van te zijn dat je disks OK zijn. Disk bestandssystemen zijn kwetsbaar; als ze door een hardware-fiasco of een plotselinge stroomuitval zijn beschadigd, zijn er goede redenen om herstelstappen te ondernemen voordat je Unix weer helemaal in orde is. We zullen later op enkele van deze details ingaan, als we het gaan hebben over hoe het mis kan gaan met bestandssystemen.
De volgende stap van init is het opstarten van verscheidene daemons. Een daemon is een programma zoals een print spooler, een mail listener of een WWW-server die zich in de achtergrond verscholen houdt, in afwachting om iets te doen. Deze speciale programma's moeten vaak verscheidene verzoeken die met elkaar in conflict kunnen raken, coördineren. Er zijn daemons, omdat het vaak makkelijker is om een programma te schrijven dat continue draait en bekend is met alle verzoeken dan het zou zijn om te proberen te voorkomen dat een schare kopieén (waarbij ieder een verzoek verwerkt en ze allen tegelijkertijd draaien) elkaar niet in de weg zitten. De bepaalde verzameling daemons die je systeem start kan variëren, maar hier zal bijna altijd een print spooler bij zijn (een portier daemon voor je printer).
Zodra alle daemons zijn gestart, bevinden we ons op
run level 2. De volgende stap is de voorbereiding op gebruikers.
Init start een kopie van een programma met
de naam getty
om je console in de gaten te houden (en misschien meer
kopieën om dial-in seriële poorten in de gaten te houden).
Dit programma zorgt dat de login
-prompt op je console
te voorschijn komt. We zijn nu op run level 3 en gereed om
in te loggen en programma's te draaien.