Betriebssystemkerne/Kleinkernsysteme
Klein/Mikro/NanoKern-Architektur
Kleinkerne, Mikrokerne, Minimalkerne, Nanokerne
Dienste, die bei monolithischen Systemen im Kern sind, werden von sog Servern in höheren Schichten abgewickelt. (vgl. [Tanenbaum92] S.23)
Aufgaben des Kleinkerns:
- Virtueller Speicher
-
- IPC (Inter Process Communikation) Kommunikationsinfrastruktur wie
-
- Messages
- (Leichtgewichtige) RPCs, Inter-Modul-Aufruf
- Threads
-
- I/O (Input/Output)
-
- Interruptverarbeitung
-
- Schutzmechanismen
-
- Irgendein Nutzerbegriff (UNIX uid)
- Capabilities : Rechte, die ein Nutzer hat
- ACL (Access-Contolllisten): Wer hat welche Rechte an einem Objekt ?
(vgl [DeRoest])
Die Server laufen auf Benutzerebene.

Die Anwendungsprozesse stellen durch den Kern ihre Anfragen an die Server (Trampolinsprung). Dieser Trampolinsprung sollte wenig kosten, ist aber empirisch doch teuer. Deswegen gibt es Kompromisse:
- Ladbare Module
- Module können nachträglich in den Kern geladen werden
(fast bei allen modernen UNIXen gibt es sowas)
- Prozesse im Kern
- Manche Prozesse können in den Kernaddressraum versenkt werden
Idealerweise sollten Prozesse wahlweise im Userlevel oder im Kernraum gestartet werden können.
Der Server kann meist nicht direkt auf die Hardware zugreifen.
Im Kern befinden sich die Treiber. In Windows NT gibt es den Begriff
Hardware Abstraction Layer (HAL).
Speicherabbildung ist ein weiteres Verfahren, um effizient von einem
Server auf die Hardware (z.B Netzwerkpuffer oder Bildschirmadapter) zugreifen zu können.
Beispiel für Dienste, die nun als externe Server im Userlevel laufen:
Wichtige Vorteile der Kleinkernsysteme:
- ein klare μ-Kernschnittstelle erzwingt eine modularere Systemstruktur [Liedtke1995]
- Die Dienste/Server nutzen die Kernmechanismen wie jedes andere Anwendungsprogramm auch. [Liedke1995]
- Daher ist auch eine Fehlfunktion bei einem Server genauso isoliert
- Trennung Mechanismus (mechanism) und Politik/Strategie (Policy)
- Die Mechanismen werden im Kern implementiert, die Strategie
kann vom Nutzer angegeben werden.
Beispiel:
- Userlevel Pager bei MACH: Ein Datenbanksystem
möchte selber bestimmen, welche Seiten ein- und ausgelagert werden
sollen.
- Scheduling: Echtzeitanforderungen wollen in der Prozeßautomatisierung und bei Multimedia-Systemen garantiert werden.
[]
Dadurch wird ein System flexibler und anpassbarer [Liedtke1995]
- Unterstützung mehrer Betriebsystem-Schnittstellen (Personality)
- [Liedtke1995], auch [Open Software - Bericht Brown-University)]
Gegenüber Betriebssystemnemulatoren wie Suns WABI hat dieses Vorgehen nach [DeRoest] Geschwindigkeitsvorteile.
Übrigens hatte WindowsNT eine OS/2-Personality, und hat noch eine elementare Posix-Personality (ohne Netz). Aus marketingstrategischen Gründen gibt es diese wohl nicht mehr oder es ist nur sehr elementar ... (Bitte das Gegenteil beweisen :-)
Nach [DeRoest] kann es auch personality neutral services geben, die alle Betriebssystemserver nutzen können
.
- Netzwerktransparenz
- Ein Serverdienst kann ohne daß der Nutzer es (funktional) merkt, über ein (schnelles) Netz realisiert werden: Lastverteilung und Redundanz lassen sich hiermit realisieren.
Daher eignen sich die Kleinkern-Architektur hervorragend für Verteilte Systeme.
- Debugging (Debugging-Personality ...)
- (vgl. Open Software - Bericht Brown-University)
- Sicherheit
- Einen Kleinkern kann man besser verifizieren als einen großen.
Bei krypographischen Verfahren z.B. muß formal bewiesen werden, daß niemand
anders auf den Speicher zugreifen kann. Dieses kann nur durch den Betriebssystem sichergestellt werden. (siehe VFiasco Projekt Uni Dresden)
- Ein KK-System ist flexibler und einfacher erweiterbarer
- Änderungen brauchen nur in einigern Servern gemacht werden.
- Hochverfügbarkeit
- Paul Leroux, QNX Softwaresystems, weist darauf hin, daß
ein Kleinkern durch die verwendung unterschiedlicher Adressräume auch Fehler von Gerätetreibern abfangen kann, was der Hochverfügbarkeit zu gute kommt.
Das Entwickeln von Gerätetreibern ist schwierig B.D. "Gerätetreiber" Vorlesung Tu Dresden:
- Kompliziertes Kerninterface - 39% aller Fehler
- Komplizierte Hardware - oft ohne verfügbare HW-Spezifikation - 38% aller Fehler
- C mit Pointerarithmetik und Bit-Operationen - 25% aller Fehler
Auch bei WindowsXP seien 85% alle Crashes auf fehlerhafte Treiber zurückzuführen
→ man sollte die Gerätetreiber isolieren
- Performancegewinn durch kürzeren kritischen Pfad ( L4 Usermanual Uni South Wales S1)
- Bei neuen Mechanismen wächst ein Monolitisches Betriebssystem,
beispielsweise ist beim Einbau von NFS in UNIX ein zusätzlicher VFS-Layer hinzugekommen. Microkernsysteme wachsen horizontal, nicht vertikal : Neue Dienste fügen zusätzliche Server hinzu, verlängern aber nicht den kritischen Pfad der häufigst genutzen Operationen.
Jedoch war bei den Systemen der 1. Generation dieser kritische Pfad zu teuer....
Diesen Vorteilen steht die niedrigere Leistung gegenüber (häufigerer und teurer Userlevel/Kern wechsel):
Ein Aufruf einer Applikation einer Treiberfunktion hat folgende Auswirkung (vgl. Vorlesung TU Dresden - Introduction:
IPC mit Driver kostet:
- 4 Kern-ein und Austritte
- 2 Kontextwechsel
Aufrufe zwischen 2 Betriebsystemdiensten kosten beim Monolitischen Kern nur ein funktionsaufruf, bei der Microernearchitektur soviel wie ein Anwendungsprogramm den Treiber aufruft.
(Aus einem Papier der L4-Designer, das nicht zitiert werden soll:)
- Programmierkonzepte: Objektorientierung
- Persistente Objekte, Memory mapped Files
- Hardware: Multiprozessoren, massiv parallele Systeme, Verteilte Systeme
- Anwendungen: RT, Multimedia
Die Kerne sind durch Abmagerung der monolitischen Kerne entstanden d.h. Design Top Down (bestätigt in [Ruocco2008])
Merkmale:
- Userlevel Pager
- Umsetzung Interupts in Nachrichten (vgl. Messages bei Windows ?)
- IO-Adressen in Adressraum abbilden
Also:
- viele Konzepte, reichhaltige APIs (z.B MACH 3: 140 Systemcalls, ~ 300 KB Code)
Problem:
- teilweise etwa Faktor 10 zu langsam gegenüber Monolithischen Kernen)
- Mach3 IPC optimiert bis auf 115 μs auf 486, Unix pur 20 μs (wichtiger Vergleich Benchmarks von Applikationen !)
- nur 3-7% der Kosten des MACH3 IPC in Taktzyklen sind tatsächlich erforderlich, um die Effekte auf der Hardware zu erreichen (Hardwarekosten) (!)
der Rest ist allein auf die Konstruktion des Kerns zurückzuführen [Liedtke1995]
- Grundlegend neu designed mit minimaler und sauberer Architektur mit großem Augenmerk auf Leistungsfähigkeit [Ruocco2008]
- Kleine Abstraktionen mehr, sondern effiziente Primitiven, die die Hardware auf eine sichere Weise multiplexen.
Z.B. EXO: Kontrolltransfer über Adressraum ohne Parameter zu kopieren (LRPC)
- Prozessorarchiturabhängig, Mechanismen müssen für jeden Prozessor neu implementiert werden. (bottom up-Design)
(Wahrscheinlich wird man wohl am besten Prozessor und Kleinkern zusammen designen. bzw. Microcode innerhalb Prozessor. Hardwareunterstützung von Betriebssystemen ist an sich nichts neues, z.B. MMU (Memory manegement Unit) realisiert Segmente und Schutzumgebungen, vgl Schutzumgebung,Betriebsmittelumgebung)
- L4 hat nur 10 Systemcalls, 20 KB Code
- L4-IPC ist 4 mal so schnell wie UNIX-Systemcall
- L4 und EXO seien um Faktor 2 schneller als die Kerne der ersten Generation
- formale Spezifikation der Kern-API und formale Beweise der Sicherheitseigenschaften der API [SecWikiEn]
- Capabilitiy-basiertes Betriebsmittelmanagement [SecWikiEn]
Bei seL4 ist sogar formal bewiesen worden, dass die Kernimplementierung konsistent mit der formalen Spezifikation ist.
Begrifflichkeit:
- Mikro-Kern
- Dies ist der historische Architekturbegriff in Abgrenzung zu den monolitischen Kernen
- Kleinkern-Systeme
- Manchmal geraten die Kerne doch etwas groß, daß man nicht mehr von Micro-Kernen Sprechen kann. Das prominenteste ist WindowsNT/2000.
In dieser Sprechweise wurden nun zu große Mikrokerne umbenannt.
- Nano-Kern
- nach [SecWikiEn] war das eine hämische Bezeichnung von anderen Kernimplementierern weil der MACH-Kern so groß war
Geschichtlich
(erwähnt in L4 Usermanual Uni South Wales)
- Nucleus von Brinch Hansen 1970 ( Per Brinch Hansen. The nucleus of a multiprogramming operating system. Communications of the ACM, 13:238-250, 1970)
- Hydra 1974 (W. Wulf, E. Cohen, W. Corwin, A. Jones, R. Levin, C. Pierson, and F. Po
llack. HYDRA:
The kernel of a multiprocessor operating system. Communications of the ACM, 17:3 37- 345, 1974.)
- MACH 1988
- L4 1993 [ElphinstoneHeiser2013]
Single-Server - Multi Server
Ein Server ist in diesem Zusammenhang ein aktives Objekt/Prozeß, der eine Dienstleistung des Betriebssystem erbringt. Der Server, so ist es ja der Witz der Architektur, läuft außerhalb es Kerns. (Im User-Level oder zwar im Kernadressraum, aber seperat).
- Multi-Server
- Es gibt mehrere Server, gemeinsam bieten sie die Dienstleitungen des Betiebssystems an. Nach der Grundidee sollte jeder Dienst von einem separaten Server
implementiert sein.
- Single Server
- Alle Dienste werden von einem Server erbracht.
Die Single-Server sind meist die Emulatoren herkömmlicher Systeme, wie z.B. ein
BSD-Server auf MACH. Lange Jahre blieben die Kleinkernsysteme meist nur in Akademischer Diskussion, und die Notlösungen sind geblieben.
GNU HURD und das Sawmill-Projekt kümmern sich um die Multi-Server ideen.
An sich ist das Multi-Server-Paradigma ein wichtiger Grund auf Kleinkernsysteme zu setzen:
Die Verteilten Systeme bestehen aus Rechenknoten. Die Server werden auf die verschiedenen Rechenknoten verteilt, jeder Rechenknoten ist mit dem Kleinkern ausgestattet.
Bei Techniken wie Storage Area Networks (SAN) usw. rufen eigentlich nach diesen
modernen Betriebssystemtechniken ...
Ingenieurmäßiger Einsatz der Microkerne
Bei speziellen Anforderungen schreibt man spezielle Server (Customizing)
(Es ist nun überflüssig geworden neue Betriebssysteme ganz von vorne (from scratch) zu entwickeln ...
Es gibt dann einen Baukasten für Betriebssysteme, mit hohem Konfigurationsmöglichkeiten und -bedarf.
Links zu weiteren Diskussionen
- Linux is obsolete ?
- Diskussion Tanenbaum (u.a. Autor von [Tanenbaum92] mit Linux-Freunden. Dabei geht es auch um die Thematik Minimalkern gegen Monolitik
- L. Linus Torvalds about the microkernels again, 2006.05.09
- These: Das Microkerneldesign führe zu verschiedenen Addressräumen dieses führe zu kompexerer Programmierung ohne gemeinsamen Speicher.
Illustration: ein Fileserver ruft einen Netzwerkserver auf (z.b. NFS), usw. es kann sehr leicht zyklische Abhängigkeiten geben - dies muss sauber designed werden!
Grundsätzlich ist Komponentenweise ist ein besseres Design: MS DOS war nicht sicherer wie Unix/Linux:
Eine bessere Antwort von J.Shapiro Hopkins University und Andrew Tanenbaum
Weitere Links
- [SecWikiEn]
- Engl. Wikipedia über Microkerne
Informatik- und Netzwerkverein Ravensburg e.V
Rudolf Weber