Betriebssystembaukästen THINK und OSKit - cs.fau.de fileBetriebssystembaukästen – THINK und...

38
Betriebssystembaukästen – THINK und OSKit 1 Aspektorientierte Programmierung Betriebssystembaukästen THINK und OSKit Referent: Tobias Jordan

Transcript of Betriebssystembaukästen THINK und OSKit - cs.fau.de fileBetriebssystembaukästen – THINK und...

Betriebssystembaukästen – THINK und OSKit 1

Aspektorientierte Programmierung

BetriebssystembaukästenTHINK und OSKit

Referent: Tobias Jordan

Betriebssystembaukästen – THINK und OSKit 2

Inhalt

● Motivation● OSKit

– Übersicht: Idee / Komponenten– Design und Implementierung– OSKit in der Praxis

● THINK– das THINK Framework– Implementierung: KORTEX– Praxisbeispiele

● Bewertung / Ausblick

Betriebssystembaukästen – THINK und OSKit 3

Motivation

● Immer wiederkehrende Aufgaben beim Betriebssystembau

● Betriebssystemkomponenten– Bootloader– Gerätetreiber– Debugging– Memory Management– ... und jetzt das eigentliche Betriebssystem

Betriebssystembaukästen – THINK und OSKit 4

Motivation (2)

● “Normale” Vorgehensweise– existierenden Code anderer Systeme anpassen– schwierig, da normalerweise viele

Abhängigkeiten bedacht werden müssen

Dateisystem

Synchronisation

MemoryManagement

swap() malloc()

lock()unlock()

Betriebssystembaukästen – THINK und OSKit 5

Motivation (3)

● Standardkomponenten– austauschbar– wiederverwendbar– sparen Zeit und Geld

● Wichtig:– Kapselung– Schnittstellenbeschreibung

Betriebssystembaukästen – THINK und OSKit 6

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 7

OSKit - Struktur

Betriebssystembaukästen – THINK und OSKit 8

“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 9

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 10

COM Interfaces

● Sprachunabhängiges Protokoll zur Komponenten-/Schnittstellenbeschreibung

● Implementation Hiding● Interface Extension/Evolution

– verschiedene “Sichten” auf ein Objekt– Beispiel: bufio-Interface “erweitert” blkio-

Interface– “Open Implementation”: Implementierungs-

eigenschaften Teil eines erweiterten Interfaces

Betriebssystembaukästen – THINK und OSKit 11

OS

Kit

– d

ynam

isch

es B

ind

en

Betriebssystembaukästen – THINK und OSKit 12

Performance

● OSKit-Beispielanwendung: Messen von TCP Bandbreite und Latenzzeiten

Betriebssystembaukästen – THINK und OSKit 13

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 14

TCP Latenz

TCP Latenz in µs, gemessen mit rtcp

Betriebssystembaukästen – THINK und OSKit 15

Performance: Ergebnis

● Bandbreite:– Senden

● FreeBSD: mbuf, unzusammenhängend● Linux: skbuff, zusammenhängend● Umwandlung erfordert manchmal Umkopieren

– Empfangen● keine Probleme

● Latenz– glue code

Betriebssystembaukästen – THINK und OSKit 16

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 17

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 18

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 19

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 20

THINK – Konzepte

● Domains– Ressourcen-, Sicherheits- und Isolationsgrenzen

● Komponenten– Laufzeitobjekte

● “Interfaces” - Schnittstellen– werden in Java definiert

● Bindungen– Verbindungen zwischen Interfaces

● Namen

Betriebssystembaukästen – THINK und OSKit 21

THINK – Namen/Bindungen

Betriebssystembaukästen – THINK und OSKit 22

THINK – Implementierung

● In C aus Performancegründen

Betriebssystembaukästen – THINK und OSKit 23

THINK – Implementierung (2)

Betriebssystembaukästen – THINK und OSKit 24

THINK – Code Generatoren

● Open Interface Compiler– erstellt C-/Assembler-Code aus den Java-

Schnittstellenbeschreibungen● Off-line Configurator

– erstellt Kernel-Images aus UML-Beschreibungen– löst Abhängigkeiten zwischen Komponenten

Betriebssystembaukästen – THINK und OSKit 25

KORTEX

● Komponentenbibliothek für PowerPC– HAL-Komponenten

● Exceptions, MMU, PCI, IDE, Ethernet, Grafik

– Speicherverwaltung– Scheduler/Threads– Netzwerk

● Ethernet, ARP, IP, UDP, TCP, SunRPC

– Dateisysteme● ext2, NFS

Betriebssystembaukästen – THINK und OSKit 26

KORTEX (2)

● weitere Komponenten– Service-Komponenten

● dynamic linker/loader

● application loader

– Interaktions-Komponenten● stellen Bindungen bereit

– POSIX-Komponenten

Betriebssystembaukästen – THINK und OSKit 27

KORTEX – HAL Beispiel

Betriebssystembaukästen – THINK und OSKit 28

Ressourcenmanagement

● “Ressource Manager” teilt Ressourcen zu– Threads Scheduler– Netzwerksessions Protokolle

Betriebssystembaukästen – THINK und OSKit 29

Thread-/Schedulerkomponenten

● drei preemptive Scheduler– kooperativ, round-robin, prioritätsbasiert– basierend auf HAL-Exception-Komponente,

daher sehr performant

Betriebssystembaukästen – THINK und OSKit 30

Interaktions-Komponenten

● Lokale Bindung– für Komponenten derselben Domain

● Syscalls– 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 31

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 32

Pra

ktis

che

Um

setz

un

g

Betriebssystembaukästen – THINK und OSKit 33

Praktische Umsetzung (2)

vgl.: Linux 2.4 getpid-Syscall: 217 Zyklen

Betriebssystembaukästen – THINK und OSKit 34

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 35

DOOM

Betriebssystembaukästen – THINK und OSKit 36

THINK/OSKit: Unterschiede

● THINK: Bindungskonzept– dadurch zusätzliche Abstraktionsebene

● OSKit verwendet viel “Legacy Code”, KORTEX eigene Komponenten– OSKit-Komponenten dadurch “grobkörniger”

● OSKit enthält keine speziellen Frameworks– KORTEX: Frameworks zu Kommunikation und

Ressourcenverwaltung

Betriebssystembaukästen – THINK und OSKit 37

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 38

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