Hvad er Linux-kernen og hvad gør det?
Linux kerne er med over 13 millioner kodeord en 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, der interfacer med hardwaren på din computer. Det er ansvarligt for at grænseflader 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 kerne og arkitektoniske overvejelser, når man bygger en fra bunden. Generelt falder de fleste kerne 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 senere kan komme nærmere ind.
Billede af uptown popcorn
mikrokernen
En mikrokernel tager tilgangen til kun at styre hvad den har til: 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.
Fordele
- overførselsret
- Lille installation fodaftryk
- Lille hukommelsesfodaftryk
- Sikkerhed
Ulemper
- Hardware er mere abstraheret gennem chauffører
- Hardware kan reagere langsommere, fordi drivere er i brugertilstand
- Processer skal vente i kø for at få oplysninger
- Processer kan ikke få 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 tendens til at være bedre til 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.
Fordele
- Mere direkte adgang til hardware til programmer
- Lettere for processer at kommunikere mellem hinanden
- Hvis din enhed understøttes, skal den fungere uden yderligere installationer
- Processer reagerer hurtigere, fordi der ikke er en kø til processortiden
Ulemper
- Stort installationsfodaftryk
- Stort hukommelsesfodaftryk
- Mindre sikker, fordi alt løber i vejleder
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 supervisor mode. Ofte vil ting som enhedsdrivere og filsystem I / O blive kørt i brugertilstand, mens IPC og serveropkald vil blive opbevaret i supervisor-tilstand. Dette giver det bedste fra begge verdener, men vil ofte kræve mere arbejde hos hardwareproducenten, fordi alt ansvaret for fører er op til dem. Det kan også have nogle af de latensproblemer, der er forbundet med mikrokerner.
Fordele
- Udvikler kan vælge og vælge, hvad der kører i brugertilstand og hvad der kører i supervisor tilstand
- Mindre installere fodaftryk end monolitisk kerne
- Fleksibelt end andre modeller
Ulemper
- Kan lide af samme proceslag som mikrokernel
- Enhedsdrivere skal administreres af brugeren (typisk)
Hvor er Linux Kernel-filer?
Kernel-filen, i Ubuntu, gemmes 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 først 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.
Version nummereringen 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 vil der også være 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 kerne 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 Architecture
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 service pack uden at skulle genstarte ...
Kernelmoduler
Hvad hvis Windows havde hver driver tilgængelig allerede installeret, og du var bare nødt til at tænde 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 filtypenavn .ko og gemmes typisk i biblioteket / lib / moduler. På grund af deres modulære karakter kan du nemt tilpasse din kerne ved at indstille moduler til at indlæse eller ikke indlæses under opstart med menuconfig-kommandoen eller ved at redigere din / boot / config-filen eller du kan indlæse og aflæse moduler på farten med modprobe kommando.
Tredjeparts- og lukkekildemoduler er tilgængelige i nogle distributioner, f.eks. Ubuntu, og kan ikke installeres som standard, fordi kildekoden til modulerne ikke er tilgængelig. Udvikleren af softwaren (dvs. nVidia, ATI, blandt andre) giver 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 "ud 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