Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen

Lignende præsentationer


Præsentationer af emnet: "Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen"— Præsentationens transcript:

1 Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen cyller@diku.dk

2 Datalogi 1F 2003: Operativsystemer[3] 2 Planen for idag Synkronisering: –Kritiske regioner –Kritiske regioner som sprogkonstruktion –Monitorer –Klassisk problemstilling Baglåse: –Betingelser –Forhindring af baglåse –Detektering af baglåse

3 Datalogi 1F 2003: Operativsystemer[3] 3 Kritiske regioner N processer, der alle tilgår delt data Hver proces har et kodesegment, hvori den delte data tilgås (kritisk region) Problem: det skal sikres at på alle tidspunkter er der kun en proces der opholder sig sin kritiske region

4 Datalogi 1F 2003: Operativsystemer[3] 4 Krav til løsning 1.Gensidig udelukkelse: Når proces i er i sin kritiske region, er ingen andre processer i deres kritiske regioner 2.Fremskridt: Hvis ingen processer er i deres kritiske regioner, og der er processer der ønsker at udføre deres kritiske regioner, skal en proces udvælges i endelig tid 3.Begrænset ventetid: En proces, der ønsker adgang til sin kritiske region, skal have adgang

5 Datalogi 1F 2003: Operativsystemer[3] 5 Indledende forsøg på løsning Kun 2 processer, P 0 og P 1 Overordnet struktur af proces P i (den anden er P j ) do { indgang kritisk region udgang resterende kode } while (1); Processer kan have delte variable, der bruges til synkronisering

6 Datalogi 1F 2003: Operativsystemer[3] 6 Første forsøg Delte variable: –int tur; fra start af er tur = 0 –tur == i  P i kan udføre den kritiske region Proces P i do { while (tur != i); tur = j; } while (1); Opfylder gensidig udelukkelse men ikke fremskridt

7 Datalogi 1F 2003: Operativsystemer[3] 7 Andet forsøg Delte variable –boolean flag[2]; fra start af er flag [0] = flag [1] = falsk. –flag [i] == sand  P i er klar til at udføre den kritiske region Proces P i do { flag[i] = sand; while (flag[j]); flag [i] = falsk; } while (1); Opfylder gensidig udelukkelse men ikke fremskridt

8 Datalogi 1F 2003: Operativsystemer[3] 8 Tredje forsøg (Petersons) Kombiner de delte variable fra de to første forsøg Proces P i do { flag[i] = sand; tur = j; while (flag[j] && tur = j); flag[i] = false; } while (1); Opfylder alle tre krav og løser dermed kritisk region problemet for to processer

9 Datalogi 1F 2003: Operativsystemer[3] 9 Men nu er der jo ofte mere en 2 aktive processer i et operativsystem – hvad gør man så?

10 Datalogi 1F 2003: Operativsystemer[3] 10 Bagerens algoritme Kritisk region for n processer: –Hver proces får tildelt et nummer –Processen med det laveste nummer får adgang til sin kritiske region Uddeling af numre lidt forskellig fra et almindeligt bageri: –Billetmaskinen giver nogen gange det samme nummer –Hvis to processer P i og P j får samme nummer, så kommer P min(i,j) først

11 Datalogi 1F 2003: Operativsystemer[3] 11 Bagerens algoritme Proces i: do { vælger[i] = sand; num[i] = max(num[0],…,num[n – 1])+1; vælger[i] = falsk; for (j = 0; j < n; j++) { while (vælger[j]) ; while ((num[j] != 0) && ((num[j],j) < (num[i],i)); } num[i] = 0; } while (1);

12 Datalogi 1F 2003: Operativsystemer[3] 12 Kritisk region for n processer: semaforløsning Delt data: semafor mutex; // Initialiseret ved mutex = 1 Proces P i : do { vent(mutex); signaler(mutex); } while (1);

13 Datalogi 1F 2003: Operativsystemer[3] 13 Kritisk region: sprogkonstruktion Delte variable af typen T erklæres som shared: V: shared T; v kan kun tilgås i en kritisk region: region v when B do S B: boolsk udtryk: –Sandt indikerer at kritisk region kan tilgås –Ved falsk sættes processen til at vente indtil B bliver sandt og den kritiske region er tom S: den sætning der udgør den kritiske region

14 Datalogi 1F 2003: Operativsystemer[3] 14 Kritisk region: eksempel Konsument: region buffer when (tæller > 0) { kons_elem = pulje[ud]; ud = (ud+1) % n; tæller--; } Producent: region buffer when (tæller < n) { pulje[ind] = prod_elem; ind = (ind+1) % n; tæller++; } Delt variabel: struct { int pulje[n]; int tæller, ind, ud; }

15 Datalogi 1F 2003: Operativsystemer[3] 15 Monitorer monitor monitor-navn { erklæringer af delte variable funktion F1 (…) {... } funktion F2 (…) {... } funktion Fn (…) {... } { initialisering }

16 Datalogi 1F 2003: Operativsystemer[3] 16 Monitor: oversigt

17 Datalogi 1F 2003: Operativsystemer[3] 17 Monitorer: betingelsesvariable En proces skal kunne vente på at en hændelse indtræder, e.g., buffer er ikke længere tom Dette gøres via betingelsesvariable: condition ejtom; Betingelsesvariable har to operationer: –ejtom.vent(): sætter en proces til at vente indtil nogen bruger … –ejtom.signaler(): aktiver én ventende proces (er der ingen ventende sker der ingenting).

18 Datalogi 1F 2003: Operativsystemer[3] 18 Monitor med betingelsesvariable

19 Datalogi 1F 2003: Operativsystemer[3] 19 Monitor: start af processer Når P’s signal aktiverer Q: –Q aktiveres og P’s udførsel standses indtil Q enten forlader monitoren eller venter på en betingelsesvariabel –P fortsætter indtil den enten forlader monitoren eller venter på en betingelsesvariabel, og derefter aktiveres Q

20 20 De spisende filosoffer

21 Datalogi 1F 2003: Operativsystemer[3] 21 Semaforløsning Delt data: semafor spisepind[5]; Filosof i: do { vent(spisepind[i]); vent(spisepind[(i+1) % 5]); signaler(spisepind[i]); signaler(spisepind[(i+1) % 5]); } while (1);

22 Datalogi 1F 2003: Operativsystemer[3] 22 Problem: baglås Vi kan risikere at alle filosoffer sidder med højre spisepind i hånden

23 Datalogi 1F 2003: Operativsystemer[3] 23 Spisende filosoffer: eksempel monitor spisendefilosoffer { enum {tænker, sulten, spiser} tilstand[5]; condition sulten[5]; void tag(int i); void læg(int i); void test(int i) ; void init() { for (int i = 0; i < 5; i++) tilstand[i] = tænker; }

24 Datalogi 1F 2003: Operativsystemer[3] 24 Spisende filosoffer: må filosof i spise? void test(int i) { if ( (tilstand[(i + 4) % 5] != spiser) && (tilstand[i] == sulten) && (tilstand[(i + 1) % 5] != spiser)) { tilstand[i] = spiser; sulten[i].signaler(); }

25 Datalogi 1F 2003: Operativsystemer[3] 25 Spisende filosoffer void tag(int i) { tilstand[i] = sulten; test[i]; if (tilstand[i] != spiser) sulten[i].vent(); } void læg(int i) { tilstand[i] = tænker; test((i+4) % 5); test((i+1) % 5); }

26 Datalogi 1F 2003: Operativsystemer[3] 26 Baglåse Hvad er en baglås? Hvad er de nødvendige betingelser for en baglås? Ressourceallokeringsgrafer Forhindring af baglåse Bankmandens algoritme

27 27 Hvad er en baglås? En gruppe af processer er blokeret fordi de indbyrdes venter på at en anden proces skal frigive en reserveret ressourcer

28 28 De sultne filosoffer

29 Datalogi 1F 2003: Operativsystemer[3] 29 Betingelser for baglås 1.Hver instans af en ressource skal tilgås udeleligt 2.Processer med reserverede ressourcer har brug for at udvide deres mængde af ressourcer 3.En proces kan ikke tvinges til at frigive en reserveret ressource 4.Der er en cirkulær ressource- afhængighed mellem processerne

30 Datalogi 1F 2003: Operativsystemer[3] 30 Ressourceallokeringsgraf P1 P2P3 R2 R3 R1 baglås

31 Datalogi 1F 2003: Operativsystemer[3] 31 Håndtering af baglåse Undgå at de opstår Hav mekanismer der kan opdage og fjerne baglåse Strudsealgoritmen – baglåse, hvaffor baglåse?

32 Datalogi 1F 2003: Operativsystemer[3] 32 Forhindring af baglåse Undgå at en af de nødvendige betingelser opstår: Udelelig adgang til ressourcer: –afhænger af ressource Udvidelse af reserveringer: –processer kan kun reservere ressourcer: en gang når de ingen ressourcer har –Problem: ressourcer beslaglægges for længe

33 Datalogi 1F 2003: Operativsystemer[3] 33 Forhindring af baglåse (2) Processer kan tvinges til at frigive ressourcer: –hvis en proces ikke kan reservere de ønskede ressourcer, frigives allerede reserverede ressourcer og tilføjes mængden af ressourcer der ventes på –først når alle ressourcer er tilgængelige genstartes processen –Det kan være langhåret at frigive ressourcer på vilkårlige tidspunkter (rollback) Tving processer til altid at allokere ressourcer i en bestem rækkefølge for at undgå cirkulær venten

34 Datalogi 1F 2003: Operativsystemer[3] 34 Undgåelse af baglåse Hver reservation R evalueres: –kan alle processer få opfyldt deres behov hvis R udføres? Er den nye tilstand sikker? Kræver: –processer specificerer deres maksimale behov for ressourcer –der vedligeholdes en repræsentation af ressourceforbrug: allokerede tilgængelige processers maksimale behov

35 Datalogi 1F 2003: Operativsystemer[3] 35 Sikker tilstand En tilstand er sikker hvis der findes en afviklingsrækkefølge for processerne i systemet hvor der gælder: –en proces kan altid få opfyldt sit maksimale ressourcebehov ud fra de tilgængelige ressourcer samt ressourcer frigivet af processer der udføres tidligere En reservation R tillades kun, hvis den nye tilstand er sikker

36 Datalogi 1F 2003: Operativsystemer[3] 36 Sikker, usikker, baglås sikkerusikker baglås

37 Datalogi 1F 2003: Operativsystemer[3] 37 Bankmandens algoritme Flere instanser af hver ressource Hver proces skal specificere sit maksimale ressourcebehov på forhånd En proces kan blive sat til at vente på en ressource Når en proces har fået opfyldt sit ressourcebehov, skal den frigive de tildelte ressourcer indenfor endelig tid

38 Datalogi 1F 2003: Operativsystemer[3] 38 Datastrukturer til bankmandens algoritme Tilgængelig: Vektor med længde m. Hvis tilgængelig[j] = k, så er der k instanser af ressource R j tilgængelig. Maks: n x m matrix. Hvis Maks [i,j] = k, så kan proces P i bede om maks k instanser af ressource R j. Allokeret: n x m matrix. Hvis allokeret [i,j] = k så er P i pt. allokeret k instanser af R j. Behov: n x m matrix. Hvis Behov[i,j] = k, så kan P i have behov for k flere instanser af R j for at afslutte sin opgave. Behov[i,j] = Maks[i,j] – Allokering [i,j]. Lad n = antallet af processer, og m = antallet af ressourcertyper.

39 Datalogi 1F 2003: Operativsystemer[3] 39 Afgør om system i sikker tilstand 1.Lad Temp og Færdig være vektorer med længderne m og n henholdsvis. Start med: Temp = Tilgængelig Færdig [i] = falsk for i =1,2, …, n. 2.Find et i så følgende gælder: (a) Færdig [i] = falsk (b) Behov i  Temp Hvis i ikke findes, gå til trin 4. 3.Temp = Temp + Allokeret i ; Færdig [i] = sand; gå til trin 2. 4.Hvis Færdig [i] == sand for alle i, så er systemet i en sikker tilstand.

40 Datalogi 1F 2003: Operativsystemer[3] 40 Reservation for proces P i Reservation = forespørgselsvektor fra P i. Hvis Reservation i [j] = k så beder P i om k instanser af ressource R j. 1.Hvis Reservation i  Behov i gå til trin 2. Ellers er der en fejl idet P i ‘s maksimale behov er overskredet. 2.Hvis Reservation i  Tilgængelig, gå til trin 3. Ellers må P i vente indtil der er ledige ressourcer. 3.Lav en prøveopdatering af systemtilstanden med P i forespørgsel: Tilgængelig = Tilgængelig - Reservation i ; Allokeret i = Allokeret i + Reservation i ; Behov i = Behov i – Reservation i;; Hvis tilstand sikker  P i bliver tildelt ressourcerne. Hvis usikker  P i må vente, og den gamle systemtilstand reetableres

41 Datalogi 1F 2003: Operativsystemer[3] 41 Opdagelse af baglåse Tillad baglåse i systemet Detekteringsalgoritme Løsning af baglås

42 Datalogi 1F 2003: Operativsystemer[3] 42 Enkelt instans af hver ressource Oprethold en “venter på” graf: –Knuderne er processer. –P i  P j hvis P i venter på P j. Periodisk undersøges grafen for cykler –Hvor tit? En algoritme til at finde cykler i en graf skal bruge n 2 operationer, hvor n er antallet af kanter.

43 Datalogi 1F 2003: Operativsystemer[3] 43 Løsning af baglås Slå en proces, der er placeret i cyklen, ihjel: –Hvilken proces? Flest ressourcer? Kørt kortest tid? Genstart en proces –Hvad med ændringer foretaget af processen? Er rollback muligt?

44 Datalogi 1F 2003: Operativsystemer[3] 44 Opsummering Synkronisering: –Kritiske regioner –Bagerens algoritme –Monitorer –Spisende filosoffer Baglåse: –Nødvendige betingelser –Forhindring af baglåse –Bankmandens algoritme

45 Datalogi 1F 2003: Operativsystemer[3] 45 Kilder Disse slides er baseret på SG03 samt de af forfatterne udviklede slides


Download ppt "Operativsystemer [3]: Synkronisering og baglåse Datalogi 1F: Forår 2003 Jørgen Sværke Hansen"

Lignende præsentationer


Annoncer fra Google