# Microkernel

Een microkernel is in de informatica een kernel die zeer weinig diensten uitvoert en waarbij dus het merendeel van de diensten in gebruikersmodus wordt uitgevoerd. Het woorddeel micro komt van het Oudgriekse μικρός (mikros: "klein"). Daarmee wordt vooral gerefereerd aan het feit dat microkernels zeer klein zijn. De tegenhanger van de microkernel is de monolithische kernel, waarbij de diensten in supervisormodus worden gedraaid.

## Taken van een microkernel

Een microkernel is vrij compact omdat deze veel minder hoeft te regelen dan een monolithische kernel. Het hoofdzakelijke is dan ook dat een microkernel vooral doet aan scheduling, geheugenbeheer en IPC, hoewel deze eerste twee ook buiten de kernel kunnen plaatsvinden. Eventueel kan een microkernel ook doen aan I/O-beheer, het beheren van de invoer en uitvoer van drivers, en toegang tot de BIOS, vaak via emulatie. Al het andere gebeurt dan ook in gebruikersmodus.
Het voornaamste is dat de microkernel een goede scheduling levert naast goede IPC. Het probleem bij microkernels is het feit dat ze veel meer van taak moeten wisselen en dat taken veel meer met elkaar communiceren. Door foute algoritmes of logica kan dit leiden tot een traag systeem. Een voorbeeld van een besturingssysteem die hier vooral mee te kampen heeft is Mach, terwijl L4 een topprestatie levert.

## Servers

Een microkernel maakt gebruik van servers. Deze moet men niet verwarren met die die gebruikt worden over het netwerk, hoewel deze van dezelfde soort zijn. De servers in microkernels leveren eigenlijk de interface tussen software en hardware/drivers. Ook kan er vaak een server aanwezig zijn die zorgt dat de drivers goed beheerd worden. Zo zal een driver die crasht dan herstart worden, iets dat bekend is in het MINIX-systeem.

## Verschillen met een monolithische kernel

* Microkernels doen meer aan IPC doordat de applicaties en drivers met elkaar communiceren, daardoor doet een microkernel meer aan taak en geheugen context veranderingen.
* Microkernels zijn stabieler doordat zij taken zoals drivers in gebruikersmodus draaien in plaats van supervisormodus, hierdoor hebben deze taken minder privileges. Daarenboven is het gebruikelijk dat de I/O beheerd wordt door de kernel.
* Microkernels zijn kleiner hierdoor wordt er minder code geschreven waardoor er minder kans bestaat op typografische fouten of eventueel denkfouten.
* Microkernels zijn beter uitbreidbaar. Dit komt doordat microkernels standaard alleen het essentiële aanbieden qua functionaliteit, maar wel modulair gebouwd zijn.

## Puur en hybride

Microkernels hebben net zoals monolithische kernels het probleem dat zij soms niet geheel een microkernel zijn. Zo zijn er microkernels die de drivers in een modus draaien tussen de supervisormodus en de gebruikersmodus in. Ook is er het feit dat er microkernels zijn die hun schedulers en geheugenbeheer in gebruikersmodus afhandelen. Omdat besturingssystemenkunde niet een volledig vastgelegde kunde is, zijn de grenzen hiervan moeilijk te leggen. In deze wereld is het dan ook een geaccepteerde conventie dat microkernels vooral de drivers in gebruikersmodus draaien. Mensen die hiervan afwijken houden zich meestal bezig met een hybride vorm.

## Voorbeelden van microkernels

* AmigaOS
* Mach, de basis voor onder meer NEXTSTEP en XNU (Mac OS X)
* Minix, van Andrew Tanenbaum
* QNX
* Symbian OS
* L4 microkernel familie