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
© Copyright 2024 ExpyDoc