Monitor (Informatik)

Ein Monitor ist ein Konzept in der Informatik, das Zugriffsüberschneidungen bei nebenläufigen Prozessen vermeidet. In einigen Programmiersprachen, wie z.B. in Java und Concurrent Pascal, werden Monitore durch spezielle Konstrukte unterstützt.

Monitore lassen für die Benutzung einer Ressource, etwa eines Speicherinhaltes, jeweils nur einen Prozess zu, andere müssen sich in Warteschlangen einreihen und auf ihre Ausführung warten. Weitere Möglichkeiten zur Synchronisation von Zugriffen bestehen in der Anwendung von Semaphoren oder Spin-Locks. Monitore, Locks und Semaphore schließen sich nicht gegenseitig aus.

Table of contents
1 Aufbau
2 Hoare-Typ
3 Mesa-Typ
4 signal und wait in Monitoren und Semaphoren

Aufbau

Ein Monitor besteht aus einer geschlossenen Einheit von Daten und Prozeduren (oder Methoden). Jeder Monitor besitzt ein implizites Lock und eine Warteschlange (die Monitor-Warteschlange) sowie eine beliebige Anzahl von Bedingungsvariablen. Jeder Bedingungsvariable ist eine weitere Warteschlange (die Variablen-Warteschlange) zugeordnet.

Aufbau eines Monitors

Ein Prozess betritt den Monitor, indem er eine dem Monitor zugeordnete Prozedur aufruft. Das Lock des Monitors wird dann gesetzt. Weitere Prozesse, die den Monitor betreten wollen, werden in die Monitor-Warteschlange eingetragen. Wenn ein Prozess den Monitor wieder verlässt, wird ein Prozess aus der Warteschlange entnommen und fortgesetzt. Das Lock wird freigegeben, wenn keine Prozesse mehr fortgesetzt werden können.

Ein Prozess kann den Montior auch verlassen, indem er auf eine Bedingungsvariable wartet (wait). Er wird angehalten und in die Variablen-Warteschlange eingereiht. Ein Prozess wird daraufhin aus der Monitor-Warteschlange entnommen und fortgesetzt, oder das Lock wird freigegeben.

Mittels signal auf eine Bedingungsvariable wird ein Prozess aus der Variablen-Warteschlange entnommen und kann fortgesetzt werden.

wait und signal dürfen nur innerhalb von Prozeduren des Monitors verwendet werden.

Hoare-Typ

Das Monitor-Konzept geht ursprünglich auf eine Definition von C. A. R Hoare im Jahre 1974 zurück. Beim signal-Aufruf wird geprüft, ob die Variablen-Warteschlange Prozesse enthält. Falls diese nicht leer ist, wird der signalisierende Prozess angehalten und ein Prozess aus der Variablen-Warteschlange entnommen und fortgesetzt.

Der signalisierende Prozess wird in die Monitor-Warteschlange eingetragen. Er wird normalerweise also fortgesetzt, nachdem der vormals wartende Prozess den Monitor verlässt.

Mesa-Typ

Neben dem Hoare-Typ gibt es noch den Mesa-Monitor-Typ, der Ende der 1970er Jahre von einer Gruppe bei Xerox entwickelt wurde. Im Gegensatz zum Hoare-Typ hält signal den signalisierenden Prozess nicht an. Dieser wird stets fortgesetzt. signal fügt statt dessen einen Prozess aus der Variablen-Warteschlange in die Monitor-Warteschlange ein.

Mesa-Typ Monitore werden auch Signal-and-Continue (etwa: signalisiere und fahre fort)-Monitore genannt.

signal und wait in Monitoren und Semaphoren

{| border="1" cellpadding="5" ! style="background:#ffdead;" | Bedingungsvariable (Monitor) ! style="background:#ffdead;" | Semaphor |----- | align="left" |Nur innerhalb eines Monitors möglich | align="left" |Kann überall auftreten |----- | align="left" valign="top" |wait hält den aufrufenden Prozess immer an | align="left" valign="top" |wait hält den aufrufenden Prozess an, falls der Zähler den Maximalwert erreicht oder überschritten hat. Sonst wird nur der Zähler erhöht. |----- | align="left" valign="top" |Bei signal wird nur ein Prozess fortgesetzt. Falls kein Prozess auf die Bedingungsvariable wartet, wird der signalisierende Prozess fortgesetzt.
Hoare-Typ:
Einer der wartenden Prozesse wird fortgesetzt, der signalisierende Prozess wird angehalten. Dieser wird fortgesetzt, wenn der wartende Prozess den Monitor verlässt.
Mesa-Typ:
Der signalisierende Prozess wird fortgesetzt. Einer der wartenden Prozesse wird fortgesetzt, wenn der signalisierende Prozess den Monitor verläßt. | align="left" valign="top" | signal verringert nur den Zähler, falls kein Prozess wartet. Ansonsten werden einer der wartenden Prozesse und der signalisierende Prozess fortgesetzt. |}




Websites: Tagoror | Guajara | Tacoronte Guia | Todo Gomera | Deranet | Radioaficionados | Cinebso | Mi Buscador

Enciclopedia On Line: GNU FDL.