37 - 10.3.1 Semaphor: Ablaufunterbrechung [ID:25075]
50 von 100 angezeigt

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

Teil eines Kapitels:
10.3 Semaphor

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen