Prüfung 13 April 2010, Fragen und Antworten - SS2010 PDF

Title Prüfung 13 April 2010, Fragen und Antworten - SS2010
Course Grundlagen Betriebssysteme und Systemsoftware (IN0009)
Institution Technische Universität München
Pages 27
File Size 616 KB
File Type PDF
Total Downloads 170
Total Views 909

Summary

Grundlagen Betriebssysteme und Systemsoftware SS 2010 Prof. Dr. Uwe Baumgarten 13.04 Klausur Name: Vorname: Matrikelnummer: Mitteilung an die Korrektoren: Die Bearbeitungsdauer agt 90 Minuten. Es sind keine Hilfsmittel zugelassen. Die Klausur besteht aus 5 Aufgaben auf insgesamt 20 Seiten (diese Sei...


Description

Grundlagen Betriebssysteme und Systemsoftware SS 2010 Prof. Dr. Uwe Baumgarten 13.04.2010

Klausur Name: Vorname: Matrikelnummer: Mitteilung an die Korrektoren:

• Die Bearbeitungsdauer betr¨agt 90 Minuten. • Es sind keine Hilfsmittel zugelassen. • Die Klausur besteht aus 5 Aufgaben auf insgesamt 20 Seiten (diese Seite mitgerechnet). • Es sind insgesamt maximal 100 Punkte zu erreichen. • Es werden keine Fragen beantwortet. • Geben Sie nachvollziehbare und leserliche L¨osungen an! Nicht verst¨andliche L¨osungen werden nicht bewertet (0 Punkte). Bei fehlenden Begr¨undungen (sofern danach gefragt) erfolgt ebenfalls keine Wertung. • Geben Sie Ihre L¨osung nach M¨oglichkeit auf dem Angabeblatt an (Sie haben daf¨ ur extra Platz nach den Aufgabestellungen). Sollten Sie mehr Platz ben¨otigen, so nutzen Sie bitte die karierten Extrabl¨atter. Vergessen Sie nicht, auf diesen Ihren Namen anzugeben und die gel¨ osten Aufgaben zu referenzieren! • Gehen Sie von folgender g¨ angiger Umrechnung aus: 1 Gigabyte (GB) = 1024 Megabyte (MB) = 1024 · 1024 Kilobyte (KB) = 1024 · 1024 · 1024 Byte (B) • Als Ergebnisse von Rechenaufgaben sind Br¨uche und Potenzen zul¨assig.

Korrektur (bitte freilassen) A1

A2

A3

Korr. 1 Korr. 2

1

A4

A5

1

Parallele Modellierung (22 Punkte)

1.1

Petrinetz Tiefgarage (8 Punkte)

Eine Tiefgarage hat f¨unf Stellpl¨atze. Zwei Stellpl¨atze befinden sich im Erdgeschoss (EG) und drei Stellpl¨atze im Kellergeschoss (KG) (vgl. Abbildung). Um vom Erdgeschoss in das Kellergeschoss (und umgekehrt) zu gelangen, existiert eine Rampe, die so schmal ist, dass sie nur von einem Auto passiert werden kann. Die Ein- und Ausfahrt sind getrennte Fahrspuren. Eine Schranke regelt den Einlass der Autos in die Parkgarage und stellt sicher, dass sich stets nur f¨unf Autos gleichzeitig in der Parkgarage befinden.

Abbildung 1: Parkgarage 1. (7P) Zeichnen Sie ein Petrinetz, das die oben beschriebene Situation modelliert! Vergessen Sie nicht, eine Anfangsmarkierung sowie die Kapazit¨aten der Stellen anzugeben!

LO¨SUNG:

2

2. (1P) Kennzeichnen Sie diejenigen Stellen in Ihrem Petrinetz, die den kritischen (exklusiven) Bereich darstellen!

LO¨SUNG: Antwort: s5 1.2

Petri-Netz Personenaufzug (8 Punkte)

¨ ber ihn k¨onnen Personen in die In das Kellergeschoss der Tiefgarage f¨ahrt ein Personenaufzug. U vier dar¨uberliegenden Etagen bef¨ordert werden.

Abbildung 2: Aufzug 1. (3P) Zeichnen Sie ein weiteres Petrinetz, das den Personenaufzug modelliert! Die Marken in dem Netz sollen die m¨oglichen vertikalen Bewegungen des Aufzugs nach oben bzw. unten repr¨asentieren (nicht die Personen im Aufzug!).

3

¨ LOSUNG:

Alternative:

2. (3P) Geben Sie den Erreichbarkeitsgraphen f¨ur Ihr Petrinetz an! Denken Sie daran, die Stellen aussagekr¨ aftig zu beschreiben!

¨ LOSUNG: (Erreichbarkeitsgraph zum zweistelligen Petrinetz)

3. (2P) Diskutieren Sie mit Hilfe des Erreichbarkeitsgraphen, ob es im Netz zu Verklemmungen und/oder unendlichen Abl¨aufen kommen kann!

¨ LOSUNG:

4

• Verklemmung? Nein, denn aus jedem Zustand des Erreichbarkeitsgraphen f¨ uhrt auch mindestens wieder eine Kante heraus. • unendlicher Ablauf? Ja. z.B. 4;0 - 3;1 ... abwechselnd 1.3

Nebenl¨ aufige Prozesse (6 Punkte)

Herr Meier f¨ahrt ins Einkaufszentrum, um einige Besorgungen zu erledigen. W¨ahrenddessen beginnt Frau Meier einen Kuchen zu backen. Es treten w¨ahrend dieser T¨atigkeiten folgende Ereignisse auf: 1. Herr Meier verl¨asst das Haus und geht Einkaufen. 2. Herr Meier ist auf dem Weg ins Einkaufszentrum. 3. Herr Meier ist in die Parkgarage des Einkaufszentrums gefahren. 4. Herr Meiers Auto ist in der Parkgarage des Einkaufszentrums geparkt. 5. Die Parkplatzgeb¨ uhr f¨ur die Dauer des Einkaufs ist bezahlt. 6. Herr Meier hat das Einkaufszentrum betreten. 7. Der Einkauf ist get¨atigt. 8. Frau Meier beginnt Kuchen zu backen. 9. Frau Meier stellt beim Backen fest, dass sie zu wenig Mehl hat. 10. Frau Meier ruft ihren Mann an, der zu diesem Zeitpunkt in einem Lebensmittelladen des Einkaufszentrums steht, und bittet ihn, etwas Mehl mitzunehmen. 11. Frau Meier isst ein St¨uck ihres frisch gebackenen Kuchens. 12. Herr Meier verl¨asst das Einkaufszentrum. 13. Herr Meier verl¨asst mit dem Auto die Tiefgarage. 14. In China f¨allt ein Sack Reis um. 15. Herr Meier kommt vom Einkaufen zur¨uck nach Hause. 1. (5P) Ordnen Sie die Ereignisse sinnvoll und stellen Sie die kausalen Abh¨angigkeiten graphisch dar!

LO¨SUNG:

1 Herr Meier verl¨ asst das Haus und geht Einkaufen. 2 Herr Meier ist auf dem Weg ins Einkaufszentrum.

5

3 Herr Meier ist in die Parkgarage des Einkaufszentrums gefahren. 4 Herr Meiers Auto ist in der Parkgarage des Einkaufszentrums geparkt. 6 Herr Meier hat das Einkaufszentrum betreten. 8 Frau Meier beginnt Kuchen zu backen. 9 Frau Meier stellt beim Backen fest, dass sie zu wenig Mehl hat. 10 Frau Meier ruft ihren Mann an, der zu diesem Zeitpunkt in einem Lebensmittell des Einkaufszentrums steht, und bittet ihn, etwas Mehl mitzunehmen. 7 Der Einkauf ist get¨ atigt. 12 Herr Meier verl¨ asst das Einkaufszentrum. 5 Die Parkplatzgeb¨ uhr f¨ ur die Dauer des Einkaufs ist bezahlt. 13 Herr Meier verl¨ asst mit dem Auto die Tiefgarage. 15 Herr Meier kommt vom Einkaufen zur¨ uck nach Hause. 11 Frau Meier isst ein St¨ uck ihres frisch gebackenen Kuchens. 14 In China f¨ allt ein Sack Reis um.

6

2. (1P) Geben Sie eine vollst¨andige Sequentialisierung an!

LO¨SUNG: vgl. z.B. obige Sortierung

7

2

Prozessverwaltung und Scheduling (26 Punkte)

2.1

Schedulingverfahren (14 Punkte)

Gegeben seien f¨unf Prozesse mit ihren jeweiligen Start- und Bearbeitungszeiten (CPU-Zeit). Jedem Prozess ist eine Priorit¨at zugeordnet (kleinerer Wert bedeutet h¨ohere Priorit¨at): Prozess P1 P2 P3 P4 P5

Startzeit 0 6 3 8 5

CPU-Zeit 8 7 5 3 3

Priorit¨ at 4 2 3 0 1

Aufgabe: Tragen Sie in den nachfolgenden Gantt-Diagrammen f¨ur die angegebenen SchedulingVerfahren ein, welcher Prozess zu welcher Zeit die CPU erh¨alt. Markieren Sie rechenwillige Prozesse mit -“ und rechnende Prozesse mit X“ in der jeweiligen Spalte. ” ” 1. (5P) Shortest Remaining Processing Time (SRPT), unterbrechend beim Eintreffen neuer Prozesse; bei gleicher Restlaufzeit wird der Prozess mit der h¨oheren Priorit¨at ausgew¨ ahlt. 0

5

10

15

20

25

Zeit

P1 P2 P3 P4 P5

¨ LOSUNG: 0

5

P1 X X X - - - P2 P3 X X - P4 P5 X X

10

15

20

25

Zeit

- - - - - - - X X X X X - - - - - - - - - - - - X X X X X X X - - - - X X X X X X X

2. (5P) Statische Priorit¨atenvergabe, Prozess mit h¨ochster Priorit¨at wird ausgew¨ahlt, unterbrechend beim Eintreffen neuer Prozesse. 0

5

10

15

P1 P2 P3 P4 P5

8

20

25

Zeit

¨ LOSUNG: 0

5

P1 X X X - - - P2 P3 X X - P4 P5 X X

10

15

20

25

Zeit

- - - - - - - - - - - - - - X X X X X - - - - X X X X X X X - - - - - - - - - - - X X X X X X X

3. (4P) Berechnen Sie die mittlere Wartezeit f¨ur alle Scheduling-Verfahren!

¨ LOSUNG: SRPT: (11 + 13 + 6 + 0 + 0)/5 = 30/5 = 6 SP, unterbrechend (18 + 5 + 13 + 0 + 0)/5 = 36/5 = 7, 2 2.2

Prozesse und Threads (12 Punkte)

1. (2P) Welches sind die Aufgabe des Dispatchers, welches die des Schedulers? Grenzen Sie die beiden Begriffe gegeneinander ab!

¨ LOSUNG: Der Scheduler w¨ ahlt gem¨ aß seiner zugrunde liegenden Schedulingstrategie die Prozesse aus, die als n¨ achstes den Rechenkern zugewiesen bekommen. Er bestimmt somit die Ausf¨ uhrungsfolge der Prozesse. Der Dispatcher ist f¨ ur den Prozesswechsel zust¨ andig. Er entzieht also dem rechnenden Prozess den Rechenkern und weist den Rechenkern dem n¨ achsten Prozess zu (der vom Scheduler bestimmt wurde). Scheduler und Dispatcher arbeiten also Hand in Hand. 2. (3P) Worin liegt der Unterschied zwischen dem Dispatchen von • Prozessen, • Kernel-Level-Threads, • User-Level-Threads (bzw. Subprozessen)?

¨ LOSUNG: Prozesse und Kernel-Level-Threads werden vom Betriebssystem verwaltet (also auch dispatched). User-Level-Threads werden vom Elternprozess ohne Kenntnis des Betriebssystems verwaltet. Das Dispatchen eines Prozesses hat als einziges einen Kontextwechsel zur Folge, da nur hier der Prozesskontext gewechselt wird. 3. (7P) Gegeben seien zwei Prozesse mit der gegebenen Anzahl an Kernel-Level-Threads Ki und User-Level-Threads Uj. Jeder der Prozesse selbst ben¨otigt Rechenzeit, ebenso jeder einzelne Thread. Ein Prozess terminiert erst, wenn alle seine Threads terminiert sind. Der Kernel-Scheduler arbeitet nach dem nicht-unterbrechbaren Round-Robin-Verfahren (Zeitscheiben), wobei eine Zeitscheibe f¨unf Einheiten betr¨agt (Aktivit¨aten des Schedulers oder Dispatchers nicht mitgerechnet). Der Kernel-Scheduler behandelt alle von ihm

9

verwalteten Ausf¨uhrungsstr¨ ange gleich. Sie werden in der Reihenfolge ihrer Startzeit abgearbeitet. Die Verwaltung der Ausf¨uhrungsstr¨ ange durch den Kernel ben¨otigen ebenfalls Rechenzeit. Jedes mal, wenn der Kernel-Scheduler aktiv wird, ben¨otigt er eine Zeiteinheit. Muss zus¨atzlich ein Prozess-Kontextwechsel durchgef¨uhrt werden, kostet das eine zweite Zeiteinheit. Der User-Level-Scheduler l¨auft unabh¨ angig vom Kernel-Scheduler. Gehen Sie davon aus, dass jeder Ausf¨uhrungsstrang nach zwei Zeiteinheiten oder beim Terminieren die Kontrolle an den User-Level-Scheduler abgibt, der dann den n¨achsten ausw¨ ahlt. Wie beim Kernel-Scheduler werden die Ausf¨uhrungsstr¨ange in der Reihenfolge ihrer Ankunft bearbeitet. Weiterhin startet der User-Level-Scheduler neue Ausf¨uhrungsstr¨ange sofort (sozusagen unterbrechbar“): Sobald ein neuer Ausf¨uhrungsstrang hinzu kommt, gibt der laufende ” den Rechenkern ab und der neue bekommt ihn zugewiesen. Als n¨achstes ist dann der Strang an der Reihe, der regul¨ar nach dem neuen Strang folgt. Der Aufwand f¨ ur das User-Level-Scheduling ist vernachl¨assigbar klein, kostet also in dieser Aufgabe keine Zeiteinheiten. Tragen Sie im nachfolgenden Gantt-Diagramm ein, welcher Prozesse bzw. Thread zu welcher Zeit die CPU erh¨alt. Markieren Sie rechenwillige Prozesse bzw. Threads mit -“ und ” rechnende Prozesse bzw. Threads mit X“ in der jeweiligen Spalte. ” Prozess Thread Startzeit CPU-Zeit P1 – 0 13 P1 K1 3 3 P1 K2 20 2 P2 – 2 8 P2 U1 9 5 P2 U2 12 4 0

5

10

P1 P1, K1 P1, K2 P2 P2, U1 P2, U2 Sched./Disp.

10

15

20

25

Zeit

25

30

35

40

45

50

Zeit

P1 P1, K1 P1, K2 P2 P2, U1 P2, U2 Sched./Disp.

LO¨SUNG:

0

5

10

P1 X X X X X - - - - - P1, K1 - - - - - - - P1, K2 P2 - - - - - X X - P2, U1 X X P2, U2 Sched./Disp. X X

15

20

- - - - - - - X X X - - - X X X X - - - - - - - - - - - - - - - - - - - - - - - - - X X X

25

Zeit

X X - -

-

X

X

¨ LOSUNG:

25

P1 P1, K1 P1, K2 P2 P2, U1 P2, U2 Sched./Disp.

30

35

40

45

- - - - - - - - - - X X X X

X

X -

X -

X -

X

X

X -

X - - - - - - - - - - X X - - X - - - - - - - X - - - - - X - - - - - - - - X X X X X X

11

50

Zeit

3

Speichermanagement (21 Punkte)

3.1

Speicheradressierung (8 Punkte)

Neben dem Paging haben Sie die Segmentierung als Speicheradressierungsstrategie kennengelernt. Dabei wird der Speicheradressraum in Segmente unterteilt, die Speicherbereiche beliebiger Gr¨oße darstellen. Die Adressierung funktioniert wie folgt. Eine logische Adresse definiert den Deskriptor D des zugeh¨origen Segments und das Offset OS in diesem Segment. D steht in der Segmenttabelle und verweist auf den Beginn des Segments BS im virtuellen Speicher (also die erste Adresse des Segments). OS definiert die Position der Zieladresse in dem Segment. An dieser Stelle steht eine weitere Adresse, die die Position des adressierten Datums im Arbeitsspeicher definiert: die Position des Eintrags in der Seitentabelle P (= Page“) sowie ein weiteres Off” set OP innerhalb der Kachel im Arbeitsspeicher. P definiert hierbei den Beginn des Segments im Arbeitsspeicher BP und OP die Position des Datums in der Kachel des Arbeitsspeichers. Abbildung 3 veranschaulicht das Verfahren. Deskriptortabelle D

Seitentabelle

virtueller Speicher 0 P

BS

physischer Speicher 0

BP

BS Segment

D

OS

BP Kachel

+

P

OP

+

logische Adresse

virtuelle Adresse

physische Adresse

Abbildung 3: Segmentierung

Aufgabe ¨ Ubersetzen Sie die logischen Adressen in physische Adressen und identifizieren Sie alle Seitenund Segmentfehler mit Hilfe der nachfolgenden Deskriptortabelle und der Single-level Seitentabelle!

12

Index 0x0 0x1 0x2 0x3

Deskriptortabelle Segmentbeginn Segmentgr¨oße (in Bytes) 0x1234 100 0xA000 512 0x532F 50 0xBB10 1024

Seitentabelle Index Seitenbeginn G¨ultig 0x0 0x5000 1 0x1 0x2000 1 0x2 0xF000 0 0x3 0x0000 0 0x4 0x9000 0 0x5 0x7000 1 ... 0xA 0x1000 0 0xB 0xA000 1 0xC 0xB000 1 0xD 0x3000 0 ... 0xF 0

Beachten Sie folgende Rahmenbedingungen: • Gegeben ist eine 16-bit byte-adressierbare Architektur (d. h., alle virtuellen und physikalischen Adressen sind genau 16 Bit lang und jede Adresse adressiert genau ein Byte). • Logische Adressen sind 18 Bit lang, wovon die ersten 2 Bit den Deskriptor und die verbleibenden 16 Bit das Offset angeben. • Ein Segmentfehler findet statt wenn die virtuelle Adresse außerhalb des Segments liegt (siehe Spalte f¨ur Segmentgr¨ oße in der Deskriptortabelle). • Seiten/Rahmen haben die Gr¨oße 4096 (212 ) Bytes. • Geben Sie alle Adressen in hexadezimaler Notation an! Sollte eine Adresse wegen eines Seiten- bzw- Segmentfehlers nicht berechenbar sein, geben Sie dies anstatt der Adresse an der entsprechenden Stelle an (falls ein Seiten- bzw. Segmentfehler auftritt, sollte die ¨ bersetzung nicht fortgesetzt werden)! U Logische Adresse Virtuelle Adresse Physikalische Adresse 0x30200 0x10100 0x00040 0x20080

L¨OSUNG: Logische Adresse Virtuelle Adresse Physikalische Adresse 0x30200 0xBD10 0xAD10 0x10100 0xA100 #PF 0x00040 0x1274 0x2274 0x20080 #SF

13

3.2

Caches (6 Punkte)

Gegeben ist ein 3-Wege assoziativer Cache mit folgender Belegung. Ein Datum im Cache wird uber das Tag, den Mengenindex und das Blockoffset adressiert - in dieser Reihenfolge vom ¨ h¨ochst- zum niedrigstwertigem Bit. Menge 0 1 2 3 4 5 6 7

Tag G¨ ultig Byte 0 Byte 1 0A 1 24 AF 1A 1 F7 33 BC 1 68 01 DE 0 FA 1 42 70 98 1 66 07 76 1 8E EA 54 1 EB AE

Tag G¨ultig Byte 0 Byte 1 AA 1 46 FA CB 1 75 CD 2B 1 44 3E 01 1 69 C5 10 1 5F FB 11 1 88 9E 32 0 7B 1 52 94

Tag G¨ultig Byte 0 Byte 1 BD 1 CC F3 BE 1 DE F6 BF 1 5F AB FB 1 C4 AD EB 1 79 F4 DB 1 E2 F1 23 1 C9 E7 45 0 -

1. (3P) Wieviele Bits werden f¨ur folgende Teile der Adresse ben¨otigt? Begr¨unden Sie kurz Ihre Antwort! (a) Tag

¨ LOSUNG: 2 Hex-Ziffern -> 8 Bits (b) Mengenindex

¨ LOSUNG: 8 Mengen -> 3 Bits (c) Blockoffset

¨ LOSUNG: 2 Bytes -> 1 Bit 2. (2P) Identifizieren Sie jeweils das Datum, das unter der jeweiligen nachfolgenden Adresse im Cache gespeichert ist! Verdeutlichen Sie kurz Ihren L¨osungsweg! (a) 0x76C

¨ LOSUNG: 0x76C -> 0111 0110 1100 -> Tag: 76, Menge: 6, Block: 0 -> 8E (b) 0xBF5

¨ LOSUNG: 0xBF5 -> 1011 1111 0101 -> Tag: BF, Menge: 2, Block: 1 -> AB 3. (1P) Geben Sie eine Adresse im Cache in hexadezimaler Notation an, die einen Cache Miss zur Folge hat!

¨ LOSUNG: 6 Eintr¨ age im Cache sind nicht belegt ( -"), also ung¨ ultig: 0xDE6, 0xDE7, "

14

0x32C, 0x32D, 0x45E, 0x45F. L¨ osungsweg nicht notwendig, da identisch mit vorheriger Aufgabe.

15

3.3

Seitenersetzung (7 Punkte)

1. (6P) Im Folgenden betrachten wir eine Menge von Seiten N = { 1,2,3,4,5,6} und eine Menge von Kacheln K = {f1 , f2 , f3 , f4 }. Es wird nun in folgender Reihenfolge auf die Seiten zugegriffen: 6

1

2

4

3

5

4

2

3

1

5

6

5

4

3

6

1

2

F¨ ullen Sie die unten stehende Tabelle f¨ur die ersten 12 Schritte der Anfrage aus. Gehen Sie dabei nach der Strategie N¨achster Zugriff vor. Bei dieser Seitenersetzungsstrategie wird f¨ur jede Seite errechnet, wieviele Zeiteinheiten bis zum n¨achsten Zugriff noch vergehen. Es wird diejenige Seite ausgelagert, f¨ur die diese Zahl am Gr¨oßten ist. Die oben stehende Zugriffsfolge ist dem Betriebssystem also beim ersten Zugriff bekannt.

Anfrage f1 f2 f3 f4 Page Faults 6 1 2 4 3 5 4 2 3 1 5 6

LO¨SUNG: Anfrage 6 1 2 4 3 5 4 2 3 1 5 6

f1 6 6 6 6 3 3 3 3 3 3 3 3

f2 f3 f4 Page Faults 1 1 2 1 2 3 1 2 4 4 1 2 4 5 5 2 4 6 0.5 Punkte pro korrekten Eintrag. 5 2 4 6 5 2 4 6 5 2 4 6 5 1 4 7 5 1 4 7 5 6 4 8

16

2. (1P) Begr¨unden Sie kurz (1 Satz), warum der oben angewandte Algorithmus N¨achster Zugriff in Betriebssystemen nicht zum Einsatz kommt.

¨ LOSUNG: Der Algorithmus ist in Betriebssystemen nicht sinnvoll anwendbar, da man genaue Kenntnis u ¨ber den weiteren Programmablauf/Seitenzugriffe ben¨ otigt. Dies ist normalerweise nicht bekannt.

17

4

Prozess-Synchronisation (17 Punkte)

4.1

Synchronisation mit Semaphoren (6 Punkte)

Im folgenden ist eine Implementierung eines Ringpuffers gegeben. Dieser besteht aus: • Einem Array, dass Platz f¨ur 12 Elemente bietet. • Einer variable next free, die auf den n¨achsten freien Eintrag im Puffer zeigt. • Einer variable next item, die auf den n¨achsten belegten Eintrag im Puffer zeigt. • Einer Z¨ahlsemaphore, die die freien Pl¨atze im Puffer z¨ahlt. • Einer zweiten Z¨ahlsemaphore, die die besetzten Pl¨atze im Puffer z¨ahlt. • Einem Writer-Thread, der st¨andig in den Puffer schreibt. Zu Beginn wird eine zuf¨allige Anzahl von Konsumenten- und Writer-Threads erzeugt, die st¨andig Elemente aus dem Puffer nehmen bzw. neue in diesem Ablegen. Betrachten Sie nun folgende Implementierung dieser Problemstellung: //Hilfsvariablen int size = 12; semaphor frei = size; semaphor besetzt = size; semaphor mutex = 1; int next_free = -1; int next_item = 0; int[size] buffer; //Der Writer-Thread void thread_write() { while(true) { int item = random(); //Erzeuge Zufallszahl P(frei); P(mutex); next_free = (next_free+1)%size; //Zum n"achsten Puffereintrag weiterschalten buffer[next_free] = item; //Neues item ablegen V(besetzt); V(mutex); } } void thread_consume() { while(true) { P(mutex); P(besetzt);

18

consume(buffer[next_item]); //Verarbeite item next_...


Similar Free PDFs