Linux -Kernel -Tutorial für Anfänger

Linux -Kernel -Tutorial für Anfänger

Hintergrundinformationen zu Betriebssystemen

Ein als Betriebssystem abgekürzter Betriebssystem ist eine Software, die die Hardwarekomponenten eines Systems steuert, sei es ein Telefon, ein Laptop oder ein Desktop. Es ist für die Kommunikation zwischen der Software und der Hardware verantwortlich. Windows XP, Windows 8, Linux und Mac OS X sind Beispiele für Betriebssysteme. Das Betriebssystem besteht aus:

  • Der Bootloader: Software, die für den Startvorgang Ihres Geräts verantwortlich ist.
  • Der Kernel: Der Kern des Systems und verwaltet die CPU-, Speicher- und Peripheriegeräte.
  • Daemons: Hintergrunddienste.
  • Netzwerk: Kommunikationssysteme zum Senden und Abrufen von Daten zwischen Systemen.
  • Die Shell: umfasst einen Befehlsprozess, der die Manipulation des Geräts durch Befehle ermöglicht, die in eine Textschnittstelle eingegeben wurden.
  • Grafischer Server: Das Subsystem, das die Grafiken auf Ihrem Bildschirm anzeigt.
  • Desktop -Umgebung: Mit diesem Benutzer interagieren die Benutzer normalerweise normalerweise.
  • Anwendungen: sind Programme, die die Aufgaben des Benutzers wie Textprozessoren ausführen.

Kernelraum und Userspace

Kernelraum: Der Kernel befindet sich in einem erhöhten Systemzustand, der einen geschützten Speicherplatz und den vollen Zugriff auf die Hardware des Geräts enthält. Dieser Systemzustand und der Speicherplatz werden insgesamt als Kernel-Raum bezeichnet. Innerhalb des Kernel -Raums werden der Kernzugriff auf die Hardware- und Systemdienste verwaltet und als Dienst für den Rest des Systems zur.

Benutzerraum: Die Anwendungen des Benutzers werden im Benutzerraum durchgeführt, in dem sie eine Teilmenge der verfügbaren Ressourcen der Maschine über Kernel-Systemaufrufe erreichen können. Durch die Verwendung der Kerndienste, die den Kernel zur Verfügung stellte, kann beispielsweise eine Anwendung auf Benutzerebene erstellt werden.

Linux

Linux hat im Laufe der Jahre immer beliebter geworden. Wie angegeben ist ein Betriebssystem, das einem UNIX-Betriebssystem ähnelt-ein stabiles Multi-Benutzer-Multitasking-Betriebssystem, das als freie und offene Software für Entwicklung und Vertrieb zusammengestellt wurde. Dies bedeutet, dass eine Person oder ein Unternehmen die Erlaubnis hat, das Linux -Betriebssystem in irgendeiner Weise zu verwenden, nachzuahmen, zu studieren und zu verändern.

Der Linux -Kernel

Von seiner ersten Veröffentlichung am 17. September 1991 hat sich der Linux -Kernel allen Chancen als Linux -definierende Komponente widersetzt. Es wurde von Linus Torvalds freigesetzt und nutzt das GNU/Linux, um das Betriebssystem zu beschreiben. LINUX KERNEL-basierter Android OS auf Smartphones hat Linux dazu gebracht, seinen Wettbewerb als die größte installierte OS-Basis aller allgemeinen Betriebssysteme zu sein. Die Geschichte des Linux -Kernels finden Sie hier.

Ein Kernel kann entweder monolithisch, microkernel oder hybrid sein (wie das OS X und Windows 7). Der Linux -Kernel ist ein monolithisches Computer -Betriebssystem -Kernel, der dem UNIX -System ähnelt. Die Linux -Linie von Betriebssystemen, die üblicherweise als Linux -Verteilungen bezeichnet werden, basieren auf diesem Kernel. Der monolithische Kernel umfasst im Gegensatz zum Microkernel nicht nur die zentrale Verarbeitungseinheit, den Speicher und die IPC, sondern verfügt auch über Geräte -Treiber, Systemserver -Anrufe und Dateisystemverwaltung. Sie können am besten mit Hardware kommunizieren und gleichzeitig mehrere Aufgaben ausführen. Aus diesem Grund reagieren Prozesse hier schnell.

Die wenigen Rückschläge sind jedoch die große Installations- und Speicherausdruck, die benötigt wird und die Sicherheit unzureichend ist, da alles in einem Supervisor -Modus arbeitet. Im Gegensatz dazu kann ein Mikrokernel langsam auf Anwendungsaufrufe als Benutzerdienste reagieren und der Kernel werden getrennt. Sie sind somit kleiner im Vergleich zum monolithischen Kernel. Mikrokernel sind leicht erweiterbar, aber es ist mehr Code erforderlich, um einen Mikrokernel zu schreiben. Der Linux -Kernel ist im C- und Assembly -Programmiersprachen geschrieben.

Die Linux -Kernel -Beziehung mit der Hardware

Der Kernel kann die Hardware des Systems über das verwalten, was als Interrupts bezeichnet wird. Wenn die Hardware mit dem System einstellen will, wird ein Interrupt ausgestellt, der den Prozessor unterbricht. Um Synchronisation bereitzustellen, kann der Kernel Interrupts deaktivieren, sei es ein einzelner oder alle von ihnen. In Linux werden die Interrupt -Handler jedoch nicht in einem Prozesskontext ausgeführt, sondern stattdessen in einem Interrupt -Kontext ausgeführt, der keinem Prozess zugeordnet ist.Dieser spezielle Interrupt -Kontext existiert ausschließlich, um einen Interrupt -Handler schnell auf einen individuellen Interrupt zu reagieren und schließlich schließlich zu beenden.

Was unterscheidet den Linux -Kernel von anderen klassischen Unix -Kerneln?

Es gibt signifikante Unterschiede zwischen dem Linux -Kernel und den klassischen Unix -Kerneln; Wie unten aufgeführt:

  1. Linux unterstützt die dynamische Belastung von Kernelmodulen.
  2. Der Linux -Kernel ist präventiv.
  3. Linux hat einen symmetrischen Multiprozessorunterstützung.
  4. Linux ist aufgrund seiner offenen Software -Natur kostenlos.
  5. Linux ignoriert einige Standard -UNIX -Funktionen, die die Kernel -Entwickler als „schlecht gestaltet“ bezeichnen.”
  6. Linux bietet ein objektorientiertes Gerätemodell mit Geräteklassen, heißen Ereignissen und einem Benutzer-Raum-Geräte-Dateisystem zur Verfügung
  7. Der Linux -Kernel unterscheidet nicht zwischen Threads und normalen Prozessen.

Architalture

Komponenten des Linux -Kernels

Ein Kernel ist einfach ein Ressourcenmanager. Die verwaltete Ressource kann ein Prozess, ein Speicher oder ein Hardware -Gerät sein. Es verwaltet und vermittelt den Zugriff auf die Ressource zwischen mehreren konkurrierenden Benutzern. Der Linux -Kernel existiert im Kernel -Bereich unterhalb des UserSpace, in dem die Anwendungen des Benutzers ausgeführt werden. Damit der Benutzerraum mit dem Kernel -Speicherplatz kommuniziert, wird eine GNU C -Bibliothek integriert, die ein Forum für die System -Call -Schnittstelle bietet, um eine Verbindung zum Kernel -Speicherplatz herzustellen und den Übergang zurück zum UserSpace zu ermöglichen.

Der Linux -Kernel kann in drei Primärebenen eingeteilt werden:

  1. Die Systemanrufschnittstelle; Dies ist das oberste und führt die grundlegenden Aktionen wie Lesen und Schreiben durch.
  2. Der Kernelcode; befindet sich unterhalb der Systemanrufschnittstelle. Sie ist allen von Linux unterstützten Prozessorarchitekturen gemeinsam. Manchmal wird es als architekturunabhängige Kernelcode definiert.
  3. Der architekturabhängige Code; Es befindet sich unter dem architekturunabhängigen Code und bildet das, was normalerweise als Board Support Package (BSP) bezeichnet wird. Dies enthält ein kleines Programm namens Bootloader, das das Betriebssystem und die Gerätefahrer in den Speicher bringen.

Die architektonische Perspektive des Linux -Kernel besteht.

  1. Systemanrufschnittstelle; ist eine dünne Schicht, mit der Funktionsaufrufe aus dem Benutzerraum in den Kernel durchgeführt werden. Diese Schnittstelle kann architekturabhängig sein
  2. Prozessmanagement; ist hauptsächlich da, um die Prozesse auszuführen. Diese werden als Thread in einem Kernel bezeichnet und repräsentieren eine individuelle Virtualisierung des jeweiligen Prozessors
  3. Speicherverwaltung; Speicher wird auf den sogenannten Seiten für Effizienz verwaltet. Linux umfasst die Methoden, mit denen der verfügbare Speicher verwaltet wird, sowie die Hardwaremechanismen für physikalische und virtuelle Zuordnungen. Außerdem wird auch der Austauschplatz bereitgestellt
  4. Virtuelles Dateisystem; Es bietet eine Standard -Schnittstellenabstraktion für die Dateisysteme. Es bietet eine Schaltebene zwischen der Systemaufrufschnittstelle und den vom Kernel unterstützten Dateisysteme.
  5. Netzwerkstapel; wird als geschichtete Architektur ausgelegt, die den jeweiligen Protokollen modelliert wurde.
  6. Gerätetreiber; Ein wesentlicher Teil des Quellcode im Linux -Kernel findet sich in den Gerätetreibern, die ein bestimmtes Hardware -Gerät verwendbar machen. Gerätetreiber -Tutorial
  7. Architekturabhängiger Code; Die Elemente, die von der Architektur abhängen, auf der sie laufen, müssen daher das architektonische Design für den normalen Betrieb und Effizienz berücksichtigen.

Schnittstellen

Systemanrufe und -Interbricht

Anwendungen übergeben Informationen über Systemaufrufe an den Kernel. Eine Bibliothek enthält Funktionen, mit denen die Anwendungen arbeiten. Die Bibliotheken weisen dann über die System -Call -Schnittstelle den Kernel an, eine Aufgabe auszuführen, die die Anwendung will. Was ist ein Linux -Systemaufruf??

Interrupts bieten einen Weg, wie der Linux -Kernel die Hardware der Systeme verwaltet. Wenn Hardware mit einem System kommunizieren muss, macht ein Interrupt des Prozessors den Trick, und dies wird an den Linux -Kernel weitergegeben.

Linux -Kernel -Schnittstellen

Der Linux -Kernel bietet verschiedene Schnittstellen für die Benutzerraumanwendungen, die eine Vielzahl von Aufgaben ausführen und unterschiedliche Eigenschaften aufweisen. Es gibt zwei verschiedene Anwendungsprogrammierschnittstellen (API); Die Kernel-Benutzerraum und das Kernel intern. Die Linux -API ist die Kernel-Benutzerspace API; Es gibt Zugriff auf Programme im Benutzerbereich in die Systemressourcen und -dienste des Kernels. Es besteht aus der System -Call -Schnittstelle und den Unterroutinen aus der GNU C -Bibliothek.

Linux Abi

Dies bezieht sich auf den Kernel-User Space ABI (Anwendung Binary Interface). Dies wird als Schnittstelle zwischen den Programmmodulen erklärt. Beim Vergleich von API und ABI besteht der Unterschied darin, dass ABIs verwendet werden, um auf externe Codes zuzugreifen, die bereits kompiliert sind, während API Strukturen für die Verwaltung von Software sind. Das Definieren eines wichtigen ABI ist hauptsächlich die Arbeit von Linux -Verteilungen als für den Linux -Kernel. Für jeden Befehlssatz sollte ein spezifischer ABI definiert werden, z. B. x86-64. Endbenutzer von Linux-Produkten interessieren sich eher für die ABIs als an der API.

Systemanrufschnittstelle

Wie bereits erwähnt, spielt dies eine wichtigere Rolle im Kernel. Es ist eine Konfession des gesamten Teils aller vorhandenen Systemaufrufe.

Die C -Standardbibliothek

Alle Systemaufrufe des Kernels befinden.

Tragbare Betriebssystemschnittstelle (POSIX)

POSIX ist ein kollektiver Begriff der Standards für die Aufrechterhaltung der Kompatibilität zwischen den Betriebssystemen. Es deklariert die API zusammen mit Nutzschnittstellen und Befehlszeilenschalen. Die Linux -API verfügt nicht nur über die verwendbaren Funktionen, die vom POSIX definiert sind, sondern auch zusätzliche Funktionen in ihrem Kernel:

  1. CGROUPS Teilsystem.
  2. Die Systemanrufe des direkten Rendering Managers des Managers.
  3. A lesen Sie weiter Besonderheit.
  4. GetRandom Rufen Sie an, das in V 3 vorhanden ist.17.
  5. Systemaufrufe wie z Futex, Epoll, spleißen, dnotify, Fanotify Und inotifizieren.

Weitere Informationen zu POSIX Standard finden Sie hier.

Der modulare Kernel

Frühere Versionen des Linux -Kernels waren so, dass alle ihre Teile in einem monolithischen Teile reflektiert wurden. Moderne Linux -Kernel haben jedoch die meisten ihrer Funktionalität in Modulen, die dynamisch in den Kernel eingebracht werden. Dies im Gegensatz zu monolithischen Typen wird als modulare Kernel bezeichnet. Ein solches Setup ermöglicht es einem Benutzer, Module in einem laufenden Kernel zu laden oder zu ersetzen, ohne das Neustart zu benötigen.

Das ladbare Linux -Kernelmodul (LKM)

Die grundlegende Methode zum Hinzufügen von Code im Linux -Kernel ist die Einführung von Quelldateien in den Kernel -Quellbaum. Möglicherweise möchten Sie jedoch einen Code hinzufügen, während der Kernel ausgeführt wird. Der auf diese Weise hinzugefügte Code wird als ladbares Kernelmodul bezeichnet. Diese speziellen Module führen verschiedene Aufgaben aus, sind jedoch in drei angegeben: Geräte -Treiber, Dateisystemtreiber und Systemaufrufe.

Das ladbare Kernelmodul kann mit den Kernelerweiterungen in anderen Betriebssystemen verglichen werden. Sie können ein Modul in den Kernel einfügen, indem Sie es entweder als LKM laden oder in den Basiskern binden.

Die Vorteile von LKMs um die Bindung in den Basiskernel:

  • Es ist häufig nicht erforderlich, Ihren Kernel wieder aufzubauen, Zeit zu sparen und Fehler zu vermeiden.
  • Sie helfen dabei, Systemprobleme wie Fehler herauszufinden.
  • LKMs speichern Sie Platz, da Sie sie nur geladen haben, wenn Sie sie verwenden müssen.
  • Geben Sie viel schnellere Wartungs- und Debugg -Zeit.

Verwendung von LKMs

  1. Gerätetreiber; Der Kernel tauscht Informationen mit Hardware durch. Ein Kernel muss den Treiber eines Geräts haben, bevor er ihn verwendet.
  2. Dateisystemtreiber; Dies übersetzt den Inhalt eines Dateisystems
  3. Systemaufrufe; Programme im Benutzerbereich verwenden Systemaufrufe, um Dienste aus dem Kernel zu erwerben.
  4. Netzwerktreiber; interpretiert ein Netzwerkprotokoll
  5. Ausführbare Dolmetscher; lädt und verwaltet eine ausführbare Datei.

Kompilieren des Linux -Kernels

Im Gegensatz zu dem, was die meisten Leute sagen, ist das Zusammenstellen des Linux -Kernels eine einfache Aufgabe. Das Folgende ist eine Schritt-für-Schritt-Abbildung des Prozesses unter Verwendung einer der Linux-Verteilungen: Fedora 13 KDE. (Es ist ratsam, Ihre Daten und Ihr Grub zu sichern.Conf nur für den Fall, dass etwas schief geht)

  1. Von http: // kernel.Org -Website, laden Sie die Quelle herunter.
  2. Extrahieren Sie in Ihrem Download -Verzeichnis die Kernelquelle aus dem Archiv, indem Sie den folgenden Befehl in Terminal eingeben:
    TAR XVJF Linux-2.6.37.Teer.BZ2
  3. Verwenden Sie den Befehl, das MRPROPER vor jeder Zusammenstellung den Baubereich löschen kann.
  4. Verwenden Sie eine Konfiguration, wie XConfig, diese Konfigurationen sind so konzipiert, dass es einfacher wird, ein Programm unter Linux auszuführen.
  5. Geben Sie die Module und Funktionen an, die Ihr Kernel enthalten soll.
  6. Nach dem Erwerb der .Konfiguration Datei, der nächste Schritt ist zu gehen Makefile
  7. Führen Sie den Befehl aus und warten Sie, bis die Zusammenstellung durchläuft.
  8. Installieren Sie die Module mit dem Befehl Machen Sie modules_install
  9. Kopieren Sie Ihren Kernel und die Systemkarte in /Boot.
  10. Führen Sie den New-Kernel-PKG aus, um die Liste der Modulabhängigkeiten und Sachen wie zu erstellen roden.Conf

Upgrade des Kernels

Es ist möglich, einen Linux -Kernel von einer älteren Version auf eine neuere zu aktualisieren, während alle Konfigurationsoptionen aus der früheren Version beibehalten werden. Um dies zu erreichen, muss man zuerst die Back -up - .Konfiguration Datei im Kernel -Quellverzeichnis; Dies ist für den Fall, dass etwas schief geht, wenn Sie versuchen, Ihren Kernel zu verbessern. Die Schritte sind:

  1. Holen Sie sich den neuesten Quellcode vom Hauptkernel.Org -Website
  2. Wenden Sie die Variationen auf den alten Quellbaum an, um ihn auf die neueste Version zu bringen.
  3. Stellen Sie den Kernel basierend auf der vorhergehenden Kernel -Konfigurationsdatei neu, die Sie unterstützt hatten.
  4. Bauen Sie den neuen Kernel.
  5. Jetzt können Sie den neuen Build den Kernel installieren.

Herunterladen der neuen Quelle; Die Linux -Kernel -Entwickler verstehen, dass einige Benutzer möglicherweise nicht den vollständigen Quellcode für die Kernel -Updates herunterladen möchten, da dies Zeit und Bandbreite verschwenden würde. Daher wird ein Patch zur Verfügung gestellt, das eine ältere Kernel -Version aktualisieren kann. Benutzer müssen nur wissen, welcher Patch für eine bestimmte Version gilt, da eine Kernel -Patch -Datei den Quellcode nur von einer bestimmten Version aktualisiert. Die verschiedenen Patch -Dateien können auf folgende Arten angewendet werden

  1. Stabile Kernel -Patches, die für die Basiskernelversion gelten.
  2. Base Kernel -Release -Patches gelten nur für die vorherige Basiskernelversion
  3. Inkrementelles Patch -Upgrade von einer bestimmten Version auf die nächste Version. Dies ermöglicht es Entwicklern, die Herabstufung zu vermeiden und dann ihren Kernel zu verbessern. Stattdessen können sie von ihrer aktuellen stabilen Version auf die nächste stabile Version wechseln.

Hier sind detailliertere Schritte für den Prozess, um Ihren Kernel von der Quelle auf Debian sowie aus vorgefertigten Binärdateien auf CentOS und Ubuntu zu aktualisieren.

Abschluss

Der Linux -Kernel fungiert hauptsächlich als Ressourcenmanager, der als abstrakte Ebene für die Anwendungen fungiert. Die Anwendungen haben eine Verbindung zum Kernel, die wiederum mit der Hardware und den Diensten der Anwendungen interagiert. Linux ist ein Multitasking -System, mit dem mehrere Prozesse gleichzeitig ausgeführt werden können. Der Linux -Kernel ist aufgrund seiner Open -Source -Natur, die es Benutzern ermöglicht, den Kernel auf das zu ändern, was für sie und ihre Hardware geeignet ist. Daher kann es im Gegensatz zu anderen Betriebssystemen in einer Vielzahl von Geräten verwendet werden.

Das modulare Merkmal des Linux -Kernels verleiht seinen Benutzern mehr Nervenkitzel. Dies liegt an der Vielzahl von Modifikationen, die hier vorgenommen werden können, ohne das System neu zu starten. Die Flexibilität gibt seinen Benutzern einen großen Raum, um ihre Vorstellungen zu verwirklichen.

Darüber hinaus ist die monolithische Natur des Kernels ein großer Vorteil, da er eine hohe Verarbeitungsfähigkeit hat als der Mikrokernel. Der Hauptrückschlag beim Linux -Kernel -Typ ist, dass das gesamte System damit sinkt, wenn eines seiner Dienste ausfällt. Die neuesten Versionen wurden so gestaltet, dass wenn ein neuer Dienst hinzugefügt wird, es nicht erforderlich ist, das gesamte Betriebssystem zu ändern. Dies ist eine Verbesserung im Vergleich zu früheren Versionen.

Quellen

  1. Wikipedia Linux Kernel
  2. Wikipedia Linux -Kernel -Schnittstellen
  3. Linux ladbares Kernel -Modul wie zu
  4. Linux.COM -Anfängerleitfaden
  5. https: // www.Quora.com/What-Good-Tutorials-to-Learn-Linux-Kernel
  6. https: // unix.Stackkexchange.com/Fragen/1003/Linux-Kernel-Good-Beinners-Tutorial
  7. https: // www.Howtogeek.com/howto/31632 // What-is-the-linux-kernel-and-What-does-it-do/