5Aug

Hva er Linux Kernel og hva gjør det?


Med over 13 millioner kodelinjer er Linux-kjernen en av de største åpen kildekodeprosjektene i verden, men hva er en kjerne og hva brukes den til?

Så hva er kjernen?

En kjerne er det laveste nivået av lett utskiftbar programvare som grensesnitt til maskinvaren i datamaskinen. Det er ansvarlig for grensesnittet til alle programmene dine som kjører i "brukermodus" ned til den fysiske maskinvaren, og tillater prosesser, kjent som servere, for å få informasjon fra hverandre ved hjelp av inter-prosesskommunikasjon( IPC).

Ulike typer kjerne

Det er selvsagt forskjellige måter å bygge en kjerne og arkitektoniske hensyn når man bygger en fra grunnen av. Generelt faller de fleste kjerner inn i en av tre typer: monolitisk, mikrokjernen og hybrid. Linux er en monolitisk kjerne mens OS X( XNU) og Windows 7 bruker hybridkjerner. La oss ta en rask gjennomgang av de tre kategoriene, slik at vi senere kan komme nærmere inn.


Bildet av uptown popcorn

Mikrokernel
En mikrokjernel tar tilnærmingen til å bare administrere hva den har til: CPU, minne og IPC.Nesten alt annet i en datamaskin kan ses som et tilbehør og kan håndteres i brukermodus. Mikrokjerner har en fordel av bærbarhet fordi de ikke trenger å bekymre deg hvis du endrer skjermkortet eller til og med operativsystemet ditt så lenge operativsystemet fortsatt prøver å få tilgang til maskinvaren på samme måte. Mikrokjerner har også et veldig lite fotavtrykk, både for minne og installasjonsplass, og de pleier å være sikrere fordi bare bestemte prosesser går i brukermodus som ikke har høye tillatelser som veiledermodus.

Pros

  • Portabilitet
  • Lite installasjonsfotavtrykk
  • Lite minnefotavtrykk
  • Sikkerhet

Cons

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

Monolitisk kjernel
Monolitiske kjerner er motsatt av mikrokjerner 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 å 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 de flere tingene som går i veiledermodus, jo flere ting som kan bringe systemet ned hvis man ikke oppfører seg riktig.

Pros

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

Cons

  • Largeinstallere fotavtrykk
  • Stort minnefottrykk
  • Mindre sikker fordi alt går i veiledermodus


Bilde via schoschie på Flickr

Hybridkernel
Hybridkjerner har muligheten til å velge og velge hva de vil kjøre i brukermodus og hva de vil kjøre i veiledermodus. Ofte vil ting som enhetsdrivere og filsystem I / O bli kjørt i brukermodus mens IPC og serveranrop vil bli holdt i veiledermodus. Dette gir det beste fra begge verdener, men vil ofte kreve mer arbeid av maskinvareprodusenten fordi alle driverens ansvar er opp til dem. Det kan også ha noen av latensproblemer som er iboende med mikrokjerner.

Pros

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

Cons

  • Kan lide av samme prosesslag som mikrokjernen
  • Enhetsdrivere må administreres av brukeren( typisk)

Hvor er Linux Kernel-filer?

Kjernen filen, i Ubuntu, er lagret i din / boot-mappen og kalles vmlinuz- versjon .Navnet vmlinuz kommer fra Unix verden hvor de pleide å kalle sine kjerner rett og slett "unix" tilbake på 60-tallet, så Linux begynte å kalle sin kjernelinux når den ble utviklet på 90-tallet.

Når virtuelt minne ble utviklet for enklere multitasking evner, ble "vm" satt på forsiden av filen for å vise at kjernen støtter virtuelt minne. For en stund ble Linux-kjernen kalt vmlinux, men kjernen vokste for stor til å passe i det tilgjengelige oppstartshukommelsen, slik at kjernebildet ble komprimert og slutten x ble endret til en z for å vise at den var komprimert med zlib-komprimering. Den samme komprimeringen brukes ikke alltid, ofte erstattet med LZMA eller BZIP2, og noen kjerne 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 dine oppdateringer eller reparasjoner.

I / boot-mappen vil det også være andre svært viktige filer kalt initrd.img-versjon, system.map-versjon og config-versjon. Initrd-filen brukes som en liten RAM-disk som trekker ut og kjører den faktiske kjernefilen. System.map-filen brukes til minnehåndtering før kjernen er fullt lastet, og config-filen forteller kjernen hvilke alternativer og moduler som skal lastes inn i kjernenes bildet når det blir kompilert.

Linux Kernel Arkitektur

Fordi Linux-kjernen er monolitisk, har den det største fotavtrykket og den mest kompleksiteten over de andre typer kjerner. Dette var en designfunksjon som var under ganske mye debatt i de tidlige dagene av Linux og har fortsatt noen av de samme designfeilene som monolitiske kjerner er iboende å ha.

En ting som Linux-kjerneutviklerne gjorde for å komme seg rundt disse feilene, var å lage kjernemoduler som kunne lastes og lastes ut i løpet av kjøretiden, noe som betyr at du kan legge til eller fjerne funksjoner i kjernen din i fly. Dette kan gå utover bare å legge til maskinvarefunksjonalitet i kjernen, ved å inkludere moduler som kjører serverprosesser, som lavnivå virtualisering, men det kan også tillate at hele kjernen erstattes uten å måtte starte datamaskinen på nytt i noen tilfeller.

Tenk deg om du kan oppgradere til en Windows-oppdateringspakke uten å måtte starte på nytt. ..

Kernelmoduler

Hva om Windows hadde alle drivere tilgjengelig allerede installert, og du måtte bare slå på driverne du trengte? Det er i hovedsak hvilke kjernemoduler som gjør for Linux. Kjernemoduler, også kjent som en lastbar kjernemodul( LKM), er essensielle for at kjernen skal kunne fungere med all maskinvare uten å bruke alt tilgjengelig minne.

En modul legger vanligvis funksjonalitet til grunnkjernen for ting som enheter, filsystemer og systemanrop. LKMs har filtypen. ko og lagres vanligvis i /lib/-modulkatalogen. På grunn av deres modulære natur kan du enkelt tilpasse kjernen din ved å sette moduler for å laste eller ikke laste under oppstart med menuconfig-kommandoen eller ved å redigere /boot/-konfigurasjonsfilen din, eller du kan laste og losse moduler i farten med modprobe-kommandoen.

Tredjeparts og lukkede kildemoduler er tilgjengelige i enkelte distribusjoner, som Ubuntu, og kan ikke installeres som standard fordi kildekoden for modulene ikke er tilgjengelig. Utvikleren av programvaren( dvs. nVidia, ATI, blant andre) gir ikke kildekoden, men heller 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 gratis som i tale og er derfor ikke inkludert i noen distribusjoner fordi vedlikeholdsgiverene føler at det "taints" kjernen ved å tilby ikke-fri programvare.

En kjerne er ikke magisk, men det er helt viktig at en hvilken som helst datamaskin kjører riktig. Linux-kjernen er forskjellig fra OS X og Windows fordi den inkluderer drivere på kjernenivå og gjør at mange ting støttes "ut av boksen".Forhåpentligvis vil du vite litt mer om hvordan programvaren og maskinvaren fungerer sammen, og hvilke filer du trenger for å starte datamaskinen.

Kernel.org
Bilde av ingridtaylar