Wikipedia · einfach zusammengefasst · Stand
Prozesssynchronisation
Gemeinsamer Zugriff auf Daten. Dabei muss verhindert werden, dass durch gleichzeitigen Zugriff Inkonsistenzen in den Daten entstehen. Dies wird durch Mutex- …
Inhalt4 Abschnitte
Grundidee
Prozesssynchronisation, kurz Synchronisation, bezeichnet in der Programmierung die Koordinierung des zeitlichen Ablaufs mehrerer nebenläufiger Prozesse oder Threads. Nebenläufig bedeutet, dass mehrere Abläufe scheinbar oder tatsächlich gleichzeitig stattfinden. Dabei spielt es keine Rolle, ob es um Threads innerhalb eines Programms, um verschiedene Programme auf einem Computer oder um Prozesse in einem verteilten System geht, die über ein Netzwerk kommunizieren.
Synchronisation ist wichtig, weil Prozesse voneinander abhängen können. Ein Prozess muss häufig auf ein Ereignis warten, das ein anderer Prozess auslöst. Der Scheduler, also die Komponente, die Rechenzeit verteilt, muss solche kausalen Abhängigkeiten berücksichtigen: Ein Prozess soll nur dann Rechenzeit bekommen, wenn alle notwendigen Bedingungen für seine Fortsetzung erfüllt sind.
Zwecke der Synchronisation
Ein wichtiger Zweck ist der gemeinsame Zugriff auf Daten. Wenn mehrere Prozesse gleichzeitig dieselben Daten verändern, können Inkonsistenzen entstehen. Das wird durch Mutex-Verfahren verhindert. Mutex bedeutet gegenseitiger Ausschluss: Immer nur ein Prozess darf gleichzeitig auf einen kritischen Bereich oder eine gemeinsam genutzte Ressource zugreifen.
Ein weiterer Zweck ist die gemeinsame Nutzung beschränkter Betriebsmittel, zum Beispiel von Peripheriegeräten. Auch hier können Mutex-Verfahren helfen; oft sind aber komplexere Scheduling-Methoden nötig, um die Nutzung sinnvoll zu steuern.
Synchronisation dient außerdem der Übergabe von Daten oder Nachrichten von einem Prozess an einen anderen. Das nennt man Interprozesskommunikation. Zusätzlich kann Synchronisation genutzt werden, um Unterprozesse durch Signale zu steuern, insbesondere um Prozesse abzubrechen oder darauf zu warten, dass sie terminieren.
Mechanismen und Modelle
Konkret wird Prozesssynchronisation meist mit klassischen Kontrollmechanismen umgesetzt. Dazu gehören Locks, Semaphore und Monitore. Ein Lock sperrt eine Ressource, damit sie nicht gleichzeitig von mehreren Prozessen benutzt wird. Ein Semaphor ist ein Synchronisationsmittel, das den Zugriff auf Ressourcen zählen oder begrenzen kann. Ein Monitor fasst gemeinsam genutzte Daten und die erlaubten Zugriffsoperationen so zusammen, dass der Zugriff kontrolliert abläuft.
Die Abhängigkeiten zwischen Prozessen lassen sich formal zum Beispiel durch ein Petri-Netz modellieren. Ein Petri-Netz ist ein mathematisches Modell, mit dem Zustände, Ereignisse und Abhängigkeiten in nebenläufigen Systemen dargestellt werden können.
Typische Probleme
Ein typisches Problem der Prozesssynchronisation ist die Verklemmung, auch Deadlock genannt. Sie entsteht, wenn Prozesse sich gegenseitig blockieren, weil zirkuläre Abhängigkeiten bestehen. Ein bekanntes Beispiel dafür ist das Problem der speisenden Philosophen.
Ein anderes prototypisches Problem ist die Steuerung eines Producer/Consumer-Systems. Dabei erzeugt ein Prozess Daten oder Aufgaben, der Producer, während ein anderer Prozess sie verbraucht oder verarbeitet, der Consumer. Synchronisation sorgt dafür, dass beide sinnvoll zusammenarbeiten, etwa indem der Consumer wartet, wenn noch nichts produziert wurde.