Was ist der Linux-Kernel und was macht er?


Mit über 13 Millionen Codezeilen ist der Linux-Kernel eines der größten Open-Source-Projekte der Welt, aber was ist ein Kernel und wozu dient er?



Was ist also der Kernel?

Ein Kernel ist die unterste Ebene leicht austauschbarer Software, die mit der Hardware Ihres Computers verbunden ist. Es ist dafür verantwortlich, alle Ihre Anwendungen, die im Benutzermodus ausgeführt werden, bis hin zur physischen Hardware zu verbinden und es Prozessen, sogenannten Servern, zu ermöglichen, mithilfe von Interprozesskommunikation (IPC) Informationen voneinander abzurufen.

Verschiedene Arten von Kerneln

Es gibt natürlich verschiedene Möglichkeiten, einen Kernel zu erstellen, und es gibt Überlegungen zur Architektur, wenn man einen von Grund auf neu erstellt. Im Allgemeinen fallen die meisten Kernel in einen von drei Typen: monolithisch, Mikrokernel und Hybrid. Linux ist ein monolithischer Kernel, während OS X (XNU) und Windows 7 hybride Kernel verwenden. Lassen Sie uns eine kurze Tour durch die drei Kategorien machen, damit wir später mehr ins Detail gehen können.






Bild von Uptown-Popcorn

Mikrokernel
Ein Mikrokernel verfolgt den Ansatz, nur das zu verwalten, was er muss: CPU, Speicher und IPC. So ziemlich alles andere an einem Computer kann als Zubehör betrachtet und im Benutzermodus gehandhabt werden. Mikrokernel haben den Vorteil der Portabilität, da sie sich keine Sorgen machen müssen, wenn Sie Ihre Grafikkarte oder sogar Ihr Betriebssystem wechseln, solange das Betriebssystem immer noch versucht, auf die Hardware auf die gleiche Weise zuzugreifen. Mikrokernel haben auch einen sehr geringen Platzbedarf, sowohl für den Arbeitsspeicher als auch für den Installationsplatz, und sie sind in der Regel sicherer, da nur bestimmte Prozesse im Benutzermodus ausgeführt werden, der nicht über die hohen Berechtigungen als Supervisor-Modus verfügt.



Vorteile

  • Portabilität
  • Geringer Installations-Footprint
  • Geringer Speicherbedarf
  • Sicherheit

Nachteile

  • Hardware wird durch Treiber abstrahiert
  • Die Hardware kann langsamer reagieren, weil sich die Treiber im Benutzermodus befinden
  • Prozesse müssen in einer Warteschlange warten, um Informationen zu erhalten
  • Prozesse können nicht ohne Wartezeit auf andere Prozesse zugreifen

Monolithischer Kern
Monolithische Kernel sind das Gegenteil von Mikrokerneln, da sie nicht nur CPU, Speicher und IPC umfassen, sondern auch Dinge wie Gerätetreiber, Dateisystemverwaltung und Systemserveraufrufe enthalten. Monolithische Kernel neigen dazu, besser auf Hardware und Multitasking zuzugreifen, denn wenn ein Programm Informationen aus dem Speicher oder einem anderen laufenden Prozess abrufen muss, hat es eine direktere Verbindung zum Zugriff und muss nicht in einer Warteschlange warten, um Dinge zu erledigen. Dies kann jedoch zu Problemen führen, denn je mehr Dinge im Supervisor-Modus ausgeführt werden, desto mehr Dinge können Ihr System zum Absturz bringen, wenn es sich nicht richtig verhält.



Vorteile

  • Direkterer Zugriff auf Hardware für Programme
  • Einfachere Kommunikation zwischen Prozessen
  • Wenn Ihr Gerät unterstützt wird, sollte es ohne zusätzliche Installationen funktionieren
  • Prozesse reagieren schneller, da es keine Warteschlange für Prozessorzeit gibt

Nachteile

  • Große Installationsfläche
  • Großer Speicherbedarf
  • Weniger sicher, da alles im Supervisor-Modus läuft


Bild über schoschie auf Flickr

Anzeige

Hybrid-Kernel
Hybrid-Kernel können auswählen, was sie im Benutzermodus und was im Supervisor-Modus ausführen möchten. Oft werden Dinge wie Gerätetreiber und Dateisystem-E/A im Benutzermodus ausgeführt, während IPC- und Serveraufrufe im Supervisor-Modus gehalten werden. Dies bietet das Beste aus beiden Welten, erfordert jedoch oft mehr Arbeit des Hardwareherstellers, da die gesamte Verantwortung des Treibers bei ihm liegt. Es kann auch einige der Latenzprobleme haben, die mit Mikrokerneln inhärent sind.

Vorteile

  • Entwickler können auswählen, was im Benutzermodus und was im Supervisor-Modus ausgeführt wird
  • Geringerer Installations-Footprint als monolithischer Kernel
  • Flexibler als andere Modelle

Nachteile

  • Kann unter derselben Prozessverzögerung wie Mikrokernel leiden
  • Gerätetreiber müssen vom Benutzer verwaltet werden (normalerweise)

Wo sind die Linux-Kernel-Dateien?

Die Kernel-Datei wird in Ubuntu in Ihrem /boot-Ordner gespeichert und heißt vmlinuz- Ausführung . Der Name vmlinuz stammt aus der Unix-Welt, in der sie ihre Kernel in den 60er Jahren einfach Unix nannten, also begann Linux, ihren Kernel Linux zu nennen, als es in den 90er Jahren zum ersten Mal entwickelt wurde.

Als virtueller Speicher für einfachere Multitasking-Fähigkeiten entwickelt wurde, wurde vm an den Anfang der Datei gesetzt, um zu zeigen, dass der Kernel virtuellen Speicher unterstützt. Eine Zeit lang hieß der Linux-Kernel vmlinux, aber der Kernel wurde zu groß, um in den verfügbaren Boot-Speicher zu passen, sodass das Kernel-Image komprimiert und die Endung x in ein z geändert wurde, um anzuzeigen, dass es mit der Zlib-Komprimierung komprimiert wurde. Diese Komprimierung wird nicht immer verwendet, oft durch LZMA oder BZIP2 ersetzt, und einige Kernel werden einfach zImage genannt.

Die Versionsnummerierung hat das Format A.B.C.D, wobei A.B wahrscheinlich 2.6 ist, C Ihre Version ist und D Ihre Patches oder Fixes angibt.

Im /boot-Ordner befinden sich auch andere sehr wichtige Dateien namens initrd.img-version, system.map-version und config-version. Die initrd-Datei wird als kleines RAM-Disk die die eigentliche Kernel-Datei extrahiert und ausführt. Die Datei system.map wird für die Speicherverwaltung verwendet, bevor der Kernel vollständig geladen wird, und die Konfigurationsdatei teilt dem Kernel mit, welche Optionen und Module in das Kernel-Image geladen werden sollen, wenn es kompiliert wird.

Linux-Kernel-Architektur

Da der Linux-Kernel monolithisch ist, hat er den größten Platzbedarf und die größte Komplexität gegenüber den anderen Kerneltypen. Dies war ein Designmerkmal, das unter war in den frühen Tagen von Linux ziemlich heftig diskutiert und weist immer noch einige der gleichen Designfehler auf, die monolithische Kernel inhärent sind.

Anzeige

Eine Sache, die die Linux-Kernel-Entwickler unternommen haben, um diese Fehler zu umgehen, bestand darin, Kernel-Module zu entwickeln, die zur Laufzeit geladen und entladen werden konnten, was bedeutet, dass Sie Ihrem Kernel im laufenden Betrieb Funktionen hinzufügen oder entfernen können. Dies kann über das bloße Hinzufügen von Hardwarefunktionen zum Kernel hinausgehen, indem Module hinzugefügt werden, die Serverprozesse ausführen, wie z.

Stellen Sie sich vor, Sie könnten auf ein Windows Service Pack aktualisieren, ohne jemals neu starten zu müssen…

Kernel-Module

Was wäre, wenn Windows alle verfügbaren Treiber bereits installiert hätte und Sie nur die benötigten Treiber aktivieren müssten? Das ist im Wesentlichen das, was Kernel-Module für Linux tun. Kernelmodule, auch als ladbares Kernelmodul (LKM) bekannt, sind unerlässlich, damit der Kernel mit Ihrer gesamten Hardware funktioniert, ohne Ihren gesamten verfügbaren Speicher zu verbrauchen.

Ein Modul fügt dem Basiskernel normalerweise Funktionen für Dinge wie Geräte, Dateisysteme und Systemaufrufe hinzu. LKMs haben die Dateierweiterung .ko und werden normalerweise im Verzeichnis /lib/modules gespeichert. Aufgrund ihres modularen Charakters können Sie leicht Passen Sie Ihren Kernel an indem Sie Module so einstellen, dass sie während des Startvorgangs mit dem Befehl menuconfig geladen oder nicht geladen werden, oder indem Sie Ihre /boot/config-Datei bearbeiten, oder Sie können Module im laufenden Betrieb mit dem Befehl modprobe laden und entladen.

Module von Drittanbietern und Closed Source sind in einigen Distributionen wie Ubuntu verfügbar und werden möglicherweise nicht standardmäßig installiert, da der Quellcode für die Module nicht verfügbar ist. Die Entwickler der Software (d.h. nVidia, ATI u.a.) stellen nicht den Quellcode zur Verfügung, sondern bauen ihre eigenen Module und kompilieren die benötigten .ko-Dateien für die Verteilung. Diese Module sind zwar frei wie im Bier, sie sind nicht frei wie in der Rede und sind daher in einigen Distributionen nicht enthalten, da die Betreuer der Meinung sind, dass sie den Kernel beflecken, indem sie unfreie Software bereitstellen.

Ein Kernel ist keine Magie, aber er ist für jeden Computer, der richtig läuft, absolut notwendig. Der Linux-Kernel unterscheidet sich von OS X und Windows, da er Treiber auf Kernel-Ebene enthält und viele Dinge sofort unterstützt. Hoffentlich wissen Sie ein wenig mehr darüber, wie Ihre Software und Hardware zusammenarbeiten und welche Dateien Sie zum Booten Ihres Computers benötigen.

Kernel.org
Bild von ingritaylar

WEITER LESEN Profilfoto von Justin Garrison Justin Garnison
Justin Garrison ist Linux-Enthusiast und Cloud-Infrastruktur-Ingenieur für eines der größten Unternehmen der Welt. Er ist auch Co-Autor von Cloud Native Infrastructure von O'Reilly.
Vollständige Biografie lesen

Interessante Artikel