MP-SS18-01

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche

Masterprojekt - sDDS in Rust


Einleitung

Dieses Projekt wurde im Rahmen von AQUAS durchgeführt.

Das sDDS stellt ein Subset des DDS dar, speziell zugeschnitten auf die Anforderung für Sensornetze. Anhand eines modellgetriebenen Prozesses wird eine Implementierung generiert. Es wird im folgenden kurz das Redesign und eine evt. Neuimplementierung motiviert.

[weiterlesen]

Grundlagen

Es folgt eine kurze und knappe Einführung in einige Grundlagen zur Orientierung.

[weiterlesen]

Analyse

Es folgt eine Analyse über die Entwicklungsumgebung für Rust und Problemstellungen für die Umsetzung der DDS-Spezifikation. Dabei werden initiale Vorraussetzungen geprüft, durch die sichergestellt werden soll, ob Rust überhaupt eine valide Implementierungssprache ist.

[weiterlesen]

Design und Konzept

Im Folgenden wird auf das Design und Konzept von sDDS-rs eingangen.

[weiterlesen]

Implementierung

Im Folgenden werden einige Diagramme in UML2 gezeigt, die die Architektur grob umreißen. Das UML2 ist eine Annäherung, da einige Sprachelemente von Rust nicht in UML2 darstellbar sind.

Rust besitzt keine Notation von Klassen im traditionellen Sinne. Es kann Verhalten für Datentypen über Funktionen und Traits implementiert werden. Polymorphie und Monomorphization (Template) ist möglich und wird angegeben, sofern vorhanden.

[weiterlesen]

Evaluation

Eine entgültige Evaluation steht noch aus. Jedoch Teilaspekte können bereits betrachtet werden.

Aktueller Stand

Es folgen einige Punkte, die bereits realisiert wurden:

  • SNPS in Rust realisiert.
  • ResourceLimits- und History-Qos umgesetzt.
  • DDS-IDL Parser realisiert.
  • Ein HistoryCache ist umgesetzt, der das Verwalten von mehren Instanzen und Samples erlaubt.
  • InstanceHandles sind global eindeutig unter Verwendung der MAC von EUI64-Adressen.
  • Schnittstellen werden für Anwendungen generiert.
  • Halbautomatische Generierung von Schnittstellen zu Betriebsystemen mit RIOT Unterstützung.

Speicher und Overhead

Über die Codegröße lässt sich derzeit noch keine vollständige Aussage machen. Als Orientierung unter Einsatz von RIOT-Modulen sind mindesten 40 KiB zu erwarten. Entitäten werden eine Mindestgröße von 250 Bytes besitzen, allein für die Verwaltung der QoS-Policies. Für Threads sind derzeit 512 Bytes angesetzt. Die totale Heapspeichernutzung ist frei konfigurierbar. Der Standardwert ist derzeit 4 KiB.

Unsafe Rust

An einigen Stellen wird unsicheres Rust verwendet. Das ist der Fall, wenn eine C-Funktion von dem OS aufgerufen wird, wenn auf Unions zugegriffen wird oder Speicher erst von einer C-Funktion initialisiert wird.

Die Annahme von Argumenten der DDS-API von C-zu-Rust ist vollständig in sicheren Rust durch die Verwendung der Nullpointer Optimierung umgesetzt.

Ausblick

Es steht eine minimale Realisierung des sDDD-rs vor, jedoch gibt es noch weitere Bereiche, die noch verbessert werden können.

[weiterlesen]