/ / Hva er Linux-kjernen og hva gjør den?

Hva er Linux-kjernen og hva gjør den?

bilde

Med over 13 millioner kodelinjer er Linux-kjernen et av de største open source-prosjektene i verden, men hva er en kjerne og hva brukes den til?

Så hva er kjernen?

En kjerne er det laveste nivået av lettutskiftbar programvare som grensesnitt mot maskinvaren på datamaskinen din. Det er ansvarlig for å grense alle applikasjonene dine som kjører i "brukermodus" ned til den fysiske maskinvaren, og la prosesser, kjent som servere, få informasjon fra hverandre ved hjelp av inter-prosesskommunikasjon (IPC).

Ulike typer kjerner

Det er selvfølgelig forskjellige måter å bygge enkjerne- og arkitektoniske hensyn når du bygger en fra bunnen av. Generelt faller de fleste kjerner i en av tre typer: monolitisk, mikrokernel og hybrid. Linux er en monolitisk kjerne mens OS X (XNU) og Windows 7 bruker hybridkjerner. La oss ta en rask omvisning i de tre kategoriene slik at vi kan gå nærmere inn på det senere.


Bilde av uptown popcorn

mikrokjerne
En mikrokernel tar tilnærming til bare å styrehva det har å: CPU, minne og IPC. Stort sett alt annet på en datamaskin kan sees på som et tilbehør og kan håndteres i brukermodus. Mikrokjerner har en fordel med portabilitet fordi de ikke trenger å bekymre deg hvis du bytter skjermkort eller til og med operativsystemet ditt så lenge operativsystemet fremdeles prøver å få tilgang til maskinvaren på samme måte. Mikrokjerner har også et veldig lite fotavtrykk, både for minne og for å installere plass, og de har en tendens til å være sikrere fordi bare spesifikke prosesser kjører i brukermodus som ikke har høye tillatelser som veiledermodus.

Pros

  • portabilitet
  • Lite installer fotavtrykk
  • Lite minneavtrykk
  • Sikkerhet

Ulemper

  • Maskinvare blir mer abstrakt gjennom drivere
  • Maskinvare kan reagere tregere fordi drivere er i brukermodus
  • Prosesser må vente i kø for å få informasjon
  • Prosesser kan ikke få tilgang til andre prosesser uten å vente

Monolitisk kjerne
Monolitiske kjerner er det motsatte avmikrokjerner fordi de ikke bare omfatter CPU, minne og IPC, men de inkluderer også ting som enhetsdrivere, filsystemstyring og systemserveranrop. Monolitiske kjerner har en tendens til å være bedre til å få tilgang til maskinvare og multitasking fordi hvis et program trenger å få informasjon fra minnet eller en annen prosess som kjører, har den en mer direkte linje for å få tilgang til den og trenger ikke å vente i kø for å få ting gjort. Dette kan imidlertid forårsake problemer fordi jo flere ting som kjører i veiledermodus, jo flere ting som kan få ned systemet ditt hvis man ikke oppfører seg ordentlig.

Pros

  • Mer direkte tilgang til maskinvare for programmer
  • Enklere for prosesser å kommunisere mellom hverandre
  • Hvis enheten støttes, skal den fungere uten ekstra installasjoner
  • Prosesser reagerer raskere fordi det ikke er en kø for prosessortid

Ulemper

  • Stort installer fotavtrykk
  • Stort minneavtrykk
  • Mindre sikker fordi alt kjører i veiledermodus


Bilde via schoschie på Flickr

Hybrid Kernel
Hybride kjerner har muligheten til å plukke ogvelge hva de vil kjøre i brukermodus og hva de vil kjøre i veiledermodus. Ofte kjøres ting som enhetsdrivere og filsystem I / O i brukermodus mens IPC og serversamtaler blir holdt i veiledermodus. Dette gir det beste fra begge verdener, men ofte vil det kreves mer arbeid fra maskinvareprodusenten fordi alt driveransvaret er opp til dem. Det kan også ha noen av latensproblemene som er iboende med mikrokjerner.

Pros

  • Utvikler kan velge og velge hva som kjøres i brukermodus og hva som kjører i veiledermodus
  • Mindre installere fotavtrykk enn monolitisk kjerne
  • Mer fleksibel enn andre modeller

Ulemper

  • Kan lide av samme prosessforsinkelse som mikrokernel
  • Enhetsdrivere må administreres av brukeren (vanligvis)

Hvor er Linux Kernel-filene?

bilde

Kjernefilen, i Ubuntu, er lagret i / startmappen din og kalles vmlinuz-versjon. Navnet vmlinuz kommer fra unix-verdenen der de pleide å kalle kjernene sine ganske enkelt “unix” tilbake på 60-tallet, så Linux begynte å kalle kjernen deres “linux” da den først ble utviklet på 90-tallet.

Da virtuelt minne ble utviklet for enkleremultitasking evner, “vm” ble satt foran på filen for å vise at kjernen støtter virtuelt minne. For en stund ble Linux-kjernen kalt vmlinux, men kjernen vokste seg for stor til å passe inn i det tilgjengelige oppstartsminnet, slik at kjernebildet ble komprimert og endelsen av x ble endret til en z for å vise at den ble komprimert med zlib-komprimering. Den samme komprimeringen brukes ikke alltid, ofte erstattet med LZMA eller BZIP2, og noen kjerner kalles ganske enkelt zImage.

Versjonsnummereringen vil være i formatet A.B.C.D der A.B sannsynligvis vil være 2,6, C vil være din versjon, og D indikerer rettelser eller rettelser.

I / boot-mappen vil det også være andre veldigviktige filer kalt initrd.img-versjon, system.map-versjon og konfigurasjonsversjon. Den initrd-filen brukes som en liten RAM-disk som trekker ut og kjører selve kjernefilen. System.map-filen brukes til minnehåndtering før kjernen er fullstendig lastet inn, og konfigurasjonsfilen forteller kjernen hvilke alternativer og moduler som skal lastes inn i kjernebildet når den blir satt sammen.

Linux Kernel Arkitektur

Fordi Linux-kjernen er monolitisk, har den detdet største fotavtrykket og mest kompleksitet overfor andre typer kjerner. Dette var en designfunksjon som var under ganske mye debatt i de tidlige dagene av Linux og fremdeles bærer noen av de samme designfeilene som monolitiske kjerner er iboende å ha.

En ting som Linux-kjerneutviklerne gjordeå komme seg rundt disse feilene var å lage kjernemoduler som kunne lastes og lastes ut under kjøretid, noe som betyr at du kan legge til eller fjerne funksjoner i kjernen din mens du er på farten. Dette kan gå utover bare å legge til maskinvarefunksjonalitet i kjernen, ved å inkludere moduler som kjører serverprosesser, som virtualisering på lavt nivå, men det kan også tillate at hele kjernen byttes ut uten å måtte starte datamaskinen på nytt i noen tilfeller.

Tenk om du kunne oppgradere til en Windows-servicepakke uten noen gang å trenge å starte på nytt ...

Kernemoduler

bilde

Hva om Windows hadde alle drivere tilgjengeligallerede installert, og du bare måtte slå på driverne du trengte? Det er egentlig hva kjernemoduler gjør for Linux. Kernemoduler, også kjent som en lastbar kjernemodul (LKM), er avgjørende for at kjernen skal fungere med all maskinvaren din uten å konsumere alt tilgjengelig minne.

En modul legger vanligvis til funksjonalitet til basenkjernen for ting som enheter, filsystemer og systemanrop. LKM-er har filtypen .ko og lagres vanligvis i katalogen / lib / modules. På grunn av deres modulære natur kan du enkelt tilpasse kjernen ved å stille inn moduler for å laste inn eller ikke laste, under oppstart med menuconfig-kommandoen eller ved å redigere / boot / config-filen, eller du kan laste inn og laste ned moduler på farten med modprobe kommando.

Tredjeparts og lukkede kildemoduler ertilgjengelig i noen distribusjoner, som Ubuntu, og kanskje ikke er installert som standard fordi kildekoden for modulene ikke er tilgjengelig. Utvikleren av programvaren (dvs. nVidia, ATI, blant andre) oppgir ikke kildekoden, men snarere bygger de sine egne moduler og kompilerer de nødvendige .ko-filene for distribusjon. Selv om disse modulene er gratis som i øl, er de ikke frie som i tale, og er derfor ikke inkludert i noen distribusjoner fordi vedlikeholdere føler at den “smiler” kjernen ved å tilby ikke-fri programvare.

En kjerne er ikke magi, men den er heltviktig for enhver datamaskin som fungerer som den skal. Linux-kjernen er annerledes enn OS X og Windows fordi den inkluderer drivere på kjernenivå og gjør at mange ting som støttes "utenfor boksen". Forhåpentligvis vil du vite litt mer om hvordan programvaren og maskinvaren din fungerer sammen og hvilke filer du trenger for å starte opp datamaskinen.

Kernel.org
Bilde av ingridtaylar