Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung
Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung
Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung
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