L4

Aus Lowlevel
Wechseln zu: Navigation, Suche

Als L4 bezeichnet man eine Familie von Mikrokernels, die alle auf einen Entwurf des deutschen Informatikprofessors Jochen Liedtke zurück gehen.

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
keine (Nicht mehr verfügbar)

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
http://www.l4ka.org/projects/hazelnut/

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
http://os.inf.tu-dresden.de/fiasco/

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
http://www.l4ka.org/projects/pistachio/

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.