Melden Sie sich hier an, um auf Kommentare und die Whitepaper-Datenbank zugreifen zu können.

Kein Log-In? Dann jetzt kostenlos registrieren.

Falls Sie Ihr Passwort vergessen haben, können Sie es hier per E-Mail anfordern.

Der Zugang zur Reseller Only!-Community ist registrierten Fachhändlern, Systemhäusern und Dienstleistern vorbehalten.

Registrieren Sie sich hier, um Zugang zu diesem Bereich zu beantragen. Die Freigabe Ihres Zugangs erfolgt nach Prüfung Ihrer Anmeldung durch die Redaktion.

25.07.1975

Blockierung durch fehlende Betribsmittel

Dr. Peter Schnupp (Mitinhaber und Gesellschafter der Firma Softlab, München) in: Schnupp, Systemprogrammierung, de Gruyter Lehrbuch, 245 Seiten mit 103 Abbildungen, kartoniert, DM 32,-, soeben erschienen im Verlag Walter de Gruyter & Co., Berlin.

Fünf Philosophen befinden sich in einem Raum. Sie beschäftigen sich unabhängig voneinander nur mit zwei Dingen: denken und essen. Auf einem runden Tisch (Abb. 9.6-2) werden ständig 5 Teller mit einem besonders schwierig zu essenden Spaghetti-Gericht bereitgehalten, zu dessen Verzehr unbedingt zwei Gabeln gleichzeitig gebraucht werden. Da es sich um Philosophen handelt, die ohnehin relativ viel denken und wenig essen sowie mit einem Minimum an Besitz auszukommen versuchen, werden nicht zwischen jedes Tellerpaar zwei, sondern nur eine Gabel gelegt. Solange also etwa ein Philososph an Platz 1 ißt, müssen die an Platz 2 und 5 Sitzenden warten, bis er seine Gabeln wieder freigibt.(Bild)

erhält sich nun jeder Philosoph entsprechend dem Algorithmus

repeat begin nachdenken;

P (gabelrechts); P (gabellinks); essen;

V (gabelrechts); V (gabellinks)

end;

kommt es zu einer Blockierung mit anschIießendem Verhungern aller Philosophen, wenn zufällig alle gleichzeitig hungrig werden und das P (gabelrechts) ausführen, das heißt zur rechten Gabel greifen.

Läßt sich diese Situation vermeiden, wenn mindestens einer der Philosophen (aber nicht jeder) Linkshänder ist und zuerst zur linken Gabel greift (das heißt das P [gabellinks] vor dem P [gabelrechts] ausführt? Würden Sie dies als eine zufriedenstellende Lösung des Problems ansehen? Programmieren Sie eine bessere Lösung (Hinweis: Fü0hren Sie ein Integer Array freiegabeln: array [1. . . 5] of 0 . . 2 ein, das angibt, wieviele Gabeln für jeden Platz zu jedem Zeitpunkt zur Verfügung stehen - dieses Array ist selbst ein Betriebsmittel, und der Philosoph i darf nur dann zu essen beginnen, wenn freiegabeln [i] = 2 ist).

Eine Blockierung von mehreren Prozessen durch gegenseitig verzahntes Anfordern von Betriebsmitteln zu vermeiden, ist eine der wichtigsten Aufgaben bei der Planung eines Systems. Die hierfür anzuwendenden Methoden müssen zwei Bedingungen erfüllen

- sie müssen sicher sein, das heißt es darf unter keinen, auch den ungünstigsten Verhältnissen, zu einer Blockierung kommen,

- sie müssen möglichst effizient sein, das heißt die Zahl der auf ein zwar noch freies, aber "worsichtshalber" ihm nicht zugeteiltes Betriebsmittel wartenden Prozesse muß so klein wie möglich sein.

Dabei hat die erste Bedingung die Priorität - ein uneffektiv arbeitendes System ist immer noch besser als ein gar nicht mehr arbeitendes. Sobald ein System blockiert, läßt sich dieser Zustand in der Regel nicht mehr lösen, ohne eine Reihe von Prozessen gewaltsam zu beenden und dabei sogar - vor allem in einer Realzeit-Umgebung - Informationen unwiderbringlich zu vernichten. -m-