GTI
-
- 1 / 46
-
Lernkarten
Was unterscheidet Low Level Primitiven von High Level Primitiven?
Wo ist der Zusammenhang?
Ist das eine Co-Existenz oder sind das echte Alternativen?
Die korrekte Implementierung eines Semaphors benötigt daher am besten auch eine unteilbare Hardware-Operation wie etwa TSL. Das bedeutet, dass High-Level Primitiven oft auf den Low-Level Mechanismen aufbauen.
Was ist ein Semaphore?
Das Semaphore-Konzept ist ein höherwertiger Synchronisationsmechanismus, der speziell entwickelt wurde, um das Mutual-Exclusion-Problem zu lösen. Dieses Problem tritt auf, wenn mehrere Prozesse oder Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen wollen, was zu Konflikten führen kann.
Welche Arten von Semaphoren gibt es (mind. 2!)?
- Binäre Semaphore (Mutex): Der Zähler hat nur die Werte 0 oder 1 / locked oder unlocked, wodurch immer nur ein Prozess oder Thread gleichzeitig die Ressource nutzen kann.
- Zählsemaphore: Der Zähler kann belibigeWerte annehmen, um mehrere gleichzeitige Zugriffe auf die Ressource zu ermöglichen, abhängig von der Anzahl der verfügbaren Einheiten der Ressource.
Wie funktioniert ein Semaphore?
(P): Beim Eintritt in den kritischen Abschnitt wird der Semaphorzähler um 1 reduziert, sofern er grösser als 0 ist. Steht der Zähler auf 0, wird der Eintritt verwehrt und der Prozess/Thread in eine Warteschlange eingereiht.
(V): Beim Verlassen des kritischen Abschnitts wird der Semaphorzähler wieder um 1 erhöht, sodass ein weiterer Prozess/Thread den kritischen Abschnitt betreten kann.
Wann, wo und wie wird er eingesetzt?
Ein Semaphore wird eingesetzt, wann: mehrere Prozesse oder Threads auf gemeinsame Ressourcen zugreifen müssen, wo: in Multithreading- oder parallelen Umgebungen, und wie: durch einen Zähler, der steuert, wie viele Prozesse gleichzeitig Zugriff auf die Ressource haben.
Warum können nicht alle "Probleme" mit Semaphoren gelöst werden?
Warum also braucht es bspw. eine Primitive wie "Message Passing"?
Semaphoren allein können Deadlocks nicht verhindern.