Kjerne

En kjerne (engelsk uttale i IPA : [ˈkəːnəl] ), i informatikk utgjør kjernen eller hjertet i et operativsystem , altså programvaren som gir sikker og kontrollert tilgang av maskinvaren til prosessene som kjører på datamaskinen [1] . Siden mer enn én muligens kan kjøres samtidig, kan kjernen også være ansvarlig for å tildele en del av maskintid ( planlegging ) og maskinvaretilgang til hvert program (multitasking ) [2] .

Beskrivelse

En kjerne er strengt tatt ikke nødvendig for å kjøre en datamaskin. Programmer kan faktisk lastes og kjøres direkte maskinen, så lenge utviklerne deres anser det som nødvendig å klare seg uten støtte fra operativsystemet.

Dette var den typiske driftsmåten for de første datamaskinene, som ble tilbakestilt før de kjørte et nytt program. Senere ble noen tilleggsprogrammer som programlastere og debuggere lansert fra et skrivebeskyttet minne , eller laget for å ligge i minnet under datamaskinens overganger fra en applikasjon til en annen: de dannet de facto grunnlaget for opprettelsen av de første operativsystemene .

En annen situasjon der fraværet av et operativsystem er ønskelig er eksemplet med minimalistiske mikrokontrollere.

Direkte tilgang til kjernen av en bruker/ administrator kan skje i brukermodus eller kjernemodus .

Klassifisering

Direkte tilgang til maskinvare kan også være svært kompleks, så kjerner implementerer vanligvis en eller flere typer maskinvareabstraksjon, det såkalte hardwareabstraksjonslaget ( HAL ) . Disse abstraksjonene tjener til å "skjule" kompleksiteten og gir et rent og enhetlig grensesnitt til den underliggende maskinvaren for å gjøre det lettere for utviklere å jobbe.

Kjerner kan klassifiseres i fire kategorier, basert på graden av maskinvareabstraksjon:

Type I monolittiske kjerner

Den monolitiske tilnærmingen definerer et virtuelt grensesnitt på høyt nivå på maskinvare og programvare, med et sett med primitiver eller systemkall for å implementere operativsystemtjenester som prosessadministrasjon , multitasking og minneadministrasjon , i forskjellige moduler som kjører i supervisor-modus .

Selv om hver modul som betjener disse operasjonene er atskilt fra resten, er kodeintegrasjonen veldig tett og vanskelig å gjøre riktig, og siden alle moduler opererer på samme plass, kan en feil i en av dem blokkere hele systemet. Men når implementeringen er fullstendig og sikker, gjør den tette interne integrasjonen av komponentene en god monolitisk kjerne ekstremt effektiv.

Den mest bemerkelsesverdige ulempen med monolittiske kjerner er imidlertid at det ikke er mulig å legge til en ny maskinvareenhet uten å legge til modulen til kjernen, noe som krever at kjernen må kompileres på nytt . Alternativt kan du kompilere en kjerne med alle maskinvarestøttemoduler, på bekostning av å øke størrelsen deres kraftig. Imidlertid kan de mest moderne monolittiske kjernene som Linux-kjernen og FreeBSD laste inn moduler ved kjøretid, hvis de er planlagt i konfigurasjonsfasen (konfigurasjonsfasen er fasen før kompileringsfasen, hvor du kan velge hvilke funksjoner eller drivere som skal være en del av den nye kjernen), slik at kjernen kan utvides ved behov, samtidig som størrelsen på koden i kjerneplassen holdes på et minimum.

Eksempler på monolittiske kjerner:

Mikrokjerne

Mikrokjernetilnærmingen er å definere en kjernekjerne som utelukkende gir et sett med primitiver eller systemkall for å implementere minimale operativsystemtjenester som trådhåndtering , adresserom eller kommunikasjon mellom prosesser . På toppen av denne minimale kjernen (derav "mikro"-prefikset) er det satt inn noen servere, det vil si separate programmer fra kjernen som kommuniserer med den gjennom de nevnte systemkallene for å implementere de ulike funksjonene til systemet.

Hovedmålet er å skille de grunnleggende tjenesteimplementeringene fra de operative strukturene til systemet. For eksempel kan inn-/utgangslåseprosessen implementeres som en servermodul på brukernivå. Disse modulene på brukernivå, som brukes til å tilby høynivåtjenester til systemet, er modulære og forenkler strukturen og utformingen av kjernen. En servertjeneste som slutter å virke fører ikke til at hele systemet henger, og kan startes på nytt uavhengig av resten.

Det er noen typer mikrokjerner som ikke kan defineres nøyaktig som sådan, fordi de ikke implementerer enkelte funksjoner i form av servere, selv om de har andre funksjoner som definerer mikrokjerner. Den mest kjente av dem er Exec , forkortelse for Executive Multitasking (og dens direkte etterfølger ExecSG ) som er AmigaOS -kjernen .

Eksempler på mikrokjerne- og mikrokjernebaserte operativsystemer:

Monolittiske kjerner og mikrokjerner: sammenligning

Monolittiske kjerner foretrekkes ofte fremfor mikrokjerner på grunn av det mindre kompleksitetsnivået ved kontroll av kontrollkodene i et adresseområde. For eksempel er XNU , macOS -kjernen , basert på en Mach 3.0-kjerne og BSD-komponenter i samme adresserom for å redusere latenstidene som er typiske for mikrokjerner. XNU er altså en høyytelseskjerne da den delvis er basert på en hybridløsning og i alle fall ikke kan betraktes som en mikrokjerne. I den offisielle Apple-dokumentasjonen er XNU tydelig referert til som den modulære monolittiske kjernen.

Monolittiske kjerner anses som foreldet siden tidlig på 1990- tallet . Linux -kjernen som en monolitisk kjerne snarere enn en mikrokjerne var et av temaene i den berømte religionskrigen mellom Linus Torvalds (skaperen av Linux ) og Andrew Tanenbaum (kjent operativsystemlærer, forfatter av Minix ) - flere detaljer er tilgjengelig på nett.

Det er faktisk grunner på begge sider.

Monolittiske kjerner har en tendens til å være lettere å designe riktig, og kan derfor utvikle seg raskere enn et mikrokjernebasert system. Det er suksesshistorier på begge sider. Mikrokjerner brukes ofte i innebygde systemer i misjonskritisk robotautomatisering eller medisinske applikasjoner, på grunn av det faktum at systemkomponenter ligger i separate, private og beskyttede minneområder. Dette er ikke mulig med monolittiske kjerner, ikke engang med moderne lastbare moduler.

Bortsett fra Mach-kjernen , som er den mest kjente mikrokjernen for generelle formål, har mange andre mikrokjerner blitt utviklet for spesifikke formål. Spesielt Kernel L3 ble laget for å demonstrere at mikrokjerner ikke nødvendigvis er trege. L4 -familien av mikrokjerner , etterfølgere av L3, har en implementering kalt Fiasco som kan kjøre Linux-kjernen sammen med andre L4-prosesser i separate adresseområder.

QNX er et operativsystem som har vært på scenen siden tidlig på åttitallet og har en virkelig minimalistisk mikrokjerneimplementering. Dette systemet har vært mye mer vellykket enn Mach når det gjelder å oppnå målene til mikrokjerneparadigmet. Den brukes i situasjoner der programvaren ikke har lov til å gjøre feil, for eksempel i robotarmene til romfergen eller i maskiner som behandler glass der selv en liten feil kan koste hundretusenvis av euro.

Hybridkjerner

Hybridkjerner er i hovedsak mikrokjerner som har "ikke-essensiell" kode på kjerneplassnivå, slik at denne koden kan kjøres raskere enn om den var implementert på et høyt nivå. Dette var et kompromiss vedtatt av mange operativsystemutviklere før det ble bevist at rene mikrokjerner i stedet kunne ha høy ytelse. Mange moderne operativsystemer faller inn under denne kategorien - Microsoft Windows er det mest kjente eksemplet. XNU , Mac OS X-kjernen, er også effektivt en modifisert mikrokjerne, på grunn av inkluderingen av BSD-kode i en Mach-basert kjerne. DragonFly BSD var det første ikke-Mach-baserte BSD-systemet som tok i bruk hybridkjernearkitekturen.

Ikke forveksle begrepet "hybridkjerne" med monolitiske kjerner som kan laste moduler etter oppstart, da "hybrid" antyder at den aktuelle kjernen deler arkitektoniske konsepter og mekanismer som er typiske for både monolittiske og mikrokjerner, spesielt overføring av meldinger og migrerende deler av "ikke-essensiell" kode til et høyere nivå, og beholder bare koden som trengs på kjernenivået av ytelsesgrunner.

Eksempler på hybridkjerner:

Esokernel

Exokernels, eller Exokernels, også kjent som "vertikale operativsystemer", er en radikalt annerledes tilnærming til operativsystemdesign. Kjerneideen er å "skille sikkerhet fra ledelsen".

Ingen vet bedre enn en utvikler hvordan man effektivt kan bruke tilgjengelig maskinvare, så målet er å gi dem makten til å ta beslutninger. Esokerneler er ekstremt små og kompakte, ettersom funksjonaliteten deres er med vilje begrenset til ressursbeskyttelse og multipleksing.

"Klassiske" kjerner (både monolittiske og mikrokjerne) abstrakt maskinvare, gjemmer ressurser bak et maskinvareabstraksjonslag ), eller bak "sikre" servere. I disse "klassiske" systemene, hvis for eksempel minne er allokert, kan ikke programmet vite hvilken fysisk side dette vil bli reservert av operativsystemet, og hvis en fil er skrevet er det ingen måte å vite direkte i hvilken sektor på disken har blitt tildelt. Dette er nivået av abstraksjon som en eksokernel prøver å unngå. Den lar en applikasjon be om spesifikke minneområder, spesifikke sektorer på disken og så videre, og sikrer bare at de nødvendige ressursene er tilgjengelige og at applikasjoner har tilgang til dem.

Siden en esokernel gir et grensesnitt på svært lavt nivå til maskinvaren, som mangler høynivåfunksjonalitet som er typisk for andre operativsystemer, er den ledsaget av et operativsystembibliotek (libOS på sjargong) som har grensesnitt med exokernelen. utviklere med funksjonaliteten til et komplett operativsystem.

Alt dette har en viktig implikasjon: det er mulig å ha flere libOS på systemet. Hvis du for eksempel installerer en libOS som eksporterer en Unix API og en som eksporterer en Windows API, kan du kjøre applikasjoner kompilert for UNIX og Windows samtidig. Utviklingen av libOS foregår på brukernivå, uten omstart, feilsøking på konsollen og i full minnebeskyttelse.

For tiden er esokerner stort sett forskningsprosjekter og brukes ikke i kommersielle operativsystemer. Et eksempel på et esokernelbasert system er Nemesis , utviklet av University of Cambridge , University of Glasgow , Citrix Systems og Swedish Institute of Informatics . MIT har også utviklet flere esokernel-baserte systemer.

Ingen kjerne

Den såkalte "no kernel"-programvaren trenger ikke være begrenset til et enkelt inngangspunkt som også er sentralisert. Et eksempel er gitt av prosjekter som TUNES og UnununiumOS, som hadde til hensikt å lage et operativsystem uten kjerne (begge prosjekter er avviklet).

Merknader

  1. ^ Brian Bagnall, On The Edge: The Spectacular Rise and Fall of Commodore , Variant Press, 2006, s. 202, ISBN 978-0-97-386490-8 . 
    ( NO )

    "Kjernen er den mest grunnleggende delen av et program, typisk et operativsystem, som til enhver tid ligger i minnet og gir de grunnleggende tjenestene. Det er den delen av operativsystemet som er nærmest maskinen og kan aktivere maskinvaren direkte eller grensesnitt til et annet programvarelag som driver maskinvaren."

    ( IT )

    "Kjernen er den mest grunnleggende delen av et program, vanligvis et operativsystem, som ligger i minnet hele tiden og som gir grunnleggende tjenester: det er den delen av operativsystemet som er nærmest maskinen og som kan aktivere maskinvare direkte eller grensesnitt med et annet programvarelag som administrerer maskinvaren."

  2. ^ LifeV , Multitasking Management in the Operating System Kernel , på kukuruku.co , 13. mai 2014. Hentet 1. november 2016 .
    ( NO )

    "Siden bare én instruksjon kan utføres på én prosessorkjerne på ett øyeblikk, kan bare én tråd være aktiv. Prosessen med å velge den aktive datatråden kalles planlegging. På sin side kalles modulen som er ansvarlig for valget planleggeren."

    ( IT )

    "Siden hver prosessor administrert av kjernen kan utføre kun én instruksjon om gangen til enhver tid, kan det bare være én aktiv tråd. Prosessen der den aktive beregningstråden velges kalles planlegging. På sin side kalles modulen som er ansvarlig for å ta dette valget planleggeren."

  3. ^ Den brukes i utgangspunktet i GNU Hurd og ikke i MacOS , som bruker XNU , som er en modulær hybridkjerne født fra foreningen av Mach og FreeBSD -kjernen .

Bibliografi

Relaterte elementer

Andre prosjekter