Ja also die Semaphore. Wir wollten zunächst erstmal die Semaphore definieren, so wie er klassisch
definiert wird. Dann schauen wir uns Anwendungsbeispiele dafür ganz kurz an, gehen dann ein bisschen
detaillierter auf die Implementierung ein und untersuchen auch so die Frage nach der Ablaufunterbrechung.
Also was geschieht denn halt, wenn bei der Ausführung gewisser Sima vor Primitiven den einfachen Prozess unterbrechen muss
und dann später fortgesetzt werden muss. Aber da kommen wir dann später noch drauf an. Erstmal die Definition.
Nun, ein Sima vor wird als eine spezielle ganz zahlige Variable
verstanden, auf der denn halt zwei Operationen definiert sind. Da haben wir einerseits die sogenannte P-Operation. P kommt aus dem holländischen
P-Operation steht für Prolag. Es gibt
Alternativen Bezeichnung dafür wie down, wait und acquire.
Nun, die Semantik dieser P-Operation ist nun die, dass der Wert des Sima fors
um eins erniedrigt wird.
Das aber in Abhängigkeit von der Art des Sima fors dann wirklich geschieht.
Es gibt die klassische Implementierung, die sieht dann eben vor, dass diese Verringerung des Wertes um eins nur dann geschieht, wenn der
resultierende Wert nicht negativ wäre und eine andere Form der Implementierung erlaubt einfach durchgehend immer eine uneingeschränkte
Erniedrigung des Sima fors Wert um eins. Wir werden das später nochmal betrachten, aber rein von der Semantik her, nämlich die Tatsache, dass
neben den Zählen ein Prozess in der P-Operation eben auch blockieren kann, ist für alle beiden Varianten
gleich. Nämlich die Tatsache, dass
wenn der Wert vor der Aktion, bevor man also
dekrementieren wollte, Null ist, dann wird es dazu führen, dass der Prozess, der diese P-Operation ausführt, eben blockieren muss. Der Prozess kommt in
dem Fall eben auf eine Warteliste und muss warten, bis er wieder freigestellt wird. Die Freistellung
von solch einem Prozess geschieht durch die V-Operation, ist die inverse Operation.
Auch hier die Abkürzung 4 verhohgt
als holländischen Begriff. Ab-Signal Release sind so die typischen gängigen englischsprachigen
Begrifflichkeiten auch für die V-Operation. V als inverse Operation
erhöht den Wert des Sima fors um eins, wenn diese Sima fors, wenn diese Operation feststellt, dass wenigstens ein Prozess
praktisch im P
auf diesen Sima fors blockiert ist, also wartet, auf einer Warteliste steht, denn wird
praktisch der Prozess freigestellt,
bereitgestellt, er wird dem Scheduler dann halt wieder zur Verfügung
gestellt und kann dann irgendwann mal seine Ausführung
fortsetzen. Welcher Prozess allerdings von der Warteliste genommen wird, ist durch die V-Operation
nicht spezifiziert. Es ist auch nicht
spezifiziert, wie denn so eine Warteliste technisch gesehen implementiert.
Ist das, ob es eine dynamische Datenstruktur ist oder ob man tatsächlich Tabellen sozusagen
absucht.
Nun beide Primitiven hier
gelten als unteilbare Operation. Die sind zumindest logisch unteilbar und je nach
Implementierung kann man die so physisch unteilbar
gestalten. Entscheidend ist, dass beide
Operationen eben als unteilbare Operationen gelten
und damit eben immer nur so ablaufen können, dass sie vor der Ausführung oder Nutzung
gleichzeitig Prozesse selbst geschützt sind.
Ursprünglich gab es nur den binären Sima fors. So hat es der Dijkstra eben auch mal ursprünglich definiert und das bedeutet,
dass denn der Wert des Sima fors eben nur 0 oder 1
sein konnte. Man hat es denn allgemein
gefasst, den Sima fors als einen wirklichen zählenden Sima fors oder sogenannten allgemeinen Sima fors
ausgelegt, wo man dem auch größere Werte zuordnen kann.
Und ist dann demzufolge natürlich etwas länger dauern wird, bis
denn sozusagen die Blockade eines solchen Prozesses dann erreicht ist. Wir werden diese beiden Sima fors Arten
dann eben auch gleich in dem Anwendungsbeispiel
Presenters
Zugänglich über
Offener Zugang
Dauer
00:16:49 Min
Aufnahmedatum
2020-11-27
Hochgeladen am
2020-11-27 15:28:02
Sprache
de-DE