Deadlocks dopsys 1
En deadlock! When two trains approach each other at a crossing, both shall come to a full stop and neither shall start up again until the other has gone. Lov - the Kansas Legislature dopsys 2
Resurse-administration..processer anvender resurser administreret af OS: Resurser: Lager Sekundært Lager (disk) Ydre enheder Semaphorer Filer Styring af adgang: Request (proces) Acquisition (OS) Release (proces).. kan der opstå situationer hvor et antal processer er gået i stå på grund af styringen af adgangen, og ikke fordi der er for få resurser som sådan? dopsys 3
Ja, det kan ske! - Eksempel Semaphorer: Filer: (med locks) semaphore s1,s2; p1:... p2:... down(s1); down(s2); down(s2); down(s1); use_resources; use_resources; up(s2); up(s1); up(s1); up(s2);... p1:... p2:... open(f1,w); open(f2,w); open(f2,w); open(f1,w);........ gensidig venten blandt blokerede processer. dopsys 4
Et andet eksempel Producer-consumer systemet (forkert version!): semaphore e = n, f = 0, b = 1; cobegin Producer: while (1) { Produce_next_record ( ); down(e); lock(b); lock(b); down(e); Add_to_buf ( ); up(f); unlock(b); up(f); unlock(b); } // Consumer: while (1) { down(f); lock(b); lock(b); down(f); Take_from_buf ( ); unlock(b); up(e); up(e); unlock(b); Process_record ( ); } coend.. om systemet går i deadlock afhænger af schedulering. dopsys 5
Et andet eksempel Producer-consumer systemet (forkert version!): semaphore e = n, f = 0, b = 1; cobegin Producer: while (1) { Produce_next_record ( ); down(e); lock(b); lock(b); down(e); Add_to_buf ( ); up(f); unlock(b); up(f); unlock(b); } // Consumer: while (1) { down(f); lock(b); lock(b); down(f); Take_from_buf ( ); unlock(b); up(e); up(e); unlock(b); Process_record ( ); } coend.. om systemet går i deadlock afhænger af schedulering. dopsys 5
Et andet eksempel Producer-consumer systemet (forkert version!): semaphore e = n, f = 0, b = 1; cobegin Producer: while (1) { Produce_next_record ( ); down(e); lock(b); lock(b); down(e); Add_to_buf ( ); up(f); unlock(b); up(f); unlock(b); } // Consumer: while (1) { down(f); lock(b); lock(b); down(f); Take_from_buf ( ); unlock(b); up(e); up(e); unlock(b); Process_record ( ); } coend.. om systemet går i deadlock afhænger af schedulering. dopsys 5
Blokering.. venten på resurse via egentlig blokering eller busy waiting: down(s) { Inhibit_Interrupt; s = s - 1; if (s < 0) { Block(self, Ls); Enable_Interrupt; Scheduler(); } else Enable_Interrupt; } mutex_lock(sb): do TS(R,sb) while (!R).. processen opfattes i begge tilfælde som blokeret. dopsys 6
Coffman-betingelserne (1971) Deadlock kun mulig hvis der er: 1. Mutual exclusion: en resurse kan ikke anvendes af mere end een proces ad gangen 2. Hold and wait: en proces der allerede har en resurse kan bede om een til 3. No preemption: ingen resurser kan tvinges væk fra en proces, frigivelse af resurser sker kun på processens eget initiativ 4. Circular wait: to eller flere processer kan danne en cykel hvor hver proces venter på en resurse som den næste proces har dopsys 7
Coffman-betingelserne (1971) Deadlock kun mulig hvis der er: 1. Mutual exclusion: en resurse kan ikke anvendes af mere end een proces ad gangen 2. Hold and wait: en proces der allerede har en resurse kan bede om een til 3. No preemption: ingen resurser kan tvinges væk fra en proces, frigivelse af resurser sker kun på processens eget initiativ 4. Circular wait: to eller flere processer kan danne en cykel hvor hver proces venter på en resurse som den næste proces har dopsys 7
Coffman-betingelserne (1971) Deadlock kun mulig hvis der er: 1. Mutual exclusion: en resurse kan ikke anvendes af mere end een proces ad gangen 2. Hold and wait: en proces der allerede har en resurse kan bede om een til 3. No preemption: ingen resurser kan tvinges væk fra en proces, frigivelse af resurser sker kun på processens eget initiativ 4. Circular wait: to eller flere processer kan danne en cykel hvor hver proces venter på en resurse som den næste proces har dopsys 7
Coffman-betingelserne (1971) Deadlock kun mulig hvis der er: 1. Mutual exclusion: en resurse kan ikke anvendes af mere end een proces ad gangen 2. Hold and wait: en proces der allerede har en resurse kan bede om een til 3. No preemption: ingen resurser kan tvinges væk fra en proces, frigivelse af resurser sker kun på processens eget initiativ 4. Circular wait: to eller flere processer kan danne en cykel hvor hver proces venter på en resurse som den næste proces har dopsys 7
Coffman-betingelserne (1971) Deadlock kun mulig hvis der er: 1. Mutual exclusion: en resurse kan ikke anvendes af mere end een proces ad gangen 2. Hold and wait: en proces der allerede har en resurse kan bede om een til 3. No preemption: ingen resurser kan tvinges væk fra en proces, frigivelse af resurser sker kun på processens eget initiativ 4. Circular wait: to eller flere processer kan danne en cykel hvor hver proces venter på en resurse som den næste proces har dopsys 7
Håndtering af deadlocks 1. Strudsealgoritmen: Tillader deadlock at opstå Timeout eller bruger løser problemet 2. Detektér og fjern deadlock: Tillader deadlock at opstå Deadlock detekteres, og elimineres af systemet 3. Undgå deadlock dynamisk (avoidance): Deadlock kan ikke opstå (systemet kan have potentielle deadlocks) Dynamisk check af forespørgsler på resurser (requests) Hvis tildeling af en resurse kan føre til en deadlock udsættes den 4. Undgå deadlock statisk (prevention): Deadlock kan ikke opstå (ingen potentielle deadlocks) Sikret statisk via regler for requests dopsys 8
Notation og Terminologi dopsys 9
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand:.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand: Proces.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand: Proces Resurseklasse.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand: Proces Resurse Resurseklasse.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand: Request Proces Resurse Resurseklasse.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Modellering af resursestyring En resursegraf repræsenterer systemets tilstand: Request Proces Allokering Resurse Resurseklasse.. repræsenterer alle aktuelle requests og allokeringer. dopsys 10
Systemtilstanden.. ændres ved Request, Acquisition og Release af resurser: Tilstandsovergange (transitioner): Request Acquisition Release tilføjer et antal kanter fra en proces til en resurseklasse. vender alle kanter fra en proces til en resurseklasse. fjerner et antal kanter fra resurser til en proces. dopsys 11
Regler for operationer Request kan tilføjes fra proces p når: ingen request findes fra p i forvejen antal ønskede resurser ikke overstiger total Acquire kan udføres når: alle requests kan tilfredsstilles samtidig Release kan udføres når: ingen request findes fra p dopsys 12
Terminologi En proces P er blokeret i en tilstand S hvis P ikke kan lave en operation (request, acquisition, release) i S. En proces P er deadlocked i en tilstand S hvis P er blokeret i alle tilstande der potentielt kan nås fra S. En tilstand S er deadlocked hvis en proces i S er deadlocked. dopsys 14
Eksempel på tilstandsgraf p1 P1: Request R1 før R2 Release R2 før R1 p2 P2: Request R2 før R1 Release R1 før R2 dopsys 13
Eksempel på tilstandsgraf p1 P1: Request R1 før R2 Release R2 før R1 p2 P2: Request R2 før R1 Release R1 før R2 P2 blokeret dopsys 13
Eksempel på tilstandsgraf p1 P1: Request R1 før R2 Release R2 før R1 p2 P2: Request R2 før R1 Release R1 før R2 P2 blokeret P1 blokeret dopsys 13
Eksempel på tilstandsgraf p1 P1: Request R1 før R2 Release R2 før R1 p2 P2: Request R2 før R1 Release R1 før R2 P2 blokeret P1 blokeret Deadlock: P1+P2 blokeret dopsys 13
[Q/A] dopsys 13
[Q/A] Hvordan ser resursegrafen ud for tilstandene S0,0 og S1,2? dopsys 13
[Click] Hvad er forkert? A. Tilstandsgrafer er svagt sammenhængende B. Uden deadlock er tilstandsgrafer stærkt sammenhængende C. En tilstandsgraf kan beskrive et vilkårligt langt scenarie D. En tilstandsgraf kan beskrive scenarier med mere end to processer E. Der kan være deadlock i en knude med udgående kanter F. Ved ikke dopsys 13
Håndtering af deadlocks: Tag chancen dopsys 15
Detektering af Deadlocks Findes der en deadlock i systemets aktuelle tilstand S? Følgende best-case scenarie betragtes: 1. Ingen yderligere requests laves af processer i tilstand S 2. Hvis en aktuel request imødekommes for en proces, så terminerer processen, og de allokerede resurser frigives Baseret på reduktion af resursegrafer: 1. Vælg en proces P der ikke er blokeret 2. Eliminer P og alle tilhørende request- og allokeringskanter.. gentag skridt 1+2 så længe der findes ikke-blokerede processer dopsys 16
Detektering af Deadlocks Findes der en deadlock i systemets aktuelle tilstand S? Følgende best-case scenarie betragtes: 1. Ingen yderligere requests laves af processer i tilstand S 2. Hvis en aktuel request imødekommes for en proces, så terminerer processen, og de allokerede resurser frigives Baseret på reduktion af resursegrafer: 1. Vælg en proces P der ikke er blokeret 2. Eliminer P og alle tilhørende request- og allokeringskanter.. gentag skridt 1+2 så længe der findes ikke-blokerede processer Processer der ikke kan elimineres er i deadlock! dopsys 16
Eksempel 5 dopsys 17
Eksempel 5 dopsys 17
Eksempel 5 dopsys 17
Eksempel 5 dopsys 17
Fjernelse af Deadlocks Cirkulær venten mellem processer skal brydes. Inkrementel terminering af processer i deadlock: Prioritet af processer (ikke scheduleringsprioritet) Omkostninger ved genstart (anslået..) Afhængighed mellem processer (producer/consumer) Resursefratagelse (resource preemption): Tag resurser væk fra processer Roll-back i processen vha. checkpoints kan være nødvendig dopsys 18
Håndtering af deadlocks: Stop dem lige før de opstår dopsys 19
Deadlock Avoidance.. sikrer at systemet aldrig går i deadlock, ved brug af dynamiske checks. Antagelse: 1. Øvre grænse for resurse-allokering til hver proces er kendt 2. En proces terminerer og frigiver resurserne hvis alle dens potentielle requests opfyldes. Kravsgraf (Claim graph): dopsys 20
Deadlock Avoidance.. sikrer at systemet aldrig går i deadlock, ved brug af dynamiske checks. Antagelse: 1. Øvre grænse for resurse-allokering til hver proces er kendt 2. En proces terminerer og frigiver resurserne hvis alle dens potentielle requests opfyldes. Kravsgraf (Claim graph): Mulige requests (claim edge) dopsys 20
Banker s Algorithm.. udnytter at OS vælger hvilke requests der skal opfyldes: Givet systemtilstand S: 1. Antag at requests for proces P opfyldes i S og modificér kravsgrafen til at reflektere dette 2. Betragt alle kravs-kanter som request-kanter og reducer kravsgrafen (worst-case scenarie) 3. Hvis alle processer kan elimineres, er det sikkert at opfylde den givne request dopsys 21
Banker s Algorithm.. udnytter at OS vælger hvilke requests der skal opfyldes: Givet systemtilstand S: 1. Antag at requests for proces P opfyldes i S og modificér kravsgrafen til at reflektere dette 2. Betragt alle kravs-kanter som request-kanter og reducer kravsgrafen (worst-case scenarie) 3. Hvis alle processer kan elimineres, er det sikkert at opfylde den givne request Selv ved worst-case request scenarie er det muligt at nå tilstand hvor alle processer er kørt færdig. dopsys 21
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Eksempel Aktuel tilstand/claim graf: Request fra proces p1 sikker? Request fra proces p2 sikker? dopsys 22
Håndtering af deadlocks: Garantér at de ikke forekommer dopsys 23
Deadlock Prevention.. sikrer at systemet aldrig går i deadlock, ved en statisk analyse: Modtræk mod de nødvendige betingelser for deadlock: Mutual exclusion: En resurse er allokeret til højst een proces Modtræk: Visse resurser kan deles (read-only, virtualisering) Hold and wait: Processer med allokerede resurser kan lave yderligere requests Modtræk: Resurser skal allokeres samtidig Circular wait: Resursegrafen skal have en cykel med mindst to processer Modtræk: Total ordning af resurser, requests ordnet derefter.. hvis blot en af disse elimineres kan deadlock ikke opstå (og deadlock detection brød lige præcis den 4. betingelse, no preemption). dopsys 24
Eksempel: ordnede resurser Requests skal følge ordningen (p 3 request: kun R 4 ) Mest efterspurgte resurse får højeste nummer dopsys 25
[Click] A. Der findes en proces B. Enhver proces har en udgående kant C. For alle k findes en vej af længde k D. Der er mindst ligeså mange resurseklasser som processer E. Enhver resurse med en indgående kant har en udgående kant F. Ved ikke En resursegraf med deadlock vil efter reduktion have en cykel. Hvilket argument dur ikke? 28
Opsummering Resursestyring kan ende i deadlock - nogle processer blokeret, andre kan aldrig hjælpe Håndtering: Strudsealgoritmen (ganske almindelig..) Detektion og fjernelse (kræver roll-back!) Avoidance (dynamiske checks) Prevention (statisk check) Analyseværktøjer: resursegraf, kravsgraf (claim graph) Operationer: request, acquire, release Centralt kriterium: komplet reduktion af resursegraf dopsys 26