5Aug
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 vervangbare software die interfaces 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 één 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 benadert alleen het beheer: CPU, geheugen en IPC.Vrijwel al het andere op een computer kan worden gezien als een accessoire en kan worden afgehandeld in de gebruikersmodus. 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 nog steeds toegang probeert 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.
Pro's
- -draagbaarheid
- Kleine installatievoetafdruk
- Kleine geheugenvoetafdruk
- Beveiliging
-nadelen
- Hardware wordt meer geabstraheerd via stuurprogramma's
- Hardware reageert trager omdat stuurprogramma's zich in gebruikersmodus bevinden
- Processen moeten wachten in een wachtrij om informatie te verkrijgen
- Processen kunnen nietkrijg toegang tot andere processen zonder te wachten
Monolithic Kernel
Monolithische kernels zijn het tegenovergestelde van microkernels omdat ze niet alleen de CPU, het geheugen en de IPC omvatten, maar ze omvatten ook zaken als stuurprogramma'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 supervisor-modus worden uitgevoerd, des te meer dingen die uw systeem naar beneden kunnen halen als u zich niet correct gedraagt.
Pro's
- Meer directe toegang tot hardware voor programma's
- Gemakkelijker voor processen om met elkaar te communiceren
- Als uw apparaat wordt ondersteund, zou het zonder extra installaties moeten werken
- Processen reageren sneller omdat er geen wachtrij is voor processortijd
Cons
- Grootinstalleer footprint
- Grote geheugenvoetafdruk
- Minder veilig omdat alles in supervisor-modus wordt uitgevoerd
Afbeelding via schoschie op Flickr
Hybride kernel
Hybride kernels kunnen kiezen en kiezen wat ze in gebruikersmodus willen uitvoeren en wat ze in supervisor willen uitvoerenmodus. 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.
Voordelen
- Ontwikkelaar kan kiezen en kiezen wat wordt uitgevoerd in gebruikersmodus en wat wordt uitgevoerd in supervisor-modus
- Kleinere installatie footprint dan monolithische kernel
- Flexibeler dan andere modellen
tegens
- Kan lijden aan hetzelfde procesvertraging als microkernel
- Apparaatstuurprogramma's moeten worden beheerd door de gebruiker( meestal)
Waar zijn de Linux-kernelbestanden?
Het kernelbestand, in Ubuntu, wordt opgeslagen in uw / boot-map en wordt vmlinuz- -versie genoemd. 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 system.map-bestand 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 deze wordt gecompileerd.
Linux Kernel Architecture
Omdat de Linux-kernel monolithisch is, heeft deze de grootste footprint en de meest complexe over de andere typen kernels. Dit was een ontwerpkenmerk dat in de begindagen van Linux nogal wat discussie had en toch 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 kunnen 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 je in sommige gevallen je computer opnieuw hoeft op te starten.
Stel je voor dat je zou kunnen upgraden naar een Windows servicepack zonder ooit opnieuw op te starten. ..
Kernel Modules
Wat als Windows alle stuurprogramma's al beschikbaar had en je gewoon de stuurprogramma's moest inschakelen die je nodig had? 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 /lib/-moduleslijst. 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/-configuratiebestand te bewerken, of je kunt modules on-the-fly laden en verwijderen met de modprobe-opdracht.
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 verspreiding. 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