2 Einleitung

Mikrokernbasierte Betriebssysteme, d. h. Betriebssysteme auf der Basis eines minimalen Kerns, gelten in der Betriebssystemforschung und in Teilen der Praxis als zukunftsträchtiger und technisch besser als konventionelle, etwas polemisch monolithisch genannte Betriebssysteme. Dennoch haben echte mikrokernbasierte Systeme noch kaum Eingang in die industrielle Praxis gefunden.

Moderne Betriebssysteme unterstützen einen Entwurf der Anwendung nach dem Client/Server-Modell. Eine Menge von Servern bietet Dienste an, die von Klienten über Interprozeßkommunikation angefordert werden.

Mikrokern-Systeme sind nach dem gleichen Prinzip strukturiert. Der Kern stellt nur eine kleine Menge elementarer Abstraktionen wie Interprozeßkommunikation, Adreßräume, Tasks und Threads zur Verfügung, die von Servern genutzt werden, um die Funktionalität traditioneller Betriebssysteme bereitzustellen. Die softwaretechnischen Vorteile dieses Ansatzes sind offensichtlich. Er gestattet eine einfache Entwicklung, Wartung, Konfigurierbarkeit und Portabilität. Hinzu kommt eine höhere Sicherheit im System, da ein fehlerhafter Server nicht die Funktionalität des Kerns beeinträchtigen kann. Allerdings hat eine solche Struktur, die Implementierung eines Betriebssystems als Kombination aus einem oder mehreren Servern und Prozessen als Klienten der Server, eine extensive Nutzung der Interprozeßkommunikation zur Folge.

Eine der am häufigsten angegangenen Anwendungen ist die Emulation eines UNIX-Systems auf der Basis des Mikrokerns, um dem Anwender eine ihm vertraute Umgebung zur Verfügung zu stellen. Die dabei gegangenen Wege reichten von der Verlagerung des originalen monolithischen Kerns in einen einzigen Server [1] [2] bis hin zu einer Realisierung der UNIX-Funktionalität durch eine Menge kooperierender Server [3] [4] [5] [6].

Bis auf wenige Ausnahmen, vorwiegend im Echtzeitbereich, wurden solche Emulationen aber aus Effizienzgründen nicht akzeptiert.

Ausgangspunkt der Arbeit war die Ansicht, daß im wesentlichen zwei Gründe zu dieser Ineffizienz führten, die im wesentlichen behebbar sind.

Einer dieser Gründe ist sicher die mangelnde Effizienz der verwendeten Kerne. Diese führte zu einer Rückverlagerung von Funktionalität in den Kern, sei es in Form neuer, emulationsspezifischer Kernfunktionalität oder durch Verlagerung von Servern in der Kernadreßraum. Das führte allerdings auch nicht zu wesentlich besseren Resultaten, was zu dem Schluß führen könnte, daß die Überladung des Kerns mit Funktionalität eher zu einer höheren Ineffizienz, als zu signifikanten Verbesserungen führt.

Der zweite Grund ist der Ausgangspunkt der Emulation. Oftmals dienten Quellen eines bereits vorhandenen UNIX-Systems, aus denen entweder ein einzelner Server gebaut wurde, der die UNIX-Dienste über IPC nach außen zur Verfügung stellte, oder die in verschiedene Server als Implementationsgrundlage einflossen. Das gestattete oftmals nicht die volle Ausnutzung der Eigenschaften des zugrundeliegenden Kerns, was auch zu einem Effizienzverlust führte.

Die vorliegende Arbeit versucht diese Fehler zu vermeiden. Sie baut auf einem Kern namens L3 auf, der sich auf das Minimum an Funktionalität beschränkt und eine schnelle IPC (20 mal schneller als Mach bei kurzen Nachrichten [7]) zur Verfügung stellt.

Ausgehend von der Leistungsfähigkeit des Systems wird versucht, eine UNIX-Emulation zu entwerfen, die die Funktionalität durch das Zusammenspiel einer Menge von Servern erbringt und diese Server auf der Grundlage der vorhandenen Kernabstraktionen ohne Rücksicht auf gewachsene Strukturen vorhandener UNIX-Implementationen realisiert. Auf Kernmodifikationen oder andere Mittel zur eventuellen Erhöhung der Effizienz und Übernahme existierender UNIX-Quellen wird dabei verzichtet.

Die Arbeit ist in sechs Kapitel gegliedert. Kapitel zwei betrachtet verschiedene Möglichkeiten, UNIX-Anwendungen auf einem neuen System verfügbar zu machen. Es werden verschiedene bekannte Systeme betrachtet und charakteristische Eigenschaften hervorgehoben.

Um die Grundlagen für die Betrachtungen innerhalb des Entwurfs zu legen, wird im dritten Kapitel ein kurzer Überblick über L3 gegeben. Es werden die wesentlichen, vom Kern bereitgestellten Abstraktionen und die Konzepte ihrer Nutzung vorgestellt. Außerdem werden Begriffe eingeführt, die im weiteren Verlauf der Arbeit Verwendung finden.

Das vierte Kapitel beschäftigt sich dann mit einem von Null beginnenden Entwurf der UNIX-Emulation. Dazu werden verschiedene Aspekte von UNIX betrachtet und Überlegungen angestellt, wie diese Aspekte auf L3 umzusetzen sind. Dabei entsteht ein Konzept, das eine Emulation beschreibt, die elementare UNIX-Funktionalität bereitstellt und die Anwendung von UNIX-Applikationen wie der Shell gestattet.

Die Umsetzung ausgewählter Aspekte des Entwurfs wird im fünften Kapitel beschrieben. Dabei wird nicht mehr von allgemeinen L3-Eigenschaften ausgegangen, wie im Kapitel vier, sondern von den konkreten Anforderungen an Tasks. Es wird auf Konzepte der Hardwareabstraktion in L3 eingegangen, auf den Aufbau der Emulationstask, die Anbindung der Emulation an die auszuführenden Programme u.a.m.

Abschließend werden im sechsten Kapitel die während der Arbeit gemachten Erfahrungen dargelegt, der aktuelle Stand der Implementation beschrieben und ein Konzept für die weitere Entwicklung entworfen. Zusätzlich werden einige Betrachtungen über das Einfließen der Emulation in die anderen am Lehrstuhl verfolgten Projekte angestellt.


Jean Wolter
14.11.1995