Beruflich Dokumente
Kultur Dokumente
I Unstrukturiertheit
„Streuung“ von P und V, Synchronisation und gegenseitiger Ausschluss
müssen explizit programmiert werden
I Fehlerträchtigkeit
wird ein P oder V vergessen, übersprungen, in falscher Reihenfolge
verwendet → Crash!
I Konzeptionelle Schwäche
Synchronisation und gegenseitiger Ausschluss sind unterschiedliche
Aufgaben
(1) Zusammenfassen/Ordnen →
alle (verstreuten) Zugriffe auf gemeinsame Datenstrukturen werden an einer
einzigen Stelle konzentriert
(2) Prozeduren/indirekter Zugriff →
Operationen auf der gemeinsamen Datenstruktur nur mittels (und innerhalb
von) Prozeduren
(3) Schutz innerhalb Prozeduren →
der Schutz kritischer Abschnitte (durch Semaphoren) wird in die Prozeduren
verlegt, der Zugriff auf kritische Abschnitte findet immer über Prozeduren
statt
(4) Verallgemeinerung/Abstraktion →
Bildung einer „Schutzmauer“ um Programme und Daten mit wenigen
wohldefinierten „Toren“
D: Daten,
P: Prozeduren
v P
@
P()
@
R
@
D
krit. Ab.
v P
V()
Monitor, Definition
Condition-Variable
MONITOR Lager {
warentyp[] buffer = new warentyp[N];
integer count, in, out;
condition nonfull; // count < N
condition nonempty; // count > 0
PROCEDURE Erzeugen(warentyp neue_ware) : void {
WHILE count == N DO wait(nonfull);
buffer[in] = neue_ware;
count = count + 1;
in = (in + 1) % N;
signal(nonempty);
} // Erzeugen
Monitore in Java
Erzeuger/Verbraucher in Java1
1
Quelle: Campione/Walrath, Java Tutorial
BESYST (Mey) I3I/I3EI/DSI3 13 / 22
Kommunikation Monitore in Java
I Klare Struktur
I gegenseitiger Ausschluss und Synchronisation sind klar voneinander
unterschieden
I Daten und Zugriffsfunktionen für kritische Abschnitte und
Synchronisation sind an einem Punkt zusammengefasst
I Abstrakter Datentyp
I nach Aussen ist nur die Schnittstelle bekannt
I die Implementierung der Synchronisation ist verkapselt
I geringere Fehleranfälligkeit (im Vergleich zu Semaphoren)
I der gegenseitige Ausschluss ist automatisch (durch Definition) gelöst
I Neues Sprachkonzept
I muss in der Sprache enthalten sein
I kaum nachträglich integrierbar
I Probleme mit WAIT und SIGNAL
I unterschiedliche Semantiken
I die bevorzugte Formulierung für WAIT wird nicht vom Compiler
erzwungen
I die Reihenfolge von WAIT und SIGNAL muss eingehalten werden
(Bedingung: WAIT muss vor dem zugehörigen SIGNAL erfolgen)
2
Grafik: Tanenbaum, Modern Operating Systems
BESYST (Mey) I3I/I3EI/DSI3 21 / 22
Kommunikation
3
Quelle: Tanenbaum, Modern Operating Systems
BESYST (Mey) I3I/I3EI/DSI3 22 / 22