Next Previous Contents

4. De Linux Kernel

De kernel doet tamelijk veel. Ik denk dat een duidelijke manier om het samen te vatten is dat het de hardware eerlijk en efficiënt laat doen wat de programma's willen.

De processor kan slechts één instructie per keer uitvoeren, maar Linux systemen lijken veel dingen gelijktijdig uit te voeren. De kernel bereikt dit door heel snel van de ene naar de andere taak over te schakelen. Het maakt zo goed mogelijk gebruik van de processor door bij te houden welke processen klaar zijn om te gaan, en welke op iets wachten zoals een record uit een harddiskbestand, of toetsenbordinvoer. Deze taak van de kernel wordt scheduling genoemd.

Als een programma niet iets doet, dan hoeft het niet in RAM te zijn geladen. Zelfs als een programma iets doet, dan kan het zijn dat er onderdelen van niet iets doen. De adresruimte van elk proces is in pagina's onderverdeeld. De kernel houdt bij welke pagina's van welke processen het meeste worden gebruikt. De pagina's die niet veel worden gebruikt, kunnen worden verplaatst naar de swappartitie. Wanneer ze weer nodig zijn, kan een andere ongebruikte pagina worden verplaatst om ruimte vrij te maken. Dit is het virtueel geheugenbeheer.

Als je ooit je eigen kernel compileerde, dan zal je zijn opgevallen dat er erg veel opties voor specifieke devices zijn. De kernel bevat een heleboel specifieke code om met de diverse soorten hardware te communiceren, en presenteert het allemaal op een fraaie uniforme wijze aan de toepassingsprogramma's.

De kernel beheert ook het bestandssysteem, interprocescommunicatie, en een heleboel networking stuff.

Zodra de kernel is geladen, zoekt het als eerste naar een uit te voeren init programma.

4.1 Configuratie

De meeste configuratie van de kernel wordt tijdens het bouwen gedaan met behulp van make menuconfig, of make xconfig in /usr/src/linux/ (of waar je Linux kernelbroncode dan ook is). Je kunt met rdev de standaardvideomodus, het root bestandssysteem, het swapdevice en de RAM diskomvang resetten. Deze parameters en nog anderen kunnen ook via lilo aan de kernel worden doorgegeven. Je kunt lilo parameters om aan de kernel door te geven in lilo.conf of achter de liloprompt opgeven. Als je bijvoorbeeld wilde dat hda3 als je root bestandssysteem zou worden gebruikt in plaats van hda2, dan zou je kunnen typen:

        LILO: linux root=/dev/hda3

Als je een systeem vanaf de broncode opbouwt, dan kun je het jezelf er een stuk simpeler op maken door een ``monolithic'' kernel te creëeren. Dat is een kernel zonder modules. Dan hoef je geen kernelmodules naar het doelsysteem te kopiëren.

NOOT: Het System.map bestand wordt door de kernellogger gebruikt de module namen die meldingen genereren vast te stellen. Het programma top maakt ook gebruik van deze informatie. Kopieer System.map mee wanneer je de kernel naar het doelsysteem kopieert.

4.2 Oefeningen

Denk hier over na: /dev/hda3 is een speciaal type bestand dat een harddiskpartitie beschrijft. Maar het is net als alle andere bestanden te vinden op een bestandssysteem. De kernel wil weten welke partitie te mounten als het rootbestandssysteem, het heeft nog geen bestandssysteem. Dus hoe kan het /dev/hda3 lezen om erachter te komen welke partitie te mounten?

Bouw je eigen kernel als je dit nog niet hebt gedaan: Lees bij elke optie de helpinformatie.

Kijk hoe klein je een kernel kunt maken die nog steeds werkt. Je kunt heel veel leren door er de verkeerde dingen uit te laten!

Lees ``De Linux Kernel'' (URL verderop) en als je dat doet, zoek dan naar de delen van de kernelbroncode waarnaar het verwijst. Het boek refereert (tijdens dit schrijven) naar kernelversie 2.0.33, welke tamelijk oud is. Het is wellicht makkelijker te volgen als je deze oude versie download en die broncode leest. Het is verbazingwekkend stukjes C code aan te treffen genaamd ``process'' en ``page''.

Hack! Kijk of je het wat extra meldingen kan laten genereren of iets dergelijks.

4.3 Meer informatie


Next Previous Contents