Page 1
11
CiAO (CiAO is Aspect-Oriented)
Eine aspektorientiert entworfene Betriebssystemfamilie
Daniel LohmannOlaf SpinczykWolfgang Schröder-Preikschat
Lehrstuhl für Informatik IVVerteilte Systeme und BetriebssystemeFriedrich-Alexander Universität Erlangen-Nürnberg
[email protected] ://www4.cs.fau.de/~lohmann
Page 2
© 2004 Daniel Lohmann, Olaf Spinczyk 22
Agenda Das CiAO-Projekt: Überblick
Problemfeld und Hintergrund
Ansatz
Beispiel
Zusammenfassung
Page 3
© 2004 Daniel Lohmann, Olaf Spinczyk 33
Das CiAO – Projekt: Überblick DFG-gefördertes BS-Forschungsprojekt (SCHR 603/4)
Eine WM-Stelle, zwei Studenten, seit Oktober 2004
Projektziele Entwicklung einer hochgradig anwendungsgewahren
Betriebssystem-Produktlinie für tief eingebettete Systeme- Gute Anpassbarkeit an die Anforderungen der Anwendung
- Geringer Ressourcenbedarf
Entwicklung eines wandlungsfähigen Betriebssystems- Komponentenimplementierung (Treiber, Scheduler, ...)
unabhängig von der Architektur (monolithisch, Mikrokern, Bibliothek, ...)
- Konfigurierbare nicht-funktionale Architektureigenschaften ... durch gezielte Verwendung von AOP
Page 4
© 2004 Daniel Lohmann, Olaf Spinczyk 44
Das CiAO – Projekt: Überblick Wissenschaftliche Fragestellung
Sind Aspekttechniken zielführend bei der Produktlinienentwicklung?
Lässt sich durch AOP ein (deutlich) höheres Maß an Konfigurierbarkeit erreichen?
Lassen sich damit insbesondere auch nicht-funktionale Eigenschaften / Architektureigenschaften konfigurierbar gestalten?
Wie sehen architekturtransparente BS-Komponenten aus?
Page 5
© 2004 Daniel Lohmann, Olaf Spinczyk 55
Problemfeld: Anwendungsanpassbarkeit
Zwei Dimensionen der Anwendungsanpassbarkeit
Granularität (Funktionale Auswählbarkeit) „Ich muss nichts einbinden, was ich nicht brauche“ Resultierende Systeme müssen klein sein! Geringstmögliche Anforderungen an die Hardware
Variabilität (Funktionale Anpassbarkeit) Verschiedenste Plattformen (8-64 Bit, mit/ohne MMU) Alle Eigenschaften lassen sich konfigurieren / anpassen
Page 6
© 2004 Daniel Lohmann, Olaf Spinczyk 66
Historie: Der PURE Nucleus 1995-2003, Uni Potsdam/Magdeburg feinere Granularität geht wohl kaum ;-)
preemption
synchronizationobjectification
dispatching
scheduling
propagation
interruption
preemptive4062
non-preemptive1699
cooperative1648
exclusive434
coordinative2306
interruptive1268
Page 7
© 2004 Daniel Lohmann, Olaf Spinczyk 77
Historie: Der PURE Nucleus 1995-2003, Uni Potsdam/Magdeburg feinere Granularität geht wohl kaum ;-)
preemption
synchronizationobjectification
dispatching
scheduling
propagation
interruption
preemptive4062
non-preemptive1699
cooperative1648
exclusive434
coordinative2306
interruptive1268
Was ist mit der Variabilität?
Page 8
© 2004 Daniel Lohmann, Olaf Spinczyk 88
Granularität und Variabilität
[Variabilität]
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
+ Windows
+ Linux
Linux ++ OSEK
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
[Gra
nula
rität
]Individualsystem +
[A n w e n d u n g s a n p a s s
b a r k e i t]
Page 9
© 2004 Daniel Lohmann, Olaf Spinczyk 99
Granularität und Variabilität
[Variabilität]
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
+ Windows
+ Linux
Linux ++ OSEK
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
[Gra
nula
rität
]
+ Windows
+ Linux
+ klassisches UNIX
Linux +
Individualsystem +
+ OSEK
embedded
[A n w e n d u n g s a n p a s s
b a r k e i t]+ PURE
ECOS +
Page 10
© 2004 Daniel Lohmann, Olaf Spinczyk 1010
Granularität und Variabilität
[Variabilität]
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
+ Windows
+ Linux
Linux ++ OSEK
[A n w e n d u n g s a n p a s s
b a r k e i t]
Server / PC-Systeme
eingebettete Systeme
tief eingebettete Systeme
[Gra
nula
rität
]
+ Linux
Linux +
Individualsystem +
+ OSEK
+ PURE
embedded
+ CiAO ?
+ klassisches UNIX
ECOS +
+ Windows
Page 11
© 2004 Daniel Lohmann, Olaf Spinczyk 1111
Im Fokus von CiAO: Variabilität
Konfigurierung nicht-funktionaler Eigenschaften Kernsynchronisation
- grobgranular, feingranular, ohne Unterbrechungsbehandlung
- Verteilung (Hardware, Scheduler)- Bearbeitung (Handlerfunktion, Prolog-/Epilog, Kernelthread, Prozess)
Speicherschutzkonzept- ohne, Segmentierung, Addressräume
Platzierung der BS-Komponenten- gemeinsam, Segmente, Addressräume, Prozesse
Interaktion zwischen BS-Komponenten- Prozeduraufruf, Nachricht, IPC
Optimierungen- Caching, Aufrufpfade
Page 12
© 2004 Daniel Lohmann, Olaf Spinczyk 1212
Im Fokus von CiAO: Variabilität
Konfigurierung nicht-funktionaler Eigenschaften Kernsynchronisation
- grobgranular, feingranular, ohne Unterbrechungsbehandlung
- Verteilung (Hardware, Scheduler)- Bearbeitung (Handlerfunktion, Prolog-/Epilog, Kernelthread, Prozess)
Speicherschutzkonzept- ohne, Segmentierung, Addressräume
Platzierung der BS-Komponenten- gemeinsam, Segmente, Addressräume, Prozesse
Interaktion zwischen BS-Komponenten- Prozeduraufruf, Nachricht, IPC
Optimierungen- Caching, Aufrufpfade
Konfigurierbare Architektur
Page 13
© 2004 Daniel Lohmann, Olaf Spinczyk 1313
Ansatz: Verwendung von AOP zur Implementierung querschneidender Belange
Strategien (Synchronisation, Ressourcenmanagement...) Plattformspezifische Optimierungen (Caching, Bypassing)
zur Bindung/Interaktion der Komponenten Je nach Zielarchitektur (Prozedur, Moduswechsel, IPC) Variabilität und Granularität durch lose Kopplung
zur Platzierung der Komponenten Je nach Zielarchitektur (Addressraum, Thread, Prozess)
Page 14
© 2004 Daniel Lohmann, Olaf Spinczyk 1414
Ansatz: Verwendung von AOP zur Implementierung querschneidender Belange
Strategien (Synchronisation, Ressourcenmanagement...) Plattformspezifische Optimierungen (Caching, Bypassing)
zur Bindung/Interaktion der Komponenten Je nach Zielarchitektur (Prozedur, Moduswechsel, IPC) Variabilität und Granularität durch lose Kopplung
zur Platzierung der Komponenten Je nach Zielarchitektur (Addressraum, Thread, Prozess)
Komponenten müssen aspektgewahr entworfen sein
Page 15
© 2004 Daniel Lohmann, Olaf Spinczyk 1515
RS232-Treiber, direkter Zugriff
class RS232 { ...public: void read(char*, int) { ... ... } ...};
int main() { ... RS232 com; com.read(buf, 16); ...}
Page 16
© 2004 Daniel Lohmann, Olaf Spinczyk 1616
RS232-Treiber, konfiguriert als ProtectedComponent
class RS232 { ...public: void read(char*, int) { ... ... } ...};
int main() { ... RS232 com; com.read(buf, 16); ...}
class Mutex { ... void lock(); void unlock() };
aspect ProtectedComponent { pointcut virtual classes() = 0; pointcut virtual funcs() = 0;
advice classes() : Mutex _m;
advice execution(funcs()) : before { tjp->that()->_m.lock(); }
advice execution(funcs()) : after { tjp->that()->_m.unlock(); }
};
Page 17
© 2004 Daniel Lohmann, Olaf Spinczyk 1717
int main() { ... RS232 com; com.read(buf, 16); ...}
class Mutex { ... void lock(); void unlock() };
aspect ProtectedComponent { pointcut virtual classes() = 0; pointcut virtual funcs() = 0;
advice classes() : Mutex _m;
advice execution(funcs()) : before { tjp->that()->_m.lock(); }
advice execution(funcs()) : after { tjp->that()->_m.unlock(); }
};
aspect RS232Config : public ProtectedComponent {
pointcut classes() = „RS232“; pointcut funcs() = „% RS232::%(...);};
RS232-Treiber, konfiguriert als ProtectedComponent
class RS232 { ...public: void read(char*, int) { ... ... } ...};
Page 18
© 2004 Daniel Lohmann, Olaf Spinczyk 1818
int main() { ... RS232 com; com.read(buf, 16); ...}
class Mutex { ... void lock(); void unlock() };
aspect ProtectedComponent { pointcut virtual classes() = 0; pointcut virtual funcs() = 0;
advice classes() : Mutex _m;
advice execution(funcs()) : before { tjp->that()->_m.lock(); }
advice execution(funcs()) : after { tjp->that()->_m.unlock(); }
};
aspect RS232Config : public ProtectedComponent {
pointcut classes() = „RS232“; pointcut funcs() = „% RS232::%(...);};
class RS232 { Mutex _m;public: void read(char*, int) { __before_1(); ... ... __after_1(); } ...};
RS232-Treiber, konfiguriert als ProtectedComponent
Page 19
© 2004 Daniel Lohmann, Olaf Spinczyk 1919
RS232-Treiber, konfiguriert als MiniServer
int main() { ... RS232 com; com.read(buf, 16); ...}
class MiniServer : public Thread { ... void run() { AC::Action* act; while(true){ Thread& s=receive(ANY, act); act->trigger(); send(s); } } };
aspect MiniServerComponent { pointcut virtual classes() = 0; pointcut virtual funcs() = 0;
advice classes() : MiniServer _s;
advice call(funcs()) && !within(classes()) : around(){ send(tjp->target()->_s, &tjp->action()); receive(tjp->target()->_s); } };
class RS232 { ...public: void read(char*, int) { ... ... } ...};
Page 20
© 2004 Daniel Lohmann, Olaf Spinczyk 2020
RS232-Treiber, konfiguriert als MiniServer
int main() { ... RS232 com; __around_1( <com.read(buf, 16)> ); ...}
class MiniServer : public Thread { ... void run() { AC::Action* act; while(true){ Thread& s=receive(ANY, act); act->trigger(); send(s); } } };
aspect MiniServerComponent { pointcut virtual classes() = 0; pointcut virtual funcs() = 0;
advice classes() : MiniServer _s;
advice call(funcs()) && !within(classes()) : around(){ send(tjp->target()->_s, &tjp->action()); receive(tjp->target()->_s); } };
aspect RS232Config : public MiniServerComponent {
pointcut classes() = „RS232“; pointcut funcs() = „% RS232::%(...);};
class RS232 { MiniServer _s;public: void read(char*, int) { ... ... } ...};
Page 21
© 2004 Daniel Lohmann, Olaf Spinczyk 2121
Zusammenfassung: Das CiAO-Projekt
Evaluierung von AOP im Betriebssystembau AspectC++
Konfigurierung von Betriebssystem-Produktlinien
Insbesondere nicht-funktionale Eigenschaften
Wandlungsfähiges Betriebssystem Architekturtransparente Komponenten
Durch Aspekte an konkrete Architektur angepasst
Ziel: Hohe Variabilität Grenzen der Konfigurierbarkeit
Kosten (Größe/Laufzeitoverhead) der Konfigurierbarkeit