Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.

Slides:



Advertisements
Liknande presentationer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Advertisements

Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 5: CPU-schemaläggning.
Översikt av operativsystem (kap 1 & 2)
Algoritmer och data strukturer -Länkade listor
Leif Håkansson’s Square Dancer Rotation
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Elkraft 7.5 hp distans: Kap. 3 Likströmsmotorn 3:1
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
Välkommen Vahid Mosavat
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
Stora additionstabellen
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kap 3 & 4: Processer & trådar.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 7: Deadlocks.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 9: Virtuellt minne.
i olika programmeringsspråk
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Programmering B PHP Lektion 2
PROCESSPROGRAMMERING
Repetition inför slutprovet
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1
TÄNK PÅ ETT HELTAL MELLAN 1-50
Listor En lista är en föränderlig ordnad samling objekt.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Diskreta, deterministiska system Projekt 1.2; Vildkatt
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Trådsäkerhet - Memory consitency error - Guarded blocks - Lock Objects - Immutable Objects -
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( ) Innehåll: - Förening av dataströmmar - Signaler - Signalhantering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( ) Innehåll: -Producent – konsument problemet -Förmedling av fildeskriptorer.
Täckningsgrad Dec 2014 – feb 2015 Täckningsgrad Dec 2014 – feb 2015.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
1 Logging and monitoring of TCP traffic in SSH tunnels Masters thesis Anton Persson.
Problemlösningsmetodik
Datastrukturer och algoritmer
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Emulatorkonstruktion Schema Inledning Andra metoder Mina metoder Demonstration av min C64-emulator Sammanfattning och frågor.
Räkna till en miljard 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14,15,16,17,18,19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, En miljard är ett.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
1 Jan Lundström OV’s Hemsida Utbildning Ledare. 2 Jan Lundström OV’s Hemsida Standard Lagrum.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Operativsystem - Processkommunikation
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 9 ( ) Innehåll: - IPC: Semaforer.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
14.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Repetition.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 12: Sekundärminne.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
IT och medier1 Utgående från boken Computer Science av: J. Glenn Brookshear Grundläggande datavetenskap, 4p Kapitel 3 Operativsystem.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 3: Booleans, if, switch
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering

6.2 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Bakgrund Samarbetande processer delar data med varandra – kan leda till datainkonsistens Vi behöver mekanismer som ser till att samarbetande processer exekverar korrekt Producent/konsument-problemet: Producent-processen producerar (skriver) information som konsument-processen konsumerar (läser) Vi har en buffert som delas av båda processerna + en räknare som håller koll på antal element i bufferten

6.3 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Producent while (true) { /* produce an item and put in nextProduced */ while (count == BUFFER_SIZE) ; // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; }

6.4 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition konsument while (true) { while (count == 0) ; // do nothing nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; /* consume the item in nextConsumed }

6.5 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Race Condition count++ kan implementeras som register1 = count register1 = register1 + 1 count = register1 count-- kan implementeras som register2 = count register2 = register2 - 1 count = register2 Dessa instruktioner kan exekvera enligt följande: (count = 5 från början) S0: producer execute register1 = count {register1 = 5} S1: producer execute register1 = register1 + 1 {register1 = 6} S2: consumer execute register2 = count {register2 = 5} S3: consumer execute register2 = register2 - 1 {register2 = 4} S4: producer execute count = register1 {count = 6 } S5: consumer execute count = register2 {count = 4}

6.6 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Problemet med den kritiska sektionen Felet med föregående kod var att båda processerna fick manipulera den gemensamma variabeln count samtidigt Kritisk sektion – Ett segment med kod där processen kan uppdatera gemensamma variabler, skriva till en fil mm Två processer kan inte tillåtas att exekvera i sin kritiska sektion samtidigt Vi behöver ett protokoll för att lösa problemet En process måste be om tillåtelse innan den går in i sin kritiska sektion

6.7 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Generell struktur hos en typisk process do { entry section critical section exit section remainder section } while (TRUE);

6.8 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Protokollet måste uppfylla tre krav 1. Mutual Exclusion - om process P i exekverar i sin kritiska sektion får ingen annan process exekvera i sin kritiska sektion 2.Progress – om det finns processer som vill exekvera i sin kritiska sektion (och ingen annan process gör det) måste en process väljas inom rimlig tid 3.Bounded Waiting - det måste finnas ett tak på antalet gånger andra processer får exekvera i sina kritiska sektioner efter det att en process har begärt att få exekvera i sin kritiska sektion och innan begäran blir beviljad

6.9 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Peterson’s lösning Två processer som alternerar mellan den kritiska sektionen och remainder section Anta att LOAD och STORE är atomära; dvs, de kan inte avbrytas Processerna delar på två variabler: int turn; Boolean flag[2] variabeln turn talar om vems tur det är att gå in i sin kritiska sektion. Arrayen flag talar om ifall en process är redo att gå in i sin kritiska sektion. flag[i] = true visar att process P i is redo!

6.10 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition do { flag[i] = TRUE; turn = j; while (flag[j] && turn == j); critical section flag[i] = FALSE; remainder section } while (TRUE); Algoritm för process P i

6.11 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Synkroniseringshårdvara Många system erbjuder hårdvarustöd för kritiska sektioner Enprocessorsystem – Avbrott kan stängas av Ineffektivt i multiprocessor-system Moderna maskiner har speciella atomära hårdvaruinstruktioner  Atomär = går ej att avbryta TestandSet() Swap()

6.12 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Solution to Critical-section Problem Using Locks do { acquire lock critical section release lock remainder section } while (TRUE);

6.13 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition TestAndSet-instruktionen Definition: boolean TestAndSet (boolean *target) { boolean rv = *target; *target = TRUE; return rv: }

6.14 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Lösning med TestAndSet Delad boolesk variabel lock, initialiserad till false. Lösning: do { while ( TestAndSet (&lock )) ; // do nothing // critical section lock = FALSE; // remainder section } while (TRUE);

6.15 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Swap-instruktionen Definition: void Swap (boolean *a, boolean *b) { boolean temp = *a; *a = *b; *b = temp: }

6.16 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Lösning med Swap Delad boolesk variabel lock initialiserad till FALSE; varje process har en lokal boolesk variabel key Lösning: do { key = TRUE; while ( key == TRUE) Swap (&lock, &key ); // critical section lock = FALSE; // remainder section } while (TRUE);

6.17 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Bounded-waiting Mutual Exclusion med TestandSet() do { waiting[i] = TRUE; key = TRUE; while (waiting[i] && key) key = TestAndSet(&lock); waiting[i] = FALSE; // critical section j = (i + 1) % n; while ((j != i) && !waiting[j]) j = (j + 1) % n; if (j == i) lock = FALSE; else waiting[j] = FALSE; // remainder section } while (TRUE);

6.18 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Semaforer Synkroniseringsverktyg Semafor S – heltalsvariabel Kan bara accessas genom två atomära operationer: wait() and signal() Originally called P() and V() Definition: wait (S) { while S <= 0 ; // no-op S--; } signal (S) { S++; }

6.19 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Användning Counting semaphore – semaforens värden är obegränsade Binary semaphore – semaforens värde är antingen 0 eller 1; enklare att implementera Kallas ibland mutex locks Kritisk sektion med semafor: Semaphore mutex; // initialized to 1 do { wait (mutex); // Critical Section signal (mutex); // remainder section } while (TRUE); Ett problem är busy waiting – en väntande process loopar i entry-koden Semaforen kallas ibland för ett spinlock

6.20 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Semaforimplementation utan Busy waiting Definition av semafor: typedef struct { int value; struct process *list; } semaphore; Två operationer: block – placera den anropande processen i väntekön wakeup – ta bort den anropande processen från väntekön och placera den i ready queue

6.21 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Semaforimplementation utan Busy waiting (forts) Implementation av wait: wait(semaphore *S) { S->value--; if (S->value < 0) { add this process to S->list; block(); } Implementation av signal: signal(semaphore *S) { S->value++; if (S->value <= 0) { remove a process P from S->list; wakeup(P); }

6.22 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Deadlock och Starvation Deadlock – två eller fler processer väntar på en händelse som bara kan orsakas av en av de väntande processerna. Låt S och Q vara två semaforer, initialiserade till 1 P 0 P 1 wait (S); wait (Q); wait (Q); wait (S);. signal (S); signal (Q); signal (Q); signal (S); Starvation – en process blir aldrig borttagen från väntekön

6.23 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Klassiska synkroniseringsproblem Bounded-Buffer Problem Readers and Writers Problem Dining-Philosophers Problem (i boken)

6.24 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Bounded-Buffer Problem N buffertar som var och en kan lagra ett element En semafor mutex initialiserad till 1 En semafor full initialiserad till 1 En semafor empty initialiserad till N.

6.25 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Bounded Buffer Problem (forts) Strukturen på producent-processen: do { // produce an item in nextp wait (empty); wait (mutex); // add the item to the buffer signal (mutex); signal (full); } while (TRUE);

6.26 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Bounded Buffer Problem (Cont.) Strukturen på konsument-processen: do { wait (full); wait (mutex); // remove an item from buffer to nextc signal (mutex); signal (empty); // consume the item in nextc } while (TRUE);

6.27 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Readers-Writers Problem En datamängd delas av ett antal parallella processer Readers – processer som bara läser data Writers – processer som både läser och skriver data Problem – tillåta många readers att läsa samtidigt. Bara en writer åt gången får accessa datan Delad data: Datamängd En semafor mutex initialiserad till 1 En semafor wrt initialiserad till 1 Integer readcount initialiserad till 0

6.28 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Readers-Writers Problem (forts) Strukturen på en writer-process do { wait (wrt) ; // writing is performed signal (wrt) ; } while (TRUE);

6.29 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Readers-Writers Problem (forts) Strukturen på en reader-process do { wait (mutex) ; readcount ++ ; if (readcount == 1) wait (wrt) ; signal (mutex) // reading is performed wait (mutex) ; readcount - - ; if (readcount == 0) signal (wrt) ; signal (mutex) ; } while (TRUE);