Systemprogrammierung. Prozesssynchronisation auf der Befehlssatzebene



Ähnliche Dokumente
Prozesssynchronisation auf der Befehlssatzebene. Systemprogrammierung. Gliederung. Kontrolle asynchroner Programmunterbrechungen

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

Softwarelösungen: Versuch 4

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

Betriebssystemtechnik

Einführung in die Programmierung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

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

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Computerarithmetik ( )

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Monitore. Klicken bearbeiten

Betriebssystembau (BSB)

Lizenzen auschecken. Was ist zu tun?

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Partitionieren in Vista und Windows 7/8

Eigene Dokumente, Fotos, Bilder etc. sichern

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

Domänenmodell: Fadenkommunikation und -synchronisation

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

Koordination nebenläufiger Prozesse

Benutzerkonto unter Windows 2000

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Anlegen eines Speicherbereichs mit DB, DW eleganter in Kombination mit EQU, Timer-Interrupt

Tipps und Tricks zu Netop Vision und Vision Pro

Grundlagen der Theoretischen Informatik, SoSe 2008

Überprüfung der digital signierten E-Rechnung

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

Programmierkurs Java

Es kann maximal ein Prozess die Umladestelle benutzen.

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

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

1 topologisches Sortieren

Local Control Network

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

Primzahlen und RSA-Verschlüsselung

LPT1 Anschluss mit PCMCIA Karte

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

Die Mikroprogrammebene eines Rechners

Gliederung. Monitor (eine auf ein Modul bezogene) Klasse

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

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

How to do? Projekte - Zeiterfassung

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Lehrer: Einschreibemethoden

Übungen zum Fach Betriebssysteme Kapitel 3

Wichtig ist die Originalsatzung. Nur was in der Originalsatzung steht, gilt. Denn nur die Originalsatzung wurde vom Gericht geprüft.

Lineare Gleichungssysteme

Verwendung des IDS Backup Systems unter Windows 2000

Anhang zum Handbuch. Netzwerk

Zeichen bei Zahlen entschlüsseln

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

OPERATIONEN AUF EINER DATENBANK

Modellierung und Programmierung 1

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

4D Server v12 64-bit Version BETA VERSION

iphone-kontakte zu Exchange übertragen

Tutorium Rechnerorganisation

Anleitung zum Computercheck Windows Firewall aktivieren oder eine kostenlose Firewall installieren

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Beweisbar sichere Verschlüsselung

Erstellen eines Formulars

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

SICHERN DER FAVORITEN

5 Speicherverwaltung. bs-5.1 1

iloq Privus Bedienungsanleitung Schließanlagen Programmierung Version 1 - Copyright 2013

BERECHNUNG DER FRIST ZUR STELLUNGNAHME DES BETRIEBSRATES BEI KÜNDIGUNG

Grundlagen verteilter Systeme

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

Der beste Plan für Office 365 Archivierung.

Agentur für Werbung & Internet. Schritt für Schritt: Newsletter mit WebEdition versenden

Hinweise zum Ausfüllen der Zeiterfassung

1 Vom Problem zum Programm

Internet Explorer Version 6

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

Kapiteltests zum Leitprogramm Binäre Suchbäume

S7-Hantierungsbausteine für R355, R6000 und R2700

Leichte-Sprache-Bilder

SANDBOXIE konfigurieren

Kurzanleitung MAN E-Learning (WBT)

Stammdaten Auftragserfassung Produktionsbearbeitung Bestellwesen Cloud Computing

Wollen Sie einen mühelosen Direkteinstieg zum Online Shop der ÖAG? Sie sind nur einen Klick davon entfernt!

1. Welche Systemvoraussetzungen muss mein PC erfüllen, damit ich die Kurse nutzen kann?

Installation OMNIKEY 3121 USB

Web Interface für Anwender

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Video Unlimited -Nutzungsbeschränkungen

Erwin Grüner

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Benutzerhandbuch - Elterliche Kontrolle

Petri-Netze / Eine Einführung (Teil 2)

SEP 114. Design by Contract

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Der Fristentransformationserfolg aus der passiven Steuerung

Einführung in Subversion

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

1 Mathematische Grundlagen

Transkript:

Systemprogrammierung Prozesssynchronisation: Befehlssatzebene Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 18. November 2014 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 1 / 34 C X-4 Befehlssatzebene 1 Vorwort Prozesssynchronisation auf der Befehlssatzebene Alleinstellungsmerkmal dieser Abstraktionsebene sind allgemein die in der CPU manifestierten Fähigkeiten eines Rechensystems, hier: (a) in Bezug auf die Bereitstellung von Spezialbefehlen und (b) hinsichtlich der Semantik dieser Befehle zur Prozessverarbeitung Techniken zur Synchronisation gleichzeitiger Prozesse können demzufolge nur auf sehr einfache, elementare Konzepte zurückgreifen zu (a) die Möglichkeit, externe/interne Prozesse aussperren zu können Unterbrechungssperre Schlossvariable, Umlaufsperre zu (b) die Möglichkeit, kritische Abschnitt so ausformulieren zu können, dass gleichzeitige Prozesse nicht ausgesperrt werden nichtblockierende Synchronisation c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 2 / 34

C X-4 Befehlssatzebene Gliederung 2 Unterbrechungssteuerung 1 Unterbrechungssteuerung 2 Schlossvariable Definition 3 Nichtblockierende Synchronisation Elementaroperation Anwendung 4 Zusammenfassung 5 Anhang c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 3 / 34 C X-4 Befehlssatzebene 2 Unterbrechungssteuerung 2.1 Kontrolle asynchroner Programmunterbrechungen Ansatz: asynchrone Programmunterbrechungen entweder verhindern oder tolerieren, und zwar durch Verzögerung der... überlappenden Aktivität pessimistisches Verfahren { Ebene Spezialbefehle der 2 : cli, sti (x86) Ebene 3 : sigprocmask (POSIX) überlappten Aktivität optimistisches Verfahren durch Spezialbefehle und Programme der Ebene 2 : CISC CAS (IBM 370, m68020+), CMPXCHG (i486+) RISC LL/SC (DEC Alpha, MIPS, PowerPC) ohne Spezialbefehle BS/BST hart weich Unterbrechungen sperren: einfach aber nicht immer zweckmäßig Faustregel: harte Synchronisation ist möglichst zu vermeiden c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 4 / 34

C X-4 Befehlssatzebene 2 Unterbrechungssteuerung 2.1 Wiedersehen mit einem alten Problem: Überlapptes Zählen int wheel = 0; Plötzlich... void attribute ((interrupt)) niam () { wheel++; Schlecht... main () { for (;;) printf("%u\n", wheel++); Wettlaufsituation kritischer Abschnitt: ++ Laufgefahr vorbeugen ELOP int fai(int*) Besser... main () { for (;;) printf("%u\n", fai(&wheel)); unteilbares Zählen konstruktiv und problemadäquat sicherstellen c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 5 / 34 C X-4 Befehlssatzebene 2 Unterbrechungssteuerung 2.1 Verhinderung vs. Tolerierung von Interrupts Verhinderung int fai (int *ref) { int aux; asm volatile ("cli"); aux = (*ref)++; asm volatile ("sti"); Tolerierung int fai (int *ref) { int aux = 1; asm volatile ("xaddl %0,%1" : "=g" (aux), "=m" (*ref) : "0" (aux), "m" (*ref)); return aux; return aux; Komplexbefehl der Ebene 3 privilegierte Befehle cli/sti Komplexbefehl der Ebene 2 unprivilegierter Befehl xadd Elementaroperation des BS Elementaroperation der CPU Beachte: Multiprozessorbetrieb die Befehle haben nur lokale Signifikanz für ihren Prozessor(kern) c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 6 / 34

C X-4 Befehlssatzebene 2 Unterbrechungssteuerung 2.2 Unterbrechungssperre: x86 typedef unsigned short irq_t; // flags register placeholder void irq_block(); // disable interrupts at CPU void irq_admit(); // enable interrupts at CPU irq_t irq_avert(); // save CPU interrupt level then block void irq_treva(irq_t); // restore saved CPU interrupt level void irq_block() { asm volatile("cli"); irq_t irq_avert() { irq_t flags; asm volatile( "pushf; pop %0; cli" : "=g" (flags)); return flags; void irq_admit() { asm volatile("sti"); void irq_treva(irq_t flags) { asm volatile( "push %0; popf" : : "g" (flags)); c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 7 / 34 C X-4 Befehlssatzebene 2 Unterbrechungssteuerung 2.2 Schutz kritischer Abschnitte durch Unterbrechungssperre solo-optionen: Unterbrechungssperre typedef irq_t solo_t; #define CS_ENTER(solo) irq_block() #define CS_LEAVE(solo) irq_admit() #define CS_ENTER(solo) *solo = irq_avert() #define CS_LEAVE(solo) irq_treva(*solo) Beachte: Unabhängige gleichzeitige Prozesse für unverschachtelte KA ohne Zustandssicherung für verschachtelte KA mit Zustandssicherung werden unnötig zurückgehalten, obwohl sie den KA nicht durchlaufen Beachte: Unterbrechungsverzögerung die größte WCET a aller durch Unterbrechungssperre gesicherten KA erhöhtes Risiko des Verlusts von Unterbrechungsanforderungen a Abk. für (engl.) worst case execution time. c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 8 / 34

C X-4 Befehlssatzebene 3 Schlossvariable Gliederung 1 Unterbrechungssteuerung 2 Schlossvariable Definition 3 Nichtblockierende Synchronisation Elementaroperation Anwendung 4 Zusammenfassung 5 Anhang c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 9 / 34 C X-4 Befehlssatzebene 3 Schlossvariable 3.1 Definition Schlossvariable (engl. lock variable) Datentyp, der zwei grundlegende Operationen definiert: acquire (auch: lock) = Eintrittsprotokoll verzögert einen Prozess, bis das zugehörige Schloss offen ist bei geöffnetem Schloss fährt der Prozess unverzögert fort verschließt das Schloss ( von innen ), wenn es offen ist release (auch: unlock) = Austrittsprotokoll öffnet ein Schloss, ohne den öffnenden Prozess zu verzögern en dieses Konzepts werden auch als Schlossalgorithmen (engl. lock algorithms) bezeichnet c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 10 / 34

C X-4 Befehlssatzebene 3 Schlossvariable 3.2 Schlossalgorithmus: mit Problem(en) typedef struct lock { volatile bool busy; // status of critical section... // optional stuff needed for other variants lock_t; : Laufgefahr void lv_acquire (lock_t *lock) { while (lock->busy); lock->busy = true; void lv_release (lock_t *lock) { lock->busy = false; die Phase vom Verlassen der Kopfschleife bis zum Setzen der Schlossvariablen ist kritisch gleichzeitige Prozesse können das Schloss geöffnet vorfinden, dann jeweils schließen und gemeinsam den kritischen Abschnitt belegen Abprüfen und setzen (engl. test and set, TAS) der Schloßvariablen muss als Elementaroperation und wirklich atomar ausgelegt sein c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 11 / 34 C X-4 Befehlssatzebene 3 Schlossvariable 3.2 Schlossvariable atomar abprüfen und setzen Kritischer Abschnitt: solo t int tas(lock_t *lock) { bool busy; CS_ENTER(&lock->gate); busy = lock->busy; lock->busy = true; CS_LEAVE(&lock->gate); Elementaroperation: x86 int tas(volatile bool *lock) { bool busy; busy = true; asm volatile("lock xchgb %0,%1" : "=q" (busy), "=m" (*lock) : "0" (busy)); return busy; return busy; lock t mit solo-option: Verdrängungssperre oder Unterbrechungssperre lock xchgb read-modify-write atomarer Buszyklus Operandenaustausch untauglich für Multiprozessoren tauglich für Multiprozessoren c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 12 / 34

C X-4 Befehlssatzebene 3 Schlossvariable 3.2 Umlaufsperre (engl. spin lock) Drehschloss void lv_acquire (lock_t *lock) { while (TAS(lock)); TAS kommt in zwei Varianten (S. 12): (a) int tas(lock t *) (b) int tas(volatile bool *) Gefahr von Leistungsabfall pausenloses Schleifen allein nur mit TAS: (a) erhöht das Risiko, Anforderungen von Programmunterbrechungen oder Prozessverdrängungen zu verpassen die Unterbrechungs- bzw. Verdrängungssperre ist fast nur noch gesetzt (b) hindert andere Prozessoren am Buszugang bzw. sorgt für eine überaus hohe Last im Kohärenzprotokoll des Zwischenspeichers der Prozessor führt fast nur noch read-modify-write -Zyklen durch das Problem verschärft sich massiv, wenn (viele) gleichzeitige Prozesse den Wettstreit (engl. contention) um das Drehschloss aufnehmen c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 13 / 34 C X-4 Befehlssatzebene 3 Schlossvariable 3.2 Sensitive Umlaufsperre Nichtinvasives Warten void lv_acquire (lock_t *lock) { do { while (lock->busy); while (TAS(lock)); Zurücktretendes Warten void lv_acquire(lock_t *lock) { while (true) { while (lock->busy); if (!TAS(lock)) break; lv_backoff(lock); nur lesender Zugriff beim Warten Zwischenspeicherzeile gemeinsam benutzbar (MESI, [4]) einmal read-modify-write (TAS) beruhigend für den Busverkehr Eigenschaften wie zuvor, zusätzlich: Wettstreit (engl. contention) aus dem Wege gehend zusätzliche Wartezeit ( back-off ) nach gescheitertem TAS prozessspezifisch, ansteigend Exponentielles Zurücktreten (engl. exponential back-off) beschränkte Wartezeitverdopplung mit jedem gescheitertem Versuch c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 14 / 34

C X-4 Befehlssatzebene 3 Schlossvariable 3.3 Aktives Warten (engl. busy waiting) Unzulänglichkeit der Schlossalgorithmen: der aktiv wartende Prozess... kann keine Änderung der Bedingung herbeiführen, auf die er wartet behindert 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. in den meisten Fällen sind Effizienzeinbußen in Kauf zu nehmen es sei denn, jeder Prozess hat seinen eigenen realen Prozessor(kern) Allgemein ein nur bedingt effektives Verfahren notwendige Bedingung hinreichende Bedingung kurze Laufzeit des zu schützenden KA CPU-Abgabe nach gescheitertem Versuch bei gemeinsam benutzten Prozessor(kern) c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 15 / 34 C X-4 Befehlssatzebene 3 Schlossvariable 3.3 Aktives Warten ohne Prozessorabgabe Spin locking considered harmful P 1 acquire release acquire Zeitscheibe release T s T q T q /T s P 1 12 20 1.67 P 2 8 8 1.0 P 2 P 1 P 2 acquire acquire Zeitscheibe Zeitscheibe release release T s T q T q /T s P 1 12 24 2.0 P 2 17 23 1.35 Verbesserung: Prozessorabgabe in der Warteschleife (vgl. S. 34) laufend bereit in Laufbereitschaft bleiben ps forgo laufend blockiert schlafend die Schlossfreigabe erwarten ps sleep c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 16 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation Gliederung 1 Unterbrechungssteuerung 2 Schlossvariable Definition 3 Nichtblockierende Synchronisation Elementaroperation Anwendung 4 Zusammenfassung 5 Anhang c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 17 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.1 Motivation Blockierende Synchronisation considered harmful Probleme von Schlossvariablen, Semaphore und Monitore Leistung (engl. performance) insbesondere in SMP-Systemen [1] spin locking reduziert ggf. massiv Busbandbreite Robustheit (engl. robustness) single point of failure ein im kritischen Abschnitt scheiternder Prozess kann schlimmstenfalls das ganze System lahm legen Einplanung (engl. scheduling) wird behindert bzw. nicht durchgesetzt un- bzw. weniger wichtige Prozesse können wichtige Prozesse ausbremsen bzw. scheitern lassen Prioritätsverletzung, Prioritätsumkehr [3] Mars Pathfinder [5, 2] Verklemmung (engl. deadlock) einiger oder sogar aller Prozesse c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 18 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.2 Optimistisches Verfahren der Synchronisation Nebenläufigkeit unterstützen, nicht einschränken wie beim wechselseitigen Ausschluss Koordinierung sich einander ggf. überlappender Aktivitäten, ohne dabei gleichzeitige Prozesse auszuschließen toleriert (pseudo-) parallele Programmausführungen parallel Multiprozessor, wirkliche Parallelität pseudoparallel Uniprozessor, Parallelität durch Unterbrechungen die Verfahren greifen auf nichtprivilegierte Befehle der ISA zurück CISC TAS, FAA, CAS bzw. CMPXCHG RISC LL/SC d.h., sie funktionieren im Benutzer- wie auch im Systemmodus Beachte kein wechselseitiger Ausschluss Verklemmungsvorbeugung die benutzten Befehle müssen echte Elementaroperationen c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 19 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.2 Muster nichtblockierender Synchronisation (NBS) erledige NBS mit CAS; wiederhole ziehe lokale Kopie des Inhalts der Adresse einer globalen Variablen; verwende die Kopie, um einen neuen lokalen Wert zu berechnen; versuche CAS: sichere den lokalen Wert an die Adresse, wenn ihr Inhalt immer noch mit dem Wert der lokalen Kopie identisch ist; solange CAS scheitert; basta. pros cons Tolerierung beliebiger Überlappungsmuster transparent für die Einplanung: keine Prioritätsumkehr Verklemmungsvorbeugung: kein wechselseitiger Ausschluss Robustheit: keine hängenden Sperren bei Programmabbrüchen Wiederverwendung sequentieller Altsoftware unmöglich Gefahr von Verhungerung (engl. starvation) in simplen Lösungen Entwicklung nebenläufiger Varianten im Regelfall nicht trivial c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 20 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.3 Elementaroperation Bedingte Wertzuweisung: Compare and Swap, CAS int cas(word_t *ref, word_t exp, word_t val) { solo_t gate; // assume bus resp. interrupt lock bool done; CS_ENTER(&gate); if (done = (*ref == exp)) *ref = val; CS_LEAVE(&gate); ref exp val return done; die Adresse des atomar, bedingt zu ändernden Speicherworts der unter der Adresse ref erwartete alte Wert der unter der Adresse ref zu speichernde neue Wert die Speicherung erfolgt nur, wenn der unter ref gespeicherte Wert dem erwarteten Wert exp gleicht lag Gleichheit vor, liefert die Funktion true, anderenfalls false c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 21 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.3 Elementaroperation Bedingte Wertzuweisung: CAS als Spezialbefehl (x86) ZF = (eax == *ref)? (*ref = val, true) : (eax = *ref, false) int cas(word_t *ref, word_t exp, word_t val) { unsigned char done; // "sete" writes to low byte of operand asm volatile( "lock\n\t" // next comes atomic read-modify-write "cmpxchgl %2,%1\n\t" // conditional exchange of operands "sete %0" // transfer value of zero flag (ZF bit) : "=q" (done), "=m" (*ref) : "r" (val), "m" (*ref), "a" (exp) : "memory"); return done; lock cmpxchgl sete setzt die Bussperre für den nachfolgenden Befehl zwingend für Multi(kern)prozessorsysteme, optional sonst compare & exchange: ZF = true Speicherung erfolgt definiert Variable done mit dem Wert des ZF-Bits c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 22 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.4 Anwendung Sperrfreie (engl. lock-free) Wartestapelmanipulation LCFS (Abk. für engl. last come, first served) Aufnahme in die Liste... void lf_push(chain_t *head, chain_t *item) { do item->link = head->link; while (!CAS(&head->link, item->link, item)); // is elected head // try push item Entnahme aus der Liste... chain_t *lf_pull(chain_t *head) { chain_t *item; do if ((item = head->link) == 0) break; while (!CAS(&head->link, item, item->link)); // access head // try pull item return item; #define CAS(r,e,v) cas((word_t*)r, (word_t)e, (word_t)v) c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 23 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.4 Anwendung Problem ABA Transaktion gelingt trotz zwischenzeitlicher Änderungen Phänomen der nichtblockierenden Synchronisation auf Basis eines CAS, d.h., einer ELOP, die inhaltsbasiert arbeitet 1 angenommen zwei Fäden, F 1 und F 2, stehen im Wettstreit um eine gemeinsame Variable V F 1 liest den Wert A von V, speichert diesen als Kopie, wird dann allerdings vor dem CAS V für unbestimmte Zeit verzögert F 2 durchläuft dieselbe Sequenz, schafft jedoch mittels CAS V den Wert B an V zuzuweisen anschließend wird (in einem weiteren Durchlauf dieser Sequenz) wieder der ursprüngliche Wert A an V zugewiesen F 1 setzt seine Ausführung mit CAS V fort, erkennt, dass V den Wert A seiner Kopie speichert und überschreibt V im Ergebnis kann dieses Überlappungsmuster dazu führen, dass F 1 mittels CAS V einen falschen Wert nach V transferiert 1 Bei Adressreservierung wie z.b. mit LL/SC besteht dieses Problem nicht. c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 24 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.4 Anwendung Problem ABA: Wartestapel mit Wettlaufsituation Ausgangszustand der (LCFS) Liste: head A B C, head ist ref CAS : CAS-Parameter Op. *ref exp val Liste 1. F 1 pull A A B unverändert 2. F 2 pull A A B ref B C 3. F 2 pull B B C ref C 4. F 2 push C C A ref A C 5. F 1 pull A A B ref B A C verloren 1. F 1 wird im pull vor CAS unterbrochen, behält lokalen Zustand bei 2. 4. F 2 führt die Operationen komplett aus, aktualisiert die Liste 5. F 1 beendet pull mit dem zum Zeitpunkt 1. gültigen lokalen Zustand c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 25 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.4 Anwendung Kritische Variable mittels Zeitstempel absichern Abhilfe besteht darin, den umstrittenen Zeiger (nämlich item) um einen problemspezifischen Generationszähler zu erweitern Etikettieren Zeiger mit einem Anhänger (engl. tag) versehen Ausrichtung (engl. alignment) ausnutzen, z.b.: sizeof (chain t) 4 = 2 2 n = 2 chain t ist Vielfaches von 4 chain t Bits[0:1] immer 0 DCAS Platzhalter für n-bit Marke/Zähler in jedem Zeiger Abk. für (engl.) double compare and swap Marke/Zähler als elementaren Datentyp auslegen unsigned int hat Wertebereich von z.b. [0, 2 32 1] zwei Maschinenworte (Zeiger, Marke/Zähler) ändern push bzw. pull verändern sodann den Zeigerwert um eine Generation c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 26 / 34

C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.5 Generationszähler considered harmful? Abhilfe (engl. workaround) zum ABA-Problem Bedingte Lösung die Effektivität des Lösungsansatzes steht und fällt mit dem für den Generationszähler definierten endlichen Wertebereich dessen Auslegung letztlich vom jeweiligen Anwendungsfall abhängt Überlappungsmuster gleichzeitiger Prozesse haben Einfluss auf den für den Generationszähler zur Verfügung zu stellenden Wertebereich bestimmt durch Zusammenspiel und Anzahl der wettstreitigen Fäden ein Bit kann reichen, ebenso, wie ein unsigned int zu klein sein kann diese, dem jeweiligen Anwendungsfall zu entnehmenden Muster zu entdecken, ist zumeist schwer und nicht selten unmöglich Vorbeugung (engl. prevention) muss zuerst kommen sofern machbar: beliebige Überlappungsmuster konstruktiv (Entwurf) ausschließen oder auf Adressreservierungsverfahren der Hardware zurückgreifen unterstützt nicht jede Hardware, ist nur typisch für RISC z.b. ELOP-Paar load linked, store conditional (LL/SC) verwenden c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 27 / 34 C X-4 Befehlssatzebene 4 Nichtblockierende Synchronisation 4.5 Wiederholungsversuche Aktives Warten? Scheitern der etwa durch CAS 2 abzuschließenden Transaktion zieht die Wiederholung des kompletten Vorbereitungsvorgangs nach sich je höher der Grad an Wettstreitigkeit unter gleichzeitigen Prozessen, umso höher die Wahrscheinlichkeit, dass CAS scheitert ein zur Umlaufsperre sehr ähnliches Problem ergibt sich, das jedoch durch sensitive Techniken gleicher Art lösbar ist (vgl. S. 13 14) Häufigkeit von read-modify-write -Zyklen pro Durchlauf minimieren prozessspezifisches Zurücktreten vom erneuten Transaktionsversuch variable Wartezeiten, um Konflikte bei Wiederholungen zu vermeiden Unterschied zur Umlaufsperre gleichzeitige Prozesse müssen nicht untätig darauf warten, dass ein kritischer Abschnitt entsperrt wird und somit frei ist im Gegensatz zur Umlaufsperre kommen sie während ihrer Wartezeit mit ihren (lokalen) Berechnungen voran 2 Für LL/SC-artige Elementaroperationen gilt dies ebenfalls. c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 28 / 34

C X-4 Befehlssatzebene Gliederung 5 Zusammenfassung 1 Unterbrechungssteuerung 2 Schlossvariable Definition 3 Nichtblockierende Synchronisation Elementaroperation Anwendung 4 Zusammenfassung 5 Anhang c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 29 / 34 C X-4 Befehlssatzebene Resümee 5 Zusammenfassung Unterbrechungssteuerung ist leicht, aber nicht immer zweckmäßig verlangt von den Prozessen besondere Rechte: privilegierte Befehle unbeteiligte gleichzeitige Prozesse werden unnötig ausgesperrt externe Ereignisse (Interrupts) können verloren gehen ungeeignet für Multi(kern)prozessorsysteme: lokale Signifikanz die Schlossvariable kommt meist mit Umlaufsperre zum Einsatz pessimistischer Ansatz zum Schutz kritischer Abschnitte: leicht gleichzeitige Prozesse werden als sehr wahrscheinlich angenommen bezogen auf den jeweils zu schützenden kritischen Abschnitt im Regelfall bedingen Leistungsanforderungen sensitive Verfahren Häufigkeit von read-modify-write -Zyklen pro Durchlauf minimieren prozessspezifisches Zurücktreten vom erneuten Schließversuch mit TAS variable Wartezeiten, um Konflikte bei Wiederholungen zu vermeiden als blockierende Synchronisation besteht hohe Verklemmungsgefahr nichtblockierende Synchronisation ist frei von Verklemmungen optimistischer Ansatz zum Schutz kritischer Abschnitte: schwer die Verfahren müssen ebenfalls sensitiv für Plattformeigenschaften sein c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 30 / 34

C X-4 Befehlssatzebene 5 Zusammenfassung 5.1 Bibliographie Literaturverzeichnis [1] Bryant, R. ; Chang, H.-Y. ; Rosenburg, B. S.: Experience Developing the RP3 Operating System. In: Computing Systems 4 (1991), Nr. 3, S. 183 216 [2] Jones, M. B.: What really happened on Mars? http://www.research.microsoft.com/~mbj/mars_pathfinder/mars_pathfinder.html, 1997 [3] Lampson, B. W. ; Redell, D. D.: Experiences with Processes and Monitors in Mesa. In: Communications of the ACM 23 (1980), Febr., Nr. 2, S. 105 117 [4] Papamarcos, M. S. ; Patel, J. H.: A Low-Overhead Coherence Solution for Multiprocessors with Private Cache Memories. In: Proceedings of the 11th Annual International Symposium on Computer Architecture (ISCA 84), June 5 7, 1984, Ann Arbor, Michigan, USA, ACM Press, 1984, S. 348 354 [5] Wilner, D. : Vx-Files: What really happened on Mars? Keynote at the 18th IEEE Real-Time Systems Symposium (RTSS 97), Dez. 1997 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 31 / 34 C X-4 Befehlssatzebene Gliederung 6 Anhang 1 Unterbrechungssteuerung 2 Schlossvariable Definition 3 Nichtblockierende Synchronisation Elementaroperation Anwendung 4 Zusammenfassung 5 Anhang c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 32 / 34

C X-4 Befehlssatzebene 6 Anhang 6.1 Umlaufsperre Zurücktreten vom aktiven Warten mit Prozessorabgabe void lv_backoff(lock_t *lock) { time_t t0, t1, t2; t0 = ps_pitch(pd_being()); t1 = t_stamp(); lv_suspend(lock); t2 = t_stamp(); if (t_pitch(t1, t2) < t0) ps_delay(t0 - t_pitch(t1, t2)); Prozessverwaltung ps pitch definiert den Abstand zum nächsten Versuch ps delay verzögert den Prozess: Prozessorabgabe Zeitverwaltung t stamp liefert einen Zeitwert t pitch berechnet Zeitabstand Beachte: Benutzte Abstraktionsebene Prozessorabgabe setzt ein Prozesskonzept voraus, das typischerweise von einem Betriebssystem bereitgestellt wird in dieser svariante wird die Umlaufsperre zu einem Konzept der Maschinenprogrammebene c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 33 / 34 C X-4 Befehlssatzebene 6 Anhang 6.1 Umlaufsperre Prozessorabgabe: passives Warten auf Freigabe der Sperre Laufbereit bleibend void lv_suspend(lock_t *lock) { ps_forgo(); Effektivität hängt stark ab von der Umplanungsstrategie: RR der Prozess kommt ans Ende der Bereitliste sonst seine (stat./dyn.) Priorität bestimmt die Listenposition ggf. landet er ganz vorne so dass er weiterläuft Sperrfreigabe erwartend void lv_suspend(lock_t *lock) { ps_sleep(&lock->bell); schlafen legende Schlossvariable (engl. sleeping lock) Bedingungssynchronisation Angepasste Sperrfreigabe void lv_release (lock_t *lock) { lock->bolt = 0; ps_rouse(lock); Wach bleiben oder schlafen legen... eine Frage des jew. Anwendungsprofils und der Einplanungsstrategie c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15 34 / 34