Startseite » wie man » Was ist der Linux-Kernel und was macht er?

    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 wofür wird er verwendet??

    Was ist der Kernel??

    Ein Kernel ist die unterste Ebene leicht austauschbarer Software, die mit der Hardware in Ihrem Computer verbunden ist. Es ist dafür verantwortlich, alle Ihre Anwendungen, die im Benutzermodus ausgeführt werden, mit der physischen Hardware zu verbinden und Prozessen, so genannten Servern, zu ermöglichen, Informationen über Interprozesskommunikation (IPC) voneinander abzurufen..

    Verschiedene Kernelarten

    Natürlich gibt es verschiedene Möglichkeiten, Kernel- und Architekturüberlegungen zu erstellen, wenn von Grund auf ein Kernel erstellt wird. Im Allgemeinen lassen sich die meisten Kernel in eine von drei Arten einteilen: monolithisch, Mikrokernel und Hybrid. Linux ist ein monolithischer Kernel, während OS X (XNU) und Windows 7 Hybridkernel verwenden. Lassen Sie uns einen kurzen Überblick über die drei Kategorien geben, damit wir später näher darauf eingehen können.


    Bild von Uptown Popcorn

    Mikrokernel
    Ein Mikrokernel verfolgt den Ansatz, nur das zu verwalten, was zu tun ist: CPU, Speicher und IPC. So ziemlich alles andere in einem Computer kann als Zubehör betrachtet werden und kann im Benutzermodus gehandhabt werden. Mikrokerne 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 immer noch versucht, auf die Hardware auf dieselbe Weise zuzugreifen. Microkernels haben auch einen sehr geringen Platzbedarf für Speicher und Installationsspeicherplatz und sind in der Regel sicherer, da nur bestimmte Prozesse im Benutzermodus ausgeführt werden, der nicht die hohen Berechtigungen als Supervisor-Modus besitzt.

    Pros

    • Portabilität
    • Kleine Installationsfläche
    • Kleiner Speicherbedarf
    • Sicherheit

    Cons

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

    Monolithischer Kern
    Monolithische Kernel sind das Gegenteil von Mikrokernen, da sie nicht nur die CPU, den Speicher und den IPC umfassen, sondern auch Dinge wie Gerätetreiber, Dateisystemverwaltung und Aufrufe von Systemservern. Monolithische Kernel sind in der Regel besser für den Zugriff auf Hardware und Multitasking. Wenn ein Programm Informationen aus dem Arbeitsspeicher oder einen anderen Prozess abrufen muss, hat es eine direktere Verbindung, um darauf zuzugreifen und muss nicht in einer Warteschlange warten, um die erforderlichen Vorgänge auszuführen. Dies kann jedoch zu Problemen führen, denn je mehr Dinge im Supervisor-Modus laufen, desto mehr Dinge können Ihr System zum Absturz bringen, wenn Sie sich nicht richtig verhalten.

    Pros

    • Direkter Zugriff auf Hardware für Programme
    • Einfacher, damit Prozesse miteinander kommunizieren können
    • Wenn Ihr Gerät unterstützt wird, sollte es ohne zusätzliche Installationen funktionieren
    • Prozesse reagieren schneller, da für die Prozessorzeit keine Warteschlange vorhanden ist

    Cons

    • Große Installationsfläche
    • Große Speicherfläche
    • Weniger sicher, weil alles im Supervisor-Modus läuft


    Bild via schoschie auf Flickr

    Hybridkernel
    Hybrid-Kernel können auswählen, was sie im Benutzermodus ausführen möchten und was sie im Supervisor-Modus ausführen möchten. Häufig werden Dinge wie Gerätetreiber und Dateisystem-E / A im Benutzermodus ausgeführt, während IPC- und Server-Aufrufe im Supervisor-Modus bleiben. Dies bietet das Beste aus beiden Welten, erfordert jedoch häufig mehr Arbeit des Hardwareherstellers, da die gesamte Verantwortung des Treibers bei ihnen liegt. Es kann auch einige der Latenzprobleme geben, die mit Mikrokernen einhergehen.

    Pros

    • Entwickler können auswählen, was im Benutzermodus und im Supervisor-Modus ausgeführt wird
    • Kleinere Installationsfläche als der monolithische Kernel
    • Flexibler als andere Modelle

    Cons

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

    Wo befinden sich die Linux-Kernel-Dateien??

    Die Kernel-Datei in Ubuntu wird in Ihrem / boot-Ordner gespeichert und heißt vmlinuz-Ausführung. Der Name vmlinuz stammt von der Unix-Welt, in der sie ihre Kernel in den 60er Jahren einfach als "Unix" bezeichneten. Daher hat Linux ihren Kernel "Linux" genannt, als er in den 90er Jahren entwickelt wurde.

    Als virtueller Speicher für einfachere Multitasking-Fähigkeiten entwickelt wurde, wurde "vm" an die Spitze der Datei gestellt, um anzuzeigen, dass der Kernel virtuellen Speicher unterstützt. Für eine Weile 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. Dieselbe Komprimierung wird nicht immer verwendet und oft durch LZMA oder BZIP2 ersetzt. Einige Kernel heißen einfach zImage.

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

    Im Ordner / boot befinden sich auch andere sehr wichtige Dateien mit den Namen 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. Die Konfigurationsdatei teilt dem Kernel mit, welche Optionen und Module beim Kompilieren in das Kernel-Image geladen werden sollen.

    Linux-Kernel-Architektur

    Da der Linux-Kernel monolithisch ist, hat er gegenüber den anderen Kernel-Typen den größten Footprint und die größte Komplexität. Dies war ein Design-Feature, das in der Anfangszeit von Linux ziemlich debattiert war und immer noch einige der Design-Mängel aufweist, die monolithische Kernel besitzen.

    Um diese Schwachstellen zu umgehen, haben die Linux-Kernel-Entwickler Kernel-Module erstellt, die zur Laufzeit geladen und entladen werden können. Das bedeutet, dass Sie Funktionen Ihres Kernels im laufenden Betrieb hinzufügen oder entfernen können. Dies kann über das Hinzufügen von Hardwarefunktionalität zum Kernel hinausgehen, indem Module, die Serverprozesse ausführen, wie z. B. Low-Level-Virtualisierung, hinzugefügt werden. Der gesamte Kernel kann jedoch ersetzt werden, ohne dass der Computer in einigen Fällen neu gestartet werden muss.

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

    Kernel-Module

    Was wäre, wenn in Windows bereits alle verfügbaren Treiber installiert waren und Sie nur die benötigten Treiber aktivieren mussten? Dies ist im Wesentlichen das, was Kernel-Module für Linux tun. Kernel-Module, auch als ladbare Kernel-Module (LKM) bezeichnet, sind unerlässlich, damit der Kernel mit Ihrer gesamten Hardware funktioniert, ohne den gesamten verfügbaren Speicher zu belegen.

    Ein Modul erweitert den Basiskernel normalerweise um Funktionen wie Geräte, Dateisysteme und Systemaufrufe. LKMs haben die Dateierweiterung .ko und werden normalerweise im Verzeichnis / lib / modules gespeichert. Aufgrund ihres modularen Charakters können Sie Ihren Kernel auf einfache Weise anpassen, indem Sie festlegen, dass Module beim Start mit dem Befehl menuconfig geladen oder nicht geladen werden, oder indem Sie Ihre / boot / config -Datei bearbeiten. Sie können Module auch mit der modprobe laden und entladen Befehl.

    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. Die Entwickler der Software (z. B. nVidia, ATI ua) stellen nicht den Quellcode bereit, sondern erstellen eigene Module und kompilieren die benötigten .ko-Dateien für die Verteilung. Während diese Module wie in Bier frei sind, sind sie nicht wie in der Sprache frei und daher nicht in einigen Distributionen enthalten, da die Betreuer den Kernel durch die Bereitstellung von nicht-freier Software "anstechen".

    Ein Kernel ist keine Zauberei, aber für einen Computer, der ordnungsgemäß läuft, ist er absolut unerlässlich. 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ützen. Hoffentlich wissen Sie ein bisschen mehr darüber, wie Ihre Software und Hardware zusammenarbeitet und welche Dateien Sie zum Booten Ihres Computers benötigen.

    Kernel.org
    Bild von ingridtaylar