An diesem Tag

Linux (Kernel)

Unix-ähnlicher monolithischer Betriebssystem-Kernel

Anúncio

Linux (deutsch [ˈliːnʊks]) ist ein Betriebssystem-Kernel, der im Jahr 1991 von Linus Torvalds ursprünglich für die 32-Bit-x86-Architektur „i386“, retronym „IA-32“, entwickelt wurde und ab Version 0.12 unter der freien GNU General Public License (GPL) veröffentlicht wird. Er ist heute Teil einer Vielzahl von Betriebssystemen.

Der Name Linux setzt sich zusammen aus dem Namen Linus und einem X für das als Vorbild dienende Unix. Er bezeichnet im weiteren Sinne mittlerweile nicht mehr nur den Kernel selbst, sondern übertragen davon ganze Linux-basierte Systeme und Distributionen. Dies führte zum GNU/Linux-Namensstreit.

Der Kernel eines Betriebssystems bildet die hardwareabstrahierende Schicht, das heißt, er stellt der auf dieser Basis aufsetzenden Software eine einheitliche Schnittstelle (API) zur Verfügung, die weitgehend unabhängig von der Rechnerarchitektur ist. Die Software kann nur über die Schnittstelle auf die Hardware zugreifen, ohne deren Details genauer kennen zu müssen (Abstraktion). Linux ist dabei ein modularer monolithischer Kernel und zuständig für Speicherverwaltung, Prozessverwaltung, Multitasking, Lastverteilung, Sicherheitserzwingung und Eingabe/Ausgabe-Operationen auf verschiedenen Geräten.

Linux ist fast ausschließlich in der Programmiersprache C geschrieben, wobei einige GNU-C-Erweiterungen benutzt werden. Ausnahmen bilden die architekturabhängigen Teile des Codes (im Verzeichnis arch innerhalb der Linux-Sourcen), wie zum Beispiel der Beginn des Systemstarts (Bootvorgang), der in Assemblersprache geschrieben ist, sowie die Programmiersprache Rust, die seit der Version 6.1 erstmals unterstützt und seit 6.8 erstmals für einzelne Gerätetreiber genutzt wird.

Bei einem strikt monolithischen Kernel wird der gesamte Quellcode inklusive aller Treiber in das Kernel-Image (den ausführbaren Kernel) kompiliert. Im Gegensatz dazu kann Linux Module benutzen, die während des Betriebs geladen und wieder entfernt werden können. Damit wird die Flexibilität erreicht, um unterschiedlichste Hardware ansprechen zu können, ohne sämtliche (auch nicht benötigte) Treiber und andere Systemteile im Arbeitsspeicher halten zu müssen.

Sind Teile der Hardwarespezifikationen nicht genügend offengelegt, so stützt sich Linux notfalls über spezielle VM86-Modi auch auf das BIOS des Systems, u. a. auf die Erweiterungen gemäß den Standards APM, ACPI und VESA. Um unter diesen Voraussetzungen x86-kompatible Hardware z. B. auf der DEC-Alpha-Plattform zu betreiben, werden teilweise sogar Emulatoren zur Ausführung entsprechenden ROM-Codes verwendet. Linux selbst übernimmt das System beim Bootprozess typischerweise in dem Moment, in dem der Bootloader der Systemfirmware („BIOS“) erfolgreich war und daher alle Systeminitialisierungen des BIOS abgeschlossen sind.

Der Kernel ist ein Betriebssystemkern und darf nicht als das eigentliche Betriebssystem verstanden werden. Dieses setzt sich aus dem Kernel und weiteren grundlegenden Bibliotheken und Programmen (die den Computer erst bedienbar machen) zusammen.

Siehe auch: Gerätedatei, Network Block Device, Netfilter, Netzwerk-Scheduler, Prozess-Scheduler, Linux (Betriebssystem)

Man kann zwischen vier Schnittstellen unterscheiden, die das Zusammenwirken von entweder kernelinternen Komponenten untereinander oder von Kernel und externer Software ermöglichen. Die Stabilität der externen Programmierschnittstelle wird garantiert, das heißt, dass Quellcode grundsätzlich ohne wesentliche Veränderungen portierbar ist.

Die Stabilität der internen Programmierschnittstellen wird nicht garantiert, diese können zehn Jahre oder wenige Monate stabil bleiben. Da der Linux-Kernel von einigen tausend Entwicklern vorangetrieben wird, ist der eventuell entstehende Aufwand zu verschmerzen.

Die Binärschnittstelle des Kernels ist unerheblich, auf das komplette Betriebssystem kommt es an. Die Linux Standard Base (LSB) soll es ermöglichen, kommerzielle Programme unverändert zwischen Linux Betriebssystemen zu portieren. Die interne Binärschnittstelle ist nicht stabil, und es gibt keinerlei Bestrebungen, dies zu ändern; dies hat zur Folge, dass ein internes Modul, welches z. B. für Linux 3.0 kompiliert worden ist, höchstwahrscheinlich nicht mit Linux-Kernel 3.1 zusammenarbeiten wird. Dies ist eine ganz bewusste Entscheidung.

Linux ist ein monolithischer Kernel. Die Treiber im Kernel und die Kernel-Module laufen im privilegierten Modus (x86: Ring 0), haben also unbeschränkten Zugriff auf die Hardware. Einige wenige Module des Kernels laufen im eingeschränkten Benutzermodus (x86: Ring 3). Die Level 1 und 2 der x86-Architektur werden von Linux nicht genutzt, da sie auf vielen anderen Architekturen nicht existieren und der Kernel auf allen unterstützten Architekturen im Wesentlichen gleich funktionieren soll.

Nahezu jeder Treiber kann auch als Modul zur Verfügung stehen und vom System dann dynamisch nachgeladen werden. Ausgenommen davon sind Treiber, die für das Starten des Systems verantwortlich sind, bevor auf das Dateisystem zugegriffen werden kann. Man kann allerdings den Kernel so konfigurieren, dass ein CramFS- oder Initramfs-Dateisystem vor dem tatsächlichen Root-Dateisystem geladen wird, welches die weiteren für den Startprozess notwendigen Module enthält. Dadurch kann die Kernelgröße verringert und die Flexibilität drastisch erhöht werden.

Im System laufende Programme bekommen wiederum vom Kernel Prozessorzeit zugewiesen. Jeder dieser Prozesse erhält einen eigenen, geschützten Speicherbereich und kann nur über Systemaufrufe auf die Gerätetreiber und das Betriebssystem zugreifen. Die Prozesse laufen dabei im Benutzermodus (user mode), während der Kernel im Kernel-Modus (kernel mode) arbeitet. Die Privilegien im Benutzermodus sind sehr eingeschränkt. Abstraktion und Speicherschutz sind nahezu vollkommen, ein direkter Zugriff wird nur sehr selten und unter genau kontrollierten Bedingungen gestattet. Dies hat den Vorteil, dass kein Programm z. B. durch einen Fehler das System zum Absturz bringen kann.

Linux stellt wie sein Vorbild Unix eine vollständige Abstraktion und Virtualisierung für nahezu alle Betriebsmittel bereit (z. B. virtueller Speicher, Illusion eines eigenen Prozessors usw.).

Die Tatsache, dass Linux nicht auf einem Microkernel basiert, war Thema eines berühmten Flame Wars zwischen Linus Torvalds und Andrew S. Tanenbaum. Anfang der 1990er Jahre, als Linux entwickelt wurde, galten monolithische Kernels als obsolet (Linux war zu diesem Zeitpunkt noch rein monolithisch). Die Diskussion und Zusammenfassungen sind im Artikel Geschichte von Linux näher beschrieben.

Durch Erweiterungen wie FUSE und durch die zunehmende Verwendung von Kernel-Prozessen fließen mittlerweile auch zahlreiche Microkernel-Konzepte in Linux ein.

Obwohl Linus Torvalds eigentlich nicht beabsichtigt hatte, einen portierbaren Kernel zu schreiben, hat sich Linux dank des GNU-Compilers GCC weitreichend in diese Richtung entwickelt. Es ist inzwischen das häufigste portierte System – das Repertoire reicht dabei von eher selten anzutreffenden Betriebsumgebungen wie dem iPAQ-Handheld-Computer, Digitalkameras, Anlagesteuerungen, Großrechner wie IBMs System z über Supercomputer bis hin zu normalen PCs. Ebenfalls weit verbreitet ist der Kernel unter Webservern und dank Android auch auf Mobiltelefonen.

Anúncio

Bald in der World in Stories App

Audio, Offline-Download, keine Werbung und mehr.

Premium entdecken