Motivation
MSC (Message Sequence Chart) ist eine graphische und textuelle Sprache zur Beschreibung
und Spezifizierung des Zusammenspiels zwischen Systemkomponenten.
Der Hauptanwendungsbereich liegt in der übersichtlichen Erläuterung
des Kommunikationszustandes eines Real-Time Systems in
Telekommunikationssystemen. MSCs dienen allerdings oft auch der Anforderungsbeschreibung
und Dokumentation solcher Systeme. Ebenso erfolgt oft eine Kombination mit SDL.
Die Idee ist nun die einzelnen Bestandteile eines MSC in JAVA möglichst gut
nachzubilden und das MSC im Netzwerk verteilt auszuführen. Ebenso ist eine
Überprüfung der statischen Semantik nach ITU-T Z.120 erforderlich.
Was verwirklicht MSC Execute
?
MSC Execute
liest die textuelle Form eines MSC ein und erzeugt eine
objektbasierte Darstellung des MSC. Dies basiert auf der einleitenden Arbeit am Tool
Mu2L,
dessen Funktionalität vollständig in MSC Execute
integriert ist.
Anschliessend erfolgt die Übersetzung der Elemente eines MSCs in JAVA Code nach folgendem Muster:
- Prozesse
Für jeden Prozess wird ein Objekt erstellt, welches die definierten Variablen des jeweiligen Prozesses
sowie die Methoden für jedes MSC Ereignis enthält. Um die in den Daten von Nachrichten und Aktionen verwendeten
Methoden implementieren zu können, werden insgesamt drei Klassen daraus:
ImportProcessClassName
: Kann vom Benutzer erweitert werden!
ProcessClassName
: Wird vom System erstellt und darf nicht weiter bearbeitet werden.
ProcessClientName
: Kann vom Benutzer erweitert werden!
Die eigentliche Ausführung der Ereignisse erfolgt mittels ThreadName
. Dieser erstellt für
den jeweiligen Prozess einen neuen Thread und führt die Ereignisse dieses Prozesses nacheinander aus.
Ein Thread kann sowohl von einem Hauptprogramm aus gestartet werden als auch innerhalb weiterer Threads.
Dies ist notwendig, damit Referenzen ausgeführt werden können.
- Nachrichtenkanäle
Zu jedem MSC gibt es ein Remote Objekt, welches die Nachrichten zwischen den Prozessen regelt. Innerhalb
dieses Objektes gibt es für jede Nachricht eine Warteschlange zur Speicherung der wiederholten Nachrichten.
(Beachte Schleifen!) Somit ist das Senden und Empfangen einer Nachricht einfach nur ein Methodenaufruf.
- Nachrichten
Das Grundprinzip der Nachrichten auf einem Prozess ist es, eine Nachricht zu versenden und dann mit dem
nächsten Ereignis auf diesem Prozess fortzufahren. Dies wird durch einen Methodenaufruf im Remote Objekt
erreicht und wartende Prozesse werden geweckt. Beim Empfang sieht es etwas anders aus, da die erwartete
Nachricht noch nicht eingetroffen sein muss. Daher wird in der Liste, welche die empfangene Information
speichert nachgesehen, ob sie nicht leer ist. Falls keine Nachricht vorhanden ist, so wird der Prozess
schlafen gelegt. Andernfalls wird der älteste Wert zurückgegeben.
- Aktionen
Aktionen werden direkt auf dem jeweiligen Prozess ausgeführt und erfordern keine Kommunikation.
- Zustände
Es gibt vier Arten von Zuständen, wobei jeder Zustand auf einer Menge von Prozessen definiert ist.
Zum einen der setzende Zustand, welcher gesetzt wird und solange gültig ist, bis auf der gleichen
Prozessmenge ein neuer Zustand gesetzt wird.
Zum zweiten der bewachende Zustand. Dieser fragt ab, ob ein Zustand auf der gleichen Menge vorher
gesetzt wurde.
Zum dritten der bewachende Zustand, der einen Boolschen Ausdruck auswertet. Dieser ist dann erfüllt,
wenn die Auswertung auf jedem einzelnen Prozess true
ergeben hat.
Zum vierten der bewachende Zustand otherwise
, welcher nur dann erfüllt ist, wenn in
einer Alternative alle anderen Wege eines MSC nicht möglich sind.
Bewachende Zustände müssen die ready
-Bedingung erfüllen, d.h. kein Prozess, der sich nicht
in der Prozessmenge des Zustandes in diesem Teil des MSC befindet, kann fortfahren.
- Alternativen
Alternativen stellen verschiedene Wege durch einen MSC dar. Wichtig ist, dass jeder Prozess den gleichen
Weg nimmt. (Auch bei Alternativen innherhalb von Schleifen.) Einige Wege können mittels der oben genannten
Zustände ausgeschlossen werden. Aber zwei wichtige Fälle sind zu beachten. Es können mehrere Wege möglich
sein und somit wird im Remote Object per Zufallsgenerator ein Weg gewählt. Andererseits kann kein Weg
möglich sein. Dies ist zwar nicht erlaubt, kann aber durch die vorhandenen Daten auftreten. Dann erfolgt
ein Abbruch der Ausführung.
- Schleifen
Schleifen erlauben es einen Teil MSC beliebig oft zu durchlaufen. Unendliche Schleifen können mit Hilfe
von Zuständen beendet werden.
- Referenzen
Referenzen lassen ein MSC auslagern und erfordern eine hohe Aufmerksamkeit, da der aktuelle Zustand eines
Prozesses an den im referenzierten MSC zugehörigen Prozess übergeben werden muss. Dann wird der neue
Prozess als Thread gestartet und nach der Beendigung muss der geänderte Zustand an den ursprünglichen
Prozess zurück übertragen werden.
Zu beachten sind dabei auch die Nachrichten an eine Referenz bzw. von einer Referenz. Diese werden über
sog. "Gates" gesendet und empfangen und werden im Remote Objekt des referenzierten MSC gehandhabt. Hierfür
ist es erforderlich den Datentyp der Nachrichten, die verarbeitet werden, zu kennen.
Weitere Bestandteile können im Laufe der Diplomarbeit hinzugefügt
werden. Dies ist derzeit allerdings noch nicht geplant.