Semaphoren, Mutexe & Deadlocks

karimhanif
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 3. Mär 2009 14:13

Semaphoren, Mutexe & Deadlocks

Beitrag von karimhanif »

da ich die übungen dazu ein gutes dutzend mal durchgerechnet habe, würde ich mich freuen mal 'ne
neue aufgabe dazu zu üben, hätte jemand 'n code-vorschlag??

...wenn's geht nur mit 2-3 prozessen ;-)

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von Steven »

'nen Deadlock bekommst du ganz einfach, wie wär's damit:

Prozess A:
A.lock ();
B.lock ();
C.lock ();
C.unlock ();
B.unlock ();
A.unlock ();

Prozess B:
C.lock ();
B.lock ();
A.lock ();
A.unlock ();
B.unlock ();
C.unlock ();

In den TS-Folien steht in Foliensatz 12 auf Folie 13, welche Bedingungen gegeben sein müssen, damit Deadlocks auftreten können - lesenswert.

karimhanif
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 3. Mär 2009 14:13

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von karimhanif »

danke steven, mache mich gleich ans lösen (und lesen) ;-)

karimhanif
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 3. Mär 2009 14:13

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von karimhanif »

so, hätte hier 'ne frage zu...

\(\; \;\;\;\;P_1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; P_2\)
-------------------------------------------
\(A.down() \;\;\;\;\;\;\;\; C.down()\)
\(B.down() \;\;\;\;\;\;\;\; B.down()\)
\(C.down() \;\;\;\;\;\;\;\; C.up()\)
\(A.up() \;\;\;\;\;\;\;\;\;\;\;\; A.down()\)
\(C.up() \;\;\;\;\;\;\;\; \;\;\;\; B.up()\)
\(B.up() \;\;\;\;\;\;\;\;\;\;\;\; A.up()\)

Prozess \(P_2\) wird durch B.down() in \(P_1\) blockiert sodass \(P_2\) immer auf ihn warten muß,
es handelt sich hier also um eine verklemmung jedoch kein Deadlock, sehe ich das soweit richtig?

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von Steven »

Hier kann dir der Scheduler leicht einen Strich durch die Rechnung machen. Sagen wir mal, jeder Prozess darf einen Befehl ausführen, bevor ihm die CPU wieder entzogen wird:
1. Prozess 1 führt A.down() aus
2. Prozess 2 führt C.down() aus
3. Prozess 1 führt B.down() aus
4. Prozess 2 führt B.down() aus und wartet ab jetzt auf Prozess 1
5. Prozess 1 führt C.down() aus und wartet ab jetzt auf Prozess 2
-> Deadlock, die zyklisches Warten

Bei sequentieller Verarbeitung von Prozessen sehe ich keine Möglichkeit für Deadlocks. Die gibt's nur wenn, mindestens zwei Prozesse per Hold-and-Wait versuchen, nebenläufig Zugriff auf mindestens zwei exklusive Ressourcen zu erhalten. Da es in diesem Beispiel zum großen Teil am Scheduler hängt, ist das auch so ein Fall, der vllt. 3 Wochen ohne Probleme zufällig läuft, dann gibt's einen Prozess mehr auf dem Rechner, der Scheduler verteilt die CPU-Zeit anders und du hast ein Problem.

Benutzeravatar
crib
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 17. Apr 2008 14:43
Wohnort: Wiesbaden

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von crib »

karimhanif hat geschrieben:so, hätte hier 'ne frage zu...

[...]

Prozess \(P_2\) wird durch B.down() in \(P_1\) blockiert sodass \(P_2\) immer auf ihn warten muß,
es handelt sich hier also um eine verklemmung jedoch kein Deadlock, sehe ich das soweit richtig?
Verklemmung und Deadlock sind ein und dasselbe.
Zu deiner Frage: Mit P1 mit b.down() c.down() und P2 mit c.down() b.down() ist ganz klar ein Deadlock möglich.

karimhanif
Mausschubser
Mausschubser
Beiträge: 86
Registriert: 3. Mär 2009 14:13

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von karimhanif »

crib hat geschrieben: Verklemmung und Deadlock sind ein und dasselbe.
das es aber auch immer soviel identische begriffe geben muss....danke für die aufklärung ;-)

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von ChRiZz88 »

Hm also ich bräuchte auch etwas Aufklärung oO Ich verstehe nicht, was die Lösung mit Vokabeln wie "freigeben, blockieren, besitzen und anfordern" meint und in welcher Beziehung dies zu den ups und downs steht.

twinkletoes
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 17. Mär 2009 16:01

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von twinkletoes »

Ich wills mal probieren...

A.down() => Ressource A wird angefordert und wenn sie kein andrer Prozess gerade besitzt, wird sie auch reserviert/besessen.
A.up() => Ressource wird wieder freigegeben.
Wenn Prozess 1 "A.down()" machen möchte, aber Prozess 2 zuvor schon "A.down()" gemacht hat, wird Prozess 1 von Prozess 2 blockiert - da er ja nicht an die Ressource kommt, die er haben will, da Prozess 2 Ressource A schon besitzt.

Hoffe, das hilft etwas...

Gruß.
twinkletoes
It is what you read when you don't have to that determines what you will be when you can't help it. ~Oscar Wilde

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Re: Semaphoren, Mutexe & Deadlocks

Beitrag von ChRiZz88 »

Hat mir sehr geholfen, danke ;)

Antworten

Zurück zu „Archiv“