UNIX Portability Semaphore

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

10.2 Wechselseitiger Ausschluss in Hardware
C Tutorium – Semaphoren –
Synonyme: Stapel, Keller, LIFO-Liste usw.
Nsp Semaphore sind einfache Synchronisationsobjekte, ähnlich wie Ereignisse, aber unabhängig von Monitoren: (das) Semaphor: altes Flügelsignal.
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
Gliederung Motivation / Grundlagen Sortierverfahren
On a Buzzword: Hierachical Structure David Parnas.
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Kapitel 7.2 Dining philosophers problem
Java: Dynamische Datentypen
Nebenläufige Programmierung
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Modulare Programmierung
15.1 Synchronisation nebenläufiger Prozesse
Can you think of some KEY phrases which would be useful in multiple contexts? Take 2 minutes with a partner and come up with as many as you can!
Prozesskoordination Prof. Dr. W. Riggert.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 4 Folie 2 Message Passing mittels Sockets (1) s.a.
Laurie Clarcq The purpose of language, used in communication, is to create a picture in the mind and/or the heart of another.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
You need to use your mouse to see this presentation © Heidi Behrens.
Parallel Programming Condition Queues
Portabilität Seminar aus Softwareentwicklung: Programmierstil Christine Schiestl WS 02 / 03.
TEST - RECAP PRESENT PERFECT TENSE
Real Time Operating System
Dynamische Datentypen
CALPER Publications From Handouts to Pedagogical Materials.
Thread Synchronisation in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.

Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
Der formelle Imperativ – the Imperative
Coordinating Conjunctions Why we need them & how to use them deutschdrang.com.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Synchronization: Multiversion Concurrency Control
SiPass standalone.
Stephanie Müller, Rechtswissenschaftliches Institut, Universität Zürich, Rämistrasse 74/17, 8001 Zürich, Criminal liability.
Literary Machines, zusammengestellt für ::COLLABOR:: von H. Mittendorfer Literary MACHINES 1980 bis 1987, by Theodor Holm NELSON ISBN
Deutsch 3 Frau Snell.
Parallel Programming Semaphores / Reader - Writer - Lock
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
COMMANDS imperative 1. you (formal): Sie 2. you (familiar plural): ihr
1 Konica Minolta IT Solutions Prinzip Partnerschaft MANAGED MONITORING ÜBERWACHJUNG DER SERVERINFRASTRUKTUR UND ANWENDUNGEN DIREKT AUS DER CLOUD.
Gregor Graf Oracle Portal (Part of the Oracle Application Server 9i) Gregor Graf (2001,2002)
German “ da - compounds ” Provided by deutschdrang. com for individual and classroom use only. May not be reproduced for any other purposes.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
How to play: Students are broken up into 2-3 teams (depending on class size). Students can see the game board and the categories, but not point values.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Threads Alexander Sczyrba Jan Krüger.
Center for Biotechnology Bielefeld Bioinformatics Service Netzwerk - Programmierung Kommunikation von Prozessen Signale und Pipes Alexander Sczyrba
LINUX II Unit 9 Network File Server NFS. NFS Überblick ● Zugriff von lokalen Rechner über Netzwerk auf Dateien oder Ordnern auf entfernten Servern ● Entwickelt.
DAS VIERTE DEUTSCHE KASUS Genitiv. Kasus ● What is a case? A case shows the grammatical function of a word. ● There are four cases in German. Up to now.
Interrogatives and Verbs
IOStreamLibrary.
1.Event Queue.
Der kritische Abschnitt
Netzwerk - Programmierung
Aspect-Oriented Programming: Fad or the Future
Process and Impact of Re-Inspection in NRW
Netzwerk - Programmierung
Das Taschentuch-Spiel
IOStreamLibrary.
Echtzeit-Betriebssysteme
Aufgaben Semaphore Übersicht (Dijkstra)
ELECTR IC CARS Karim Aly University of Applied Sciences.
CSL211 Computer Architecture
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
- moodle – a internet based learning platform
 Präsentation transkript:

UNIX Portability Semaphore Guenter Fauser HP Bad Homburg

Semaphore Begriffsdefinition Ein Semaphor ist eine Datenstruktur mit zwei speziellen Nutzungsoperationen. Semaphore werden bei der Programmierung zur Prozesssynchronisation eingesetzt, also zur Lösung von Aufgaben, bei denen die parallele Ausführung mehrerer Prozesse/Threads eine zeitliche Abstimmung der Ausführungen erfordert. [Ref. Wikipedia.org] 12 November 201812 November 2018

Semaphore Namensherkunft Ursprünglich bezeichnet das Wort Semaphor einen Signalmast mit beweglichen Flügeln, wie er zur Nachrichtenübertragung in früheren Jahrhunderten eingesetzt wurde, später auch Verkehrsampel. Auch bei der Eisenbahn wurden die Formsignale als Semaphore bezeichnet. 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Semaphore als Mechanismus für die Prozesssynchronisation wurden von Edsger W. Dijkstra konzipiert und 1965 in seinem Artikel „Cooperating sequential processes“ vorgestellt. Ein Semaphor ist eine Datenstruktur mit einer Initialisierungsoperation und zwei Nutzungsoperationen. Die Datenstruktur besteht aus einem Zähler und einer Warteschlange für die Aufnahme blockierter Prozesse: struct Semaphor { int zaehler; Queue queue; /* Warteschlange */ } 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Zähler wie Warteschlange sind geschützt und können nur über die Semaphoroperationen verändert werden. Die Wirkung der Nutzungsoperation kann wie folgt zusammenfassend beschrieben werden: Semaphore regeln durch Zählen Wechselwirkungssituationen von Prozessen Semaphore realisieren ein passives Warten der Prozesse, wenn eine Weiterausführung nicht gestattet werden kann Mit der Initialisierungsoperation wird der Zähler auf einen nicht negativen Wert und die Warteschlange i. d. R. auf leer gesetzt. void init (Semaphor s, int v) { s.zaehler = v; s.queue.empty (); } 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Die Nutzungsoperationen wurden von Dijkstra mit P und V bezeichnet. Dies sind Initialen niederländischer Wörter bzw. Kofferwörter für prolaag und verhoog. Programmierschnittstellen verwenden deutlichere Bezeichnungen wie wait, acquire oder down für die P-Operation und signal, release oder up für die V-Operation. 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Semaphore, deren Zähler aufgrund der Initialisierung und der Verwendung 1 als größten positiven Wert annehmen können, werden oftmals auch binäre Semaphore bezeichnet. Semaphore, deren Zähler größere positive Werte annehmen können, werden dann zählende Semaphore („Counted Semaphor“) genannt. 12 November 201812 November 2018

Semaphore Lösung von Dijkstra (acquire lock) Bei einem Aufruf der P-Operation wird der Zähler dekrementiert. Ist der Zähler danach größer gleich 0, so setzt der Prozess seine Aktionen fort. Ist der Zähler jedoch kleiner als Null, kehrt der Kontrollfluss nicht aus der Operation zurück. Der aufrufende Prozess wird blockiert und in die Warteschlange des Semaphor eingereiht. void P (Semaphor s) { s.zaehler = s.zaehler - 1; if (s.zaehler < 0) block (s.queue); /* Blockieren des Prozesses*/ } 12 November 201812 November 2018

Semaphore Lösung von Dijkstra (release lock) Bei einem Aufruf der V-Operation wird der Zähler inkrementiert. Ist der Zähler danach größer gleich 0, so wird ein Prozess aus der Warteschlange entfernt. Dieser Prozess setzt dann seine Aktionen mit denen fort, die dem blockierenden P-Aufruf folgen. void V (Semaphor s) { s.zaehler = s.zaehler + 1; if (s.zaehler >= 0) ready (s.queue); /* Entblockieren eines Prozesses aus der Warteschlange */ } 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Beide Operationen müssen unteilbare Aktionen („atomic instruction“) sein. Dadurch ist garantiert, dass nach dem Aufruf einer Semaphor Operation kein anderer Prozess auf den Semaphor durch einen Operationsaufruf modifizierend zugreifen kann, bevor die zuerst aufgerufene Semaphoroperation nicht vollständig ausgeführt worden ist. 12 November 201812 November 2018

Semaphore Lösung von Dijkstra Semaphore beheben den Nachteil des aktiven Wartens anderer Synchronisationslösungen wie spezielle Maschinenbefehle oder Spinlocks, da ein Prozess passiv wartend wird bis der Blockadegrund entfallen ist. Die Definition lässt offen, welcher blockierte Prozess im Rahmen der Ausführung der V-Operation der Warteschlange entnommen wird. Ein Semaphor, der eine echte Warteschlange nach dem Windhundprinzip (engl. „first come, first served“) garantiert, wird manchmal als starker Semaphor bezeichnet. Ein schwacher Semaphor garantiert hingegen nicht die chronologisch richtige Abarbeitung der Warteschlange. So wird z. B. beim Echtzeitbetrieb das Entblockieren von Prozessen an deren Priorität statt an deren Blockierungszeitpunkt gebunden. 12 November 201812 November 2018

Semaphore Mutex und Atomic Instructions Neben dem Begriff Semaphor werden in diesem Zusammenhang noch die weitere Begriffe Mutex und „atomic instructions“ verwendet. Diese Begriffe lassen sich nach ihrer Verarbeitungsgeschwindigkeit einordnen Semaphore Slow Mutex Atomic Instructions Fast Ein Mutex (“mutually exclusive access”) wird oft auch als binare Semaphor bezeichnet 12 November 201812 November 2018

Semaphore Hierarchie von Semaphors Um die Wahrscheinlichkeit von “deadlocks” zu verringern, müssen Semaphore oft in einer Hierarchie zusammen gefasst werden. Prozess 1 Prozess 2 Request Resource A Request Resource B Request Resource B Request Resource A 12 November 201812 November 2018

UNIX Portability Semaphores und OVMS Lock Manager Locks und Mutex‘es werden häufig und in vielen Programmen gebraucht. Die Nutzung des OpenVMS “Distributed Lock Managers” ist jedoch sehr verschieden von den, in Unix Systemen gebräuchlichen IPC Semaphore. Ein Ausweg ist oft die Verwendung von Mutex’es aus der Posix Thread library. Eine Implementierung der UNIX System V IPC Semaphore auf OpenVMS erleichtert die Portierung von UNIX Programmen nach OpenVMS in vielen Fällen erheblich. 12 November 201812 November 2018

UNIX Portability OVMS Distributed Lock Manager Der OpenVMS Distributed Lock Manager implementiert ein mehrstufiges locking System mit sechs fest definierten „lock value“ Stufen. Bedeutung NL Null Lock CR Concurrent Read CW Concurrent Write PR Protected Read PW Protected Write EX Exclusive 12 November 201812 November 2018

UNIX Portability OpenVMS distributed Lock Manager Requested Lock Mode of Currently Granted Locks NL CR CW PR PW EX Yes No 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore Ein eher komplexes System steht mit den System V IPC Semaphore zur Verfügung. Es ist am einfachsten als eine Verwaltung von Ressourcen zu beschreiben. Anfänglich wird ein maximaler Wert von Ressourcen als Semaphor Wert vorgegeben. Jeder Prozess kann von diesem Semaphor Wert Ressourcen abrufen, wodurch der Semaphor Wert entsprechend reduziert wird. Verlangt ein Prozess mehr Ressourcen als derzeit zur Verfügung stehen, wird dieser Prozess in einen passiven Wartezustand versetzt und muss warten, bis ein anderer Prozess genügend Ressourcen and den Semaphor zurück gibt. Der Wert der Semaphor kann Null, aber nicht negativ werden. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore “Counted Semaphore“ in UNIX System V sind implementiert als ein „Global shared section“ zu dem jeder Prozess im System Zugriff hat. User Program IPC shared memory segment API System V Kernel 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore The semget() function  semget – get/create set of semaphore #include <sys/sem.h> int semget(key_t key, int nsems, int semflg); Semaphore are organized in up to 10 Semaphores Sets identified by key, each set can containing up to 25 independent Semaphore. nsems is used to specify the number of Semaphore to be created in a Set. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore int semget(key_t key, int nsems, int semflg); key is an arbitrary number in the 16 bit range and used to identify the Semaphore Set to be used or created. semflg is set either to IPC_PRIVATE or IPC_CREATE If set to IPC_PRIVATE and key already exists, a connection to the existing Semaphore Set is made, otherwise a new Semaphore Set is created for the given key. If set to IPC_CREATE, and key does not exists, a Semaphore Set is created for the given key. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore int main(int argc, char *argv[]) { int sm_key; if((sm_key = semget(12345, 10, IPC_CREATE | 077)) < 0) perror("semget() has failed"); exit(0); } In this example, semget() creates a Semaphore Set containing 10 independent Semaphore for the key value “12345” under the assumption, that the key value “12345” is not already in use. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore The semop() function. #include "ipc.h“ int semop(int semid, struct sembuf *sops, size_t nsops); The semop() function is used to perform atomically a user-defined array of semaphore operations on the set of semaphores associated with the semaphore identifier specified by the argument semid. Member Type Member Name Description short sem_num Semaphore Number sem_op Semaphore operation sem_flg Operation flag 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphors The sembuf data structure item sem_op is used to specify the Semaphore operation. sem_op < 0 Allocate the abs. value of sem_op resources from Semaphore. If the resource count of the Semaphore is less the requested number of resources, block the process. sem_op > 0 Add the value of sem_op to the Semaphore resource count and unblock processes. sem_op = 0 Block until the Semaphore resource count becomes zero. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore The semctl() function. #include <sys/sem.h> int semctl(int semid, int semnum, int cmd, ...); The semctl() function provides a variety of semaphore control operations as specified by cmd. The fourth argument is optional and depends upon the operation requested. 12 November 201812 November 2018

UNIX Portability UNIX System V IPC Semaphore The semctl() functions GETVAL Return the Semaphore value SETVAL Set the Semaphore value GETPID Return the last op. Semaphore PID GETCNT Return number of blocked processes GETZCNT Return number of zero blocked processes GETALL Return the value of all Semaphores in Set SETALL Set the value of all Semaphores in Set IPC_STAT Return the semid_ds data structure IPC_SET Set the semid_ds data structure IPC_RMID Remove the Semaphore Set from system. 12 November 201812 November 2018

UNIX Portability The Beer brewery example if resource count == 0 (semop() function 0) Glassware producer of beer bottles Brewery Producer add resource Resource count consumes returns returns consumes returns consumes Consumer 1 Consumer 3 Consumer 2 Wait Wait Wait 12 November 201812 November 2018

UNIX Portability OVMS IPC Semaphore Components IPC$SHARE.C IPC$SHARE.H IPC$SHARE.OPT IPC.H IPCLIB.C 12 November 201812 November 2018

UNIX Portability OVMS IPC Semaphores Build instructions $Compile IPC$SHARE $Compile IPCLIB $LINK/share=IPC$SHARE.EXE - IPC$SHARE,IPC$SHARE.OPT 12 November 201812 November 2018

UNIX Portability The Beer brewery Build instructions $Compile BOTTLE_CONSUMER $COMPILE BOTTLE_PRODUCER_A (Deadlock Example) $COMPILE BOTTLE_PRODUCER_B (Working Example) $LINK BOTTLE_PRODUCER_A,IPCLIB,IPC$SHARE/SHARE $LINK BOTTLE_PRODUCER_B,IPCLIB,IPC$SHARE/SHARE $LINK BOTTLE_CONSUMER,IPCLIB,IPC$SHARE/SHARE 12 November 201812 November 2018

UNIX Portability Bibliography W.Richard Stevens Advanced Programming in the UNIX Environment David R. Butenhof Programming with POSIX Threads Allen B. Downey The Little Book of Semaphores http://greenteapress.com/semaphores http://h71000.www7.hp.com/doc/ 12 November 201812 November 2018

Unix Portability Semaphore ?

UNIX Portability Fun with Semaphore Problem der essenden Philosophen Das Problem der essenden Philosophen (dining philosopher problem) macht die Grundannahme, dass Philosophen abwechseln denken und Spaghetti essen. Das ist (ausser für Philosophen) an sich noch kein Problem, es sei denn, es ist zu wenig Besteck vorhanden: 12 November 201812 November 2018

UNIX Portability Fun with Semaphores Damit ein Philosoph essen kann, muss er zwei Gabeln nehmen. Da nur soviel Gabeln vorhanden sind wie Philosophen, können nicht alle Philosophen gleichzeitig essen. Gesucht ist nun ein Algorithmus, der es erlaubt, dass möglichst viele Philosophen gleichzeitig essen und kein Philosoph benachteiligt wird. Jeder Philosoph führt nacheinander und wiederholt die Schritte denken (think), Gabeln nehmen (take forks), essen (eat) und Gabeln wieder hinlegen (put forks) aus. 12 November 201812 November 2018

UNIX Portability Fun with Semaphore Ein einfacher Algorithmus, der den oben genannten Anforderungen genügt, repräsentiert jede Gabel durch einen Semaphor mit Initial- und Maximalwert 1. Jeder Philosoph führt während des Schritts takeForks ein acquire für seine beiden Gabel-Semaphoren aus und beim Schritt putForks ein release für die beiden Semaphore. Damit kein Deadlock entsteht, nummeriert man die Gabeln und stellt sicher, dass alle Philosophen immer zuerst ein acquire auf dem Gabel-Semaphor ausführt, der mit der niedrigeren Zahl beschriftet ist. Literatur: Andrew S. Tanenbaum: Modern Operating Systems; Kapitel 2.3.1 12 November 201812 November 2018