next up previous contents
Next: Primärszenario: Up: Implementierung des Switch-Kerns Previous: Implementierung des Switch-Kerns

Die Implementierung von O_BCSM und T_BCSM

Das BCSM ist mittels einer Logik ähnlich der für Zustandsautomaten realisiert. Dabei faßt die abstrakte Klasse StateMachine die vom originierenden/terminierenden Charakter unabhängige Funktionalität zusammen. Die davon abgeleiteten Klassen implementieren die jeweils spezifischen Aspekte von O_BCSM bzw. T_BCSM (vgl. Abbildung [*]).




 
Abbildung:  Vererbung zur Erstellung der spezialisierten Klassen O_StateMachine und T_StateMachine.



Jedem Endgerät entsprechen jeweils eine Instanz von O_StateMachine beziehungsweise T_StateMachine. Ein Verbindungsaufbau zwischen zwei Endgeräten wird von der O_StateMachine-Instanz des originierenden Endgerätes und der T_StateMachine des terminierenden Endgerätes durchgeführt. Die Zustände einer StateMachine entsprechen den im BCSM beschriebenen PICs.

Um die Endgeräte zeitlich unabhängig verwalten zu können, ist es erforderlich, die Instanzen von O_ bzw. T_StateMachine in verschiedenen Threads zu implementieren. Die zentrale Methode dieser Klassen ist boolean iterate(). Diese Methode entscheidet anhand der Werte von Instanzvariablen welcher PIC gegenwärtig der aktuelle ist; iterate() wird erstmals nach der Initialisierung der Objekte von der run()-Methode des Threads aufgerufen und löst die Aktionen des Switch in einem gegebenen PIC aus. Nach Rückkehr eines Aufrufs von iterate() wird anhand des Rückgabewertes entschieden, ob die Ausführung des Threads unterbrochen wird[*] oder ob iterate() sofort neu aufgerufen wird. Letzteres ist insbesondere zutreffend, wenn mehrere Transitionen in Folge durchgeführt werden sollen.[*] Wird eine Eingabe seitens des Benutzers oder eine Nachricht von einem anderen Objekt erwartet, dann bleibt der Thread in schlafendem Zustand bis ein Ereignis eintritt. Die Wahl dieser Vorgehensweise (im Gegensatz zum Methodenpaar wait() / notify(), das Java-Threads zur Verfügung steht) begründet sich darin, dass auf diese Weise eine schlafende StateMachine-Instanz von beliebigen Threads geweckt werden kann.

Eine weitere wichtige Methode der BCSM-Implementierung ist void setState(). Sie wird bei jedem Zustandsübergang aufgerufen und führt den Zustandsübergang durch (aktualisieren der betroffenen Instanzvariablen). Zusätzlich findet hier die Erkennung von aktiven statischen Triggern statt, die einen unwillkürlichen Aufruf an die SCF zur Folge haben[*]. Diese Trigger können durch den Benutzer jederzeit aktiviert oder deaktiviert werden. Gegebenenfalls wird die SCF-Anfrage ausgeführt und die Antwort ausgewertet. Die SCF-Anfrage geschieht als Methodenaufruf von dem betroffenen StateMachine-Thread aus.



 
next up previous contents
Next: Primärszenario: Up: Implementierung des Switch-Kerns Previous: Implementierung des Switch-Kerns
Copyright Munich Network Management Team