10.07.2015 Aufrufe

Koordination nebenläufiger Prozesse Koordinierung ... - CS 4

Koordination nebenläufiger Prozesse Koordinierung ... - CS 4

Koordination nebenläufiger Prozesse Koordinierung ... - CS 4

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Schlossalgorithmus (1)Prinzip mit Problem(en)typedef char bool;void acquire (bool *lock) {while (*lock);*lock = 1;}void release (bool *lock) {*lock = 0;}acquire() soll einen kritischen Abschnittschützen, ist dabei aber selbst kritisch:• Problem macht die Phase vom Verlassender Kopfschleife (while) bis zum Setzender Schlossvariablen• Verdrängung des laufenden <strong>Prozesse</strong>s kanneinem anderen Prozess ebenfalls das Schlossgeöffnet vorfinden lassen• im weiteren Verlauf könnten (mindestens) zwei <strong>Prozesse</strong> den eigentlichen,durch acquire() zu schützenden kritischen Abschnitt überlappt ausführen7.2.1 Schlossvariable — SoS i , c○ 2004 wosch [<strong>Koordination</strong>.tex,v 1.1 2004/06/04 13:58:42] 7-13Schlossalgorithmus (2)Unterbrechungssteuerungvoid acquire (bool *lock) {avertIRQ();while (*lock) {admitIRQ();avertIRQ();}*lock = 1;admitIRQ();}void avertIRQ () { asm("cli"); }void admitIRQ () { asm("sti"); }• Überprüfen und Schließen des Schlosses bildeneine ununterbrechbare Anweisungsfolge• die Schleife muss unterbrechbar sein, damitdas Schloss aufgeschlossen werden kann• asynchrone Programmunterbrechungen werden abgewendet, obwohl diese nieden durch acquire() geschützten kritischen Bereich betreten dürfen7.2.1 Schlossvariable — SoS i , c○ 2004 wosch [<strong>Koordination</strong>.tex,v 1.1 2004/06/04 13:58:42] 7-14

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!