03_synchronization_slides_part2_Z Flashcards
Was ist Starvation?
Starvation tritt auf, wenn die Ressourcenanforderungen eines Prozesses nie vollständig erfüllt werden, sodass der Prozess seine Aufgabe nicht ausführen kann. Ursachen können Deadlock, Livelock oder einfache Scheduling-Algorithmen sein. Vermeidung erfordert faire Scheduling-Algorithmen, aber es gibt keine universelle Lösung.
Was sind die Hauptziele beim Ablaufplan-Design?
Ein Ablaufplan muss sicherstellen, dass jeder Ausführungspfad ein valides Endergebnis produziert, Deadlocks vermieden oder das System in sicheren Zuständen verbleibt, keine Zyklen zu Livelocks führen und ein wohldefinierter zeitlicher Ablauf zur Vermeidung von Race Conditions existiert. Ressourcen müssen fair verteilt werden, um Starvation zu verhindern.
Was sind Synchronisationsprimitiven und warum sind sie wichtig?
Synchronisationsprimitiven implementieren abstrakte Ablaufpläne als konkrete Programme. Sie sind wichtig, um die korrekte Ausführung von parallelen Prozessen oder Threads zu gewährleisten. Beispiele sind Semaphor, Mutex, Zustandsvariable, Barrier und Monitor.
Was versteht man unter kritischen Regionen (Critical Regions)?
Kritische Regionen sind Code-Abschnitte, die nur von einem Prozess oder Thread gleichzeitig betreten werden dürfen, um inkonsistente Zwischenzustände zu schützen. Das Konzept des wechselseitigen Ausschlusses (Mutual Exclusion) wird verwendet, um solche Regionen zu sichern.
Wie funktioniert ein Semaphor?
Ein Semaphor ist eine Datenstruktur mit einer Ganzzahl und den Operationen down()
(bzw. wait()
) und up()
(bzw. post()
). down()
reduziert den Wert, wenn dieser größer als 0 ist; ansonsten wird gewartet. up()
erhöht den Wert. Semaphoren werden verwendet, um den Zugang zu Ressourcen zu steuern.
Was ist ein Mutex und wie unterscheidet er sich von einem Semaphor?
Ein Mutex ist eine vereinfachte Version eines Semaphors, der initialisiert mit 1 ist. Er hat zwei Operationen: lock()
und unlock()
, die verwendet werden, um kritische Regionen zu schützen. Der Hauptunterschied ist, dass ein Mutex nur für einen einzigen Zugriff zur gleichen Zeit verwendet wird, während ein Semaphor mehrere zulassen kann.
Was ist eine Zustandsvariable (Condition Variable) und wie wird sie verwendet?
Eine Zustandsvariable blockiert einen Prozess oder Thread, bis ein bestimmtes Ereignis eintritt. Sie hat die Operationen wait()
und signal()
. Zustandsvariablen müssen immer durch eine Mutex geschützt werden, um sicherzustellen, dass der Zustand korrekt verwaltet wird.
Welche Funktion hat eine Barrier in paralleler Programmierung?
Eine Barrier synchronisiert eine Gruppe von Prozessen oder Threads, indem sie deren Ausführung erst fortsetzt, wenn alle die Barrier erreicht haben. Dies stellt sicher, dass alle Teile eines Programms an einem bestimmten Punkt des Codes synchronisiert sind.
Was ist ein Monitor und wie wird er verwendet?
Ein Monitor ist ein Synchronisationsmechanismus auf höherem Abstraktionsniveau, der aus low-level Synchronisationsprimitiven besteht. Er wird auf ganze Objekte, wie Klassen oder Funktionen, angewendet und ist häufig in objekt-orientierten Programmiersprachen wie Java oder C# zu finden.
Welche wichtigen Hinweise sollte man bei der Verwendung von Synchronisationsprimitiven beachten?
Synchronisationsprimitiven sollten durch Variablen repräsentiert werden, ohne Kopien dieser Variablen anzufertigen. Für mehrere Threads sollten Pointer oder Referenzen verwendet werden, und für mehrere Prozesse sollten Variablen in Shared-Memory-Segmenten abgelegt oder named Varianten verwendet werden.