Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung

db.informatik.uni.kassel.de

Betriebssysteme - Übungsblatt 5 Aufgabe 16 Lösung

Prof. Dr. Lutz Wegner Wintersemester 2003/04

Kai Schweinsberg

Skript Seite 73:

Betriebssysteme

Lösungsvorschlag Übungsblatt 5 Aufgabe 16

Simulation eines Monitors bei unbeschränkter signal-Operation

Bei allen Prozedureingängen:

P(s)

Zur Simulation einer Operation wait(c):

condcount := condcount + 1;

if urgent > 0 {falls signalisierende Prozesse}

then V(usem) {warten, laß einen frei}

else V(s); {sonst laß neuen Prozeß rein}

P(condsem);

condcount := condcount - 1;

Zur Simulation einer Operation signal(c):

urgent := urgent + 1;

if condcount > 0 {wenn jemand wartet}

then begin

V(condsem); {lass ihn rein}

P(usem) {und blockiere dich selbst}

end;

urgent := urgent - 1;

Beim Prozedurausgang:

if urgent > 0 then V(usem) else V(s)

Man sieht hier die Verwendung der „urgent-

Warteschlange“ für signalisierende Prozesse. Die

Kontrolle geht gemäß Definition des Monitors an

den aufgeweckten Prozeß über. Ist signal letzte

Operation der Prozedur im signalisierenden Prozeß,

ist dies unkritisch, da der Prozeß gleichzeitig den

Monitor verläßt. Wenn nicht, hat er höchste Priorität

bezüglich des Fertigarbeitens, nachdem der

geweckte Prozeß (und alle von ihm geweckten

Prozesse!!) ihrerseits fertig wurden.


Prozess 1

KAUFHAUS.KAUFE(5,1)

Prozess 2

KAUFHAUS.KAUFE(3,2)

Prozess 3

KAUFHAUS.LIEFERE(10,3)

Prozess 4

KAUFHAUS.KAUFE(6,4)

ORANGEN condcount urgent

0 0 0

Prozedureingang

P(s)

wait(ok-to-buy)

INC(condcount)

V(s)

P(condsem)

0

0

0

0

0

1

1

1

0

0

0

0

Prozedureingang

P(s)

wait(ok-to-buy)

INC(condcount)

V(s)

P(condsem)

0

0

0

0

1

2

2

2

0

0

0

0

Prozedureingang

P(s)

INC(ORANGEN,10)

signal(ok-to-buy)

INC(urgent)

V(condsem)

0

10

10

10

2

2

2

2

0

0

1

1

DEC(condcount)

m:=MIN(ORANGEN,5)

DEC(ORANGEN,m)

signal(ok-to-buy)

INC(urgent)

V(condsem)

10

10

5

5

5

1

1

1

1

1

1

1

1

2

2


Prozess 1

KAUFHAUS.KAUFE(5,1)

P(usem)

DEC(urgent)

write(‘Käufer P1 geht’)

Prozedurausgang

V(usem)

Prozess 2

KAUFHAUS.KAUFE(3,2)

DEC(condcount)

m:=MIN(ORANGEN,3)

DEC(ORANGEN,m)

signal(ok-to-buy)

INC(urgent)

DEC(urgent)

write(‘Käufer P2 geht’)

Prozedurausgang

V(usem)

Prozess 3

KAUFHAUS.LIEFERE(10,3)

P(usem)

DEC(urgent)

write(‘Lieferant P3 geht’)

Prozedurausgang

V(s)

Prozess 4

KAUFHAUS.KAUFE(6,4)

Prozedureingang

P(s)

m:=MIN(ORANGEN,6)

DEC(ORANGEN,m)

signal(ok-to-buy)

INC(urgent)

DEC(urgent)

write(‘Käufer P4 geht’)

Prozedurausgang

V(s)

ORANGEN condcount urgent

5

5

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

2

2

2

3

2

2

2

2

1

1

1

1

0

0

0

0

0

0

1

0

0

0

Weitere Magazine dieses Users
Ähnliche Magazine