Prozess- synchro- nisation



Ähnliche Dokumente
Softwarelösungen: Versuch 4

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Modul B-PRG Grundlagen der Programmierung 1

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

Domänenmodell: Fadenkommunikation und -synchronisation

Monitore. Klicken bearbeiten

Grundlagen der Programmierung 1 - Teil 3. synchronisation. 500 einzahlen 100 abheben. B := read(a) B := B + 500

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Prozess-synchronisationsynchronisation

Synchronisierung von Transaktionen ohne Sperren. Annahme: Es gibt eine Methode, zu erkennen, wann eine Transaktion die serielle Ordnung verletzt.

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Prozess- synchro- nisation

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

9 Verteilte Verklemmungserkennung

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

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

Verteilte Systeme CS5001

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Objektorientierte Programmierung

Prozessor (CPU, Central Processing Unit)

Software Engineering Interaktionsdiagramme

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

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

Anwendungsbeispiele Buchhaltung

Karten-Freischaltung mit dem UNLOCK MANAGER

Technische Informatik II

Es kann maximal ein Prozess die Umladestelle benutzen.

Professionelle Seminare im Bereich MS-Office

1 topologisches Sortieren

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Urlaubsregel in David

Nutzung von GiS BasePac 8 im Netzwerk

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

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

etermin Einbindung in Outlook

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

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

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Daten-Synchronisation zwischen Mozilla Thunderbird (Lightning) / Mozilla Sunbird und dem ZDV Webmailer

Statuten in leichter Sprache

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Betriebssystembau (BSB)

Tutorial Windows XP SP2 verteilen

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Betriebssysteme (BTS)

Virtual Channel installieren

TeamSpeak3 Einrichten

leave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret

OP-LOG

Grundlagen verteilter Systeme

Updatehinweise für die Version forma 5.5.5

, Timo Hirrle

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

4D Server v12 64-bit Version BETA VERSION

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Lieber SPAMRobin -Kunde!

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

EasyWk DAS Schwimmwettkampfprogramm

Man liest sich: POP3/IMAP

Grundbegriffe der Informatik

Kapiteltests zum Leitprogramm Binäre Suchbäume

Übung: Verwendung von Java-Threads

PowerWeiss Synchronisation

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Programmierkurs Java

Lassen Sie sich dieses sensationelle Projekt Schritt für Schritt erklären:

Tipps und Tricks zu Netop Vision und Vision Pro

Leichte-Sprache-Bilder

Bilder zum Upload verkleinern

Volksbank Oelde-Ennigerloh-Neubeckum eg

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien

SANDBOXIE konfigurieren

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Internet Explorer Version 6

Zentrale Installation

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Installationsanleitung dateiagent Pro

Die Dateiablage Der Weg zur Dateiablage

6.2 Petri-Netze. kommunizierenden Prozessen in der Realität oder in Rechnern Verhalten von Hardware-Komponenten Geschäftsabläufe Spielpläne

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

HTBVIEWER INBETRIEBNAHME

Anmeldung und Zugang zum Webinar des Deutschen Bibliotheksverbandes e.v. (dbv)

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

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!.

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Anleitung zur Nutzung des SharePort Utility

! " # $ " % & Nicki Wruck worldwidewruck

Windows XP Jugendschutz einrichten. Monika Pross Molberger PC-Kurse

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

Einrichtung einer Weiterleitung auf eine private Adresse in der Hochschule

teamsync Kurzanleitung

MailUtilities: Remote Deployment - Einführung

Transkript:

Kap. 3 Prozess- synchro- nisation Version vom 05.10.2009 Kap. 3 - Inhalt Kritische Abschnitte Software-Lösungen Semaphore Hardware-Lösungen Synchronisationsprobleme Prozeßkommunikation Verklemmungen Folie 2

Kritische Abschnitte I Prozesse heissen nebenläufig (konkurrent), wenn sie zur gleichen Zeit existieren. Ziele: o Vermeidung ungewollter gegenseitiger Beeinflussung o Unterstützung gewollter Kooperation wie: Sharing von Betriebsmitteln, Übermittlung von Signalen, Nachrichtenaustausch, etc. o Fazit: Mechanismen zur Synchronisation und Kommunikation sind notwendig Folie 3 Kritische Abschnitte II Bei Programmen, die nebenläufigen Prozessen zugrunde liegen, unterscheidet man: 1. Unkritische Abschnitte, in denen nicht auf gemeinsame Daten zugegriffen wird (oder von allen Prozessen nur lesend) 2. Kritische Abschnitte, in denen auf gemeinsame Daten zugegriffen wird (nicht nur lesend) Zerlegung in kritische und unkritische Abschnitte ist eindeutig. Folie 4

Kritische Abschnitte III Situation: Drucker-Spooler Folie 5 Kritische Abschnitte IV Folie 6

Kritische Abschnitte V - Forderungen (Dijkstra 1965) Zwei Prozesse dürfen nicht gleichzeitig in ihren kritischen Abschnitten sein (Gegenseitiger Ausschluß, mutual exclusion). Jeder Prozeß, der am Eingang eines kritischen Abschnitts wartet, muß irgendwann den Abschnitt auch betreten dürfen: kein ewiges Warten darf möglich sein (fairness condition). Ein Prozeß darf außerhalb eines kritischen Abschnitts einen anderen Prozeß nicht blockieren. Es dürfen keine Annahmen über die Abarbeitungsgeschwindigkeit oder Anzahl der Prozesse bzw. Prozessoren gemacht werden. Folie 7 Kritische Abschnitte VI Gegenseitiger Ausschluß Folie 8

Kritische Abschnitte VII Modellproblem: Wir betrachten zyklische Prozesse der Gestalt: Prolog Kritischer Abschnitt Epilog Unkritischer Abschnitt Folie 9 Kritische Abschnitte VIII Welche Verfahren gibt es? Software-Lösungen für 2 oder mehr Prozesse Hardware-Lösungen Betriebssystem-Lösungen (Semaphore/Mutexe) Lock-Files (langsam) File/Record-Locking (nur für Filezugriff) Nachrichten-Lösungen (sehr allgemein) Abstrakte Datentypen (Monitore) Folie 10

Software-Lösungen I - erster Versuch Naiver Ansatz: mutual exclusion mit globaler Variabler Wartesperre errichten, bis kritischer Abschnitt frei Prozeß 1 Prozeß 2...... WHILE dran 1 DO NoOp END; Kritischer Abschnitt WHILE dran 2 DO NoOp END; Kritischer Abschnitt dran := 2; dran := 1;...... Problem: nur abwechselnde Benutzung des kritischen Abschnitts, Prozeß blockiert sich selbst (nicht-notw. Blockade und fairness verletzt bei ewigem Warten) Folie 11 Software-Lösungen II : zweiter Versuch Verbesserung: Zugang nur blockiert beim Aufenthalt in krit. Abschnitt Prozeß 1 Prozeß 2...... WHILE drin2=true DO NoOp END; drin1 := TRUE; Kritischer Abschnitt WHILE drin1= TRUE DO NoOp END; drin2 := TRUE; Kritischer Abschnitt drin1 := FALSE; drin2 := FALSE;...... Problem: Unterbrechbarkeit der Vor-Protokolle Folie 12

Software-Lösungen III : dritter Versuch Verbesserung: Vertauschung im Protokoll Prozeß 1 Prozeß 2...... DO drin1 := TRUE; WHILE drin2 = TRUE DO NoOp END; Kritischer Abschnitt drin2 := TRUE; WHILE drin1 = TRUE DO NoOp END; Kritischer Abschnitt drin1 := FALSE; drin2 := FALSE;...... Besser? Folie 13 Software-Lösungen IV : vierter Versuch Algorithmus von Peterson Verbesserung: eine globale Variable, 2 Prozeß-Zustandsvariable. Initialisierung: Interesse1 = Interesse2 = FALSE Prozeß 1 Prozeß 2...... Interesse1 := TRUE; dran := 1; WHILE dran=1 AND Interesse2=TRUE DO NoOp END; Kritischer Abschnitt Interesse2 := TRUE; dran := 2; WHILE dran=2 AND Interesse1=TRUE DO NoOp END; Kritischer Abschnitt Interesse1 := FALSE; Interesse2 := FALSE;...... Folie 14

Software-Lösungen V - Diskussion Es gibt Verallgemeinerungen auch für n>2 Prozesse, die mit Arrays von Zustandsvariablen arbeiten! Probleme: o Busy Waiting o Notwendigkeit gemeinsamer Variabler o Kompliziertheit o Viele Fehlermöglichkeiten Folie 15 Semaphore I Semaphore (Signalbarken, Dijkstra 1965) Passieren P(s) Aufruf vor krit. Abschnitt, Warten falls besetzt Verlassen V(s) Aufruf nach krit. Abschnitt, Aktivieren eines wartenden Prozesses Synchronisierung zweier Prozesse - Initialisierung s = 1 Prozeß 1 Prozeß 2...... P(s) Kritischer Abschnitt V(s) P(s) Kritischer Abschnitt V(s)...... Folie 16

Semaphore IIa Implem. durch busy waiting Software Pseudo-Code Semaphore=Zähler, initial s=1 PROCEDURE P(VAR s:integer) BEGIN WHILE s<=0 DO NoOp END; Ununterbrechbar, sobald s>0 s:=s-1; gefunden wird END P; PROCEDURE V(VAR s:integer) BEGIN s:=s+1; END V; Ununterbrechbar! Problem: spin locks können fairness verletzten, wenn niedrig-priorer Prozeß im krit. Abschnitt Folie 17 Semaphore III Implem. durch Schlafen Software Pseudo-Code Datenstruktur TYPE Semaphor = RECORD PROCEDURE P(VAR s:semaphor) value: INTEGER; BEGIN list : ProcessList; s.value:=s.value-1; END; IF s.value < 0 THEN einhängen(myid,s.list); sleep; Initial: s.value:=1 END; END P; PROCEDURE V(VAR s:semaphor) VAR PID: ProcessId; BEGIN IF s.value < 0 THEN PID:=aushängen(s.list); wakeup(pid); END; s.value:=s.value +1; END V; Folie 18

Semaphore IV Impl. durch Schlafen Implementierung von Semaphoren als Systemaufrufe ist üblich. Dabei erfolgt Benutzung der BS-internen Routinen zum Sich-Schlafen-Legen und Aufwecken. Wesentlich ist die Unteilbarkeit der Implementierung von P() und V(): Auf Einprozessorsystemen: Unteilbarkeit kann durch Sperren aller Unterbrechungen wahrend der Ausführung von P() und V() erreicht werden. Zulässig, da nur wenige Maschineninstuktionen zur Implementierung notig sind. Folie 19 Semaphore V Impl. durch Schlafen Auf Multiprozessorsystemen: Jedem Semaphor wird eine mittels Test-and-Set realisierte Sperrvariable mit Aktivem Warten vorgeschaltet. Hierdurch kann zu jedem Zeitpunkt nur höchstens ein Prozessor den Semaphor manipulieren. Beachte: Unterschiede zwischen Aktivem Warten auf den Zugang zum Semaphor, der einen kritischen Abschnitt schützt (einige Instruktionen, Mikrosekunden) und Aktivem Warten auf den Zugang zum kritischen Abschnitt selbst (problemabhangig, Zeitdauer nicht vorab bekannt oder begrenzt). Folie 20

Semaphore VI Klassifizierung Zählsemaphore Wertebereich 0, 1, 2, 3,... Für allgemeinere Aufgabenstellungen geeignet, z.b. für Erzeuger-Verbraucher-Problem Binäre Semaphore Wertebereich 0, 1 Nur für gegenseitigen Ausschluß geeignet : Mutexe Folie 21 Semaphore VII UNIX IPC-Paket Das IPC-Paket von UNIX System V besteht aus : Semaphoren Shared Memory Message Queues und bietet dafür die Systemaufrufe semget, semop, semctl shmget, shmat, shmdt, shmctl msgget, msgsnd, msgrvc, msgctl sowie die Komandos ipcs und ipcrm an. Folie 22

Semaphore VIII in Unix Manipulation von Arrays von Semaphoren: semctl() semget() semop() Semaphorkontrolloperationen: Initialisierung, Löschen, etc. Semaphor erzeugen bzw. Öffnen Verallgemeinerte Semaphoroperationen, als Spezialfall einfache P() und V()-Operation Folie 23 Semaphore IX in Unix Mutexe für Threadkommunikation pthread_mutex_t <- Datentyp pthread_mutex_lock() pthread_mutex_unlock() Folie 24

Semaphore X - in Windows NT Prozesse CreateSemaphore() OpenSemaphore() WaitForSingleObject ReleaseSemaphore() Erzeugen Initialisieren (Sema,TimeOutVal) P(s) V(s) Threads Semaphore = Typ CRITICAL_SECTION InitializeCriticalSection(S) EnterCriticalSection(S) P(s) LeaveCriticalSection(S) V(s) Kernprozesse Spin locks: keine Referenzen zu Disk-Speicher, keine traps&syscalls Folie 25 Semaphore XI - Atomare Aktionen Beispiel: Geldtransaktion Sie überweisen 2000. Computerabsturz! Abbuchung 2000 Empfänger-Gutbuchung 2000 Wo ist das Geld? Keine oder neue Überweisung = Verlust! Forderung: Atomare Aktion Entweder vollständige Transaktion oder gar keine! ( roll back bei Abbruch) Folie 26

Semaphore XII - Probleme Mögliche Fehler bei P/V-Anwendung Vertauschung : alle sind nun gleichzeitig im krit. Abschnitt V(mutex);... krit. Abschnitt...; P(mutex); Replikation oder Weglassen: ewiges Warten P(mutex);... krit. Abschnitt...; P(mutex); Falsche Reihenfolge Erzeuger P(freiePlätze); P(mutex); putinbuffer(item); V(mutex); V(belegtePlätze); Erzeuger-Verbraucher-Problem Erzeuger P(mutex); P(freiePlätze); putinbuffer(item); V(mutex); V(belegtePlätze); Folie 27 Hardware-Lösungen I - Atomare Aktionen Interrupts ausschalten (Probleme: timer, power failure, I/O) Atomare Instruktionsfolgen Test And Set (test and set lock) PROCEDURE TestAndSet(VAR target:boolean): BOOLEAN VAR tmp:boolean; tmp:=target; target:= TRUE; RETURN tmp; END TestAndSet; Swap PROCEDURE swap(var source,target: BOOLEAN) VAR tmp:boolean; tmp:=target; target:=source; source:=tmp; END swap; Fetch And Add PROCEDURE fetchandadd(var a, value:integer) VAR tmp:boolean; tmp:=a; a:=tmp+value; RETURN tmp; END fetchandadd; Folie 28

Hardware-Lösungen II : Synchronisation Mit TSL: Initialisierung: lock :=0; Prozeß 1 Prozeß 2...... enter: rg := test_and_set(lock); if rg > 0 then goto enter; enter: rg := test_and_set(lock); if rg > 0 then goto enter; Kritischer Abschnitt Kritischer Abschnitt lock := 0; lock := 0;...... Problem:? Folie 29 Synchronisationsprobleme I - Überblick Präzedenzrelationen Speisende Philosophen Erzeuger-Verbraucher-Problem readers/writers-problem Der schlafender Friseur... Folie 30

Synchronisationsprobleme II - Prozesse Präzedenzgraph A B E C D Implementierung mit Semaphoren PROCESS A: TaskBodyA; V(b); V(c); END A; PROCESS B: P(b); TaskBodyB; V(d1);V(e); END B; PROCESS C: P(c); TaskBodyC; V(d2); END C; PROCESS D: P(d1); P(d2); TaskBodyD; END D; PROCESS E: P(e); TaskBodyE; END E; Globale Variable b,c,d1,d2,e mit 0 initialisieren. Folie 31 Synchronisationsprobleme III Speisende Philosophen Philosophen essen/denken Zum Essen braucht man 2 Gabeln Aufgabe: wie kommt man zu koordiniertem Essen und Denken, bzw. wie verhindert man das Verhungern? Folie 32

Synchronisationsprobleme IV Speisende Philosophen Ausgangspunkt für Lösung: wo liegt das Problem? Folie 33 Synchronisation V - Erzeuger-Verbraucher 1. Erzeuger-Prozeß erzeugt Daten 2. Verbraucher-Prozeß verbraucht Daten 3. Unterschiedliche Erzeuger/Verbraucher-Raten 4. Endlicher Puffer zur Zwischenspeicherung der Daten 5. Protokoll? Folie 34

Synchronisation VI - Erzeuger-Verbraucher Lösung Semaphoren einführen: belegteplätze:=0, freieplätze:=n, mutex:=1 Erzeuger LOOP produce( item) P(freiePlätze); P(mutex); putinbuffer( item); V(mutex); V(belegtePlätze); END Verbraucher LOOP P(belegtePlätze); P(mutex); getfrombuffer( item); V(mutex); V(freiePlätze); consume( item); END Folie 35 Synchronisation VII - Erzeuger-Verbraucher Mögliche Fehler bei Semaphor-Lösung Falsche Reihenfolge Erzeuger-Verbraucher-Problem Erzeuger P(freiePlätze); P(mutex); putinbuffer(item); V(mutex); V(belegtePlätze); Erzeuger P(mutex); P(freiePlätze); putinbuffer(item); V(mutex); V(belegtePlätze); Folie 36

Synchronisation IX readers/writers Das berühmte readers/writers-problem (Courtois et. alt. 1971) modelliert den Zugriff auf eine Datenbank. Beispiel: Datenbank für Reservierungssystem einer Fluggesellschaft mit vielen konkurrierenden Prozessen, die Lese- und Schreibwünsche haben. Wenn mehrere Prozesse gleichzeitig lesen, ist dies akzeptabel, aber wenn ein Prozeß schreibt, darf kein anderer Prozeß zugreifen, nicht einmal lesend. Folie 37 Synchronisation X : readers/writers - Problem Aufgabe: Koordination Lesen-Schreiben von Dateien Erstes readers/writers-problem (Vorrang für Leser) Ein Leser soll nur warten, falls ein Schreiber bereits Zugriffsrecht zum Schreiben bekommen hat. Dies bedeutet, daß kein Leser auf einen anderen Leser warten muß, nur weil ein Schreiber wartet. Problem: Schreiber wartet ewig Zweites readers/writers-problem (Vorrang für Schreiber) Wenn ein Schreiber bereit ist, führt er das Schreiben so schnell wie möglich durch. Wenn also ein Schreiber bereit ist, die Zugriffsrechte zu bekommen, dürfen keine neuen Leser mit Lesen beginnen. Problem: Leser wartet ewig Folie 38

Synchronisation XI - readers/writers Semaphore ReadSem : Anzahl der Leser im krit. Abschnitt RWSem : mutex f. Lesen/Schreibvorgang Lesen Schreiben P(ReadSem); readcount:=readcount+1; IF readcount=1 THEN P(RWSem) END; V(ReadSem);... Reading_Data();... P(ReadSem); readcount:=readcount-1; IF readcount=0 THEN V(RWSem) END; V(ReadSem); P(RWSem);... Writing_Data();... V(RWSem); Folie 39 Synchronisation XII Der schlafende Friseur Folie 40

Synchronisation XIII Der schlafende Friseur Im Friseursalon stehen der Friseurstuhl und n Stühle zum Warten Wenn kein Kunde da ist, schläft der Friseur im Friseurstuhl Wenn ein Kunde hereinkommt, weckt er den schlafenden Friseur Falls zusätzliche Kunden kommen, während der Friseur die Haare eines Kunden schneidet, nehmen sie auf einem der Warte-Stühle Platz, falls welche frei sind. Andernfalls gehen sie wieder. Problem: Friseur und Kunden sind so zu programmieren, daß keine Race-Conditions auftreten. Dieses Problem ähnelt Problemen bei Warteschlangen mit mehreren Beratern und eingehenden Beratungswünschen. Folie 41 Prozeßkommunikation I Gegenüber der Prozeßsynchronisation ist die Kommunikation zwischen Prozessen ein allgemeineres Problem, bei dem es um die Übertragung von Nutzdaten geht. Dabei können auch Prozesse auf verteilten Rechnern betrachtet werden. Überblick: Signale (keine Nutzdaten, nur Info über Ereignis) Pipes Nachrichtensysteme Shared Memory Folie 42

Prozeßkommunikation II Signale Problem: Synchrones Warten blockiert Prozesse Abhilfe: Benachrichtigung durch asynchrone Signale (Software-Interrupts) o Aufsetzen der Reaktion auf ein Signal, z.b. sigaction() o Abarbeiten des Programms o Bei Signaleintritt Abarbeiten der angegebenen ISR o Weiterarbeiten im Programm Folie 43 Prozeßkommunikation III Signale POSIX Signale Folie 44

Prozeßkommunikation IV - Signale System Calls for Process Management s : Errorcode pid : Prozeß-ID residual : verbleibende Zeit vom vorigen Alarm Folie 45 Prozeßkommunikation V - Nachrichtenaustausch Allgemeinere Form der Kommunikation ohne gemeinsamen Speicher Nachrichtenausstausch ist sowohl für zentralisierte als auch verteilte Systeme möglich Aufgabe: Bereitstellung eines Mechanismus, mit dem Prozesse einander Nachrichten zukommen lassen können, ohne über gemeinsamen Speicher zu verfügen Folie 46

Prozeßkommunikation VI - Nachrichtenaustausch Operationen: - send( msg,... ) Senden einer Nachricht durch Sender(-Prozeß) - receive ( msg,... ) Empfangen einer Nachricht durch Empfänger (-Prozeß) Folie 47 Prozeßkommunikation VII - Nachrichtenaustausch Verbindung: - Verbindung ist notwendig, sie heißt Kommunikationskanal - Ein Prozeß kann mehrere Kanäle zur gleichen Zeit aufrecht erhalten - Anzahl der Teilnehmer eines Kanals Regelfall: 2 - Sonderfälle: > 2 - Richtung des Kanals: unidirektional - bidirektional Folie 48

Prozeßkommunikation VIII - Nachrichtenaustausch Wichtige Entwurfsaspekte: Adressierung, Pufferung, Nachrichtenstruktur, Implementierung Adressierung - direkt: Sender gibt Name des Empfängers an und umgekehrt - indirekt: Kommunikation erfolgt über Zwischenstationen, sog. Mailboxen Pufferung - Kapazität eines Kanals: Anzahl der Nachrichten, die darin gespeichert werden können, um Sender und Empfänger zeitlich zu entkoppeln Folie 49 Prozeßkommunikation IX - Nachrichtenaustausch Kapazität Null (keine Pufferung): Rendevouz (Ada) - Warten ohne Pufferung aufeinander: Sender wird blockiert, wenn sein send vor dem receive stattfindet. Empfänger wird blockiert, wenn receive vor dem send stattfindet. Nachricht wird ohne Zwischenspeicherung vom Sendern zum Empfänger kopiert. Folie 50

Prozeßkommunikation X - Nachrichtenaustausch Beschränkte Kapazität - Warteraum der Kapazität N - send blockiert bei vollem Warteraum - receive blockiert bei leerem Warteraum Unbeschränkte Kapazität - Blockierung nur bei receive (leerer Warteraum) - Warteplätze werden von Sender oder Empfänger mitgebracht Folie 51 Prozeßkommunikation XI - Nachrichtenaustausch Nachrichtenstruktur - bei typisierten Nachrichten Message = Kopf + Daten TYPE tmessage= RECORD EmpfängerAdresse: STRING; AbsenderAdresse: STRING; NachrichtenTyp: tmsgtyp; SequenzNummer: INTEGER; Länge: CARDINAL; Data: POINTER TO tblock; // oder inline END; - untypisierten Nachrichten: Bytestrom Folie 52

Prozeßkommunikation XII - Nachrichtenaustausch Implementierung - Buffer ist im BS-Kern angesiedelt -Bei send wird Nachricht aus dem Adressraum des Prozesses in den Puffer im Kern kopiert. -Bei receive wird Nachricht aus dem Puffer im Kern in den Adreßraum des Empfängers kopiert Folie 53 Prozeßkommunikation XIII - Nachrichtenaustausch Struktur einer Mailbox = Nachrichtenpuffer z.b. TYPE Mailbox = RECORD SenderQueue: tlist; EmpfängerQueue: tlist; MsgQueue : tlist; MsgZahl : INTEGER; einhängen(tmsg):procedure; aushängen(tmsg):procedure; END Folie 54

Prozeßkommunikation XIV - Nachrichtenaustausch Verbindungsorientierte Kommunikation openconnection (Adresse) send(message)/ receive(message) closeconnection Feststellen, ob der Empfänger existiert und bereit ist: Aufbau der Verbindung Nachrichtenaustausch; Leeren der Nachrichtenpuffer, Beenden der Verbindung Verbindungslose Kommunikation send (Adresse, Message) / receive(adresse, Message) Folie 55 Prozeßkommunikation XV - Adressierung Eindeutige Adressierung: Qualifizierte ID mit PID Adresse = Prozeß-ID.RechnerName.Firma.Land z.b. 5024.syssrv1.informatik.fh-wiesbaden.de Problem: Prozeß wechselt ID bei Neustart, Aufgabe bleibt Lösung: logische ID, nicht physische. Beispiel: Drucker Prädikatsadresse: Spezifikationen als Adresse (IF 386-CPU AND Java_installiert AND Drucker) =True: fühle dich angesprochen, sonst nicht. Arbeitsverteilung! Folie 56

Prozeßkommunikation XVI Pipes Unix pipe(), dup() - unidirektionale Kommunikation Programm1 Programm2.. Programm N Programm 1 write() read() Programm 2 Nur zwischen Prozessen möglich, deren Vorfahr die Pipe erzeugt hat. Unix Named Pipes (FIFOs) : Einträge im Filesystem: mkfifo(), mknod() Folie 57 Prozeßkommunikation XVII Pipes Windows NT CreatePipe() Bidirektionale pipes Globale Kommunikation: named pipes Folie 58

Prozeßkommunikation XVIII Message Queues Unix Message Queues sind wie Semaphore und Shared Memory Teil des IPC-Pakets msgctl() msgget() msgsnd() msgrcv() Management der Queue Queue erzeugen, öffnen Message senden Message empfangen Folie 59 Prozeßkommunikation XIX - Synchronisation Synchronisation durch Kommunikation putinbuffer(item) send(consumer,item) Item internen Puffer, geregelt mit P() und V() getfrombuffer(item) receive(producer,item) interner Puffer Item, geregelt mit P() und V() Erzeuger LOOP produce(item); send(consumer,item); END Verbraucher LOOP receive(producer,item); consume(item); END Folie 60

Prozeßkommunikation XX - Synchronisation Synchronisierung von n Prozessen durch ein Nachrichtensystem mit indirekter Adressierung Initialisierung: create_mailbox(mutex); send(mutex, message); Prozeß 1 Prozeß 2...... receive(mutex, msg) receive(mutex, msg) Kritischer Abschnitt Kritischer Abschnitt send(mutex, msg) send(mutex, msg)...... Folie 61 Prozeßkommunikation XXI - Synchronisation Zusammenfassung: Nachrichtensysteme unter Unix Pipes (pipe(), dup(), read(), write(), close()) Named Pipes (FIFOs) (mknod(), open(), read(), write(), close()) Stream Pipes (socket_pair(), read(), write(), close()) IPC Message Queues (msgget(), msgsnd(), msgrcv, msgctl()) UNIX Domain Sockets / Internet Domain Sockets (socket(), bind(), listen(), connect(), accept(), send(), recv(), read(), write(), close(), select(), sendto(), revcfrom()) Folie 62

Prozeßkommunikation XXII Shared Memory Unix Shared Memory gehört wie Semaphore und Message Queues zum IPC-Paket shmctl() shmget() shmat() shmdt() Management des SM-Segmentes SM-Segment erzeugen, öffnen SM-Segment in Prozeß-Adreßraum einblenden SM-Segment ausblenden Zur Synchronisation des Zugriffs sind i.a. Semaphore, etc. notwendig Folie 63 Verklemmungen I (deadlocks) (a) Möglicher Deadlock. (b) Entstandener Deadlock. Folie 64

Verklemmungen II Beispiel: Datei bearbeiten und ausdrucken durch zwei Prozesse P1 P1 P2 P2 hat die Datei, will den Drucker hat den Drucker, will die Datei Drucker Folie 65 Verklemmungen III Notwendige und hinreichende Bedingungen 1. Beschränkte Belegung (mutual exclusion) semaphorgeregelter Zugang 2. Zusätzliche Belegung (hold-and-wait) hat Drucker, will Datei 3. Keine vorzeitige Rückgabe (no preemption) behält Datei bzw. Drucker 4. Gegenseitiges Warten (circular wait) P1 wartet auf P2, P2 wartet auf P1 Folie 66

Verklemmungen IV Strategien: das Problem ignorieren, die Verklemmungen erkennen und beseitigen, die Verklemmungen vermeiden, die Verklemmungen verhindern (unmöglich machen). eine der Bedingungen (1) (4) verhindern Folie 67 Verklemmungen V Erkennen und beseitigen Anzeichen: viele Prozesse warten, aber CPU ist idle Prozesse müssen zu lange warten Betriebsmittelgraph (resource allocation graph) P 1 P 3 B 3 B 1 B 2 P 4 P 5 P 2 B 4 Verklemmungsbedingungen erfüllt bei Zyklen im Graphen Folie 68

Verklemmungen VIII Beseitigen Prozesse abbrechen z.b. verklemmten Prozeß oder Prozeß mit notw. BM Prozesse zurücksetzen auf check point und verklemmenden Prozess warten lassen Betriebsmittel entziehen von verklemmtem Prozeß und warten, bis BM frei werden. Folie 69 Verklemmungen IX Verklemmungsbedrohte Zustände vermeiden Test: Banker-Algorithmus (Dijkstra 1965) konservative Kreditausleihe eines Bankers: Gib nur Kredit, wenn auch die Wünsche von anderen, vorgemerkten Kunden berücksichtigt werden können bei sichergestellter Rückzahlung. Verklemmung-JA = Verklemmungsbedrohung; sie muß nicht eintreten, wenn rechtzeitig BM zurückgegeben werden. Vermeidung: lehne eine neue BM-Anforderung ab, wenn der Test sagt, daß dies zu einer Verklemmung führen kann. Aber: Realität unbekannte BM-Forderungen der Zukunft Prozeßzahl + BM-Zahl wechselt Laufzeit-+Speicherintensiver Algorithmus Folie 70

Verklemmungen X Unmöglich machen Verhindere eine der vier Bedingungen 1. Beschränkte Belegung (mutual exclusion) BM fest nur einem Service-Prozeß zuordnen 2. Zusätzliche Belegung (hold-and-wait) Nur ein BM pro Prozeß (aber: lesen und drucken nicht gleichzeitig) Alle nötigen BM auf einmal anfordern (nicht bekannt und Vergeudung!) Alle BM zurückgeben vor Neuanforderung (Verwaltungsaufwand!) 3. Keine vorzeitige Rückgabe (no preemption) Vorzeitiger Prozeß-Abbruch kann Inkonsistenzen verursachen 4. Gegenseitiges Warten (circular wait) Ordnungsrelation für BM einführen (Linearisierung) Folie 71 Verklemmungen XI Beispiele Ordnungsrelation Durchnumerieren der BM derart, daß nur höhere Nummern angefordert werden (nicht immer möglich). Anordnung von Ressourcen Ressourcen-Graph Folie 72