Kjerne (operativsystem)

En kjerne (eng. kernel) er den innerste og viktigste delen av et operativsystem.

Kjernens oppgave er å starte systemet, håndtere ressurstildelingen, samt å kommunisere med maskinvaren. Vanligvis fungerer kjernen som et beskyttende bindeledd mellom maskinvaren og de programmene som kjøres på systemet. Programmene har i alminnelighet ikke direkte tilgang til maskinvaren, men må først gå via kjernen. Kjernen holder til og med programmene adskilte fra hverandre slik at et program som krasjer ikke nødvendighvis drar med seg andre programmer i fallet. For at programmer skal kunne samarbeide med hverandre sørger kjernen også for at disse kan kommunisere med hverandre, enten lokalt på en avskilt datamaskin, eller over et nettverk.

Kjernen sørger også for tildelingen av CPU-tid til kjørende prosesser, slik at de kan kjøre samtidig på ulike CPU-kjerner, eller tilnærmet samtidig ved å fortløpende bytte prosessene som kjører på en CPU-kjerne. Moderne operativsystemer til generell bruk implementerer «preemptiv multitasking», hvor den kjørende prosessen blir avbrutt av en Interrupt slik at kjernen kan overføre kontroll til en annen prosess. Eldre operativsystemer og systemer med spesielle tids- og ressursbehov implementerer «kooperativ multitasking», hvor enhver prosess har ansvar for å frigi kontroll over prosessoren når den er ferdig med et stykke arbeid.

De to vanligste typene operativsystemskjerner er de monolittiske kjernene og mikrokjernene. Monolittiske kjerner bygger på at hele kjernen fungerer som ett sammenvevd program der alle systemets funksjoner finnes inkludert. Linux og FreeBSD er eksempler på operativsystemer som bygger på monolittiske kjerner. Mikrokjerner er bygget opp av et stort antall mindre komponenter som kommuniserer mellom hverandre og tillater at komponenter legges til og tas bort mens systemet eksekveres. Operativsystemene QNX og Mac OS X bygger på mikrokjerner.

En mindre vanlig type kjerne er exokjernen. Tanken bak exokjernene er at operativsystemet ikke skal sørge for noen som helst abstraksjoner – abstraksjonene skal i stedet implementeres som programbiblioteker. Ulike typer programmer krever nemlig ulike typer abstraksjoner. Exokjerner tillater derfor, til forskjell fra de andre kjernene, at vanlige programmer kommuniserer direkte med systemets maskinvare. Exokjernens oppgave blir da redusert til å passe på at programmene bare får tilgang til den delen av maskinvaren de har rett til. Eksempler på operativsystemer som bygger på en exokjerne er Exokernel og Nemesis.