Dr. Matthias Grabert Abteilung Angewandte Informationsverarbeitung 18. Mai 2002
Christian Ehrhardt Blatt 4


Uni Logo



Systemnahe Software (SS 2002)


Abgabetermin 28.05.2002

Neuronale Netze (20 Punkte)

Ein Neuron ist eine Gehirnzelle, die wir uns für dieses Blatt vereinfacht wie folgt vorstellen: Die Zelle hat verschiedene Verbindungen (Synapsen) zu anderen Neuronen. Jede dieser Verbindungen dient entweder dazu, Signale von anderen Neuronen zu empfangen oder Signale an andere Neuronen zu verschicken. Ansonsten besteht das Neuron nur noch aus einem Zähler.
Wenn ein Neuron ein Signal erhält, so wird ein (vom Signal abhängiger) Wert auf den internen Zähler addiert. Dieser Wert darf auch negativ sein. Sobald der Zähler eine bestimmte Schwelle überschreitet (für dieses Übungsblatt der Wert 100), werden Signale an benachbarte Neuronen verschickt, und der Zähler wird zurück auf 0 gesetzt.

Simulation im Rechner

Jedes Neuron soll ein eigener Prozeß sein. Zur Kommunikation werden wieder die Signale im Bereich SIGRTMIN bis SIGRTMAX verwendet. Jedem dieser Signale wird ein Gewicht zugeordnet, das zum Zähler hinzu addiert wird, wenn das Signal eintrifft. Wenn der Wert des Zählers dabei den Wert 100 überschreitet, wird an einige andere Prozesse eines dieser Signale verschickt und der Zähler zurück auf 0 gesetzt. Damit wir von der Arbeit der Neuronen auch etwas zu sehen bekommen, soll bei einem Überlauf des Zählers eine kurze Meldung ausgegeben werden.
Welche Gewichte den einzelnen Signalen zugeordnet sind und an welche Prozesse/Neuronen beim Überlauf des Zählers Signale verschickt werden sollen steht in einer Datei, die beim Start gelesen wird. Da diese Datei möglicherweise noch nicht fertig ist, wenn der Prozeß für ein Neuron gestartet wird, darf die Datei erst dann geöffnet und gelesen werden, wenn der Prozeß einmal das Signal SIGUSR1 erhalten hat.

Die Konfiguration

Jedes Neuron bekommt zwei Kommandozeilen Argumente: Jede Zeile der Konfigurationsdatei hat eine der drei folgenden Formen (nr, nrout, pid, sig und weight sind Integerzahlen, ``MAP'', ``IN'' und ``OUT'' sollen genau so in der Eingabe vorkommen):
MAP nr pid
Eine solche Zeile besagt, daß das Neuron mit der Nummer nr durch den Prozeß mit der Prozeß-ID pid simuliert wird.
nr IN sig weight
Eine solche Zeile besagt, daß das Neuron mit der Nummer nr das Gewicht weight für das Signal sig+SIGRTMIN verwendet. Alle Neuronen, die nicht die Nummer nr haben, können diese Zeile ignorieren.
nr OUT nrout sig
Eine solche Zeile besagt, daß das Neuron mit der Nummer nr im Falle eines Zählerüberlaufs das Signal sig+SIGRTMIN an das Neuron mit der Nummer nrout verschickt. Welche Prozeß-ID diesem Neuron entspricht wird durch eine MAP-Zeile angegeben. Auch hier können alle Neuronen, die nicht die Nummer nr haben, diese Zeile ignorieren.
Da die MAP-Zeilen erst in die Datei geschrieben werden können, wenn bereits alle Prozesse für die einzelnen Neuronen gestartet wurden (vorher sind ja die PIDs nicht bekannt), wird jetzt auch klar, warum die Neuronen auf das Signal SIGUSR1 warten müssen, bevor die Datei gelesen werden kann.
Das Format der Konfigurationsdatei ist so gehalten, daß alle Neuronen die gleiche Datei verwenden können.

Erste Tests

Jetzt sollte es bereits möglich sein, von Hand ein kleines Netzwerk aus einigen Neuronen aufzubauen. Ein Beispiel dazu gibt es auf der Homepage der Vorlesung.

Kompliziertere Netzwerke

Da der Aufbau eines Netzwerks von Hand recht aufwendig ist soll noch ein Programm geschrieben werden, das uns die Arbeit abnimmt. Dieses Programm soll eine Konfigurationsdatei ohne MAP-Zeilen lesen und die benötigten Neuronen starten. Anschließend sollen die MAP-Zeilen an die Konfigurationsdatei angehängt werden. Schließlich soll das Signal SIGUSR1 an alle Neuronen verschickt werden. Der Kontrollprozeß soll dann auf das Signal SIGINT (kann durch drücken von Ctrl-C erzeugt werden) warten und dann alle Neuronen durch ein TERM-Signal beenden. Wenn alle Kinder terminiert sind, soll sich auch der Kontrollprozeß beenden.

Hinweise



Christian Ehrhardt 2002-05-18