01.10.2013 Aufrufe

Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung

Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung

Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!

Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.

Prof. Dr. Lutz Wegner Wintersemester 2003/04<br />

Kai Schweinsberg<br />

Skript Seite 73:<br />

<strong>Betriebssysteme</strong><br />

<strong>Lösung</strong>svorschlag <strong>Übungsblatt</strong> 5 <strong>Aufgabe</strong> <strong>16</strong><br />

Simulation eines Monitors bei unbeschränkter signal-Operation<br />

Bei allen Prozedureingängen:<br />

P(s)<br />

Zur Simulation einer Operation wait(c):<br />

condcount := condcount + 1;<br />

if urgent > 0 {falls signalisierende Prozesse}<br />

then V(usem) {warten, laß einen frei}<br />

else V(s); {sonst laß neuen Prozeß rein}<br />

P(condsem);<br />

condcount := condcount - 1;<br />

Zur Simulation einer Operation signal(c):<br />

urgent := urgent + 1;<br />

if condcount > 0 {wenn jemand wartet}<br />

then begin<br />

V(condsem); {lass ihn rein}<br />

P(usem) {und blockiere dich selbst}<br />

end;<br />

urgent := urgent - 1;<br />

Beim Prozedurausgang:<br />

if urgent > 0 then V(usem) else V(s)<br />

Man sieht hier die Verwendung der „urgent-<br />

Warteschlange“ für signalisierende Prozesse. Die<br />

Kontrolle geht gemäß Definition des Monitors an<br />

den aufgeweckten Prozeß über. Ist signal letzte<br />

Operation der Prozedur im signalisierenden Prozeß,<br />

ist dies unkritisch, da der Prozeß gleichzeitig den<br />

Monitor verläßt. Wenn nicht, hat er höchste Priorität<br />

bezüglich des Fertigarbeitens, nachdem der<br />

geweckte Prozeß (und alle von ihm geweckten<br />

Prozesse!!) ihrerseits fertig wurden.


Prozess 1<br />

KAUFHAUS.KAUFE(5,1)<br />

Prozess 2<br />

KAUFHAUS.KAUFE(3,2)<br />

Prozess 3<br />

KAUFHAUS.LIEFERE(10,3)<br />

Prozess 4<br />

KAUFHAUS.KAUFE(6,4)<br />

ORANGEN condcount urgent<br />

0 0 0<br />

Prozedureingang<br />

P(s)<br />

wait(ok-to-buy)<br />

INC(condcount)<br />

V(s)<br />

P(condsem)<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

Prozedureingang<br />

P(s)<br />

wait(ok-to-buy)<br />

INC(condcount)<br />

V(s)<br />

P(condsem)<br />

0<br />

0<br />

0<br />

0<br />

1<br />

2<br />

2<br />

2<br />

0<br />

0<br />

0<br />

0<br />

Prozedureingang<br />

P(s)<br />

INC(ORANGEN,10)<br />

signal(ok-to-buy)<br />

INC(urgent)<br />

V(condsem)<br />

0<br />

10<br />

10<br />

10<br />

2<br />

2<br />

2<br />

2<br />

0<br />

0<br />

1<br />

1<br />

DEC(condcount)<br />

m:=MIN(ORANGEN,5)<br />

DEC(ORANGEN,m)<br />

signal(ok-to-buy)<br />

INC(urgent)<br />

V(condsem)<br />

10<br />

10<br />

5<br />

5<br />

5<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

2<br />

2


Prozess 1<br />

KAUFHAUS.KAUFE(5,1)<br />

P(usem)<br />

DEC(urgent)<br />

write(‘Käufer P1 geht’)<br />

Prozedurausgang<br />

V(usem)<br />

Prozess 2<br />

KAUFHAUS.KAUFE(3,2)<br />

DEC(condcount)<br />

m:=MIN(ORANGEN,3)<br />

DEC(ORANGEN,m)<br />

signal(ok-to-buy)<br />

INC(urgent)<br />

DEC(urgent)<br />

write(‘Käufer P2 geht’)<br />

Prozedurausgang<br />

V(usem)<br />

Prozess 3<br />

KAUFHAUS.LIEFERE(10,3)<br />

P(usem)<br />

DEC(urgent)<br />

write(‘Lieferant P3 geht’)<br />

Prozedurausgang<br />

V(s)<br />

Prozess 4<br />

KAUFHAUS.KAUFE(6,4)<br />

Prozedureingang<br />

P(s)<br />

m:=MIN(ORANGEN,6)<br />

DEC(ORANGEN,m)<br />

signal(ok-to-buy)<br />

INC(urgent)<br />

DEC(urgent)<br />

write(‘Käufer P4 geht’)<br />

Prozedurausgang<br />

V(s)<br />

ORANGEN condcount urgent<br />

5<br />

5<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

2<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

2<br />

2<br />

2<br />

3<br />

2<br />

2<br />

2<br />

2<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!