Arten der Synchronisation. Koordination nebenläufiger Prozesse. Koordinierung. Reihenschaltung. Einseitige Synchronisation



Ähnliche Dokumente
Koordination nebenläufiger Prozesse

Softwarelösungen: Versuch 4

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Monitore. Klicken bearbeiten

Einführung in die Programmierung

Domänenmodell: Fadenkommunikation und -synchronisation

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Arten der Synchronisation Klassifikation. Überblick. Reihenschaltung Koordination der Kooperation und Konkurrenz zwischen Prozessen Synchronisation

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

A Lösungen zu Einführungsaufgaben zu QueueTraffic

Lehrer: Einschreibemethoden

Übersicht Programmablaufsteuerung

teamsync Kurzanleitung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Statuten in leichter Sprache

1 topologisches Sortieren

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Leiharbeit in den Niederlanden

Erwin Grüner

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

SEQUENZDIAGRAMM. Christoph Süsens

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Speicher in der Cloud

Anleitung für die Online-Bewerbung über LSF auf Lehrveranstaltungen aller Lehramtsstudiengänge

Elektrische Logigsystem mit Rückführung

Grundlagen der Theoretischen Informatik, SoSe 2008

Arbeitsblätter. Sinnvolle Finanzberichte. Seite 19

Erfahrungen mit Hartz IV- Empfängern

1 Vom Problem zum Programm

Beispiel(unten ist der Spielfeldrand):

Gliederung. Monitor (eine auf ein Modul bezogene) Klasse

Java-Programmierung mit NetBeans

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Elektrischer Widerstand

Was ist Sozial-Raum-Orientierung?

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

RS-Flip Flop, D-Flip Flop, J-K-Flip Flop, Zählschaltungen

Grundlagen verteilter Systeme

AUSBILDUNG eines OBEDIENCE HUNDES

Zählen von Objekten einer bestimmten Klasse

Formung einer Brustzugabe

Klausur in Programmieren

BERECHNUNG DER FRIST ZUR STELLUNGNAHME DES BETRIEBSRATES BEI KÜNDIGUNG

Manager. von Peter Pfeifer, Waltraud Pfeifer, Burkhard Münchhagen. Spielanleitung

Wie halte ich Ordnung auf meiner Festplatte?

Professionelle Seminare im Bereich MS-Office

Lösung. Prüfungsteil 1: Aufgabe 1

Simulation LIF5000. Abbildung 1

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Was ist das Budget für Arbeit?

Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar CAP-News 40

Nutzung von GiS BasePac 8 im Netzwerk

Es kann maximal ein Prozess die Umladestelle benutzen.

ratgeber Urlaub - Dein gutes Recht

Synchronisations- Assistent

Synchronisierung. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 73

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Breiten- und Tiefensuche in Graphen

Qualitätsbereich. Mahlzeiten und Essen

Charakteristikum des Gutachtenstils: Es wird mit einer Frage begonnen, sodann werden die Voraussetzungen Schritt für Schritt aufgezeigt und erörtert.

Kapitel 4. Monitore und wechselseitiger Ausschluss

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

Wie Sie mit Mastern arbeiten

Benutzerhandbuch - Elterliche Kontrolle

Zeichen bei Zahlen entschlüsseln

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

R ist freie Software und kann von der Website.

Etikettendruck mit Works 7.0

Bereich METIS (Texte im Internet) Zählmarkenrecherche

Verteilte Systeme CS5001

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

Programmierkurs Java

I Serverkalender in Thunderbird einrichten

Kreatives Occhi. - V o r s p a n n - Alle Knoten und Knüpfelemente sowie ihre Verwendbarkeit. Die Knoten

Betriebssystembau (BSB)

Deutliche Mehrheit der Bevölkerung für aktive Sterbehilfe

Einführungskurs MOODLE Themen:

Einführung in die Programmierung

Wirtschaftsinformatik I

Kondensatoren ( Verdichter, von lat.: condensus: dichtgedrängt, bezogen auf die elektrischen Ladungen)

Mandant in den einzelnen Anwendungen löschen

Wichtiges Thema: Ihre private Rente und der viel zu wenig beachtete - Rentenfaktor

Primzahlen und RSA-Verschlüsselung

Batterie richtig prüfen und laden

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Menü auf zwei Module verteilt (Joomla 3.4.0)

Einführung in die C++ Programmierung für Ingenieure

Einführung in die Programmierung

Reise durch die Welt der Comics Familien zu Besuch am Fumetto in Luzern

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

3.14 Die Programmieroberfläche Programmierung

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Round-Robin Scheduling (RR)

C/C++ Programmierung

Pflegeberichtseintrag erfassen. Inhalt. Frage: Antwort: 1. Voraussetzungen. Wie können (Pflege-) Berichtseinträge mit Vivendi Mobil erfasst werden?

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Transkript:

Koordination nebenläufiger Prozesse Arten der Synchronisation Systemaufrufe Programmverwaltung Zugriffskontrolle Dateiverwaltung Ein /Auslagerung Vernetzung Ein /Ausgabe Fadenverwaltung Koordination Prozesseinplanung Prozessabfertigung Unterbrechungssteuerung Adressraumabbildung Speichervergabe Die Koordination der Kooperation und Konkurrenz zwischen Prozessen wird Synchronisation (synchronization) genannt. Eine Synchronisation bringt die Aktivitäten verschiedener nebenläufiger Prozesse in eine Reihenfolge. Durch sie erreicht man also prozeßübergreifend das, wofür innerhalb eines Prozesses die Sequentialität von Aktivitäten sorgt. Quelle: Herrtwich/Hommel (1989), Kooperation und Konkurrenz, S. 26 Koordination der Kooperation und Konkurrenz zwischen Prozessen... 1. derselben Inkarnation Intraprozess-Synchronisation nicht-blockierende Synchronisation ist zwingend Beispiel: asynchrone Programmunterbrechung (interrupt) 2. verschiedener Inkarnationen Interprozess-Synchronisation {,nicht-blockierende Synchronisation ist verwendbar Differenzierung: ein- und mehrseitige Synchronisation nebenläufiger Prozesse 7 Koordination SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-1 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-3 Koordinierung Reihenschaltung Einseitige Synchronisation Unilateral ko or di nie ren beiordnen; in ein Gefüge einbauen; aufeinander abstimmen; nebeneinanderstellen; Termine. als kritisch erachtete nebenläufige Aktivitäten der Reihe nach ausführen überlappendes Zählen ( Kap. 5) verdrängende Prozesseinplanung ( Kap. 6) der Reihe nach bedeutet, gewisse Prozesse bewusst zeitlich zu verzögern { überlappenden je nach Verfahren trifft es den Prozess überlappten die Verfahren arbeiten {,nicht-wartend bzw. {,nicht-blockierend die Verfahren wirken sich nur auf einen der beteiligten Prozesse aus: Bedingungssynchronisation bzw. das Weiterarbeiten des einen Prozesses ist abhängig von einer Bedingung der andere Prozess erfährt keine Verzögerung in seinem Ablauf logische Synchronisation die Maßnahme resultiert aus der logischen Abfolge der Aktivitäten vorgegeben durch das Zugriffsmuster der beteiligten Prozesse andere Prozesse sind jedoch nicht gänzlich an der Synchronisation unbeteiligt 47 47 Die Veränderung einer Bedingung, auf die ein Prozess wartet, ist z.b. von einem anderen Prozess herbeizuführen. 7 Koordination SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-2 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-4

Mehrseitige Synchronisation Multilateral Verzögerung des unterbrechenden Prozesses die Verfahren wirken sich auf (ggf.) alle beteiligten Prozesse aus welche Prozesse im weiteren Ablauf verzögert werden, ist i. A. unvorhersehbar allgemein gilt: wer zuerst kommt, mahlt zuerst die betroffenen Aktivitäten stehen miteinander im gegenseitigen Ausschluss erzwungen wird die atomare Ausführung von Anweisungsfolgen abschnittweise werden diese niemals nebenläufig/parallel durchgeführt int wheel = 0; void attribute ((interrupt)) tip () { wheel += 1; int main () { for (;;) printf("%d\n", incr(&wheel)); int incr (int *p) { int x; asm("cli"); x = *p += 1; asm("sti"); return x; die atomar ausgeführten Anweisungsfolgen bilden eine Elementaroperation blockierende Synchronisation Interrupts werden zeitweilig unterbunden g 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-5 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-7 Asynchrone Programmunterbrechungen ( Kap. 5) Verzögerung des unterbrochenen Prozesses je nach Verfahren erfährt die eine oder andere Seite eine Verzögerung: Verzögerung des unterbrechenden Prozesses weiche/harte Synchronisation der Hardware/Software-Interrupts logischer Ansatz ( Schleusen [28]) bzw. Ebene 2 -Befehle: cli, sti (x86) Verzögerung des unterbrochenen Pozesses Ebene 2 -Befehle: cas (IBM 370, m68020+), cmpxchg (i486+) ll/sc (DEC Alpha, MIPS, PowerPC) nicht-blockierende Synchronisation nebenläufiger Aktivitäten die Verfahren synchronisieren einseitig, d. h. sie arbeiten unilateral CISC RISC int wheel = 0; void attribute ((interrupt)) tip () { incr(&wheel); int main () { for (;;) printf("%d\n", incr(&wheel)); int incr (int *ref) { int x; do x = *p; while (!cas(p, x, x + 1)); return x + 1; nicht-blockierende Synchronisation Wiederholung der Berechnung findet statt, wenn nebenläufig eine andere Aktivität erfolgreich beendet wurde 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-6 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-8

Spezialbefehl Kritischer Abschnitt bool cas (word *ref, word old, word new) { bool srz; atomic(); if (srz = (*ref == old)) *ref = new; cimota(); return srz; CAS (compare and swap) unteilbare Operation read-modify-write Komplexbefehl CISC Ist blockierungsfrei nur in Bezug auf Prozesse! Multiprozessor-Synchronisation (gemeinsamer Speicher, shared memory) atomic() verhindert (Speicher-) Buszugriffe durch andere Prozessoren cimota() lässt (Speicher-) Buszugriffe anderer Prozessoren wieder zu Auf Interrupts wird, wie sonst auch, erst am Befehlsende reagiert! Beim Betreten (enter) und Verlassen (leave) gelten bestimmte Vorgehensweisen: Eintrittsprotokoll (entry protocol) regelt die Belegung eines kritischen Abschnitts durch einen Prozess erteilt einem Prozess die Zugangsberechtigung bei bereits belegtem kritischen Abschnitt wird der Prozess verzögert Austrittsprotokoll (exit protocol) regelt die Freigabe des kritischen Abschnitts durch einen Prozess andere erhalten die Möglichkeit zum Betreten des kritischen Abschnitts Die Vorgehensweisen variieren mit dem realisierten Synchronisationsverfahren. 7.1 Synchronisationsarten SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-9 7.2 Gegenseitiger Ausschluss SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-11 Gegenseitiger Ausschluss mutual exclusion Schlossvariable lock variable ein Ansatz, der kennzeichnend ist für die mehrseitige Synchronisation: Sich gegenseitig ausschließende Aktivitäten werden nie parallel ausgeführt und verhalten sich zueinander, als seien sie unteilbar, weil keine Aktivität die andere unterbricht. Anweisungen, deren Ausführung einen gegenseitigen Ausschluß erfordert, heißen kritische Abschnitte (critical sections, critical regions). Quelle: Herrtwich/Hommel (1989), Kooperation und Konkurrenz, S. 137 die kritischen Abschnitte sind durch Synchronisationsklammern zu schützen Ein abstrakter Datentyp, auf dem zwei Operationen definiert sind: acquire (lock) Eintrittsprotokoll verzögert einen Prozess, bis das zugehörige Schloss offen ist bei bereits geöffnetem Schloss fährt der Prozess unverzögert fort verschließt das Schloss ( von innen ), wenn es offen ist release (unlock) Austrittsprotokoll öffnet das zugehörige Schloss, ohne den öffnenden Prozess zu verzögern Implementierungen werden als Schlossalgorithmen (lock algorithms) bezeichnet. 7.2 Gegenseitiger Ausschluss SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-10 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-12

Schlossalgorithmus (1) Prinzip mit Problem(en) Schlossalgorithmus (3) Verdrängungssteuerung typedef char bool; while (*lock); void release (bool *lock) { *lock = 0; acquire() soll einen kritischen Abschnitt schützen, ist dabei aber selbst kritisch: Problem macht die Phase vom Verlassen der Kopfschleife (while) bis zum Setzen der Schlossvariablen Verdrängung des laufenden Prozesses kann einem anderen Prozess ebenfalls das Schloss geöffnet vorfinden lassen im weiteren Verlauf könnten (mindestens) zwei Prozesse den eigentlichen, durch acquire() zu schützenden kritischen Abschnitt überlappt ausführen while (*lock) { void avert () { preemption = 0; void admit () { preemption = 1; Überprüfen und Schließen des Schlosses bilden eine überlappungsfreie Anweisungsfolge die Schleife muss überlappbar sein, damit das Schloss aufgeschlossen werden kann Verdrängung des Prozesses wird abgewendet, obwohl ggf. nur einer von vielen lauffähigen Prozessen das Schloss öffnen wird g 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-13 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-15 Schlossalgorithmus (2) Unterbrechungssteuerung Schlossalgorithmus (4) Komplexbefehl avertirq(); while (*lock) { admitirq(); avertirq(); admitirq(); void avertirq () { asm("cli"); void admitirq () { asm("sti"); Überprüfen und Schließen des Schlosses bilden eine ununterbrechbare Anweisungsfolge die Schleife muss unterbrechbar sein, damit das Schloss aufgeschlossen werden kann while (tas(lock)); TAS (test and set) atomarer Lese-Modifikations-Schreibzyklus read-modify-write geeignet für Ein- und Mehrprozessorsysteme bool tas (bool *flag) { bool old; atomic(); old = *flag; *flag = 1; cimota(); return old; asynchrone Programmunterbrechungen werden abgewendet, obwohl diese nie den durch acquire() geschützten kritischen Bereich betreten dürfen bei der Befehlsausführung wird kein anderer { Befehl abgearbeitet Speicherzugriff durchgeführt 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-14 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-16

Aktives Warten busy waiting Schlossalgorithmus (5) Blockadephase Unzulänglichkeit der Schlossalgorithmen: der aktiv wartende Prozess... kann selbst keine Änderung der Bedingung herbeiführen, auf die er wartet behindert daher unnütz andere Prozesse, die sinnvolle Arbeit leisten könnten schadet damit letztlich auch sich selbst: Je länger der Prozess den Prozessor für sich behält, umso länger muss er darauf warten, dass andere Prozesse die Bedingung erfüllen, auf die er selbst wartet. die dadurch entstehenden Effizienzeinußen sind nur dann unproblematisch, wenn jedem Prozess ein eigener realer Prozessor zur Verfügung steht while (tas(lock)) sleep(lock); void release (bool *lock) { *lock = 0; awake(lock); race condition! void sleep (void *flag) { racer()->wait = flag; block(); void awake (void *flag) { unsigned next; for (next = 0; next < NTASK; next++) if (task[next].wait == flag) { task[next].wait = 0; ready(&task[next]); 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-17 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-19 Passives Warten Schlossalgorithmus (6) Bedingungsvariable Prozesse geben die Kontrolle über die CPU ab während sie Ereignisse erwarten im Synchronisationsfall blockiert sich ein Prozess auf ein Ereignis ggf. wird der PD des Prozesses in eine Warteschlange eingereiht tritt das Ereignis ein, wird ein darauf wartender Prozess deblockiert die Wartephase eines Prozesses ist als Blockadephase ( E/A-Stoß ) ausgelegt ggf. wird der Ablaufplan für die Prozesse aktualisiert (scheduling) ein anderer, lauffähiger Prozess wird plangemäß abgefertigt (dispatching) ist kein Prozess mehr lauffähig, läuft die CPU leer (idle phase) mit Beginn der Blockadephase eines Prozesses endet auch sein CPU-Stoß while (tas(lock)) sleep(lock); void sleep (void *flag) { racer()->wait = flag; block(); Verdrängung des laufenden Prozesses innerhalb der Kopfschleife (acquire()) bis zum Setzen der Wartebedingung (sleep()) wird abgewendet einer möglichen Überlappung von acquire() mit release() und der ggf. anhaltenden Blockade eines sich schlafenlegenden Prozesses wird vorgebeugt warten innherhalb kritischer Abschnitte bei gleichzeitiger Abschnittsfreigabe 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-18 7.2.1 Schlossvariable SoS i, c 2004 wosch [Koordination.tex,v 1.1 2004/06/04 13:58:42] 7-20