Nun die Prozessblockade im kritischen Abschnitt, wie jetzt hier schon angedeutet bei der Implementierung
Skizze für P&V und damit die Ablaufunterbrechung für einen Prozess, der praktisch eine P-Operation
zur Ausführung bringt, ist das eigentliche knifflige bei der Implementierung von Simafo.
Wir wollen uns das mal ein bisschen genauer auch anschauen. Hier muss Folgendes gelten,
wie folgt Verhalten dieser Prozess. Er muss eben den kritischen Abschnitt freigeben,
muss ihn eigentlich verlassen, er muss aber andererseits eben auch sich selbst blockieren,
er muss sozusagen auf die Aufhebung der Wartebedingungen durch einen anderen Prozess, also den,
der dann das V ausführen würde, warten und wenn er dann deblockiert wird, muss er sich
um den Wiedereintritt in den kritischen Abschnitt bewerben. Er ist ja draußen und damit ist
er erstmal genauso draußen wie alle anderen Prozesse, die sich noch nicht in diesem kritischen
Abschnitt befinden und wenn die Prozesse daherkommen und in den kritischen Abschnitt halt rein
wollen, egal ob sie erstmalig rein wollen oder wieder einen Wiedereintritt durchführen
wollen, dann müssen sie sich formal darum bewerben. Diejenigen, die halt einen Wiedereintritt
durchführen wollen, die könnten bevorzugt betrachtet werden. Das ist aber ein anderer
Aspekt. Entscheidend ist, dass die sich erstmal genauso bewerben müssen, in den kritischen
Abschnitt dann wieder einzutreten, wie alle anderen Prozesse auch, die vielleicht in diesem
Abschnitt noch gar nicht drin gewesen sind. Auf den ersten Blick ist damit eigentlich
so eine Ablaufunterbrechung und dann im Spruch die Fortsetzung eines solchen Prozesses eigentlich
ganz einfach. Wenn wir uns mal diesen Code jetzt hier anschauen, entscheidend ist sozusagen,
wie die Implementierung der await-Operation aussieht für die Blockade und dann auch für
die weitere Fortsetzung. Wir sehen also hier, dass wir eigentlich im await den kritischen
Abschnitt freigeben, der also kontrolliert wird durch diesen Riegel, den wir mit unserem
Zimmer vor den verbinden. Dann liegt sich der Prozess schlafen. Der geht jetzt an den
Scheduler ran. Der Scheduler wird den nächsten Prozess auswählen und zur Ausführung bringen.
Und wenn er sozusagen aufgeweckt wird, das wird mit der course-Operation ja dann bewerkstelligt,
die ja innerhalb der V-Operation zur Ausführung kommt, dann wählt die course-Operation irgendeinen
wartenden Prozess mit Elect hier zum Beispiel Zeile 8 aus und setzt denn den, wenn es da
jemanden gibt, wieder bereit. Also Scheduled den, dem blockiert den praktisch diesen Prozess.
Ready setzt dann diesen Prozess namens Next hier in dem Beispiel eben wieder auf die Bereitliste,
von der ja der Scheduler den nach und nach die Prozesse runterholen wird mit der Folge,
dass dann irgendein Prozess, der hier mal ins Sleep blockiert wurde vom Scheduler aktiviert
worden ist und der Prozess, denn der betreffende Prozess aus dem Sleep-Aufruf herauskommt ja
und sich dann mit Enter um den Wiedereintritt in den kritischen Abschnitt letztlich bewirbt.
Ja also hier die Freigabeoperation. Hier verlässt der Prozess den kritischen Abschnitt, dann
legt er sich schlafen, hier wird er faktisch blockieren und wenn er weiter läuft nachdem
er deblockiert worden ist durch so ein Elect und so ein Ready konkret als Folge der Course-Operation
würde sich denn mit Enter wieder in den kritischen Abschnitt halt hinein bewegen wollen. Ja nun
wenn man sich das ein bisschen genauer anschaut, dann haben wir hier eine wettlaufkritische
Auktionsfolge. Wir haben hier wiederum ein Problem, dass wir ein Aufsichtsignal verloren
gehen kann, nämlich ein Lost Wake-Up und der Knackpunkt ist die Implementierung von dem
Await, so wie wir das hier sehen. Schauen wir uns mal ein bisschen genauer an. Also nochmal
die Ausgangssituation, da das das Await mit dem Leave, Sleep und Enter Schritten, die wir
hier halt haben. Wir nehmen mal an, dass die Operation P, also die Wartebedingungen für
den Prozess festgestellt hat und dass eben V dazu führen wird, dass eben genau diese
Wartbedingungen, diese Wartbedingungen dann eben aufgehoben wird und letztendlich ein
Signal dafür dann versendet werden sollen. Nun sollen jetzt PP und PV wieder zwei gleichzeitig
Prozesse sein, die P und V ausführen und dann nehmen wir mal an hier diese Zeilen 2 bis
3, dass wir zunächst einen Prozess PP haben, der den kritischen Abschnitt frei gibt mit
Leave. Ja, so er ist auf dem Wege hin zum Schlafen gehen. Er will sich schlafen legen. Er befindet
sich zwischen den Zeilen 2 und 3. Dann wird von einem dem anderen Prozess PV halt die
Presenters
Zugänglich über
Offener Zugang
Dauer
00:10:20 Min
Aufnahmedatum
2020-11-27
Hochgeladen am
2020-11-27 13:58:02
Sprache
de-DE