L4
Als L4 bezeichnet man eine Familie von Mikrokernels, die alle auf einen Entwurf des deutschen Informatikprofessors Jochen Liedtke zurück gehen.
Inhaltsverzeichnis
Vorgeschichte
L4 x86 | |
---|---|
Entwickler: | Jochen Liedtke |
Akt. Version: | eingestellt |
Lizenz: | GMD (propertär) |
OS-Eigenschaften | |
Plattform: | i486 oder höher |
Kernelart: | Mikrokernel |
Sprache: | Assembler |
API: | "Version 2" (V2) |
Binärformat: | |
IPC-Methode: | Message Passing, Flexpages |
Homepage | |
L4 ist das vierte Projekt einer Reihe von Projekten, die von Jochen Liedtke geleitet wurden, daher auch der Name. Seine Vorgänger waren:
- L1 - Ein Interpreter für die Programmiersprache ALGOL 60, der auf verschieden 8 Bit Prozessoren laufen sollte.
- L2 - (EUMEL) Ein 16 bit Betriebssystem für den Z80 und die 8086 (Real Mode). Das mit eingebauten Schutzmechanismus gegen Datenverlust durch Stromausfälle bietet.
- L3 - Die in ELAN und Assembler geschriebene 32 Bit Version der L2 Idee. L3 war bereits als Mikrokernel ausgelegt und wird bis heute beim deutschen TÜV Süd verwendet.
Nach diesen Projekten begann Liedtke mit der Entwicklung von L4. Der Kernel sollte ein Mikrokernel der zweiten Generation werden, und die Probleme anderer Mikrokernels, wie etwa Minix oder Mach lösen. Um den Kernel zu beschleunigen beschloss er einen anderen Weg zu gehen als die anderen Mikrokernels, welche die besonders zeitkritischen Komponenten in den Kernel zurück verfrachteten. Er lagerte einfach noch mehr aus, sodass am Ende im Wesentlichen nur noch der Setup, die Interprozesskommunikation im Kernel verblieben. Selbst das Paging, der Prozess-Scheduler und Große Teile des Interrupthandlers werden von Userspace-Programmen bereit gestellt. Um die Anzahl an teuren Systemaufrufen zu Reduzieren, wurde außerdem eine minimale Hardwareabstraktion favorisiert, sodass ausgewählte Programme z.B. direkt auf den Grafikspeicher zugreifen können. Somit erreichte er einen Kernel, welcher mit nur 7 Systemaufrufen auskommt.
Daneben spielte bei der Entwicklung der Systems auch Flexibilität und Sicherheit eine Rolle. Dazu wurde das Clan-and-Chief System eingeführt. Ein Prozess kann nur mit den anderen Prozessen in seinem Clan (Programme mit dem gleichen Elternprozess) und dessen Chief (Elternprozess) direkt kommunizieren. Alle anderen Kommunikationsprozesse könne von den dazwischen liegenden Chiefs inspiziert und abgefangen werden. Liedtke schrieb sein Kernel zudem in Assembler, um den zusätzlichen Geschwindigkeitsvorteil zu nutzten, und da er meinte, dass es aufgrund des minimalen Funktionsumfang ohnehin kaum portable Komponenten im Kern gab.
Hazelnut
L4Ka::Hazelnut | |
---|---|
Entwickler: | L4Ka Team der TU Karlsruhe |
Akt. Version: | eingestellt |
Lizenz: | GPL |
OS-Eigenschaften | |
Plattform: | Pentium oder höher, StrongARM |
Kernelart: | Mikrokernel |
Sprache: | C++ |
API: | "X0" (Experimental API Version 0) |
Binärformat: | |
IPC-Methode: | Message Passing, Flexpages |
Homepage | |
Nach der Ursprünglichen Implementierung wurde das System zuerst auf einige andere Plattformen (Alpha und MIPS) portiert. Um zu Beweisen, das Mikrokernel auch in einer Hochsprache geschrieben werden können, begann die Arbeit an Hazelnut, das nun in C++ geschrieben wurde. Außerdem wurden einige Änderungen an der API vorgenommen. Während sich die orginale "Version 2" API stark an der x86 orientiert, wurde sie nun programmunabhängiger formuliert. Das Clan&Chief Prinzip wurde entfernt, da es die Interprozesskommunikation stark ausgebremst hat.
Fiasko
Fiasco, Fiasco.OC | |
---|---|
Entwickler: | Team Fiasco der TU Dresden |
Akt. Version: | 2011081207 (Fiasco.OC) |
Lizenz: | GPL |
OS-Eigenschaften | |
Plattform: | x86-32, x86-64, ARM, Linux (user-mode L4 emulation) |
Kernelart: | Mikrokernel |
Sprache: | C++ |
API: | "V2, "X0", "X2" |
Binärformat: | |
IPC-Methode: | Message Passing, Flexpages |
Homepage | |
Bei Fiasco und dem Nachfolger Fiasco.OC handelt es sich um eine andere L4 Implementierung, die von einem Team an der TU Dresden entwickelt wird. Es ist realtimefähig und beitzt neben der Protierung auf weitere Plattformen auch eine spezielle Version des Kernels die als Userprogramm unter Linux laufen lassen, was die Entwicklung starkt vereinfacht.
Das Projekt "L4Linux" lässt eine Modifizierte Version des Linuxkernels als L4 Task laufen. Das entstandene Betriebssystem ist nur unwesentlich langsamer als ein natives Linux.
L4Ka::Pistachio
L4Ka::Pistachio | |
---|---|
Entwickler: | L4Ka Team der TU Karlsruhe |
Akt. Version: | 2011081207 (Fiasco.OC) |
Lizenz: | BSD |
OS-Eigenschaften | |
Plattform: | Pentium oder höher, x86-64, IA64, PowerPC (, Alpha, 64-bit MIPS) |
Kernelart: | Mikrokernel |
Sprache: | C++ |
API: | "X2" (Experimental ABI Version 2/ "V4" - Version 4) |
Binärformat: | |
IPC-Methode: | Message Passing, Flexpages |
Homepage | |
Pistachio ist eine Neuentwicklung des Kernels vom L4Ka Team. Es implementiert die neue ABI "X2", die Plattformneutral gestaltet ist.
look nop
Bekannt geworden ist der Befehl "look nop", der in der ABI X2 als Syscall benutzt wird. Da diese Befehlsfolge nicht erlaubt ist, wird eine "Invalid Opcode"-Execption (int 0x06) ausgelöst. Der Befehl ist allerdings nicht optimal gewählt, da nicht garantiert ist, das der Befehl bei zukünftigen Systemen weiterhin ungültig bleiben wird. Besser wäre wohl der Befehl "div edx"/"div dx" gewesen, welcher immer eine "Divide by Zero"-Exeption (int 0x00) auslöst. Allerdings wird der Befehl nicht als einziger Syscall verwendet, sondern bleibt als "slow syscall" der Verwendung als ABI Informationsbefehl vorbehalten, wobei die ABI Version auch auf anderem Weg zu bestimmen ist. Die anderen Syscalls werden nicht direkt Spezialisiert. Stattdessen können die Addressen auf der Kernel Interface Page ausgelesen werden. Die Addressen zeigen zu Funktionen die dann das eigentliche Syscall, z.B. mit der [[sysenter]-Anweisung durchführen.
Merkmale
L4 hat einige innovative Merkmale, die es von anderen Kernels abheben.
Flex Pages
Flexpages sind Gruppen von Speicherseiten, auf die zusammen gemapped und wieder entladen werden können. Der Page kann verschieden Flexpages bereitstellen, von denen manche besonderen Inhalt tragen können. Sie können zum Beispiel zur Übertragung großer Datenmengen zwischen Prozessen oder für den direkten Hardwarezugriff verwendet werden.
Kernel Interface Page
Die Kernel Interface Page ist eine spezielle Speicherseite, auf der Informationen über den Kernel. Sie enthält verschiedene Informationenen über das Programm und den Kernel, auf die während der Ausführung zugegriffen werden kann Auch die Echtzeituhr ist hier vorhanden, sodass zum Bestimmen der Uhrzeit kein Syscall notwendig ist.