Diplomarbeit, 2008
119 Seiten, Note: 1,15
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
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.
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.
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.
nesC, TinyOS, Sensornetze, Motes, Aspektorientierte Programmierung, AOP, Pointcuts, Advices, Compilererweiterung, Weaving, Logging, Debugging, AST, Konfigurationsänderung, Embedded Systems
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.
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.
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.
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.
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.
Die Arbeit ist durch Begriffe wie nesC, TinyOS, Sensornetze, AOP, Compilererweiterung, Weaving, Logging, Motes und AST charakterisiert.
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.
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.
Der GRIN Verlag hat sich seit 1998 auf die Veröffentlichung akademischer eBooks und Bücher spezialisiert. Der GRIN Verlag steht damit als erstes Unternehmen für User Generated Quality Content. Die Verlagsseiten GRIN.com, Hausarbeiten.de und Diplomarbeiten24 bieten für Hochschullehrer, Absolventen und Studenten die ideale Plattform, wissenschaftliche Texte wie Hausarbeiten, Referate, Bachelorarbeiten, Masterarbeiten, Diplomarbeiten, Dissertationen und wissenschaftliche Aufsätze einem breiten Publikum zu präsentieren.
Kostenfreie Veröffentlichung: Hausarbeit, Bachelorarbeit, Diplomarbeit, Dissertation, Masterarbeit, Interpretation oder Referat jetzt veröffentlichen!

