80 likes | 358 Views
Semaphore. void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } }. Was sind Semaphore?. Semaphore sind geschützte Variablen . binäre Semaphore/zählende Semaphore
E N D
Semaphore void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } }
Was sind Semaphore? • Semaphore sind geschützte Variablen. • binäre Semaphore/zählende Semaphore • Semaphore können nur über die Funktionen P(s) und V(s) verändert werden. • P(s) und V(s) sind nicht unterbrechbar(uninterruptible). • Verwendung von Semaphoren • gegenseitiger Ausschluss von Prozessen • Synchronisation von Prozessen
Wie arbeiten Semaphore? • void Passieren (semaphore &s) { • if (s > 0) { • s--; • } else { WaitOn (s);} • } • void Verlassen (semaphore &s) { • if (ProcessAreWaitingOn (s)) { • Signal (s); } else { s++;} • }
semaphore aktiv= 1; void prozess_1() {for (;;) { P(aktiv); kritischer Bereich_1(); V(aktiv); macheWasAnderes(); }} void prozess_2() {for (;;) { P(aktiv); kritischer Bereich_2(); V(aktiv); macheWasAnderes(); } } gegenseitiger Ausschluss • zwei Prozesse sollen nicht gleichzeitig im kritischen Bereich sein.
semaphore ereignis=0; void prozess_1() { vorher_1(); P(ereignis); nachher_1();} void prozess_2() { vorher_2(); V(ereignis); nachher_2();} Prozess-Synchronisation • notwendig z.B. wenn ein Prozess von anderem Prozess abhängig ist
semaphore geleert=1; semaphore gefuellt = 0; int puffer; void erzeuger () {int ergebnis;for (;;) { berechne (ergebnis) P(geleert); puffer = ergebnis; V(gefuellt); } } void verbraucher () {int wert;for (;;) { P(gefuellt) V(geleert); wert = puffer; verarbeite (wert); } } Erzeuger-Verbraucher Problem
Monitore • Ein Monitor enthält Daten und Methoden/Prozeduren. • Nur eine Zugangsmethode kann zur gleichen Zeit aktiv sein. • Der Monitor ist besetzt, sobald eine Zugangsmethode ausgeführt wird, Prozesse müssen warten. • Pascal, Modula, Java unterstützen Monitor-Konzept.
Literatur • www.pst.informatik.uni-muenchen.de/personen/ kroeger/Info-NF-2-Skript.pdf • Stefan Middendorf, Reiner Singer: Java, dpunkt.verlag, 1999 • Holger Jakobs: Betriebssysteme - Theorie, Skript b.i.b.