Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier. Dieser Artikel behandelt nur den Linux-Kernel insbesondere Aspekte. Weiteres insbesondere zu Geschichte und Betriebssystem Linux oder Linux-Distribution .
Er bildet die hardwareabstrahierende Schicht d.h. stellt der auf dieser Basis aufsetzenden Software einheitliche Schnittstelle unabhängig von der Hardware-Architektur zur
Er stellt das Basis-System dar das der Hardware und der höheren Software liegt macht die Hardware für die auf dem laufenden Anwendungen durch ein einheitliches API verfügbar. Sind Teile der Hardware-Spezifikationen nicht offen gelegt so stützt sich Linux notfalls spezielle VM86 Modi auch auf das BIOS des Systems u.a. auf die Erweiterungen den APM ACPI und VESA Spezifikationen. Um unter diesen Voraussetzungen x86 kompatible Hardware z.B. auf der DEC Platform zu betreiben werden teilweise sogar Emulatoren Ausführung entsprechenden ROM -Codes verwendet. Linux selbst übernimmt das System Boot-Prozess typischerweise in dem Moment wo der Loader erfolgreich war und alle System-Initialisierungen des abgeschlossen sind.
Der Kernel ist damit z.B. zuständig Prozessverwaltung Multitasking Eingabe/Ausgabe-Operationen auf verschiedenen Geräten wie Festplatten oder Netzwerkkarten Lastverteilung und Sicherheitserzwingung. Der Kernel ist kein komplettes Betriebssystem im landläufigen Sinne da ohne weitere Programme relativ nutzlos ist. Der ist fast komplett in C geschrieben wobei einige GNU -C-Erweiterungen benutzt werden. Eine Ausnahme bilden die Teile des Codes (/usr/src/linux/arch/) wie z.B. der Beginn des Bootvorganges die in Assembler geschrieben sind.
Neue "offizielle" Kernel-Versionen werden weiterhin von selbst veröffentlicht der die Beiträge anderer Programmierer und auch selbst Änderungen vornimmt. Alle Linux-Versionen denen die Sub-Version (die zweite Zahl im eine gerade Zahl ist gehören zu so "stabilen" Serien bislang gab es 1.0.x 1.2.x 2.2.x 2.4.x und die neue 2.6.x wohingegen mit ungerader Sub-Version wie z.B. die 2.5er-Reihe sind in denen mit neuen (und potenziell "gefährlichen") Features experimentiert wird und die daher nicht für den Einsatz in Produktivumgebungen empfohlen Während Torvalds die neuesten Entwicklungs-Versionen veröffentlicht wurde Pflege der älteren "stabilen" Versionen an andere abgegeben gegenwärtig ist David Weinehall für die 2.0er Serie verantwortlich Marc-Christian für den Kernel 2.2 Marcelo Tosatti für den Kernel 2.4 und Andrew Morton für den aktuellen stabilen Kernel 2.6. zu diesen offiziellen und über www.kernel.org oder seiner Mirrors zu beziehenden Kernel-Quellcodes kann man auch "Kernel-Trees" aus anderen Quellen benutzen. Distributoren von Linux-basierten Betriebssystemen pflegen meistens ihre Versionen des Kernels und beschäftigen zu diesem fest angestellte Kernel-Hacker die ihre Änderungen meist in die offiziellen Kernels einfließen lassen. Distributions-Kernel häufig intensiv gepatcht um auch Treiber zu die noch nicht im offiziellen Kernel sind denen der Distributor aber glaubt dass seine sie benötigen könnte und die notwendige Stabilität Fehlerfreiheit dennoch gewährleistet ist.
Die aktuelle stabile Kernelserie wurde kürzlich daher gibt es im Moment keinen Entwicklungskernel. Kürze wird Linus Torvalds aber wohl mit neuen Entwicklungszweig 2.7 beginnen.
Linux ist heute ein hybrid monolithischer Kernel. Dies bedeutet dass man den Teil der Treiber die nicht während der Startphase (bevor ein Dateisystem eingebunden ist) benötigt als Module konfigurieren kann die dann dynamisch oder auch während des Betriebs entladen werden wenn ihre Funktionalität nicht mehr benötigt wird. Treiber im Kernel und die Kernel-Module laufen Ring 0 haben also unbeschränkten Zugriff auf Hardware. Einige wenige Module des Kernels laufen eingeschränkten Ring 3 (Usermodus). Die Level 1 2 der x86 -Architektur werden vom Linux-Kernel nicht genutzt.
Die Tatsache dass Linux kein Microkernel ist war Thema eines berühmten Flame War zwischen Linus Torvalds und Andrew S. Tanenbaum . Anfang der 1990er Jahre als Linux wurde galten monolithische Kernels als obsolet (Linux zu diesem Zeitpunkt noch rein monolithisch die auch Module verwenden zu können wurde erst nachgerüstet). Eine Zusammenfassung der Diskussion zwischen Torvalds Tanenbaum kann unter http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html gefunden werden.
Obwohl Linus Torvalds eigentlich nicht beabsichtigt einen portierbaren Kernel zu schreiben hat sich dank des GNU Compilers GCC doch in diese Richtung entwickelt. Es inzwischen mit eines der am häufigsten portierten (nur noch NetBSD läuft auf etwa gleich vielen Architekturen). Repertoire reicht dabei von eher exotischen Betriebsumgebungen dem iPAQ -Handheld-Computer oder gar Digitalkameras bis hin zu S/390 zSeries einem großen und sehr teueren Großrechnersystem .
Obwohl die Portierung auf die S/390 ein vom IBM-Management nicht genehmigtes Unterfangen war siehe auch: Skunk Works ) hat Big Blue wohl inzwischen Gefallen am Linux-System gefunden so soll auch die nächste IBM-Supercomputer-Generation Blue mit einem eigenen Linux-Port ausgestattet werden sobald fertig ist.
Ursprünglich hatte Torvalds eine ganz andere von Portierbarkeit für sein System angestrebt nämlich Möglichkeit freie GPL- und andere Quelloffene Software unter Linux kompilieren zu können. Dieses Ziel bereits sehr früh erreicht und macht sicherlich guten Teil des Erfolges von Linux aus es jedermann eine einfache Möglichkeit bietet auf freien System freie Software laufen zu lassen.
PowerPC : die meisten neueren Apple Computer (alle PCI-basierten Power Macintosh begrenzte Unterstützung für NuBus Power Macs) der Power Macs von Power Computing UMAX Motorola mit einer "Power-UP"-Karte verbesserte Amigas (z.B. Blizzard oder CyberStorm) sowohl POWER auch PowerPC-basierte IBM RS/6000 -Systeme verschiedenen embedded PowerPC-Plattformen
Ein besonderer Port ist das User Mode Linux (UML) . Prinzipiell handelt es sich dabei um Port des Linux-Kernels auf sein eigenes Systemcall-Interface. ermöglicht es einen Linux-Kernel als normalen Prozess einem laufenden Linux-System zu starten. Der User-Mode-Kernel dann nicht selbst auf die Hardware zu reicht entsprechende Anforderungen an den echten Kernel Durch diese Konstellation werden "Sandboxen" ähnlich den Machines von Java möglich in denen ein normaler Benutzer haben kann ohne dem tatsächlichen System schaden können. Ein weiteres denkbares Einsatzgebiet für User-Mode ist die Treiberentwicklung für den Linux-Kernel da einen User-Mode-Prozess leichter als einen vollwertigen Kernel kann. Außerdem ist ein Kernel-Oops (Halt des auf Grund eines Kernel-Fehlers) bei einem virtuellen für das tatsächliche System folgenlos man kann einen neuen oder sogar mehrere virtuelle Kernel starten (dies ist z.B. für Anbieter von Webservern interessant die dadurch dem Kunden auf und dem gleichen System die Linux-Distribution seiner Wahl anbieten können).
Der neue stabile Kernel wurde ab 2001 auf Basis des damaligen 2.4er Kernels und wird eine Reihe von Neuerungen einführen.
Die wohl offensichtlichste Änderung gegenüber Version zeigt sich wenn man zum ersten Mal grafische Oberfläche auf dem neuen Kernel startet: X-Oberfläche fühlt sich spürbar "schneller" und reaktionsfreudiger und andere interaktive Anwendungen wie z.B. Soundwiedergabe nun auch unter hoher Last ohne Aussetzer. wurde durch eine Reihe von Maßnahmen erreicht im folgenden besprochen werden sollen:
Neuer O(1)-Scheduler und verbessertes Thread-Management
Prozesse werden nicht mehr alle 1/100 sondern 1/1000 Sekunde unterbrochen
In einem Multitasking-fähigen Betriebssystem muss es Instanz geben die den Prozessen die laufen Rechenzeit zuteilt und sie nach Ablauf der Zeitspanne ( Timeslice ) wieder "schlafen legt". Diese Instanz bildet sog. Scheduler den Ingo Molnar für den 2.6er komplett neu konzipiert und implementiert hat. Der O(1)-Scheduler erhielt seinen Namen weil die relevanten auf denen der Scheduler basiert die Komplexität haben. Der O(1)-Scheduler arbeitet daher sehr effizient benötigt für den eigenen Betrieb nur sehr Rechenzeit. Er verwendet prinzipiell zwei verkettete Listen denen die Prozesse eingetragen sind die noch wollen und diejenigen die bereits gelaufen sind. alle Prozesse in der zweiten Liste stehen die Arrays getauscht und das Spiel beginnt neuem. Der Scheduler ist darüber hinaus so dass Prozesse die große Mengen Rechenzeit in nehmen wollen gegenüber interaktiven Prozessen benachteiligt werden beide zur gleichen Zeit laufen wollen. Interaktive benötigen meist nur sehr wenig Rechenzeit sind häufig sehr zeitkritisch (so will man z.B. ewig auf eine Reaktion der grafischen Oberfläche Der neue Scheduler besitzt ausgefeilte Algorithmen um ob ein Prozess interaktiv ist oder die eher lange belegt. Gegenwärtig arbeiten mehrere Kernel-Programmierer daran gewisse Grenzfälle auszubalancieren (ein Prozess wird von einem interaktiven zu einem CPU-lastigen und Der interne "Takt" des Kernels wurde von Hz auf 1000 Hz erhöht d.h. die Länge eines Timeslice beträgt nun 1/1000 Sekunde. hiervon profitieren besonders die interaktiven Prozesse da früher "wieder an der Reihe sind". Eine Stärke des neuen Schedulers liegt im verbesserten Thread -Management und der besseren Unterstützung von symmetrischem (SMP) und Hyperthreading . Dies kommt vor allem hoch belasteten Servern zugute. In Testsituationen konnten unter dem Scheduler 100.000 Threads aufgemacht werden ohne dass System subjektiv langsamer wurde. Weiterhin sorgt der Scheduler dafür dass die zur Verfügung stehenden optimal ausgelastet werden ohne Prozesse übermäßig oft zwei CPUs hin- und her wechseln zu
Der Kernel ist ab Version 2.6 den meisten Funktionen präemptiv d.h. selbst wenn System gerade im Kernel-Mode Aufgaben ausführt kann Vorgang durch einen Prozess aus dem User-Mode werden. Der Kernel macht dann weiter wenn Usermode-Prozess seinen Timeslice aufgebraucht hat. Dies funktioniert auf einige Kernel-Funktionen die atomar (nicht unterbrechbar) müssen sehr gut und kommt ebenfalls der zugute.
Making Linux GPL'd was definitely the best I ever did. -- Linus Torvalds [1]
Torvalds gab Linux ursprünglich unter einer heraus die jede kommerzielle Nutzung verbot. Diese tauschte er bald gegen die GNU General Public License (Version 2). Sie erlaubt die Verteilung sogar den Verkauf von (auch veränderten) Versionen Linux. Die Bedingungen hierfür sind dass alle auch unter der selben Lizenz stehen müssen der Quelltext immer mitgeliefert werden muss.