Betriebssystemkerne/Kleinkernsysteme
L4
Links
- L4HQ
- Portal der L4-Community
- L4 TU Dresden
-
Vorlesung Mikrokernkonstruktion
Mikrokernbasierte Betriebssysteme
- L4KA, Systemarchitektur Karlsruher Institute für Technologie
- eigene Kerne mit verschiedenen Schnittstellen, neuere Entwicklung
(performanter vgl L4KA Vison)
Der Lehrstuhl Systemarchitektur Uni Karlsruhe ist der ehemalige Lehrstuhl vom L4-Erfinder Prof. Jochen Liedtke ...
- NICTA/L4 und NICTA/SeL4 Uni South Wales Sydney, Australien
Quellen und weitere Informationen
Literatur
Sekundärinformationen:
Witz
Grundvorstellungen
aus [Liedtke1995]:
- System soll interaktive Anwendungen und Anwendungen mit unterschiedlicher Vertrauenswürdigkeit unterstützen
→ Schutzumgebung ist erforderlich
Hardwarevorausetzungen
aus [Liedtke1995]:
- Die Hardware implementiert einen seitenbasierten virtuellen Speicher, d.h hat eine MMU
Design
- Designkriterium Minimalität der Funktionalität im Kern: Ein Mechanismus gehört nur dann in den Mikrokern, wenn unmöglich ausserhalb des Kerns implementieren kann, weil er sonst die erforderlichen Systemanforderungen nicht erfüllen kann. [Liedtke1995]
- Prinzip der Unabhängigkeit: Der Kern gerantiert basierend auf der Hardware, dass ein Task T1 weder durch ein anderes Task T2 gestört noch gar zerstört werden kann. [Liedtke1995]
- Prinzip der Integrität: Der Kern garantiert basierend auf der Hardware, dass zwei Tasks T1 und T2 zueinander eine Verbindung aufbauen können, die durch eine Task T3 weder zerstört noch abgehört noch verfälscht werden kann [Liedtke1995]
- Hardware und Kern sind vertrauenswürdig. Dazu kommen vertrauenswürdige Server außerhalb des Kerns. Aufgrund der Minimalität an Funktionalität ist die Codebasis des Kerns klein und daher überschaubar
- Verschiedene Kommunikationsmechanismen: Die IPC ist laut [ElphinstoneHeiser2013] um den Faktor 10-20 schneller als bei den zeitgenössischen μ-Kerneln. Damit ist die Mikrokernarchitektur wieder interessant geworden.
Die IPC-Operationen werden in Assembler implementiert ("fast path")
Die IPC ist synchron (blockierend) und ungepuffert. Dies ist auch ein Geheimnis der Schnelligkeit. [Heiser2002]
- 10 systemcalls, 20 KB Code. Nach [ElphinstoneHeiser2013] hat die Codegrösse zwischen den Versionen nicht zugenommen
- Interrupts werden in IPC umgesetzt. → [ElphinstoneHeiser2013]: Damit sind die Gerätetreiber im User-Level (Charakteristikum von L4). Bei SeL4 ist nur der Zeittreiber zur Verdrängung der Tasks im Kern
Auch Pagefaults von der MMU-Hardware werden in IPC umgesetzt → dies macht Pager auf Userlevel möglich
- Nur einen μ-Kern kann man praktisch verifizieren. Dieses wird in dem VFiasco-Projekt gemacht. (Erster Versuch an sich)
[Klein-Sigsops2009] berichtet über seL4, hier ist nun zum ersten Mal der formale Beweis gelungen. Näheres zum Beweis.
Abstraktionen
Es gibt nur ganz wenige:
- Adressräume sind die Basis des Schutzes
- Operationen grant,map, demap
- Threads (Abstraktion der Programmausführung)
-
ein Thread wird charakterisiert durch einen Zustand aus einer Menge von Registern, insbesondere dem Befehlszähler, dem Stackzeiger und weitern Zustandsinformationen, einen Verweis auf die Task (mit Adressaum), in er gerade ausgeführt wird.
Die Verbindung mit der Task kann statisch oder dynamisch sein, d.h. es kann Threads geben die zwischen Tasks migrieren
Die Threads, insbesondere die Task/Adressraum Zuordnung müssen im Kern verwaltet werden, um die Integriät der Adressräume zu schützen. [Liedtke1995]
- IPC eigentlich Intertaskkommunikation
-
dies ist die Kommunikation über Adressräume hinweg. Diese muß vom μ-Kern realisiert werden, um die Integrität zu garantieren.
Die IPC erzwingt eine Absprache zwischen beiden Seiten der Kommunikation
Zusammen mit den Adressräumen sind diese das Fundment der Unabhängigkeit zwischen Tasks, die Subsysteme realisieren.
[Liedtke1995]
- Unique Identifiers (UID) (kontextfreie Adressierung bei IPC)
weitere Begriffe:
- Task
- Menge aller Threads, die auf einem Adressraum arbeiten.
Eine Task wird mit einem Thread geschaffen.
- Flexpages
- Zusammenfassung von mehreren Seiten für Speicheroperationen
z.B.[Heiser2002]
- Clan (veraltet)
- Mit dem Clan-Begriff und dem BegriffChief eines Clans kann man Sicherheitsmechanismen, Debugger sowie auch remote ORBs bauen.
- Capability (3 μ-Kern Generation)
- sind Kernobjekte, die Betriebsmittel und Kommunikationskanäle representieren. [Vorlesung Microkernkonstruction TU Dresden 2013].
Eine Capability ist eine Referenz auf ein Kernobjekt verbunden mit Zugriffsrechten. Sie kann von einer Task zur anderen abgebildet werden.
Zu einer Task gehört die Datenstruktur der Capability Table.
In der Task (Userspace) wird die Capability durch einen handle repräsentiert ähnlich eines POSIX-Filehandle.
Das IPC-Gate ist das Kern-Objekt, das Objektaufrufe d.h. Aufrufe zwischen Userlevel-Threads als Proxy realisierrt und weiter delegiert. Der Aufrufer merkt davon auch nichts, so k&ouuml;nnen Objekte virtualisiert werden. Hier kann en Monitor dazwischen geschaltet werden, der Sicherheitspolitiken, Debugging realisiert oder eine OS-Personality darstellen. [WL2009]
Scheduling
L4 Version X.2 Rev6 wurde Version 4
Bemerkungen:
- IDL als Schnittstellensprache möglich (vgl Betriebssysteme und CORBA)
- Bei L4 Api Version X 2 bzw. Version 4 ist die API portabel in C, ind deshalb sind nun die IDL-Compiler ausser Mode gekommen (?)
- [NF2007dynrpc] ist eine Untersuchung, dass ein dynamischer IO-Stream ausreichend effizient ist, und ein IDL-Compiler eine grosse Codekomplexität hat, so dass man für die betriebssystementwicklung auf dem Mikrokern gerne darauf verzichtet.
Implementierungen
Es gibt mehrere Implementierungen, siehe aktuell L4Hq:
- L4/x86
- Original Implementierung von Liedtke, teilweise hoch optimiert in Assember-Code (aber nicht Echtzeitfähig nach Usenix2001-Paper)
- Fiasco (TU Dresden)
-
- Neuimplementierung in C++ ("Fiasco" wegen Lizenzproblemen mit dem in C-implementieren ursprünglichen L4/i486, vgl. L4down)
- ist ein preemptiver Echtzeitkern, der harte Echtzeitanforderungen erfüllen kann, dient als Basis für DROPS
- Die Kern-Objekte in Fiasco werden nicht-Blockierend koordiniert. Damit wird "priority-Inheritance" garantiert, was sicher stellt, daß niemals lauffähige hochpriore Prozesse auf weniger wichtige warten müssen.
Fiasco-Requirements/Spezifikation, bestätigt in [ElphinstoneHeiser2013]
Status:
Fiasko.OC:
Warg,Lackorzynski: Rounding Pointers -Type Safe Capabilities with C++ Meta Programming 2011 beschreibt OC in C++
- Hazelnut
- fast ganz C-Implementierung, GPL, welt- führende IPC-Ausführungszeitminimum
[ElphinstoneHeiser2013]: x86,ARM, Programiersprache C mit kritischen Teilen in Assembler ("fast paths")
- L4Ka:Pistachio
-
Aus [Whitepaper]:
- L4 Version 4 Kernel API,32bit und 64bit: Trennt Hochsprache API und ABI, → API ist portabel zwischen Prozessorarchitekturen
- Multiprocessorsupport: SMP, mit erhalt der Parallelität der Applikation im Kern
NUMA Unterstützung
- schnelle IPC: Vermeidung von unnötigen Speicherzugriffen (reduzierung Cache und TLB-Zugriffe)
Ein IPC erfordert eine Änderung der Rechteebene (Privilege mode), diese sind hardwarebedingt teuer. Innerhalb eines Adressraums zur Koordinierung und Signalisierung von Threads findet dies komplett im User-mode statt → um Grösenordnungen höhere IPC-Effizenz
- für Prozessoren IntelIA32, IA64, PowerPC 32bit, Alpha 21164, MIPS R4000, geplant: AMD64,Power4, ARM
- Virtuelle Register für IPC, kann Prozessorspezifisch optimiert werden
- Thread kann zwischen Adressräumen migrieren
- Kernel Interface Page: Ausnutzung SYSENTER/SYSEXIT-Instruktion bei IA32, damit kann der Kern 10mal schneller betreten und verlassen werden als bei der Software-Interruptmethode
KIP enthält Eintrittspunkte wichtiger Systemaufrufe sowie häfig zugegriffene Systeminformation, für noch schnellere IPC, Systemuhrabfragen
- Interrupts sind Kernelthreads und werden in IPC umgewandelt.
- Privilegierte Tasks sind; sigm0, sigma1 und die RootTask. Rechtdelegation wird auf Userebene verschoben: Verschiedene Politiken wie Zugriffslisten,Capabilities können mit RPCs implementiert werden.
[ElphinstoneHeiser2013]: Implementierung C++, Erstausgabe 2003
- L4 Alpha
- auf Alpha-Prozessor
- CodeZero
- C-Implementierung für Hypervisors
- seL4 formal bewiesener Mikokern
- nun OpenSource [Heise 29.7]
Die Wahl einer Implementierung ist natülich von verschiedenen Kriterien ab, wie von der Anwendung, der Prozesserarchitektur und dem wichtigen kriterien wie Preis,Support,Open Source, den eigenen Kenntnissen usw.
Die Kerne Hazelnut und Pistacio aus Karlsruhe sind schneller,
der Fiasco ist besser zur Entwicklung und Debugging (2003: Unterschiede der APIs und der Kerne),
wobei P4/PikeOS sowie die vom OpenKernelLab gar nicht betrachtet wurden
Bemerkungen zum Einsatz für Zwecke
Grundsätzlich ist L4 als Universalkern gedacht. Gemäß der Mikrokernarchitektur passen Strategieen (implementiert in Tasks) das System für die speziellen Anforderungen des Anwendungssystem an.
Natürlich muß man immer mit Skepsis solchen Überlegungen gegenüber stehen und genau untersuchen, ob ein spezieller Mikrokern den Anforderungen gerecht werden kann:
- [LW2009] A.L.,A.W.: "Taming Subsystems: Capabilities as Universal Resource Access Control in L4" 2009
Aufbauendes
Single-Server
- L4Linux Single Server Linux
-
L4 wird als weitere Architektur eingeführt
- L4Linux ist eine L4-Task, für jeden Linux-Prozess wird eine L4-Task angelegt [Hohmuth1996] 3.3.2
- L4Linux hat Pager-Threads für seine Prozesse und eine Root-Pager für den L4Linux-Task [Hohmuth1996] 3.3.5
- L4OpenBSD
-
wie L4Linux, nur für OpenBSD
Multiserversysteme
- L4RE L4 Runtime Environment
- SawMill-Projekt
- L4-HURD
- offensichtlich gab es doch einige Probleme, Projekt gestopped 2005
- Heise über KataOS
- Als Programmiersprache wird Rust gewält
- TREND OS von Hensoldt
- baut auf seL4 auf
Sicherheitskritische Systeme
- Perseus-OS (Uni Saarbrücken)
- Sicherheit für digitale Signaturen
- Nizza-Sicherheitsarchitektur
- Auch für übliche Anwendungen
- Genode.org
-
das ist eine Community, Kern ist die Tu-Dresden Ausgründung Genode labs mit kommerziellen Support
ksyslabs.org ist der Internationale Ableger von Ksyslabs.ru.
Interessant ist die Aussage, dass Genode das Potential zu einem Main-Stream-Betriebssystem hat und dies aktiv verfolgt wird.
Echtzeitsysteme
- DROPS - Dresdner Real Time Operation System
-
garantiert Dienstgüten (Quality of Service) für Streaming bei Multimedia mit Betriebssystemtechniken wie Schedulung oder Dateisysteme mit beschränkter Antwortszeit.
- Karma VMM
- Kinebuchi, Koshimae, Nakajima: "Constructing Machine Emulator on Protable Microkernel" haben QEMU auf L4 portiert
- A.L.,S.L.,H.S.."Faithful Virtualization on a Real-Time Operating System", 2009
Praktische Bemerkungen
Projekte
Informatik- und Netzwerkverein Ravensburg e.V
Rudolf Weber