Sensornetze sind drahtlos verbundene Netze bestehend aus Knoten, die über eine CPU, Sensoren und ein Netzinterface verfügen. Die Knoten dieser Netze haben starke Ressourenbeschränkungen. Aus diesem Grunde sind eXziente Programme notwendig, deren Programmierung schwierig ist. Um diesem zu begegnen wurde die Programmiersprache nesC zusammen mit einem in ihr geschriebenen Betriebssystem TinyOS entwickelt. Die Sprache nesC baut dabei auf C auf und unterstützt einen komponentenbasierten Aufbau von Programmen. Die Entwicklung der Programme für die Knoten erfolgt in drei Phasen: Für die Simulation, für das Testbed und für den Einsatz eines Sensornetzes in seinem Deployment. Logging ist eine Methode, um Programme während ihrer Ausführung zu prüfen. Es muss jedoch für jede der drei Phasen der Entwicklung der Knotensoftware eine unterschiedliche Loggingfunktion aufgerufen werden. Aspektorientierte Programmierung ermöglicht es nun, zu einem bestehenden Basisprogramm mithilfe von Aspekten neue Funktionalitäten hinzuzufügen. Die Diplomarbeit entwickelt eine aspektorientierte Spracherweiterung für die Sprache nesC, um in den drei Phasen unterschiedliche Funktionalitäen durch Aspekte hinzufügen zu können, um beispielsweise die unterschiedlichen Loggingfunktionen einzufügen. Die Arbeit umfasst sowohl das Design als auch die Durchführung der Implementierung der aspektorientierten Spracherweiterung innerhalb des originalen nesC-Compilers. Interessante neue Konzepte für die Änderung der KonVgurationen der Komponenten eines nesC-Programmes mithilfe der aspektorientierten Spracherweiterung werden entwickelt. Die Implementierung einer Spracherweiterung innerhalb eines Compilers wird untersucht.
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation
1.2 Aufgabenstellung dieser Arbeit
1.3 Überblick über die Arbeit
2 Grundlagen
2.1 Drahtlos verbundene Sensornetze
2.1.1 Motes als Knoten eines Sensornetzes
2.1.2 Anforderungen an Sensornetze
2.1.3 Anwendungsgebiete von Sensornetzen
2.1.4 Weitere Miniaturisierung bis hin zum Smart Dust
2.1.5 Neue Anwendungsgebiete durch Miniaturisierung
2.1.6 Die Sprache nesC und das Betriebssystem TinyOS
2.2 Tools zur Unterstützung des Programmierers
2.2.1 Tools zur Programmprüfung
2.2.2 Logging und Debugging
2.3 Aspektorientierte Programmierung
2.3.1 Überblick über die aspektorientierte Programmierung
Weben von Aspekten bestehend aus Pointcuts und Advices
Crosscutting Concerns und Obliviousness
Nachteile der aspektorientierten Programmierung
2.3.2 Motivation des aspektorientierten Loggings für Sensormotes
2.3.3 Weitere Möglichkeiten für die Anwendung von Aspekten auf Sensormotes
3 Analyse von Logging-Frameworks und aspektorientierten Spracherweiterungen und deren Implementierungen
3.1 Verwandte Arbeiten
3.2 Logging-Frameworks
3.2.1 Loggingansätze für die PC-Umgebung
3.2.2 Loggingansätze in nesC für die Sensornetzumgebung
3.3 Das Weaving unterschiedlicher Implementierungen aspektorientierter Sprachen
3.3.1 Zeitpunkte des Weavings
3.3.2 Bytecode-Weaving in der AspectJ-Implementierung
3.3.3 Loadtime Weaving und Runtime Weaving
3.3.4 LogicAJ als Beispiel einer Implementierung als Precompiler
3.3.5 Weitere Implementierungen als Precompiler
3.3.6 Einweben von Aspekten ohne Implementierung einer Spracherweiterung
3.3.7 Schlussfolgerungen für die Erweiterung von nesC
3.4 Sprachdefinition von AspectJ
3.4.1 AspectJ als Vorreiter
3.4.2 Pointcutdeklarationssprache
Aufruf-Pointcuts
Zustandsbasierte Pointcuts
Dynamische Pointcuts
Pointcuts auf Programmcode
3.4.3 Advices
3.4.4 Introductions
3.5 Composition Filters
4 Entwurf der aspektorientierten Sprache für nesC
4.1 Die Sprache nesC
4.1.1 Komponentenbasierter Aufbau von nesC
4.1.2 Als asynchron gekennzeichnete Funktionen
4.1.3 Das Taskkonzept
4.1.4 Quellcode eines nesC-Programmes
4.2 Pointcuts und Advices für nesC
4.2.1 Zusätzliche Sprachkonzepte von nesC führen zu zusätzlichen Joinpointmöglichkeiten
Einfache Funktionspointcuts
Introductions
Command- und Event-Joinpoints
Task-Joinpoints
Änderungen von Konfigurationen
4.2.2 Definition der Pointcutdeklarationssprache für nesC
Allgemein
Pointcuts für private Funktionen
Pointcuts für Events und Commands
Pointcuts für Tasks
Hilfspointcut zur Übernahme von Argumenten
Hilfspointcut zum Einschränken des Einwebens auf bestimmte Module
Konfigurationsverändernde Anweisungen
4.2.3 Definition der Advicedeklarationssprache
Before, After und Around-Advices
Zugriff auf Variablen und Joinpointinformationen
Benutzung von konfigurationsverändernden Anweisungen
5 Analyse des Aufbaus des nesC-Compilers und seines Frameworks
5.1 Das Build-Framework um den nesC-Compiler
5.2 Der nesC-Compiler
5.2.1 Aufbau
5.2.2 Lexer
5.2.3 Parser
5.2.4 Markieren der Module anhand der Konfigurationen
5.2.5 Generierung des Ausgabe-C-Codes
5.3 Die Eingabedatei des Parsergenerators yacc
6 Arbeitsweise der Compilererweiterung der aspektorientierten Spracherweiterung von nesC
6.1 Designentscheidung für eine Implementierung der Spracherweiterung innerhalb des nesC-Compilers
6.2 Die Compilererweiterung für Pointcuts und Advices
6.2.1 Der Weg eines Aspektes
6.2.2 Überblick über die Arbeit der Compilererweiterung
6.3 Die Arbeit der Compilererweiterung für Pointcuts und Advices im Detail
6.3.1 Schritt 1: Laden der Aspekte
6.3.2 Schritt 2: AST-Aufbau für Aspekte
Arbeit des Lexers
Erweiterte und neue Knotentypen für den AST
Arbeit des Parsers
6.3.3 Schritt 3: Verbinden der Pointcuts mit ihren einzuwebenden Advices
6.3.4 Schritt 4: Weben
6.3.5 Schritt 5: Generierung der Ausgabedatei
6.4 Die Compilererweiterung für konfigurationsverändernde Anweisungen
6.5 Die Arbeit der Compilererweiterung für konfigurationsverändernde Anweisungen im Detail
6.5.1 Arbeit des Lexers
6.5.2 Erweiterte und neue Knotentypen für den AST
6.5.3 Arbeit des Parsers
6.5.4 Durchführen der Änderungen der Konfigurationen
6.5.5 Übernahme des Wirings des Aspektes
7 Evaluation der Compilererweiterung
7.1 Zur Evaluation verwendeter Basiscode
7.2 Funktionalität der Aspekte
7.2.1 Logging durch die printf-Bibliothek
7.2.2 Logging durch Ausgabe von Informationen auf die Leds des Motes
7.2.3 Konfigurationsverändernde Anweisungen
7.3 Quellcode der Aspekte
7.3.1 Logging durch die printf-Bibliothek
7.3.2 Logging durch Ausgabe von Informationen auf die Leds des Motes
7.3.3 Konfigurationsverändernde Anweisungen
7.4 Ergebnisse der Evaluation
7.4.1 Einwebhäufigkeit und Anzahl der gewebten Programmzeilen
7.4.2 Laufzeitverhalten der Compilererweiterung
7.4.3 Konfigurationsverändernde Anweisungen
8 Zusammenfassung und Ausblick
8.1 Zusammenstellung der Ergebnisse der Diplomarbeit
8.2 Ausblick
Zielsetzung & Themen
Die vorliegende Diplomarbeit befasst sich mit der Entwicklung und Implementierung einer aspektorientierten Spracherweiterung für die Programmiersprache nesC, um insbesondere das Logging in Sensornetzen effizienter und flexibler zu gestalten. Dabei wird untersucht, wie Aspekte direkt innerhalb des nesC-Compilers eingewebt werden können, um Ressourcenbeschränkungen auf Sensorknoten (Motes) optimal zu berücksichtigen.
- Grundlagen der Sensornetz-Programmierung mit nesC und TinyOS.
- Analyse aspektorientierter Programmierkonzepte (Pointcuts, Advices, Weaving).
- Design einer aspektorientierten Spracherweiterung für nesC zur Modifikation von Funktionen und Konfigurationen.
- Implementierung der Spracherweiterung im nesC-Compiler mittels AST-Manipulation.
- Evaluation anhand von Logging-Szenarien und Analyse der Compile-Laufzeit.
Auszug aus dem Buch
2.1.1 Motes als Knoten eines Sensornetzes
Drahtlos verbundene Sensornetze (Wireless Sensor Networks) [30] sind Netze bestehend aus einzelnen Knoten, welche Motes genannt werden. Das Netz wird mit Hilfe von Funkverbindungen aufgebaut. Ein Mote stellt ein kleines autarkes Computersystem dar. Ein Mote besteht – wie Abbildung 2.1 veranschaulicht – aus einer CPU mit nicht-flüchtigem und flüchtigem Speicher für Programm und Daten. Diese CPU hat Zugriff auf einen oder mehrere Sensoren als Eingabegeräte und auf ein Funkinterface, über welches der Mote mit anderen Motes Nachrichten austauschen kann. Zusätzlich kommt eine Energieversorgung meist in Form einer Batterie hinzu. Von diesem Standardaufbau kann es Abweichungen geben. Beispielsweise ist es möglich, dass ein Mote als ein Gateway für Nachrichten innerhalb des Sensornetzes nach außen dienen soll und deswegen über keine Sensoren verfügt; dafür jedoch meist über ein zweites Netzinterface. Auch gibt es Spezialanwendungen, in welchen Motes über Steuerungshardware verfügen oder eine Ausgabehardware verwenden, mit der sie auf ihre Umwelt Einfluss nehmen können. So ist eine Steuerung z.B. von Ventilen durch ein Mote durchführbar oder ein Mote kann selbständig seine Position ändern [66]. Auch kann eine simple Darstellung von Daten über die Ausgabe-Leds von einem Mote durchgeführt werden [1]. Abbildung 2.2 zeigt das Foto eines Motes. Der dargestellte Mote, welcher von Ambient Systems B.V. vertrieben wird, kommt in Sensornetzen zur Verfolgung von Warenströmen im Handel zum Einsatz. Es handelt sich dabei um einen Mote von normaler Größe. Es ist auch möglich, kleinere Motes herzustellen.
Zusammenfassung der Kapitel
1 Einleitung: Dieses Kapitel führt in die Thematik der Sensornetze ein und motiviert die Notwendigkeit einer aspektorientierten Spracherweiterung für nesC zur effizienten Testbarkeit.
2 Grundlagen: Es werden die Funktionsweise von Sensornetzen, das Betriebssystem TinyOS sowie die Konzepte der aspektorientierten Programmierung (AOP) umfassend theoretisch dargelegt.
3 Analyse von Logging-Frameworks und aspektorientierten Spracherweiterungen und deren Implementierungen: Dieses Kapitel analysiert verwandte Arbeiten und Implementierungen, um fundierte Entscheidungen für das Design der eigenen Spracherweiterung zu treffen.
4 Entwurf der aspektorientierten Sprache für nesC: Hier wird das spezifische Sprachdesign entworfen, inklusive der Definition von Pointcuts und Advices, die auf die Besonderheiten von nesC zugeschnitten sind.
5 Analyse des Aufbaus des nesC-Compilers und seines Frameworks: Es erfolgt eine detaillierte technische Analyse der Compiler-Interna, wie Lexer, Parser und dem zugrundeliegenden Abstract Syntax Tree (AST).
6 Arbeitsweise der Compilererweiterung der aspektorientierten Spracherweiterung von nesC: Das Kapitel beschreibt konkret, wie die Compiler-Erweiterung Aspekte in den Code einwebt und wie konfigurationsverändernde Anweisungen umgesetzt werden.
7 Evaluation der Compilererweiterung: Die Implementierung wird anhand praktischer Logging-Beispiele evaluiert und hinsichtlich ihrer Auswirkungen auf die Kompilierzeit untersucht.
8 Zusammenfassung und Ausblick: Die Ergebnisse der Arbeit werden resümiert und zukünftige Forschungs- und Entwicklungsmöglichkeiten aufgezeigt.
Schlüsselwörter
nesC, TinyOS, Sensornetze, Motes, Aspektorientierte Programmierung, AOP, Pointcuts, Advices, Compilererweiterung, Weaving, Logging, Debugging, AST, Konfigurationsänderung, Embedded Systems
Häufig gestellte Fragen
Worum geht es in dieser Diplomarbeit grundsätzlich?
Die Arbeit beschäftigt sich mit der Implementierung einer aspektorientierten Spracherweiterung für nesC, um die Entwicklung und Prüfung (insbesondere Logging) von Software für Sensornetz-Knoten (Motes) zu vereinfachen und effizienter zu gestalten.
Welche zentralen Themenfelder werden behandelt?
Die zentralen Themenfelder sind die aspektorientierte Programmierung, die Programmiersprache nesC, das Betriebssystem TinyOS und die Optimierung der Software-Entwicklung für ressourcenbeschränkte eingebettete Systeme.
Was ist das primäre Ziel der Arbeit?
Das Ziel ist der Entwurf und die praktische Implementierung einer aspektorientierten Spracherweiterung, die es erlaubt, Funktionalitäten wie Logging modular hinzuzufügen und später restlos aus dem Binärcode zu entfernen, um Ressourcen zu schonen.
Welche wissenschaftliche Methode wurde verwendet?
Es wurde eine theoretische Analyse bestehender AOP-Ansätze durchgeführt, gefolgt von einem Design- und Implementierungsprozess innerhalb des existierenden nesC-Compilers. Die Funktionalität wurde anschließend durch eine systematische Evaluation an verschiedenen Applikationen geprüft.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil umfasst die Analyse des nesC-Compilers, das Design der Spracherweiterung, die konkrete Beschreibung des Weaving-Prozesses durch Compilererweiterungen sowie die Implementierung von Mechanismen für konfigurationsverändernde Anweisungen.
Welche Schlüsselwörter charakterisieren die Arbeit?
Die Arbeit ist durch Begriffe wie nesC, TinyOS, Sensornetze, AOP, Compilererweiterung, Weaving, Logging, Motes und AST charakterisiert.
Warum ist das Logging in Sensornetzen besonders herausfordernd?
In Sensornetzen müssen Programme extrem ressourceneffizient sein. Traditionelles Logging belastet den Speicher und die CPU dauerhaft. Die Arbeit löst dies durch aspektorientiertes Logging, bei dem der Logging-Code zur Compilezeit bei Bedarf vollständig entfernt werden kann.
Was sind "konfigurationsverändernde Anweisungen" in dieser Arbeit?
Dies ist eine Neuentwicklung der Arbeit, die es ermöglicht, per Aspekt nicht nur Code in Funktionen einzufügen, sondern auch die Komponentenarchitektur und das Wiring eines nesC-Programms dynamisch während der Kompilierung anzupassen.
- Quote paper
- Christoph Tornau (Author), 2008, Analyse, Design und Implementierung einer aspektorientierten Erweiterung der Programmiersprache nesC im Besonderen für das Logging in Sensornetzen, Munich, GRIN Verlag, https://www.grin.com/document/181505