Betriebssystembaukästen THINK und OSKit

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 <stdio.h>
#include <oskit/clientos.h>
#include <oskit/startup.h>
#include <oskit/version.h>
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