# Ubuntu: Linux voor mensen/Processen/De opstartprocedure
## BIOS fase

Wanneer je de startknop van je computer indrukt, zoekt de processor de BIOS informatie. De BIOS staat op een vaste plaats in een geheugentype dat enkel leesbaar, en niet overschrijfbaar, is. De BIOS kan met sommige randapparatuur, zoals apparaten om gegevens op te slaan, communiceren op een zeer elementair niveau.

## MBR fase

De BIOS test het systeem en de randapparaten en bepaalt van welk apparaat er gestart moet worden: diskette, CD-ROM, harde schijf, ... Op het gekozen apparaat zoekt de BIOS naar een dataset, de Master Boot Record of MBR genaamd, die zich altijd op een vaste plaats aan het begin van de opslagruimte bevindt. Deze dataset wordt in het geheugen geladen en neemt controle over het systeem.
De MBR werd opgevuld tijdens de installatie van het besturingssysteem.

## De bootloader fase

De MBR bevat instructies om de bootloader te laden. De bootloader is een programma dat verschillende besturingssystemen kan starten. Op ons systeem heet dat programma GRUB, wat staat voor GRand Unified Bootloader. GRUB zoekt en laadt de kernel en geeft daarmee de controle aan het eigenlijke besturingssysteem.
Indien je met een dual-boot systeem werkt, kun je in deze fase kiezen welk besturingssysteem opgestart zal worden.

## De kernel fase

De kernel initialiseert de randapparaten door hun modules (drivers, stuurprogramma's) te laden, activeert het virtuele geheugen en zorgt ervoor dat in eerste instantie de belangrijkste data toegankelijk zijn. Daarna start de kernel init, het eerste proces. Enkel voor PC's met Linux
Deze procedure geldt enkel voor x86-gebaseerde PC's. De servers op het werk, bijvoorbeeld, hebben een heel andere manier om op te starten.
Bovendien is deze procedure specifiek voor Linux. Andere besturingssystemen, zoals MS Windows, gebruiken een andere methode om de kernel in het geheugen te laden.
Meer informatie kan je vinden in man boot.

## De init fase
### De inittab

Eerst leest init zijn configuratiebestand in, /etc/inittab. Dit bestand verwijst naar een script waarmee init het systeem verder initialiseert: paden worden geconfigureerd, de klok ingesteld, seriële en parallelle poorten worden geïnitialiseerd, enzovoort.
* Over configuratiebestanden
* Je zal nog vaak bestandsnamen tegenkomen die eindigen in “tab”. Dit staat voor “tabel”.

### Runlevels

Verder bevat het configuratiebestand informatie over het standaard runlevel. Een runlevel is een configuratie van processen. Alle UNIX-achtige systemen hebben doorgaans verschillende procesconfiguraties, die aangeduid worden met een nummer:
* 0: halt: stop alle processen en zet het systeem uit.
* 1: single user mode: configuratie waarin alleen de systeembeheerder, root, toegang heeft tot het systeem. De processen, die noodzakelijk zijn om meerdere gebruikers toe te laten, worden niet opgestart.
* 2-5: multi-user mode: configuraties waarin meer dan 1 gebruiker toegelaten worden. Standaard komt je systeem in runlevel 2. De overige multi-user runlevels kunnen volgens eigen voorkeur ingesteld worden, bijvoorbeeld een kiosklevel, waarin de computer een web browser opstart en er geen authenticatie nodig is, of een serverlevel waarin bepaalde diensten opgestart kunnen worden.
* 6: herstart: sluit alle processen op een ordelijke manier af en ga dan weer naar het standaard runlevel.
Terwijl het systeem draait, kan je met behulp van init van het ene runlevel naar het andere gaan. Ga je van een lager naar een hoger level, dan worden er doorgaans extra processen gestart. Om van een hoger naar een lager level te gaan, worden er meestal processen gestopt. Systeembeheerders passen de procedures frequent toe voor onderhoud van machines. Als gewone gebruiker volstaat het te weten dat het afmeldmenu je een grafische interface geeft om init voor normale doeleinden te gebruiken, het is te zeggen het afzetten van de machine, wat dus overeenstemt met init 0.

### RC mappen en scripts

Per runlevel is er een rc map. Rc staat voor resource configuration, letterlijk de configuratie van de middelen. In die rc mappen zitten de scripts die de processen voor een bepaald runlevel zullen opstarten. De scripts worden één voor één gelezen en uitgevoerd door init.
Er zijn twee soorten scripts: sommige beginnen met de letter S, andere met een K.
* Kijk bijvoorbeeld in /etc/rc2.d. Alle scripts zijn symbolische links naar scripts in de map /etc/init.d.
Begint de naam van een link met een S, dan wordt het bijhorende opstartscript in /etc/init.d aangeroepen met het argument “start”, waardoor een proces of een serie van processen gestart wordt.
Indien de naam van een link in een runlevel map begint met een K, dan wordt het bijhorende script in /etc/init.d aangeroepen met het argument “stop”. De K staat in dat geval voor “kill” en er zullen dus processen beëindigd worden.
De combinatie van scripts met hun S- en K-links noemt men initscripts.
Tijdens het opstarten zie je welke scripts uitgevoerd worden: per script wordt een lijn op het scherm gedrukt, met op het einde statusinformatie. Als de betreffende processen werden opgestart, komt er “ok?”, anders “failed?”.

### Virtuele consoles

* Naast virtuele desktops heeft je systeem ook virtuele consoles. Dit zijn simulaties van de vroegere tekst terminals. Je kan ze bereiken door de toetsencombinatie Ctrl+Alt+F1 in te geven. Dan ben je op de eerste console, waar je een prompt ziet die vraagt om je gebruikersnaam. Geef je die in, dan zal je wachtwoord gevraagd worden. Na het aanmelden krijg je een shell omgeving, maar ditmaal zonder de decoraties van een terminal venster.
Naar de tweede virtuele console ga je vandaaruit met Alt+F2, naar de derde met Alt+F3, en zo verder tot de zesde console. Op de zevende F-toets zit de grafische console. Je kan op meerdere consoles tegelijk aanmelden en taken uitvoeren.
De virtuele consoles worden gebruikt op systemen die geen grafische kaart hebben, bijvoorbeeld op servers. Ook blinden maken er gebruik van, omdat ze meestal toch niets hebben aan grafische toepassingen. En als je snel even wat wilt checken op een (trage) machine, is het ook handiger om niet eerst de hele grafische omgeving te moeten opstarten. Je ziet standaard misschien wel het grafische aanmeldscherm, maar door de sequentie Ctrl+Alt+F1 in te geven, kan je tekstueel aanmelden.
De virtuele consoles worden door init opgestart met behulp van het getty commando.
* Ctrl+Alt+Del
* Het init proces leest in zijn configuratiebestand ook wat er moet gebeuren wanneer de sequentie Ctrl+Alt+Del ingevoerd wordt via het toetsenbord. Welk commando wordt dan opgeroepen?
* Booting en init.
* Can you reboot the system as a normal user? Why is that?
* According to your current run level, name the steps that are taken during shutdown.
* How do you change the system run level? Switch from your default run level to run level 1 and vice versa.
* Make a list of all the services and daemons that are started up when your system has booted.
* Which kernel is currently load at startup?
* Suppose you have to start some exotic server at boot time. Up until now, you logged in after booting the system and started this server manually using a script named deliver_pizza in your home directory. What do you have to do in order to have the service start up automatically in run level 4, which you defined for this purpose only?