Hemsida » hur » Vad är Linux-kärnan och vad gör den?

    Vad är Linux-kärnan och vad gör den?


    Linuxkärnan är med över 13 miljoner kodkod en av de största open source-projekten i världen, men vad är en kärna och vad används den för?

    Så vad är kärnan?

    En kärna är den lägsta nivån på lätt utbytbar programvara som gränsar till maskinvaran i din dator. Det är ansvaret för att gränsa alla dina program som körs i "användarläge" ner till den fysiska hårdvaran och tillåter processer, som kallas servrar, att få information från varandra med hjälp av interprocess kommunikation (IPC).

    Olika typer av kärnor

    Det finns naturligtvis olika sätt att bygga en kärna och arkitektoniska överväganden när man bygger en från början. I allmänhet faller de flesta kärnorna i en av tre typer: monolitiska, mikrokärnor och hybrid. Linux är en monolitisk kärna medan OS X (XNU) och Windows 7 använder hybridkärnor. Låt oss ta en snabb rundtur i de tre kategorierna, så vi kan gå in mer i detalj senare.


    Bild av uptown popcorn

    mikrokärna
    En mikrokärna tar tillvägagångssättet att bara hantera vad det har att: CPU, minne och IPC. Nästan allt annat i en dator kan ses som ett tillbehör och kan hanteras i användarläge. Mikrokärnor har en fördel av bärbarhet eftersom de inte behöver oroa dig om du ändrar ditt grafikkort eller till och med operativsystemet så länge som operativsystemet fortfarande försöker komma åt maskinvaran på samma sätt. Mikrokärnor har också ett mycket litet fotavtryck, både för minnes- och installationsutrymme, och de tenderar att vara säkraare eftersom endast specifika processer körs i användarläge som inte har de höga tillstånden som tillsynsmodus.

    Pros

    • portabilitet
    • Litet installationsfotavtryck
    • Litet minnefotavtryck
    • säkerhet

    Nackdelar

    • Hårdvara är mer abstraherad genom förare
    • Hårdvaran kan reagera långsammare eftersom drivrutinerna är i användarläge
    • Processer måste vänta i en kö för att få information
    • Processer kan inte få tillgång till andra processer utan att vänta

    Monolitisk kärna
    Monolitiska kärnor är motsatta av mikrokärnor eftersom de inte bara omfattar CPU, minne och IPC, men de innehåller också saker som drivrutiner, filsystemhantering och systemserversamtal. Monolitiska kärnor tenderar att vara bättre att komma åt hårdvara och multitasking eftersom om ett program behöver få information från minnet eller en annan process som körs har den en mer direktlinje för att komma åt den och behöver inte vänta i en kö för att få saker gjorda. Detta kan dock orsaka problem eftersom de fler saker som körs i tillvägagångssätt, desto fler saker kan ta ner ditt system om man inte beter sig ordentligt.

    Pros

    • Mer direkt tillgång till hårdvara för program
    • Lättare för processer att kommunicera mellan varandra
    • Om enheten stöds ska den fungera utan ytterligare installationer
    • Processer reagerar snabbare eftersom det inte finns en kö för processortid

    Nackdelar

    • Stort installationsfotavtryck
    • Stort minnefotavtryck
    • Mindre säker eftersom allt går i handledarmodus


    Bild via schoschie på Flickr

    Hybridkärnan
    Hybridkärnor har möjlighet att välja och välja vad de vill köra i användarläge och vad de vill köra i handledarmodus. Ofta kan saker som drivrutiner och filsystem I / O köras i användarläge medan IPC- och serverns samtal hålls i handledarmodus. Detta ger bäst av båda världar men ofta kommer det att krävas mer arbete från hårdvarufabrikanten eftersom alla drivrutinsansvar är upp till dem. Det kan också ha några av de latensproblem som är inneboende med mikrokärnor.

    Pros

    • Utvecklare kan välja och välja vilka körningar i användarläge och vad som körs i tillsynsmodus
    • Mindre installera fotavtryck än monolitisk kärna
    • Mer flexibelt än andra modeller

    Nackdelar

    • Kan lida av samma processlag som mikrokärnan
    • Enhetsdrivrutiner måste hanteras av användaren (vanligtvis)

    Var är Linux-kärnfilerna?

    Kärnfilen i Ubuntu lagras i din / boot-mappen och heter vmlinuz-version. Namnet vmlinuz kommer från unix världen där de brukade kalla sina kärnor helt enkelt "unix" tillbaka på 60-talet så Linux började kalla sin kärna "Linux" när den först utvecklades på 90-talet.

    När virtuellt minne utvecklades för enklare multitasking förmågor, sattes "vm" längst upp i filen för att visa att kärnan stöder virtuellt minne. Under en tid kallades Linux-kärnan vmlinux, men kärnan växte för stor för att passa i det tillgängliga startminnet så att kärnbilden komprimerades och slutänden x ändrades till en z för att visa att den komprimerades med zlib-komprimering. Samma kompression används inte alltid, ofta ersatt med LZMA eller BZIP2, och vissa kärnor kallas helt enkelt zImage.

    Versionsnumren kommer att vara i formatet A.B.C.D där A.B kommer förmodligen vara 2,6, C kommer att vara din version och D anger dina korrigeringsfiler eller korrigeringar.

    I / boot-mappen finns också andra mycket viktiga filer som heter initrd.img-versionen, system.map-versionen och config-versionen. Initrd-filen används som en liten RAM-skiva som extraherar och exekverar den faktiska kärnfilen. System.map-filen används för minneshantering innan kärnan laddas fullständigt, och config-filen berättar kärnan vilka alternativ och moduler som ska laddas in i kärnbilden när den sammanställs.

    Linux Kärnarkitektur

    Eftersom Linux-kärnan är monolitisk har den det största fotavtrycket och den mest komplicerade över de andra typerna av kärnor. Detta var en designfunktion som var under ganska lite debatt i början av Linux och har fortfarande några av samma designfel som monolitiska kärnor är inneboende att ha.

    En sak som Linux-kärnans utvecklare gjorde för att komma runt dessa brister var att göra kärnmoduler som kan laddas och lossas vid körning, vilket betyder att du kan lägga till eller ta bort funktioner i din kärna i flygningen. Detta kan gå utöver att bara lägga till maskinvarufunktionalitet i kärnan genom att inkludera moduler som kör serverprocesser, som virtualisering på låg nivå, men det kan också låta hela kärnan ersättas utan att behöva starta om datorn i vissa fall.

    Tänk dig om du kan uppgradera till ett Windows-servicepaket utan att behöva starta om ...

    Kärnelektroder

    Vad händer om Windows hade alla förare tillgängliga redan installerade och du var tvungen att starta drivrutinerna du behövde? Det är i huvudsak vilka kärnmoduler som gör för Linux. Kärnemoduler, även kända som en laddbar kärnmodul (LKM), är viktiga för att hålla kärnan fungerande med all din hårdvara utan att förbruka allt tillgängligt minne.

    En modul lägger vanligtvis funktionalitet till baskärnan för saker som enheter, filsystem och systemsamtal. LKMs har filtillägget .ko och lagras vanligtvis i katalogen / lib / modules. På grund av deras modulära natur kan du enkelt anpassa din kärna genom att ställa in moduler för att ladda eller inte ladda vid start med menuconfig-kommandot eller genom att redigera din / boot / config-filen eller du kan ladda och lossa moduler i farten med modprobe kommando.

    Tredje parts och slutna källmoduler finns tillgängliga i vissa utdelningar, som Ubuntu, och kan inte installeras som standard eftersom källkoden för modulerna inte är tillgänglig. Utvecklaren av mjukvaran (dvs. nVidia, ATI, bland annat) tillhandahåller inte källkoden utan snarare bygger de egna moduler och sammanställer de nödvändiga .ko-filerna för distribution. Medan dessa moduler är fria som i öl är de inte fria som i tal och är därför inte inkluderade av vissa distributioner eftersom underhållarna anser att det "taints" kärnan genom att tillhandahålla icke-fri programvara.

    En kärna är inte magisk, men det är helt nödvändigt att någon dator körs ordentligt. Linuxkärnan är annorlunda än OS X och Windows, eftersom den innehåller drivrutiner på kärnnivå och gör att många saker stöds "ur lådan". Förhoppningsvis kommer du att veta lite mer om hur din programvara och maskinvara fungerar tillsammans och vilka filer du behöver för att starta datorn.

    Kernel.org
    Bild av ingridtaylar