Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afPeder Nygaard Redigeret for ca. et år siden
1
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står i følgende situation: processen venter på en hændelse som kun en anden af processerne kan udføre. Typisk: "vente" = processen er blokeret fordi der ventes på adgang til en ressource "hændelse" = en anden proces frigiver ressourcen.
2
Race condition class Fork { boolean available; Fork() {available = true}; void take_fork() { if (available) available = false; } void put_fork() { available = true; } To processer kan tro de begge har taget gaflen, hvis begge udfører testen før tildelingen
3
Race condition undgået med semaforer void take_fork() { down(sem); if (available) available = false; up(sem); } Kun 1 proces ad gangen får lov at udføre koden i den kritiske sektion
4
Semafor-operationer: down og up skal være atomiske // Forenklet implementation i C af semaforer // Semaforen er repræsenteret ved et heltal. down(int *sem) { if (*sem=0) {SLEEP UNTIL WAKEUP}; *sem = *sem - 1; } up(int *sem){ *sem = *sem + 1; {WAKEUP ONE SLEEPING PROCESS}; } ? sleep *Sem-- *sem++ wakeup
5
Deadlock: graf-notation R1R2 P1P2 Proces P1 "besidder" ressource R1 Proces P2 venter på ressource R2. (Proces P2 er blokeret)
6
Cirkulær sti svarer til deadlock R1R2 P1P2 Grafen er et øjebliksbillede af programudførelsen
7
Deadlock i distribuerede systemer Samme grundprincipper. Mange fejlmuligheder som der skal tages højde for. Mere komplekse systemer. Transaktioner i database-systemer, der overholder ACID-kriterierne, og som kan aborteres, giver mulighed for at løse en deadlock. Særlige problemer ved: - centraliseret deadlock-detektion - synkronisering vhja. tidsstempler
8
Centraliseret deadlock-detektion - risiko for "falsk deadlock" S TR AC B R frigives af B, men besked forsinkes Efter frigivelsen af R, venter B på T (besked forsinkes ikke)
9
Ressource-grafer: forenklet notation R P1P2 P1P2
10
Distribueret deadlock-detektion 013 4 5 6 7 8 2 Besked (0,0,1) sendes fra proces 0 til proces 1. Betydning: (Blokeret proces, Afsenderproces, Modtagerproces) (0,5,7)
11
Wait-die P1P2 Hvis P1 er yngre and P2, slås P1 ihjel.
12
Filosof-fest PartyFilosof Gaffel 1 5 1 52 1
13
Beskyttelse af kritisk sektion med synchronized class Fork { boolean available; Fork() {available = true}; synchronized void take_fork() { if (available) available = false; } synchronized void put_fork() { available = true; } Synchronized sætter lås på objektet (fork- instansen): ingen andre må udføre en synchronized metode i objektet.
14
wait() og notify() class Fork { boolean available; Fork() {available = true}; synchronized void take_fork() { while (! available) {wait()} available = false; } void put_fork() { available = true; notify(); } Den tråd, der har kaldt wait() blokeres, og låsen på Fork- objektet fjernes. notify() gen-aktiverer en tråd, der er blokeret (som følge af at tråden har udført en wait() i Fork- objektets metoder)
15
Er vi færdige ?
16
Vink til opgave 4 synchronized void take_forks(Fork left,Fork right) { if (! left.available | ! right.available) { wait()};.. } // take_fork() skal kaldes af filosof. // hvor skal metoden placeres ? // og hvordan skal de blokerede filosoffer gen-aktiveres? // Opgave: Er det OK hvis take_forks() // er defineret i class Philosopher, // og kaldes inden 2*take_fork ?
17
RMI og tråde solver tråd Hvis metodekald i distribuerede objekter skal udføres samtidig, skal metoderne kaldes fra separate tråde i koordinatoren Koordinator
18
Javas tråd-implementation: Klasser, interfaces, modifier interface Runnable class Thread run() start()stop() sleep() setPriority(..) …. class Object wait()notify() …. Thread(Runnable t) // constructor Implementa- tionen af run() er trådens program En instans af class Thread gør programmet til separat tråd Metode-modifier: synchronized
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.