Wat is een kernel?

28 maart 2024

Een kernel is de kerncomponent van een besturingssysteem, die fungeert als de brug tussen die van het systeem hardware en software. De kernel beheert systeembronnen en vergemakkelijkt de interacties tussen hardware- en softwarecomponenten.

De kernel is verantwoordelijk voor kritieke taken zoals geheugenbeheer, taakplanning (beslissen welke processen de Centrale verwerkingseenheid (CPU) en voor hoe lang), apparaatbeheer en het afhandelen van systeemaanroepen van processen die op de computer draaien. De kernel biedt een abstractielaag tussen de hardware en de applicatieprogramma's, waardoor softwareontwikkelaars programma's kunnen schrijven zonder de specifieke kenmerken van de onderliggende hardware te hoeven begrijpen.

Een korte geschiedenis van de kernel

De ontwikkeling van de kernel, de kern van elk besturingssysteem, gaat terug tot de begindagen van de computer. Aanvankelijk hadden computers geen besturingssysteem en communiceerden programmeurs rechtstreeks met de hardware via machinetaal. Naarmate de computertechnologie evolueerde, ontstond er behoefte aan een efficiënter beheer van hardwarebronnen, wat leidde tot de ontwikkeling van de eerste basisbesturingssystemen en daarmee het kernelconcept.

In de jaren zestig had het Multics-project, een samenwerking tussen MIT, Bell Labs en General Electric, tot doel een time-sharing besturingssysteem te creëren. Hoewel Multics veel concepten introduceerde die fundamenteel waren voor moderne besturingssystemen, werd het destijds als te complex en ambitieus beschouwd. Het legde echter de basis voor de ontwikkeling van UNIX eind jaren zestig en begin jaren zeventig door Ken Thompson, Dennis Ritchie en anderen bij Bell Labs.

Het eenvoudigere ontwerp en de kernel van UNIX werden invloedrijk op het gebied van besturingssystemen. De GNU Project, gestart door Richard Stallman in 1983, had tot doel een gratis UNIX-achtig besturingssysteem te creëren, wat uiteindelijk leidde tot de ontwikkeling van de Linux-kernel door Linus Torvalds in 1991. De Linux-kernel vormde, gecombineerd met GNU-tools, het Linux-besturingssysteem. , tegenwoordig veel gebruikt in servers, desktops en embedded systemen.

Microsoft's ontwikkeling van de Windows NT-kernel eind jaren tachtig en begin jaren negentig introduceerde een hybride kernelarchitectuur, die de basis vormde voor alle volgende versies van Windows.

Door de jaren heen zijn kernels geëvolueerd om een ​​breed scala aan hardware te ondersteunen en robuustere, veiligere en efficiëntere besturingssystemen te bieden. Vooruitgang op het gebied van virtualisatie, realtime verwerking en beveiliging heeft de rol en complexiteit van kernels in moderne computeromgevingen verder uitgebreid, waardoor de cruciale rol van de kernel bij het overbruggen van hardware en software wordt versterkt.

Waar wordt kernel voor gebruikt?

De kernel, als kerncomponent van een besturingssysteem, heeft verschillende fundamentele rollen die het mogelijk maken de systeembronnen te beheren en de soepele werking van de computer te garanderen. De primaire toepassingen zijn onder meer:

  • Procesmanagement. De kernel bestuurt de uitvoering van processen, beheert hun status (actief, wachtend, enz.), plant hun toegang tot de CPU en zorgt voor het wisselen van context tussen processen. Dit zorgt ervoor dat applicaties tegelijkertijd kunnen draaien zonder elkaar te hinderen, waardoor de reactiesnelheid en efficiëntie van het systeem worden geoptimaliseerd.
  • Geheugen management. Het houdt toezicht op de toewijzing en de toewijzing van geheugenruimten voor processen en het besturingssysteem zelf. De kernel zorgt ervoor dat elk proces toegang heeft tot het geheugen dat het nodig heeft, beheert het virtuele geheugen om het fysieke geheugen uit te breiden met schijfopslag en beschermt de geheugenruimte van processen tegen elkaar, waardoor ongeoorloofde toegang wordt voorkomen.
  • Apparaatbeheer. De kernel fungeert als tussenpersoon tussen de software- en hardwarecomponenten. Het bevat stuurprogramma's die de communicatie met hardwareapparaten, zoals het toetsenbord, de muis, schijfstations en printers, vergemakkelijken, waardoor softwareverzoeken worden vertaald in hardwareacties en omgekeerd.
  • Beheer van bestandssystemen. Het is verantwoordelijk voor bestandsbeheer en biedt een gestructureerde manier om gegevens op opslagapparaten op te slaan, op te halen en te beheren. De kernel implementeert bestandssysteembewerkingen zoals het maken, verwijderen, lezen en schrijven van bestanden en mappen, samen met het beheren van machtigingen en het garanderen data-integriteit.
  • Netwerken. De kernel regelt de complexiteit van netwerken door de verzending en ontvangst van gegevens via netwerkinterfaces te beheren. Het implementeert protocollen voor communicatie via lokale netwerken en internet, waardoor processen met elkaar en met andere systemen kunnen communiceren.
  • Beveiliging en toegangscontrole. De kernel dwingt beveiligingsbeleid en toegangscontrolemechanismen af ​​om de integriteit en privacy van het systeem te beschermen. Het controleert de toegang tot bestanden, apparaten en andere bronnen en zorgt ervoor dat alleen geautoriseerde gebruikers en processen bepaalde bewerkingen kunnen uitvoeren, waardoor het risico op kwaadwillige activiteiten wordt beperkt.

Waar bevindt de kernel zich?

Als centrale component van het besturingssysteem bevindt de kernel zich direct boven de hardwarelaag en vormt zo een kritische abstractielaag tussen de hardware en de software die op de computer draait. Het bevindt zich doorgaans binnen de bestandssysteem een filet of een set bestanden die specifiek zijn voor het besturingssysteem. In Linux wordt de kernelimage bijvoorbeeld vaak gevonden op /boot/vmlinuz of een soortgelijk pad, samen met andere bestanden die nodig zijn voor het opstartproces van het systeem.

Bij het opstarten van de computer wordt de kernel in het geheugen (RAM) geladen vanaf het permanente opslagapparaat (bijv. harde schijf, SSD). De bootloader laadt de kernel in het geheugen, en eenmaal geladen blijft de kernel daar terwijl de computer draait, waarbij hij systeembronnen en interacties tussen hardware en software beheert.

Door de overgang van opslag naar geheugen kan de kernel het systeem efficiënt beheren, verzoeken van softwareapplicaties afhandelen en bronnen zoals processortijd, geheugen en randapparatuur beheren. Dit laadproces zorgt ervoor dat de kernel de noodzakelijke abstractie kan bieden zodat software op een hoger niveau met het systeem kan communiceren zonder de details van de hardware te kennen.

Kernel-typen

Hier is een overzicht van verschillende kerneltypen, hun voordelen en beperkingen.

Monolithische Kernel

Met dit type systeemarchitectuur draait het gehele besturingssysteem, inclusief de kernfunctionaliteit, apparaatstuurprogramma's, bestandssysteembeheer en netwerkstacks, in één enkele geheugenruimte, wat een hoge efficiëntie en directe toegang tot hardwarebronnen biedt.

VOORDELEN

  • Hoge prestaties dankzij het draaien in één adresruimte.
  • Efficiënte communicatie tussen processen.
  • Directe en snelle toegang tot hardwarebronnen.
  • Brede ondersteuning voor hardware en apparaten dankzij volwassen ontwikkeling.
  • Uitgebreide functieset geïntegreerd in de kernel.

NADELEN

  • Complexiteit bij het onderhouden en bijwerken van de kernelcode.
  • Grotere kans op systeemcrashes en beveiligingsproblemen.
  • Moeilijk om defecte componenten te isoleren, wat de systeemstabiliteit beïnvloedt.
  • Grotere kernelgroottes kunnen tot inefficiënties leiden.
  • Modulaire updates of wijzigingen kunnen een volledige herstart van het systeem vereisen.

micro kernel

Dit type kernel omvat alleen de meest fundamentele systeemdiensten, zoals communicatie tussen processen en basishardwarebeheer, terwijl andere diensten in de gebruikersruimte draaien om de modulariteit en systeemveiligheid te verbeteren.

VOORDELEN

  • Verbeterde veiligheid en stabiliteit dankzij isolatie van systeemcomponenten.
  • Gemakkelijker om afzonderlijke componenten te onderhouden en bij te werken zonder het hele systeem te beïnvloeden.
  • Greater flexmogelijkheden om onderdelen te vervangen of aan te passen.
  • Geschikt voor gebruik in systemen die een hoge betrouwbaarheid en beschikbaarheid vereisen.
  • Vereenvoudigd ontwerp leidt tot minder bugs en kwetsbaarheden.

NADELEN

  • Lagere prestaties vergeleken met monolithische kernels vanwege de overhead van communicatie tussen processen.
  • Complexere systeemarchitectuur, wat ontwikkeling en foutopsporing kan bemoeilijken.
  • Potentieel voor verhoogde latentie van systeemoproepen, wat gevolgen heeft voor tijdgevoelige applicaties.
  • Ontwikkeling en optimalisatie vereisen mogelijk meer inspanning en expertise.
  • Beperkte ondersteuning voor oudere hardware en software vergeleken met sommige monolithische kernels.

Hybride kernel

Een hybride kernelsysteemarchitectuur combineert de elementen van monolithische en microkernels, waarbij sommige services in de kernelruimte worden uitgevoerd voor prestaties, terwijl andere in de gebruikersruimte blijven voor betere modulariteit en beveiliging.

VOORDELEN

  • Efficiënte prestaties in veel scenario's.
  • FlexMogelijkheid bij het uitvoeren van gebruikersservices en stuurprogramma's in gebruikersruimte of kernelruimte.
  • Betere hardware- en applicatiecompatibiliteit.
  • Verbeterde systeemstabiliteit en beveiliging vergeleken met monolithische kernels.
  • Het modulaire ontwerp maakt updates en onderhoud voor bepaalde componenten eenvoudiger.

NADELEN

  • Complexer om te ontwerpen en te implementeren dan monolithische of microkernels.
  • Potentieel voor verhoogde systeemoverhead en latentie in de communicatie tussen gebruikersruimte en kernelruimte.
  • Beveiligingsrisico's als gebruikersruimtediensten nauw samenwerken met kerneldiensten.
  • Kan de nadelen van zowel monolithische als microkernel-architecturen erven, afhankelijk van de implementatie.
  • Een compromis tussen prestaties en modulariteit kan tot inefficiënties leiden.

exokernel

Met dit kerneltype hebben applicaties directere toegang tot hardwarebronnen door de rol van de kernel in het resourcebeheer te minimaliseren. Deze aanpak vermindert de overhead van de abstractielaag en biedt meer flexibiliteit en efficiëntie in de manier waarop applicaties omgaan met de hardware van het systeem.

VOORDELEN

  • Verbeterde prestaties door minder abstractie en overhead.
  • Greater flexmogelijkheden voor applicaties om het gebruik van bronnen te optimaliseren.
  • Maakt toepassingsspecifieke optimalisaties en aanpassingen mogelijk.
  • Moedigt innovatie aan door nieuwe besturingssysteemstructuren mogelijk te maken.
  • Efficiënt multiplexen van hardwarebronnen tussen meerdere omgevingen.

NADELEN

  • Toegenomen complexiteit bij applicatieontwikkeling.
  • Potentieel hogere beveiligingsrisico's omdat applicaties nauwere toegang hebben tot hardware.
  • Compatibiliteitsproblemen tussen applicaties die zijn ontworpen voor verschillende op exokernel gebaseerde systemen.
  • Minder isolatie tussen applicaties, wat mogelijk tot stabiliteitsproblemen kan leiden.

Nanokernel

Een nanokernel is een nog minimalistischere benadering van het ontwerp van besturingssystemen vergeleken met microkernels en exokernels. Het richt zich op het leveren van alleen de functionaliteiten die nodig zijn voor het beheren van hardwarebronnen en het faciliteren van minimale systeemservices.

VOORDELEN

  • Minimalistisch ontwerp, wat leidt tot mogelijk lagere systeemoverhead.
  • Verbeterde veiligheid dankzij de verminderde aanvalsoppervlak.
  • Verbeterde stabiliteit en betrouwbaarheid, omdat minder functies in de kernelmodus worden uitgevoerd.
  • Gemakkelijker te onderhouden en te updaten vanwege de eenvoud.
  • Creëert een betere scheiding van zorgen, met een duidelijk onderscheid tussen systeem- en applicatieservices.
  • Potentieel beter geschikt voor realtime toepassingen vanwege de kortere padlengtes van de kernelcode.

NADELEN

  • Verhoogde overhead van systeemoproepen, omdat voor meer bewerkingen communicatie tussen processen nodig is.
  • Potentieel voor lagere prestaties vanwege de overhead van communicatie tussen gebruikersruimte en kernelruimte.
  • Complexiteit bij de ontwikkeling van applicaties, omdat ontwikkelaars meer taken op systeemniveau moeten uitvoeren.
  • Beperkte functionaliteit binnen de kernel vereist aanvullende mechanismen om de systeemmogelijkheden uit te breiden.
  • Het is moeilijker om optimale prestaties van stuurprogramma's te bereiken, omdat stuurprogramma's mogelijk in de gebruikersruimte worden uitgevoerd.
  • Uitdagend om compatibiliteit en interoperabiliteit met bestaande software en systemen te garanderen.

Kernelmodus versus gebruikersmodus

Kernelmodus en gebruikersmodus vertegenwoordigen twee verschillende bedrijfstoestanden binnen een computersysteem, elk met zijn eigen toegangsniveau en controle over hardwarebronnen.

De kernelmodus, ook wel supervisormodus genoemd, geeft de kernel volledige toegang tot alle hardware en geheugen in het systeem. In deze modus kan de kernel kritieke taken op laag niveau uitvoeren, zoals het beheren van geheugen, het uitvoeren van hardware-instructies en het afhandelen van interrupts. Omdat code in de kernelmodus rechtstreeks kan communiceren met hardware en deze kan besturen, werkt deze met het hoogste niveau van vertrouwen en autoriteit binnen het systeem. Deze onbeperkte toegang is noodzakelijk voor de kernel om het systeem efficiënt te beheren, maar vormt ook een risico omdat eventuele bugs of beveiligingsproblemen in de kernelmodus kunnen leiden tot systeeminstabiliteit of compromissen.

Omgekeerd is de gebruikersmodus een beperkte modus waarin de meeste applicaties en software worden uitgevoerd. In deze modus wordt de toegang tot hardware en kritieke systeembronnen door de kernel gemedieerd via systeemaanroepen. De gebruikersmodus biedt een beschermde omgeving die de directe toegang van een applicatie tot de hardware beperkt, waardoor het systeem wordt beschermd tegen kwaadaardige of gebrekkige software. Als een applicatie in de gebruikersmodus crasht of een fout tegenkomt, is de kans kleiner dat dit een wijdverspreide systeemfout veroorzaakt, omdat de kernel het probleem vaak kan beheren of isoleren.

De scheiding tussen gebruikers- en kernelmodi is van fundamenteel belang voor moderne besturingssystemen, omdat deze een beveiligingsgrens biedt en stabiliteit garandeert. Het besturingssysteem controleert zorgvuldig de overgang van de gebruikersmodus naar de kernelmodus en terug, waardoor een evenwicht ontstaat tussen systeemprestaties en beveiliging.


Anastasia
Spasojević
Anastazija is een ervaren contentschrijver met kennis en passie voor cloud computergebruik, informatietechnologie en onlinebeveiliging. Bij phoenixNAP, richt ze zich op het beantwoorden van brandende vragen over het waarborgen van de robuustheid en veiligheid van gegevens voor alle deelnemers aan het digitale landschap.