1 / 8

Semaphore

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

maximos
Télécharger la présentation

Semaphore

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. 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++;} • }

  4. 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.

  5. 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

  6. 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

  7. 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. 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.

More Related