5Aug

Hvad er Linux-kernen og hvad gør det?


Med over 13 millioner kodeord er Linux-kernen et af de største open source-projekter i verden, men hvad er en kernel og hvad bruges den til?

Så hvad er kernen?

En kerne er det laveste niveau af let udskiftelig software, som interfacer med hardwaren på din computer. Det er ansvarligt for at interfacere alle dine applikationer, der kører i "brugertilstand" ned til den fysiske hardware, og tillader processer, der kaldes servere, at få information fra hinanden ved hjælp af interprocess kommunikation( IPC).

Forskellige typer af kerner

Der er selvfølgelig forskellige måder at opbygge en kernel og arkitektoniske overvejelser, når man bygger en fra bunden. Generelt falder de fleste kerner i en af ​​tre typer: monolitisk, mikrokernel og hybrid. Linux er en monolitisk kerne, mens OS X( XNU) og Windows 7 bruger hybridkerner. Lad os tage en hurtig rundvisning i de tre kategorier, så vi kan komme nærmere ind i det senere.


Billede af uptown popcorn

Mikrokernel
En mikrokernel tager tilgang til at kun styre hvad den har: CPU, hukommelse og IPC.Næsten meget alt andet i en computer kan ses som et tilbehør og kan håndteres i brugertilstand. Mikrokerner har en fordel af bærbarhed, fordi de ikke behøver at bekymre dig, hvis du ændrer dit grafikkort eller endda dit operativsystem, så længe operativsystemet stadig forsøger at få adgang til hardwareen på samme måde. Mikrokerner har også et meget lille fodspor til både hukommelse og installeringsplads, og de har tendens til at være mere sikre, fordi kun bestemte processer kører i brugertilstand, som ikke har de høje tilladelser som supervisormodus.

Pros

  • Portabilitet
  • Lille installeringsfodspor
  • Lille hukommelsesfodaftryk
  • Sikkerhed

Cons

  • Hardware er mere abstraheret gennem drivere
  • Hardware kan reagere langsommere, fordi drivere er i brugertilstand
  • Processer skal vente i kø for at få oplysninger
  • Processer kan ikkefå adgang til andre processer uden at vente

Monolitisk kerne
Monolitiske kerner er modsatte af mikrokerner, fordi de ikke kun omfatter CPU, hukommelse og IPC, men de omfatter også ting som enhedsdrivere, filsystemstyring og systemserveropkald. Monolitiske kerner har en tendens til at være bedre at få adgang til hardware og multitasking, fordi hvis et program skal hente oplysninger fra hukommelse eller en anden proces, der kører, har den en mere direkte linje for at få adgang til den og behøver ikke at vente i kø for at få tingene færdige. Dette kan dog forårsage problemer, fordi de flere ting, der løber i vejleder tilstand, jo flere ting der kan bringe dit system ned, hvis man ikke opfører sig korrekt.

Pros

  • Mere direkte adgang til hardware til programmer
  • Nemmere for processer til at kommunikere mellem hinanden
  • Hvis din enhed understøttes, skal den fungere uden yderligere installationer
  • Processer reagerer hurtigere, fordi der ikke er kø for processortid

Cons

  • Largeinstallere fodaftryk
  • Stort hukommelsesfodaftryk
  • Mindre sikker, fordi alt kører i vejledningsmodus


Billede via schoschie på Flickr

Hybridkernel
Hybridkerner har mulighed for at vælge og vælge, hvad de vil køre i brugertilstand og hvad de vil køre i vejledermode. Ofte vil ting som enhedsdrivere og filsystem I / O blive kørt i brugertilstand, mens IPC og serveropkald vil blive bevaret i vejlederfunktionen. Dette giver det bedste fra begge verdener, men det vil ofte kræve mere arbejde hos hardwareproducenten, fordi alt ansvar for førerens ansvar er op til dem. Det kan også have nogle af de latensproblemer, der er forbundet med mikrokerner.

Pros

  • Udvikler kan vælge og vælge, hvad der kører i brugertilstand og hvad der kører i supervisor-tilstand
  • Mindre installeret fodaftryk end monolitisk kerne
  • Mere fleksibel end andre modeller

Cons

  • Kan lide af samme proceslag som mikrokernel
  • Enhedsdrivere skal administreres af brugeren( typisk)

Hvor er Linux Kernel-filer?

Kernefilen, i Ubuntu, er gemt i din / boot-mappen og kaldes vmlinuz- version .Navnet vmlinuz kommer fra unix verden, hvor de plejede at kalde deres kerner simpelthen "unix" tilbage på 60'erne, så Linux begyndte at kalde deres kerne "linux", da den blev udviklet i 90'erne.

Når virtuel hukommelse blev udviklet til lettere multitasking evner, blev "vm" sat på forsiden af ​​filen for at vise, at kernen understøtter virtuel hukommelse. Linuxkernen blev i et stykke kaldt vmlinux, men kernen voksede for stor til at passe i den tilgængelige boothukommelse, så kernekilden blev komprimeret, og slutningen x blev ændret til en z for at vise, at den var komprimeret med zlib-komprimering. Den samme kompression anvendes ikke altid, ofte erstattet med LZMA eller BZIP2, og nogle kerner kaldes simpelthen zImage.

Versionsnummereringen vil være i formatet A.B.C.D, hvor A.B sandsynligvis vil være 2,6, C vil være din version, og D angiver dine patches eller rettelser.

I / boot-mappen er der også andre meget vigtige filer kaldet initrd.img-version, system.map-version og config-version. Initrd filen bruges som en lille RAM disk, der uddrag og udfører den faktiske kernel fil. System.map-filen bruges til hukommelsesadministration, før kernen er fuldt lastet, og config-filen fortæller kernen hvilke muligheder og moduler der skal indlæses i kernelbilledet, når det kompileres.

Linux Kernel Arkitektur

Fordi Linux kernen er monolitisk, har den det største fodaftryk og den mest komplekse over de andre typer kerner. Dette var en designfunktion, der var under ganske lidt debat i de tidlige dage af Linux og bærer stadig nogle af de samme designfejl, som monolitiske kerner er iboende at have.

En ting, som Linux-kerneudviklerne gjorde for at komme rundt om disse fejl var at lave kernemoduler, som kunne læses og losses ved kørsel, hvilket betyder at du kan tilføje eller fjerne funktioner i din kerne på flugt. Dette kan gå ud over at blot tilføje hardwarefunktionalitet til kernen ved at inkludere moduler, der kører serverprocesser, som lavniveau virtualisering, men det kan også tillade hele kernen at blive udskiftet uden at skulle genstarte computeren i nogle tilfælde.

Forestil dig, om du kunne opgradere til en Windows-servicepakke uden at skulle genstarte. ..

Kernelmoduler

Hvad hvis Windows havde alle tilgængelige drivere allerede installeret, og du var nødt til at tænde for de drivere, du havde brug for? Det er i det væsentlige hvilke kernemoduler der gør for Linux. Kernelmoduler, også kendt som et ladbart kernemodul( LKM), er vigtige for at holde kernen i funktion med al din hardware uden at forbruge al din ledige hukommelse.

Et modul tilføjer typisk funktionalitet til basekernen til ting som enheder, filsystemer og systemopkald. LKM'er har filtypen. ko og gemmes typisk i /lib/-modulkataloget. På grund af deres modulære karakter kan du nemt tilpasse din kerne ved at indstille moduler til at indlæse eller ikke indlæse under opstart med menuconfig-kommandoen eller ved at redigere din /boot/-konfigurationsfil, eller du kan indlæse og aflæse moduler i farten med modprobe-kommandoen.

Tredjeparts og lukkede kildemoduler er tilgængelige i nogle distributioner, som Ubuntu, og kan ikke installeres som standard, fordi kildekoden til modulerne ikke er tilgængelig. Udvikleren af ​​softwaren( dvs. nVidia, ATI, blandt andre) leverer ikke kildekoden, men de bygger deres egne moduler og kompiler de nødvendige. ko filer til distribution. Selvom disse moduler er gratis som i øl, er de ikke gratis som i tale og er derfor ikke inkluderet i nogle distributioner, fordi de vedligeholder, at det "taints" kernen ved at levere ikke-fri software.

En kerne er ikke magisk, men det er helt vigtigt, at enhver computer kører korrekt. Linux-kerne er anderledes end OS X og Windows, fordi det indeholder drivere på kerneliveau og gør mange ting understøttet "ude af kassen".Forhåbentlig vil du vide lidt mere om, hvordan din software og hardware fungerer sammen, og hvilke filer du har brug for til at starte din computer.

Kernel.org
Billede af ingridtaylar