Startpagina » hoe » Wat is de Linux-kernel en wat doet het?

    Wat is de Linux-kernel en wat doet het?


    Met meer dan 13 miljoen regels code is de Linux-kernel een van de grootste open-sourceprojecten ter wereld, maar wat is een kernel en waarvoor wordt deze gebruikt?

    Dus wat is de kernel?

    Een kernel is het laagste niveau van gemakkelijk te vervangen software die een interface vormt met de hardware op uw computer. Het is verantwoordelijk voor het koppelen van al uw applicaties die in de "gebruikersmodus" draaien tot aan de fysieke hardware, en het toestaan ​​van processen, bekend als servers, om informatie van elkaar te krijgen met behulp van inter-process communication (IPC).

    Verschillende soorten kernels

    Er zijn natuurlijk verschillende manieren om een ​​kernel en architecturale overwegingen te bouwen wanneer je er een vanuit het niets opbouwt. Over het algemeen vallen de meeste kernels uiteen in drie soorten: monolithisch, microkernel en hybride. Linux is een monolithische kern, terwijl OS X (XNU) en Windows 7 hybride kernels gebruiken. Laten we een korte rondleiding door de drie categorieën maken, zodat we later meer in detail kunnen treden.


    Afbeelding door uptown popcorn

    microkernel
    Een microkernel neemt de benadering om alleen te beheren wat hij moet doen: CPU, geheugen en IPC. Vrijwel al het andere op een computer kan als een accessoire worden gezien en kan in de gebruikersmodus worden verwerkt. Microkernels hebben een voordeel van draagbaarheid, omdat ze zich geen zorgen hoeven te maken als je je videokaart of zelfs je besturingssysteem wijzigt zolang het besturingssysteem op dezelfde manier probeert toegang te krijgen tot de hardware. Microkernels hebben ook een zeer kleine voetafdruk, zowel voor geheugen als installatieruimte, en ze hebben de neiging om veiliger te zijn omdat alleen specifieke processen worden uitgevoerd in de gebruikersmodus die niet de hoge machtigingen heeft als supervisormodus.

    Pros

    • Draagbaarheid
    • Kleine footprint van installatie
    • Kleine geheugenvoetafdruk
    • Veiligheid

    Cons

    • Hardware wordt meer geabstraheerd door stuurprogramma's
    • Hardware reageert mogelijk trager omdat stuurprogramma's zich in de gebruikersmodus bevinden
    • Processen moeten in een wachtrij wachten om informatie te krijgen
    • Processen kunnen geen toegang krijgen tot andere processen zonder te wachten

    Monolithische kernel
    Monolithische kernels zijn het tegenovergestelde van microkernels omdat ze niet alleen de CPU, het geheugen en IPC omvatten, maar ze omvatten ook zaken als apparaatstuurprogramma's, bestandssysteembeheer en oproepen van de systeem server. Monolithische kernels hebben de neiging beter te zijn in de toegang tot hardware en multitasking, omdat als een programma informatie uit het geheugen of een ander proces nodig heeft, het een meer directe lijn heeft om het te benaderen en niet in een wachtrij hoeft te wachten om dingen gedaan te krijgen. Dit kan echter problemen veroorzaken, want hoe meer dingen in de supervisormodus worden uitgevoerd, hoe meer dingen je systeem kunnen onderdrukken als iemand zich niet correct gedraagt.

    Pros

    • Meer directe toegang tot hardware voor programma's
    • Makkelijker voor processen om met elkaar te communiceren
    • Als uw apparaat wordt ondersteund, zou het moeten werken zonder extra installaties
    • Processen reageren sneller omdat er geen wachtrij is voor de processortijd

    Cons

    • Grote voetafdruk van installatie
    • Grote geheugenvoetafdruk
    • Minder veilig omdat alles in de supervisormodus werkt


    Afbeelding via schoschie op Flickr

    Hybrid Kernel
    Hybride kernels kunnen in de gebruikersmodus kiezen en kiezen wat ze willen uitvoeren en wat ze in de supervisormodus willen uitvoeren. Vaak worden zaken zoals apparaatstuurprogramma's en I / O van het bestandssysteem in gebruikersmodus uitgevoerd, terwijl IPC- en serveroproepen in supervisor-modus worden gehouden. Dit geeft het beste van beide werelden, maar vereist vaak meer werk van de hardwarefabrikant, omdat alle verantwoordelijkheid van de bestuurder aan hen is. Het kan ook enkele latentieproblemen hebben die inherent zijn aan microkernels.

    Pros

    • Ontwikkelaar kan kiezen en kiezen wat wordt uitgevoerd in de gebruikersmodus en wat wordt uitgevoerd in de supervisormodus
    • Kleinere footprint van installatie dan monolithische kernel
    • Flexibeler dan andere modellen

    Cons

    • Kan last hebben van hetzelfde procesvertraging als microkernel
    • Apparaatstuurprogramma's moeten door de gebruiker worden beheerd (meestal)

    Waar zijn de Linux kernelbestanden?

    Het kernelbestand, in Ubuntu, wordt opgeslagen in je / boot-map en wordt vmlinuz genoemd-versie. De naam vmlinuz komt uit de Unix-wereld waar ze hun kernels simpelweg "unix" noemden in de jaren 60, dus Linux begon hun kernel "linux" te noemen toen het voor het eerst werd ontwikkeld in de jaren 90.

    Toen virtueel geheugen werd ontwikkeld voor eenvoudigere multitasking-mogelijkheden, werd "vm" aan de voorkant van het bestand geplaatst om aan te geven dat de kernel virtueel geheugen ondersteunt. Een tijdlang werd de Linux-kernel vmlinux genoemd, maar de kernel werd te groot om in het beschikbare opstartgeheugen te passen, zodat de kernelafbeelding werd gecomprimeerd en de uitgang x werd gewijzigd in een z om aan te geven dat deze gecomprimeerd was met zlib-compressie. Deze zelfde compressie wordt niet altijd gebruikt, vaak vervangen door LZMA of BZIP2, en sommige kernels worden eenvoudigweg zImage genoemd.

    De versienummering heeft de notatie A.B.C.D waarbij A.B waarschijnlijk 2,6 is, C uw versie en D uw patches of fixes..

    In de map / boot zullen er ook andere zeer belangrijke bestanden zijn, genaamd initrd.img-versie, system.map-versie en config-versie. Het initrd-bestand wordt gebruikt als een kleine RAM-schijf die het feitelijke kernelbestand extraheert en uitvoert. Het bestand system.map wordt gebruikt voor geheugenbeheer voordat de kernel volledig wordt geladen, en het configuratiebestand vertelt de kernel welke opties en modules moeten worden geladen in de kernelafbeelding wanneer de kernel wordt gecompileerd.

    Linux kernel architectuur

    Omdat de Linux-kern monolithisch is, heeft deze de grootste footprint en de meeste complexiteit ten opzichte van de andere typen kernels. Dit was een ontwerpkenmerk dat in de begindagen van Linux nogal wat discussie had en nog steeds enkele van dezelfde ontwerpfouten bevat die monolithische kernels inherent zijn om te hebben.

    Een ding dat de Linux-kernelontwikkelaars deden om deze fouten te omzeilen, was om kernelmodules te maken die tijdens runtime konden worden geladen en ontladen, wat betekent dat je on-the-fly functies van je kernel kunt toevoegen of verwijderen. Dit kan verder gaan dan alleen het toevoegen van hardwarefunctionaliteit aan de kernel, door modules op te nemen die serverprocessen uitvoeren, zoals low-level virtualisatie, maar het kan ook toestaan ​​dat de hele kernel wordt vervangen zonder dat de computer in sommige gevallen opnieuw hoeft te worden opgestart..

    Stel je voor dat je zou kunnen upgraden naar een Windows Service Pack zonder ooit opnieuw op te starten ...

    Kernel Modules

    Wat als Windows alle stuurprogramma's al beschikbaar had en u de benodigde stuurprogramma's moest inschakelen? Dat is in essentie wat kernelmodules voor Linux doen. Kernelmodules, ook wel bekend als een laadbare kernelmodule (LKM), zijn essentieel om de kernel te laten werken met al je hardware zonder al je beschikbare geheugen te gebruiken.

    Een module voegt typisch functionaliteit toe aan de basis-kernel voor zaken als apparaten, bestandssystemen en systeemaanroepen. LKM's hebben de extensie .ko en worden meestal opgeslagen in de map / lib / modules. Vanwege hun modulaire aard kun je eenvoudig je kernel aanpassen door modules in te stellen om te laden, of niet laden, tijdens het opstarten met de opdracht menuconfig of door je / boot / config-bestand te bewerken, of je kunt modules on-the-fly laden en verwijderen met de modprobe commando.

    Externe en gesloten bronmodules zijn beschikbaar in sommige distributies, zoals Ubuntu, en worden mogelijk niet standaard geïnstalleerd omdat de broncode voor de modules niet beschikbaar is. De ontwikkelaar van de software (d.w.z., nVidia, ATI, onder andere) verschaffen niet de broncode, maar zij bouwen hun eigen modules en compileren de benodigde .ko-bestanden voor distributie. Hoewel deze modules gratis zijn zoals in bier, zijn ze niet vrij als in spraak en worden ze daarom niet opgenomen in sommige distributies omdat de beheerders het gevoel hebben dat het de kernel "bederft" door niet-vrije software te leveren.

    Een kernel is geen magie, maar het is absoluut noodzakelijk voor elke computer die goed werkt. De Linux-kernel is anders dan OS X en Windows omdat het stuurprogramma's op kernelniveau bevat en veel dingen "out of the box" ondersteunt. Hopelijk weet u wat meer over hoe uw software en hardware samenwerken en welke bestanden u nodig hebt om uw computer op te starten.

    Kernel.org
    Afbeelding door ingridtaylar