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 kjernen og hva brukes den til?
Så Hva er kjernen?
En kjerne er det laveste nivået av lett utskiftbare programvare som grensesnitt til maskinvaren i datamaskinen. Det er ansvarlig for å knytte alle dine applikasjoner som kjører i "brukermodus" ned til den fysiske maskinvaren, og tillate prosesser, kjent som servere, å få informasjon fra hverandre ved hjelp av IPC (inter-process communication).
Ulike typer kjerner
Det er selvfølgelig forskjellige måter å bygge en kjerne og arkitektoniske hensyn når man bygger en fra bunnen av. Generelt faller de fleste kjerner 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 gå nærmere.
Bilde av uptown popcorn
mikrokjerne
En mikrokjernen 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 kjører i brukermodus som ikke har høye tillatelser som veiledermodus.
Pros
- portabilitet
- Små installasjonsfotavtrykk
- Liten minnefotavtrykk
- Sikkerhet
Ulemper
- Maskinvare er mer abstrahert gjennom drivere
- Maskinvare kan reagere sakte 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 motsatt av mikrokjerner fordi de ikke bare omfatter CPU, minne og IPC, men de inkluderer også ting som enhetsdrivere, filsystemstyring og systemserveranrop. Monolitiske kjerne pleier å 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 støttes, bør den fungere uten ekstra installasjoner
- Prosesser reagerer raskere fordi det ikke er en kø for prosessor tid
Ulemper
- Stort installasjonsfotavtrykk
- Stort minnefotavtrykk
- Mindre sikker fordi alt går i veiledermodus
Bilde via schoschie på Flickr
Hybrid Kernel
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 beholdt 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 går i veiledermodus
- Mindre installere fotavtrykk enn monolitisk kjernen
- Mer fleksibel enn andre modeller
Ulemper
- 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-verdenen der de pleide å kalle sine kjerner rett og slett "unix" tilbake på 60-tallet, så Linux begynte å kalle sin kjerne "Linux" da den ble utviklet først 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 kjerner kalles bare zImage.
Versjonsnummereringen vil være i formatet A.B.C.D hvor A.B vil trolig 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 ekstraherer og kjører den faktiske kjernefilen. System.map-filen brukes til minnehåndtering før kjernen fyller fullt ut, og config-filen forteller kjernen hvilke alternativer og moduler som skal lastes inn i kjernenes bildet når det blir kompilert.
Linux Kernel Architecture
Fordi Linux-kjernen er monolitisk, har den det største fotavtrykket og den mest komplekse over de andre typer kjerner. Dette var en designfunksjon som var under ganske mye debatt i begynnelsen 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 ved kjøring, 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 egentlig 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 katalogen / lib / moduler. 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 din / boot / config-filen, eller du kan laste og losse moduler på fluen med modprobe kommando.
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 av 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 inneholder drivere på kjernenivå og gjør at mange ting støttes "ut av boksen". Forhåpentligvis vil du vite litt mer om hvordan din programvare og maskinvare fungerer sammen, og hvilke filer du trenger for å starte datamaskinen.
Kernel.org
Bilde av ingridtaylar