Transcript
Aspektorientierte Programmierung
Betriebssystembaukästen THINK und OSKit Referent: Tobias Jordan
Betriebssystembaukästen – THINK und OSKit
1
Inhalt ● ●
Motivation OSKit – – –
●
THINK – – –
●
Übersicht: Idee / Komponenten Design und Implementierung OSKit in der Praxis das THINK Framework Implementierung: KORTEX Praxisbeispiele
Bewertung / Ausblick Betriebssystembaukästen – THINK und OSKit
2
Motivation ●
●
Immer wiederkehrende Aufgaben beim Betriebssystembau Betriebssystemkomponenten –
Bootloader
–
Gerätetreiber
–
Debugging
–
Memory Management
–
... und jetzt das eigentliche Betriebssystem
Betriebssystembaukästen – THINK und OSKit
3
Motivation (2) ●
“Normale” Vorgehensweise –
existierenden Code anderer Systeme anpassen
–
schwierig, da normalerweise viele Abhängigkeiten bedacht werden müssen Dateisystem
Memory Management
swap()
malloc() Synchronisation lock() unlock() Betriebssystembaukästen – THINK und OSKit
4
Motivation (3) ●
●
Standardkomponenten –
austauschbar
–
wiederverwendbar
–
sparen Zeit und Geld
Wichtig: –
Kapselung
–
Schnittstellenbeschreibung
Betriebssystembaukästen – THINK und OSKit
5
OSKit ●
Flux Research Group, University of Utah – –
●
http://www.cs.utah.edu/flux/oskit Fluke OS, basierend auf Mach und BSD
OSKit: Sammlung von Betriebssystemkomponenten – – –
Verwendbar als C-Libraries COM-Schnittstellendefinitionen einzelne Komponenten austauschbar
Betriebssystembaukästen – THINK und OSKit
6
OSKit - Struktur
Betriebssystembaukästen – THINK und OSKit
7
“Hello World” mit OSKit #include #include #include #include int main() { oskit_clientos_init(); oskit_print_version(); printf("Hello, World\n"); return 0; }
Betriebssystembaukästen – THINK und OSKit
8
OSKit – Design ●
Libraries – –
●
werden wie gewohnt zum eigenen Code dazugelinkt unabhängig: benötigen keine anderen Pakete
“Separabiltiy” - Separierbarkeit – –
“glue code” um das Austauschen einzelner Komponenten zu ermöglichen function overriding ●
–
z.B. putchar() oder malloc()
dynamisches Binden Betriebssystembaukästen – THINK und OSKit
9
COM Interfaces ●
● ●
Sprachunabhängiges Protokoll zur Komponenten-/Schnittstellenbeschreibung Implementation Hiding Interface Extension/Evolution – – –
verschiedene “Sichten” auf ein Objekt Beispiel: bufio-Interface “erweitert” blkioInterface “Open Implementation”: Implementierungseigenschaften Teil eines erweiterten Interfaces Betriebssystembaukästen – THINK und OSKit
10
OSKit – dynamisches Binden
Betriebssystembaukästen – THINK und OSKit
11
Performance ●
OSKit-Beispielanwendung: Messen von TCP Bandbreite und Latenzzeiten
Betriebssystembaukästen – THINK und OSKit
12
TCP Bandbreite
TCP-Bandbreite in Mbit/s, gemessen mittels ttcp zwischen zwei PentiumPro-Rechnern mit 200 MHz, verbunden durch 100 Mbps Ethernet.
Betriebssystembaukästen – THINK und OSKit
13
TCP Latenz
TCP Latenz in µs, gemessen mit rtcp
Betriebssystembaukästen – THINK und OSKit
14
Performance: Ergebnis ●
Bandbreite: –
Senden ● ● ●
–
Empfangen ●
●
FreeBSD: mbuf, unzusammenhängend Linux: skbuff, zusammenhängend Umwandlung erfordert manchmal Umkopieren keine Probleme
Latenz –
glue code
Betriebssystembaukästen – THINK und OSKit
15
OSKit in der Praxis ●
Fluke OS –
●
treibende Kraft
Standard ML – – – –
funktionale Programmiersprache mit Augenmerk auf Nebenläufigkeit benötigt Zugriff auf Context Switching Code ML/OS auf OSKit-Basis innerhalb eines Semesters fertiggestellt ähnliche Projekte – ohne OSKit – brachten jahrelang keine Ergebnisse Betriebssystembaukästen – THINK und OSKit
16
OSKit in der Praxis (2) ● ●
SR/OS Java/OS – – –
●
Kaffe JVM auf OSKit “portiert” “Hello World” nach 14 Stunden nach 3 Wochen gleiche Funktionalität wie Suns JavaOS
diverse andere Projekte –
Mungi, NILO, L4-Ports, Fiasco, Network Storage Corporation, MzScheme, Janos, (oskitdoom, GNU HURD) Betriebssystembaukästen – THINK und OSKit
17
OSKit – Bewertung ●
Pro: –
Sehr einfache Handhabung ●
– ●
siehe Praxisberichte
Konzept der Trennung der Belange
Kontra: –
Teilweise zu „grobkörnig“
–
Teilweise unflexibel
Betriebssystembaukästen – THINK und OSKit
18
THINK ● ●
THink Is Not a Kernel Framework zum komponentenbasierten Bau von Betriebssystemkernen – – –
●
Komponenten verschiedenster Größe flexibles Bindungsmodell Bindung zur Laufzeit
KORTEX –
Komponentenbibliothek auf THINK-Basis
Betriebssystembaukästen – THINK und OSKit
19
THINK – Konzepte ●
Domains –
●
Komponenten –
●
werden in Java definiert
Bindungen –
●
Laufzeitobjekte
“Interfaces” - Schnittstellen –
●
Ressourcen-, Sicherheits- und Isolationsgrenzen
Verbindungen zwischen Interfaces
Namen Betriebssystembaukästen – THINK und OSKit
20
THINK – Namen/Bindungen
Betriebssystembaukästen – THINK und OSKit
21
THINK – Implementierung ●
In C aus Performancegründen
Betriebssystembaukästen – THINK und OSKit
22
THINK – Implementierung (2)
Betriebssystembaukästen – THINK und OSKit
23
THINK – Code Generatoren ●
Open Interface Compiler –
●
erstellt C-/Assembler-Code aus den JavaSchnittstellenbeschreibungen
Off-line Configurator – –
erstellt Kernel-Images aus UML-Beschreibungen löst Abhängigkeiten zwischen Komponenten
Betriebssystembaukästen – THINK und OSKit
24
KORTEX ●
Komponentenbibliothek für PowerPC –
HAL-Komponenten ●
– – –
Speicherverwaltung Scheduler/Threads Netzwerk ●
–
Exceptions, MMU, PCI, IDE, Ethernet, Grafik
Ethernet, ARP, IP, UDP, TCP, SunRPC
Dateisysteme ●
ext2, NFS
Betriebssystembaukästen – THINK und OSKit
25
KORTEX (2) ●
weitere Komponenten –
–
Service-Komponenten ●
dynamic linker/loader
●
application loader
Interaktions-Komponenten ●
–
stellen Bindungen bereit
POSIX-Komponenten
Betriebssystembaukästen – THINK und OSKit
26
KORTEX – HAL Beispiel
Betriebssystembaukästen – THINK und OSKit
27
Ressourcenmanagement ●
“Ressource Manager” teilt Ressourcen zu –
Threads Scheduler
–
Netzwerksessions Protokolle
Betriebssystembaukästen – THINK und OSKit
28
Thread-/Schedulerkomponenten ●
drei preemptive Scheduler – –
kooperativ, round-robin, prioritätsbasiert basierend auf HAL-Exception-Komponente, daher sehr performant
Betriebssystembaukästen – THINK und OSKit
29
Interaktions-Komponenten ●
Lokale Bindung –
●
Syscalls – –
●
für Komponenten derselben Domain Aufruf von Kerneldiensten aus Applikationen Exception Exception-Handler Komponente
Upcalls / Signale – –
Mitteilen von Kernel-Ereignissen an Applikationen Kernel Signal-Handler-Komponente Betriebssystembaukästen – THINK und OSKit
30
Interaktions-Komponenten (2) ●
Synchrones LRPC – –
●
Kommunikation zwischen Applikationen benutzt Syscall und Upcall
Remote RPC – – –
Kommunikation zwischen Kerneln auf verschiedenen Rechnern benutzt Netzwerkkomponenten kann durch Syscall/Upcall auch auf Applikationsebene benutzt werden Betriebssystembaukästen – THINK und OSKit
31
Praktische Umsetzung
Betriebssystembaukästen – THINK und OSKit
32
Praktische Umsetzung (2) vgl.: Linux 2.4 getpidSyscall: 217 Zyklen
Betriebssystembaukästen – THINK und OSKit
33
Weitere Tests ●
●
PlanP-Bridge –
Sprache zur Programmierung aktiver Netzwerkkomponenten
–
Durchsatz des dedizierten KORTEX-Kerns besser als unter Solaris/Linux
Kaffe – Java VM –
Thread-Performanz besser als unter Linux ●
Ausnutzung der HAL-Komponenten
Betriebssystembaukästen – THINK und OSKit
34
DOOM
Betriebssystembaukästen – THINK und OSKit
35
THINK/OSKit: Unterschiede ●
THINK: Bindungskonzept –
●
OSKit verwendet viel “Legacy Code”, KORTEX eigene Komponenten –
●
dadurch zusätzliche Abstraktionsebene
OSKit-Komponenten dadurch “grobkörniger”
OSKit enthält keine speziellen Frameworks –
KORTEX: Frameworks zu Kommunikation und Ressourcenverwaltung Betriebssystembaukästen – THINK und OSKit
36
Bewertung, Ausblick ●
Zentrales Thema: Trennung der Belange –
bei beiden Baukästen objektorientierter Ansatz
–
Aber: bei manchen querschneidenden Belangen keine objektorientierte Kapselung möglich
Lösung: aspektorientierte Programmierung
Betriebssystembaukästen – THINK und OSKit
37
Quellen ●
Webseiten der einzelnen Projekte: – –
●
The OSKit Project: http://www.cs.utah.edu/flux/oskit/ THINK – Home Page: http://think.objectweb.org/
Referenzen: – – –
The Flux OSKit: A Substrate for OS and Language Research The Flux OS Toolkit: Reusable Components for OS Implementation THINK: A Software Framework for Component-based Operating System Kernels Betriebssystembaukästen – THINK und OSKit
38