5Aug

Was ist der Linux-Kernel und was macht er?


Mit über 13 Millionen Zeilen Code ist der Linux-Kernel eines der größten Open-Source-Projekte der Welt, aber was ist ein Kernel und wofür wird er verwendet?

Was ist der Kernel?

Ein Kernel ist die unterste Ebene der leicht austauschbaren Software, die mit der Hardware in Ihrem Computer verbunden ist. Es ist dafür zuständig, alle Ihre Anwendungen, die im "Benutzermodus" ausgeführt werden, an die physische Hardware anzubinden, und ermöglicht es Prozessen, die als Server bezeichnet werden, Informationen über die Interprozesskommunikation( IPC) voneinander zu erhalten.

Verschiedene Arten von Kernels

Es gibt natürlich verschiedene Möglichkeiten, einen Kernel und Architekturaspekte zu erstellen, wenn man einen von Grund auf neu erstellt. Im Allgemeinen fallen die meisten Kerne in einen von drei Typen: monolithisch, Mikrokernel und Hybrid. Linux ist ein monolithischer Kernel, während OS X( XNU) und Windows 7 Hybrid-Kernel verwenden. Lassen Sie uns einen kurzen Überblick über die drei Kategorien geben, damit wir später genauer darauf eingehen können.


Bild von Uptown Popcorn

Microkernel
Ein Mikrokernel nimmt den Ansatz, nur zu verwalten, was es hat: CPU, Speicher und IPC.So ziemlich alles andere in einem Computer kann als Zubehör betrachtet werden und kann im Benutzermodus gehandhabt werden. Microkernels haben den Vorteil der Portabilität, da sie sich keine Sorgen machen müssen, wenn Sie Ihre Grafikkarte oder sogar Ihr Betriebssystem ändern, solange das Betriebssystem weiterhin auf die gleiche Weise auf die Hardware zugreift. Microkernels haben auch eine sehr kleine Stellfläche, sowohl für Speicher- als auch für Installationsspeicher, und sie sind tendenziell sicherer, da nur bestimmte Prozesse im Benutzermodus ausgeführt werden, die nicht die hohen Berechtigungen als Supervisor-Modus haben.

Vorteile

  • Portabilität
  • Kleine Installationsgröße
  • Kleine Speicherkapazität
  • Sicherheit

Nachteile

  • Hardware wird durch Treiber mehr abstrahiert
  • Hardware reagiert möglicherweise langsamer, weil Treiber im Benutzermodus sind
  • Prozesse müssen in einer Warteschlange warten, um Informationen zu erhalten
  • Prozesse nicht möglichZugriff auf andere Prozesse ohne Warten

Monolithischer Kernel
Monolithische Kernel sind das Gegenteil von Microkernels, da sie nicht nur CPU, Speicher und IPC umfassen, sondern auch Dinge wie Gerätetreiber, Dateisystemverwaltung und Systemserveraufrufe. Monolithische Kernel sind in der Regel besser im Zugriff auf Hardware und Multitasking. Wenn ein Programm Informationen aus dem Speicher oder einem anderen Prozess abrufen muss, hat es eine direktere Zugriffsmöglichkeit und muss nicht in einer Warteschlange warten. Dies kann jedoch zu Problemen führen, denn je mehr Dinge im Supervisormodus ausgeführt werden, desto mehr Dinge können Ihr System zum Absturz bringen, wenn Sie sich nicht richtig verhalten.

Vorteile

  • Mehr direkten 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 keine Warteschlange für Prozessorzeit vorhanden ist

Cons

  • GroßInstallation des Footprints
  • Großer Speicherbedarf
  • Weniger Sicherheit, da alles im Supervisor-Modus läuft


Image über schoschie auf Flickr

Hybrid-Kernel
Hybrid-Kernel können wählen, was sie im Benutzermodus ausführen möchten und was sie im Supervisor ausführen möchtenModus. Oftmals werden Dinge wie Gerätetreiber und Dateisystem-I / O im Benutzermodus ausgeführt, während IPC- und Server-Aufrufe im Supervisor-Modus gehalten werden. Dies ergibt das Beste aus beiden Welten, erfordert jedoch oft mehr Arbeit des Hardwareherstellers, da die gesamte Verantwortung des Fahrers ihnen selbst überlassen bleibt. Es kann auch einige der Latenzprobleme haben, die Microkernels inhärent sind.

Pros

  • Entwickler kann wählen, was im Benutzermodus läuft und was im Supervisor-Modus läuft
  • Kleiner Installationsfußabdruck als monolithischer Kernel
  • Flexibler als andere Modelle

Cons

  • Kann die gleiche Prozessverzögerung aufweisen wie der Mikrokern
  • Gerätetreiber müssen vom Benutzer verwaltet werden( normalerweise)

Wo befinden sich die Linux-Kernel-Dateien?

Die Kernel-Datei in Ubuntu wird im Ordner / boot gespeichert und heißt vmlinuz- Version .Der Name vmlinuz stammt aus der Unix-Welt, wo sie in den 60ern ihre Kernel einfach "Unix" nannten, also begann Linux seinen Kernel "linux" zu nennen, als er in den 90er Jahren entwickelt wurde.

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

Die Versionsnummerierung wird im Format A.B.C.D sein, wobei A.B wahrscheinlich 2.6 ist, C Ihre Version und D Ihre Patches oder Fixes.

Im Ordner / boot gibt es auch andere sehr wichtige Dateien namens initrd.img-version, system.map-version und config-version. Die initrd-Datei wird als kleine RAM-Disk verwendet, 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 beim Kompilieren in das Kernel-Image geladen werden.

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 Kernel-Typen. Dies war ein Designmerkmal, das in den frühen Tagen von Linux ziemlich diskutiert wurde und immer noch einige der gleichen Konstruktionsfehler aufweist, die monolithische Kernel besitzen.

Eine Sache, die die Linux-Kernel-Entwickler gemacht haben, um diese Fehler zu umgehen, bestand darin, Kernel-Module herzustellen, die zur Laufzeit geladen und entladen werden konnten, was bedeutet, dass Sie Funktionen Ihres Kernels spontan hinzufügen oder entfernen können. Dies kann über das Hinzufügen von Hardwarefunktionen zum Kernel hinausgehen, indem Module hinzugefügt werden, die Serverprozesse ausführen, z. B. Low-Level-Virtualisierung, aber auch der gesamte Kernel ersetzt werden kann, ohne dass der Computer in einigen Fällen neu gestartet werden muss.

Stellen Sie sich vor, Sie könnten auf ein Windows Service Pack upgraden ohne jemals einen Neustart durchführen zu müssen. ..

Kernel Modules

Was wäre, wenn Windows jeden verfügbaren Treiber bereits installiert hätte und Sie nur die benötigten Treiber einschalten müssten? Das ist im Grunde, was Kernel-Module für Linux tun. Kernel-Module, die auch als ladbares Kernel-Modul( LKM) bezeichnet werden, sind wichtig, damit der Kernel mit Ihrer gesamten Hardware funktioniert, ohne dass Sie all Ihren verfügbaren Speicher verbrauchen.

Ein Modul fügt dem Basis-Kernel normalerweise Funktionen wie Geräte, Dateisysteme und Systemaufrufe hinzu. LKMs haben die Dateierweiterung. ko und werden normalerweise im /lib/-Modulverzeichnis gespeichert. Aufgrund ihrer Modularität können Sie Ihren Kernel einfach anpassen, indem Sie Module während des Startvorgangs mit dem Befehl menuconfig oder durch Bearbeiten Ihrer /boot/-Konfigurationsdatei laden oder nicht laden oder Module mit dem Befehl modprobe sofort laden und entladen.

Drittanbieter- und Closed-Source-Module 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. Der Entwickler der Software( d. H. NVidia, ATI ua) stellt den Quellcode nicht zur Verfügung, sondern er erstellt seine eigenen Module und kompiliert die benötigten. ko-Dateien für die Verteilung. Während diese Module wie in Bier frei sind, sind sie nicht frei wie in Sprache und werden daher von einigen Distributionen nicht mit eingeschlossen, da die Betreuer das Gefühl haben, dass sie den Kernel durch die Bereitstellung von nicht-freier Software "verarzten".

Ein Kernel ist nicht magisch, aber er ist absolut notwendig für jeden Computer, der richtig läuft. Der Linux-Kernel unterscheidet sich von OS X und Windows, da er Treiber auf Kernel-Ebene enthält und viele Dinge "out of the box" unterstützt. Hoffentlich wissen Sie ein bisschen mehr darüber, wie Ihre Software und Hardware zusammenarbeitet und welche Dateien Sie benötigen, um Ihren Computer zu booten.

Kernel.org
Bild von ingridtaylar