Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else.

Ähnliche Präsentationen


Präsentation zum Thema: "Void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else."—  Präsentation transkript:

1 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } von Natalia Wehler, BIT WS 2003/2004 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } Semaphore

2 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

3 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s);} } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++;} } Wie arbeiten Semaphore?

4 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } gegenseitiger Ausschluss 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();} zwei Prozesse sollen nicht gleichzeitig im kritischen Bereich sein.

5 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } Prozess-Synchronisation semaphore ereignis=0; void prozess_1() { vorher_1(); P(ereignis); nachher_1(); } void prozess_2() { vorher_2(); V(ereignis); nachher_2(); } notwendig z.B. wenn ein Prozess von anderem Prozess abhängig ist

6 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } Erzeuger-Verbraucher Problem 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); } }

7 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } 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.

8 void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else { s++; } Literatur 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.


Herunterladen ppt "Void Passieren (semaphore &s) { if (s > 0) { s--; } else { WaitOn (s); } void Verlassen (semaphore &s) { if (ProcessAreWaitingOn (s)) { Signal (s); } else."

Ähnliche Präsentationen


Google-Anzeigen