www.wikidata.de-de.nina.az
Dieser Artikel beschaftigt sich mit dem Konstrukt Monitor als Mittel der Prozesssynchronisation Fur die Bedeutung als Computerprogramm siehe Maschinencode Monitor Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Siehe Diskussion Martin Thoma 15 09 3 Mar 2013 CET Ein Monitor in der Informatik ist ein programmiersprachliches Konzept zur Synchronisation von Zugriffen zeitlich verschrankt oder parallel laufender Prozesse oder Threads auf gemeinsam genutzten Datenstrukturen oder Ressourcen Inkonsistente Zustande der Datenstrukturen werden vermieden ohne dass Programmierer Synchronisationsprimitive wie z B Semaphore explizit nutzen mussen Ein wechselseitiger Ausschluss bei Zugriffen auf die gemeinsam genutzte Datenstruktur wird erreicht indem ein Compiler bei der Ubersetzung eines Programmteils das vom Programmierer mit Elementen der Programmiersprache als Monitor gekennzeichnet wurde entsprechende Synchronisationsprimitive einfugt Das Konzept wird z B von den Programmiersprachen Ada Modula Concurrent Pascal oder Java realisiert Inhaltsverzeichnis 1 Das Monitorkonzept 2 Bedingungssynchronisation 2 1 Hoare Typ 2 2 Mesa Typ 3 Monitore in Java 4 Verwandte ThemenDas Monitorkonzept BearbeitenBei parallelem oder zeitlich verzahntem Ablauf von Prozessen oder Threads treten Situationen auf in denen Datenstrukturen oder Ressourcen die von den Prozessen gemeinsam genutzt werden in inkonsistente Zustande geraten konnen wenn nicht ein wechselseitiger Ausschluss vorgenommen wird Synchronisationsprimitive wie Semaphore werden eingesetzt die ausschliessen dass mehrere Prozesse gleichzeitig oder irgendwie zeitlich verzahnt die gemeinsam genutzten Datenstrukturen verandern Korrekte Anwendung durch Programmierer vorausgesetzt garantieren diese Primitive dass innerhalb eines Zeitraums nur ein Prozess verandernd auf die Datenstruktur zugreift Da die korrekte Anwendung aber durch Eigenschaften der Synchronisationsprimitive erschwert wird entwickelten 1974 C A R Hoare und 1975 Per Brinch Hansen ein auf hoherem Abstraktionsniveau angesiedeltes Synchronisationsmittel den Monitor Ein Monitor ist ein Modul ein abstrakter Datentyp eine Klasse in dem die von Prozessen gemeinsam genutzten Daten und ihre Zugriffsprozeduren oder Methoden zu einer Einheit zusammengefuhrt sind Zugriffsprozeduren mit kritischen Abschnitten auf den Daten werden als Monitor Operationen speziell gekennzeichnet Zugriffsprozeduren ohne kritische Abschnitte konnen vom Modul zusatzlich angeboten werden Die Monitor Operationen werden unter wechselseitigem Ausschluss ausgefuhrt ohne dass im Programmcode Synchronisationsanweisungen notiert werden mussen Ein Programmierer kann sich somit auf die Funktionalitat des Moduls konzentrieren und das Synchronisationsproblem ausser Acht lassen Bei Benutzung sorgt ein Monitor selbstandig dafur dass seine Monitor Operationen immer nur von einem Prozess ausgefuhrt werden Sollte ein Prozess A eine Monitor Operation aufrufen wahrend diese oder eine andere Monitor Operation bereits von einem Prozess B ausgefuhrt wird so wird der Prozess A blockiert Wechselseitiger Ausschluss Blockieren und Deblockieren eines Prozesses werden mittels Synchronisationsprimitive erreicht die bei Ubersetzung des Monitors eingefugt werden Ein Monitor wird oft als ein Raum angesehen in dem nur ein Akteur Prozess Platz findet Wollen weitere Akteure in den Monitorraum so mussen sie warten bis im Monitorraum Platz frei geworden ist Bedingungssynchronisation BearbeitenKooperationssituationen s z B Erzeuger Verbraucher Problem in denen ein Prozess wahrend der Ausfuhrung einer Monitor Operation feststellt dass die Datenstruktur sich in einem Zustand befindet der eine weitere Ausfuhrung nicht sinnvoll erscheinen lasst konnen mit dem Monitor der beschriebenen Form nicht behandelt werden Ohne weitere Synchronisationsmechanismen musste der Prozess die Monitor Operation beenden und den Monitor verlassen Er muss dann spater noch einmal die Operation aufrufen um zu prufen ob der Zustand diesmal der erwartete ist Dies lauft auf ein unerwunschtes mehrfaches Prufen und Warten hinaus Monitore bieten daher eine Moglichkeit der Synchronisation von Aktivitaten innerhalb des Monitors Beim Entwurf des Monitors und seiner Operationen werden Bedingungen definiert die erfullt sind oder nicht Bedingungen werden mittels Bedingungsvariablen condition variables reprasentiert Auf Bedingungsvariablen sind zwei Operationen definiert wait und signal Wenn ein Prozess wahrend der Ausfuhrung einer Monitor Operation fur eine Bedingungsvariable b die Operation wait aufruft wird der Prozess blockiert und ausserhalb des Monitors in eine Warteschlange zu dieser Bedingungsvariable eingefugt Da nun kein Prozess mehr im Monitor aktiv ist kann ein anderer Prozess den Monitor von aussen betreten und eine Monitor Operation ausfuhren Der blockierte Prozess wird deblockiert wenn ein anderer Prozess wahrend seiner Ausfuhrung einer Monitor Operation die Operation signal an der Bedingungsvariablen b aufruft Wenn zum Zeitpunkt des Aufrufs von signal kein Prozess an der Bedingungsvariablen b wartet ist der Aufruf ohne Auswirkung Ein Monitor der uber die Fahigkeit zur Bedingungssynchronisation verfugt besteht aus einer geschlossenen Einheit von Daten und Prozeduren Er besitzt oftmals eine implizite Lock Variable und eine Warteschlange die Monitor Warteschlange sowie eine beliebige Anzahl von Bedingungsvariablen Jeder Bedingungsvariable ist eine weitere Warteschlange zugeordnet nbsp Monitor mit Prozeduren Warteschlangen und BedingungsvariablenAufbau eines Monitors mit Bedingungssynchronisation Wird mittels signal an einer Bedingungsvariablen ein Prozess aus der Warteschlange zur Bedingungsvariablen deblockiert so konnte dieser die Ausfuhrung der Monitor Operation an der Stelle an der er das wait abgesetzt hat fortsetzen wenn sich nicht noch der signalisierende Prozess im Monitor befinden wurde Zwei Formen der Behandlung dieser Situation wurden entwickelt Hoare Typ Bearbeiten Beim signal Aufruf wird gepruft ob die Warteschlange der Bedingungsvariablen Prozesse enthalt Falls diese nicht leer ist wird der signalisierende Prozess blockiert und in die Monitor Warteschlange eingetragen Ein Prozess aus der Warteschlange der Bedingungsvariablen wird deblockiert Der signalisierende Prozess wird demnach i d R fortgesetzt nachdem der deblockierte Prozess den Monitor verlassen hat Hoare Monitore werden auch Signal and Wait genannt Mesa Typ Bearbeiten 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 blockiert signal den signalisierenden Prozess nicht Dieser wird stets fortgesetzt signal reiht stattdessen einen Prozess von der Warteschlange der Bedingungsvariablen in die Monitor Warteschlange um Mesa Typ Monitore werden auch Signal and Continue Monitore etwa signalisieren und fortfahren genannt Monitore in Java BearbeitenIn Java verfugt jedes Objekt prinzipiell uber Monitorfahigkeiten Methoden einer Klasse die kritische Abschnitte auf Attributen implementieren sind mittels des Schlusselworts synchronized als Monitor Operationen zu kennzeichnen class Something private SomeType sharedData public synchronized void fct1 public synchronized void fct2 Jedes Objekt der Klasse agiert dann als Monitor fur seine Attribute Aufrufe von synchronized Methoden von mehreren Threads am selben Objekt werden unter wechselseitigem Ausschluss ausgefuhrt zu jedem Zeitpunkt greift hochstens ein Thread im Rahmen einer synchronized Methode auf die Objektattribute zu Die Sprache Java sieht keine Bedingungsvariablen vor Fur die Bedingungssynchronisation sind in der Klasse Object folgende Methoden definiert wait Blockiert den aufrufenden Thread und gibt den Monitor das Objekt dessen synchronized Methode er gerade ausfuhrt frei notify Entblockiert irgend einen an diesem Monitor blockierten Thread dieser kann weiterlaufen sobald der Monitor frei ist Dieses Verhalten ist nicht fair im Sinne von Fairness notifyAll Entblockiert alle an diesem Monitor blockierten Threads sie konnen weiterlaufen sobald der Monitor frei ist Wegen der fehlenden Bedingungsvariablen muss ein deblockierter Thread die Bedingung auf die er wartet erneut prufen sie konnte noch nicht gultig sein oder schon durch schnellere Threads wieder invalidiert worden sein Verwandte Themen BearbeitenMutex Oberbegriff fur Verfahren die wechselseitigen Ausschluss von Datenzugriffen ermoglichen Semaphor Verfahren zur Prozesssynchronisation mittels Betriebssystemdiensten Abgerufen von https de wikipedia org w index php title Monitor Informatik amp oldid 239391007