Aktives Warten

Aktives Warten

Aktives Warten - auch busy waiting genannt - bezeichnet eine Aktivität eines Computerprogramms, mit der die Zeit bis zur Erfüllung einer Bedingung aktiv durch Ausführung von Anweisungen, welche den Zustand des Programms nicht verändern, überbrückt wird.

Inhaltsverzeichnis

Implementierung

Aktives Warten wird mittels wiederholt auszuführenden Anweisungen, mit denen geprüft wird, ob die Bedingung erfüllt ist, implementiert:

solange (Bedingung b nicht erfüllt) {
   tue nichts;
}

Aktives Warten nutzt offensichtlich Prozessorkapazität für die sofortige, wiederholte Überprüfung, ob die Bedingung erfüllt ist. In seiner reinen Form werden außer der Überprüfung keine weiteren Aktionen ausgeführt.

Anwendungen

Zeitüberbrückung

Aktives Warten kann eingesetzt werden, um eine Zeitspanne einer gegebenen Länge zu überbrücken. Die Länge der zu überbrückenden Zeitspanne wird unter Berücksichtigung der Ausführungsdauer einer Iteration der Schleife vom Programmierer in eine Anzahl zu durchlaufender Iterationen umgerechnet:

int i = 0;
solange (i < num_iterationen) {
   i = i + 1;
}

Synchronisation

Häufiger als zur Zeitüberbrückung wird aktives Warten zur Synchronisation der Aktivitäten parallel laufender/arbeitender Komponenten eines Rechensystems eingesetzt. Bei den Komponenten handelt es sich entweder nur um Software-Komponenten (Prozesse bzw. Threads) oder um Software- und Hardware-Komponenten, die miteinander kooperieren. In Synchronisationssituationen wird die Reihenfolge, in der die Aktionen der Komponenten ausgeführt werden, geregelt, da eine beliebige parallele oder zeitlich verschränkte Ausführung der Aktionen unerwünscht ist.

Gebräuchlich ist der Einsatz von aktivem Warten zur Synchronisation in folgenden Situationen:

  • Zustandsabfrage
Eine Komponente A (eine Software-Komponente) kann erst dann mit ihren Aktionen fortsetzen, wenn eine Komponente B (oftmals ein Gerät) einen bestimmten Zustand erreicht hat. Das Erreichen des Zustands in der Komponente B wird auf eine Weise angezeigt, die eine Prüfung durch die Komponente A zulässt (s. Memory Mapped I/O). Komponente A setzt dann aktives Warten ein, um zu verhindern, dass sie bereits Aktionen ausführt, obwohl dies der Zustand der Komponente B noch nicht zulässt. Das aktive Warten wird dann auch polling genannt.
Oft ist es ausreichend, die Zustandsabfrage nicht ununterbrochen vorzunehmen:
solange (Bedingung b nicht erfüllt) {
   warte für einige Zeit;
}
Diese Variante des aktiven Wartens wird auch als slow busy waiting oder lazy polling bezeichnet. Voraussetzung für einen nutzbringenden Einsatz ist jedoch, dass mit Hilfe eines Betriebssystems oder einer Laufzeitumgebung die freigewordene Prozessorkapazität genutzt wird, um ein anderes Programm vom Prozessor ausführen zu lassen. Nachteilig an der Variante ist neben der nach wie vor vorhandenen, wenn auch verringerten Verschwendung von Prozessorkapazität, dass oftmals länger als nötig gewartet wird, weil die Bedingung erst nach Ablauf der Wartezeit wieder geprüft wird.
  • Abfrage einer Sperre
Wird zur Synchronisation der Aktivitäten von Software-Komponenten (Prozessen bzw. Threads) speziell eine gemeinsam genutzte Variable vereinbart und wird mit einer Veränderung des Variablenwerts angezeigt, dass ein Prozess/Thread mit seinen Aktionen fortsetzen kann, so verwendet der Prozess/Thread aktives Warten, um die Veränderung zu erkennen:
Gemeinsam von A und B genutzte Variable: lock
Interpretation des Werts:                0 gesperrt, ungleich 0 offen 
Initialisierung:                         lock = 0
       
Prozess A                    Prozess B
   ...                          ...
   solange (lock == 0) {        ...
      ;                         lock = 1;
   }                            ...
   Aktion a                     ...
Da die Variable lock verhindert, dass der Prozess/Thread A die Aktion a unkontrolliert durch B fortsetzt, wird die Variable Sperrvariable (Lock) genannt. Da die Veränderung der Variable mittels wiederholtem (drehendem) Abfragen festgestellt wird, spricht man auch von einem Spinlock. Spinlocks sind ein grundlegendes Konzept der Prozesssynchronisation.



Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Busy-Waiting — Aktives Warten auch busy waiting genannt bezeichnet eine Aktivität eines Programms, mit der die Zeit bis zur Erfüllung einer Bedingung aktiv durch Ausführung von Anweisungen, welche den Zustand des Programms nicht verändern, überbrückt wird.… …   Deutsch Wikipedia

  • Busy Waiting — Aktives Warten auch busy waiting genannt bezeichnet eine Aktivität eines Programms, mit der die Zeit bis zur Erfüllung einer Bedingung aktiv durch Ausführung von Anweisungen, welche den Zustand des Programms nicht verändern, überbrückt wird.… …   Deutsch Wikipedia

  • Gegenseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Wechselseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Mutex — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren verhindern, dass nebenläufige Prozesse bzw.… …   Deutsch Wikipedia

  • Read-Write-Lock — Unter Locking (engl. für Sperren) versteht man in der Informatik das Sperren des Zugriffs auf eine Ressource. Eine solche Sperre ermöglicht den exklusiven Zugriff eines Prozesses auf eine Ressource d.h. mit der Garantie dass kein anderer Prozess… …   Deutsch Wikipedia

  • Spin-Lock — Ein Spinlock (Spin Lock) ist ein Mechanismus der Prozesssynchronisation. Es ist eine Sperre (Lock) in Form einer Variablen zum Schutz von gemeinsam genutzten Ressourcen (Datenstrukturen) vor modifizierendem Zugriff durch konkurrierende Prozesse… …   Deutsch Wikipedia

  • Lock — Unter Locking (engl. für Sperren) versteht man in der Informatik das Sperren des Zugriffs auf eine Ressource. Eine solche Sperre ermöglicht den exklusiven Zugriff eines Prozesses auf eine Ressource, d.h. mit der Garantie, dass kein anderer… …   Deutsch Wikipedia

  • Schleife (Programmierung) — Eine Schleife ist eine Kontrollstruktur in Programmiersprachen. Sie wiederholt einen Anweisungs Block – den so genannten Schleifenrumpf oder Schleifenkörper – so lange, wie eine Laufbedingung gültig ist oder bis eine Abbruchbedingung eintritt.… …   Deutsch Wikipedia

  • Schleifenkörper — Eine Schleife ist eine Kontrollstruktur in Programmiersprachen. Sie wiederholt einen Code Block – den so genannten Schleifenrumpf oder Schleifenkörper – so lange, wie eine Laufbedingung gültig ist oder bis eine Abbruchbedingung eintritt.… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”