Rekonfiguration durch dynamische aspektorientierte Programmierung

Ähnliche Dokumente
spectj AOP mit Java, Konzepte und Beispiele

Dynamisches Aspektweben in C und C++: DAO C++ und µdyner

Aspektorientierte Programmierung mit.net

Programmierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University

CiAO (CiAO is Aspect-Oriented)

Behutsame Modernisierung

OOP. Tagesprogramm. Aspektorientierte Programmierung. Annotationen

1 Motivation und Einleitung

Aspektorientierte Programmierung

Implementieren von Klassen

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

AOSTA. Aspects in Operating Systems: Tools and Applications

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Prinzipien der objektorientierten Programmierung (OOP)

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Instrumentation von Android Anwendungen mit ExplorViz

Janeva:.NET meets J2EE

Repetitorium Programmieren I + II

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

Universität Karlsruhe (TH)

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Informatik II Übung 5

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

ADT: Verkettete Listen

Praxisorientierte Einführung in C++ Lektion: "Virtuelle Methoden"

Info B VL 11: Innere Klassen/Collections

ALP II Dynamische Datenmengen

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Algorithmen und Datenstrukturen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

7. Verkettete Strukturen: Listen

DA Abschlussvortrag. Grundlagen einer industrietauglichen AOP Lösung für C. Andreas Timm

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Maschinencode Dateiformat und Stackframes

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Die 5 Leben des AspectJ

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Vorkurs Informatik WiSe 15/16

Hauptseminar AOSD. Aspektorientierte Programmierung am Beispiel AspectJ

7 Laufzeit-Speicherverwaltung

CS1005 Objektorientierte Programmierung

Repetitorium Informatik (Java)

Hinweise C-Programmierung

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Die abstrakte Klasse Expression:

CS1005 Objektorientierte Programmierung

Einstieg in die Informatik mit Java

MODULARITÄT. Levi Bautz. 1/19 Levi Bautz

1 Abstrakte Datentypen

Java I Vorlesung 6 Referenz-Datentypen

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Grundlagen der OO- Programmierung in C#

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Einführung in die Programmiersprache Java II

Objektorientierte Programmierung mit C++ SS 2007

Crashkurs C++ Wiederholung

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

6 Speicherorganisation

Programmiermethodik 3. Klausur Lösung

Vorlesung Programmieren

II.4.5 Generische Datentypen - 1 -

Aufbau eines Kernelmoduls

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Informatik II Übung 6

Algorithmen und Programmierung II

Programmieren in Java

1. Die rekursive Datenstruktur Liste

AOP Day 07. eine Veranstaltung der SIG AspectJ. organisiert vom AOP-Komitee. und der guten Fee. powered by. Oliver Böhm Darko Palic Ludger Solbach

ADT: Verkettete Listen

Hello World! Eine Einführung in das Programmieren Das erste Programm

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

Software Entwicklung 1

Repetitorium Programmieren I + II

Tag 8 Repetitorium Informatik (Java)

II.1.1. Erste Schritte - 1 -

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Javakurs für Fortgeschrittene

SW-Archäologie mit AOP (Praxisbericht)

Vorlesung Programmieren

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

Polymorphismus 44. Function.hpp. #include <string>

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Exploit-Entwicklung mit Python

Wie teuer ist dynamischer Polymorphismus? 194

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Aspekt Orientierte Programmierung

Algorithmen und Datenstrukturen

Transkript:

Rekonfiguration durch dynamische aspektorientierte Programmierung Martin Gumbrecht 13. Juni 2014

Motivation Dynamische Rekonfiguration von Softwaresystemen Fehlerbehebung, Sicherheitsaktualisierungen, Weiterenwicklung Ohne Neustart des Systems Dynamische aspektorientierte Programmierung Mechanismen zum Einbinden von Code zur Laufzeit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 2 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 3 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 4 31

Aspektorientierte Programmierung Modularisierung querschneidender Belange z. B. Logging, Fehlerbehandlung, Datenvalidierung Kontextunabhängige Implementierung Automatisiertes Einfügen in den Code An definierte Orte: z. B. alle/bestimmte Funktionsaufrufe Verschiedene Typen: z. B. before, after, around Realisiert durch Precompiler Querschneidende Belange Komponente Aspekt Ohne AOP Mit AOP Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 5 31

Begriffserklärung Advice Modularisierter Aspekt-Code logger.info("method called") Pointcut Menge von Punkten, an denen ein Advice eingefügt werden soll pointcut std_func_calls() = call("% std::% (...)"); Join-Point Diskreter Punkt, an dem ein Advice aufgerufen wird Weaver Werkzeug zum Einbinden der Aspekte in den Code Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 6 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 7 31

Dynamische aspektorientierte Programmierung Dynamische AOP: Aspekte zur Laufzeit einbinden Nachladen von Aspekt-Code Pointcuts und Advices definieren Dynamischer Weaver Einbinden der Aspekte zur Laufzeit Zur Rekonfiguration von Softwaresystemen: Hinzufügen von Funktionalität durch dynamische Aspekte Austausch von Funktionen durch Around-Advices Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 8 31

Binärcodemanipulation Auffinden der Join-Points im Binärcode z. B. durch Symboltabellen Ersetzen von call-instuktionen Aufrufen von nachgeladenem Code Synchronisation erforderlich 1 caller: 2... 3 call aspect 4... 1 aspect: 2 //before 3 call func 4 //after 5 ret Problem: Compiler-Optimierungen wie Code-Inlining und Symbol-Stripping Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 9 31

Binärcodemanipulation + Effizient Plattform- und Compilerspezifisch Nicht für alle Programmiersprachen/Compiler realisierbar Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 10 31

Interpreterbasiert Angepasste Laufzeitumgebung Identifiziert Join-Points zur Laufzeit Führt bei Bedarf Aspekt-Code aus Bei Bytecodeinterpretern i.d.r. Ausführung im Debugging-Modus + Sehr mächtig Angepasste Ausführungsumgebung erforderlich Hoher Ressourcenverbrauch Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 11 31

Quellcode-Instrumentierung Einfügen von Join-Points zur Compile-Zeit Durch Precompiler Durch generierte Proxy-Objekte Aufrufen eines Aspektmanagers am Join-Point Auf nachgeladene Aspekte prüfen Ausführen der Aspekte Dynamische Aspekte beim Aspektmanager registrieren Quellcode call Aspektmanager register Dynamischer Aspekt Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 12 31

Quellcode-Instrumentierung + Plattformunabhängig Keine Definition von Join-Points zur Laufzeit Overhead auch bei ungenutzten Join-Points Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 13 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 14 31

Rekonfiguration von Betriebssystemen Framework zur dynamischen Rekonfiguration von Betriebssystemen Nutzt Binärcodemanipulation Mehrere Aspekte pro Join-Point Aspekt-Code als Kernel-Modul nachladen Beispielhafte Implementierung für Linux Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 15 31

Aspekt-Code als Kernel-Modul Precompiler übersetzt Aspekte zu Kernel-Modulen (C-Code) Adresse der Funktionen in Symboltabelle nachschlagen Registrieren und Einbinden des Aspekts beim Laden Übersetzter Aspekt-Code (vereinfacht) 1 # define ADDRESS 0 xdeadbeef 2 # define TYPE before 3 void advice ( void ){ 4 printk (" this is a before - advice \n"); 5 } 6 int init_module (){ 7 register ( advice, TYPE, ADDRESS ); 8 weave ( ADDRESS ); 9 } 10 void cleanup_module (){ 11 unweave ( ADDRESS ); 12 unregister ( advice, TYPE, ADDRESS ); 13 } Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 16 31

Aspektmanager Dynamischer Weaver Erste Anweisung einer Funktion wird mit Aufruf des Aspektmanager ersetzt Aspektmanager Alle Pointcuts mit zugehörigen Advices als Multiliste Aspektmanager ruft zum Join-Point gehörende Advices auf : caller : base program : aspect manager : before : after call call findpointcut execbefore call return execfirstinstr execafter return Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 17 31

Analyse Analyse des Zeitbedarfs fehlt Liste im Aspektmanager: vermutlich O(n) Keine Implementierung der Synchronisation bei der Codemanipulation vorgestellt Keine Mechanismen zur Änderung von Datenstrukturen Durchaus geeignet für kleinere Anpassungen und Bugfixes Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 18 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 19 31

Rekonfiguration von eingebetteten Systemen Framework für ressourcensparende dynamische Rekonfigurierung Produktfamilie mit konfigurierbarem Funktionsumfang Gleichartige Implementierung von statischen und dynamischen Aspekten (AspectC++) Entscheidung ob ein Aspekt statisch oder dynamisch eingebunden wird beim Deployment treffen Plattformunabhängigkeit durch Quellcode-Instrumentierung Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 20 31

Instrumentationsaspekt Statischer Aspekt ruft den Runtime-Manager auf Dieser führt dynamische Aspekte aus Pro Join-Point ein eigener Runtime-Manager Ermöglicht konstanten Overhead Realisiert durch Templates Mächtige Expression-Sprache zur Definition von Pointcuts Reduziert den Overhead durch überflüssige Join-Points 1 aspect instrument { 2 pointcut virtual dynamicjps = call ("% std ::%(...) "); 3 public : 4 dynamicjps (): before (){ 5 ArgsJnPnt < JoinPoint :: ARGS > jp; 6 jp. joinpointname = JoinPoint :: signature (); 7 monitor < JoinPoint :: JPID >:: BeforeAdvice (& jp ); 8 } 9 }; Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 21 31

Dynamic AspectC++ Dynamische Aspekte werden zu Shared-Library übersetzt Zur Laufzeit beim Runtime-Manager registrieren Bei Ausführung nachladen Executable joinpoint RuntimeMonitor joinpoint RuntimeMonitor joinpoint RuntimeMonitor AdviceRegister AdviceRegister AdviceRegister list of before advices list of around advices list of after advices Dynamic Aspect Libraries compiler Instrumented Code (C++) Dynamic Aspects (C++) static weaver (AspectC++) compiler (dac++) Weaver- Binding Static Aspects Base Program Dynamic Aspects (AspectC++) Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 22 31

Analyse Effiziente Implementierung Konstanter Laufzeitoverhead 12 Byte zusätzlicher Speicher pro Join-Point Bei vielen Join-Points immer noch problematisch Ziel: Nachladen von Funktionalität z. B. Tracing-Aspekt zur Fehleridentifizierung Austausch von Funktionen prinzipiell auch möglich Gut in bestehende Systeme integrierbar Keine Voraussetzungen an das Design bestehender Anwendungen Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 23 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 24 31

Rekonfiguration von mehrfädige Anwendungssystemen Framework zum Hinzufügen, Entfernen und Ändern von Komponenten Komponente: Klasse mit öffentlicher Schnittstelle Öffentliche Schnittstelle darf sich nicht ändern Meachanismus für den Zustandstransfer Unterstützung für mehrfädige Programme Implementierung für.net (LOOM.NET) Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 25 31

Rekonfigurationsaspekt Rekonfiguration durch Proxies Erzeugt mit dem Factory-Pattern Ergänzt Komponenten um Rekonfigurationsaspekt 1 public class ReconfAspect : Aspect, IConfigure { 2 private object target ; 3 private RWLock rwlock = new RWLock (); 5 [ Call ( Invoke. Instead )] 6 [ IncludeAll ] 7 public object Proxy ( object [] args ){ 8 rwlock. AcquireReaderLock ( -1); 9 if ( target == null ){ 10 return Context. invoke ( args ); 11 } else { 12 Context. InvokeOn ( target, args ); 13 } 14 rwlock. ReleaseLock (); 15 } 16... 17 } Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 26 31

Synchronisation der Rekonfigurierung Finden eines Rekonfigurationszeitpunktes durch Reader-Writer-Locks Methodenaufrufe sind Leser Rekonfiguration ist Schreiber Rekursive Locks verhindern Deadlocks 1 public class RekonfAspect : Aspect, IConfigure { 2... 3 public void ReplaceReference ( object target ){ 4 rwlock. AcquireWriterLock (); 5 this. target = target ; 6 rwlock. ReleaseWriterLock (); 7 } 8 } Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 27 31

Zustandstransfer Zustandstransfer zwischen alter und neuer Komponente Implementierung einer Export/Import-Funktion Objektgraph traversierender Algorithmus Rekursives Kopieren der Member-Variablen Ersetzen durch neue Versionen der Objekte Erkennen von Zyklen Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 28 31

Analyse Konstanter Zeitverbrauch ohne Rekonfiguration Dauer der Rekonfiguration von laufenden Anfragen abhängig Grobgranularer Austausch von Komponenten Striktes Komponentenmodell erforderlich Keine Referenzen auf interne Datenstrukturen nach außen geben Eigentlich keine dynamische AOP erforderlich Rekonfigurationsaspekt ist zur Compilezeit definiert Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 29 31

Agenda Aspektorientierte Programmierung Dynamische aspektorientierte Programmierung Binärcodemanipulation Interpreterbasiert Quellcode-Instrumentierung Implementierungen Betriebssysteme Eingebettete Systeme Mehrfädige Anwendungssysteme Fazit Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 30 31

Fazit Umfassende Möglichkeiten zur Rekonfiguration durch AOP Zum Teil reicht statische AOP bereits aus Jedes Konzept hat Vor- und Nachteile Betriebssysteme: Auch für komplexe Systeme im Nachhinein realisierbar AspectC++: ressourcenschonend LOOM.NET: Austausch von Komponenten Sowohl ressourcenschonende als auch mächtige Ansätze Noch keine einheitliche Lösung für alle Anwendungsfälle Gumbrecht AKSS / SS 2014 / Rekonfiguration durch dynamische AOP 31 31