La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

(1) Sistemi Operativi 2001-2002 Prof. P. Cattaneo ufficio: L 1 18 Ricevimento: Martedì14.00 – 16.00.

Presentazioni simili


Presentazione sul tema: "(1) Sistemi Operativi 2001-2002 Prof. P. Cattaneo ufficio: L 1 18 Ricevimento: Martedì14.00 – 16.00."— Transcript della presentazione:

1 (1) Sistemi Operativi 2001-2002 Prof. P. Cattaneo ufficio: L 1 18 cattaneo@unisa.it http://www.dia.unisa.it/cattaneo.dir/ Ricevimento: Martedì14.00 – 16.00 Mercoledì18.00 –19.00

2 (2) Sincronizzazione tra processi Proprietà Mutua Esclusione: In ogni istante al più un processo avrà accesso ad una regione critica => Se un processo Pi è nella sua regione critica nessun altro processo potrà accedervi Progresso: Se nessun processo è nella regione critica ed uno o più processi richiedono laccesso, solo processi che non sono in regione critica parteciperanno (eseguiranno il codice) alla decisione su quale sarà il prossimo processo ad accedervi Attesa limitata: Ogni processo dopo aver richiesto laccesso ad una regione critica attenderà un tempo finito durante il quale altri processi potranno accedere una o più volte alla regione critica ma necessariamente in numero finito

3 (3) Algoritmo n.1 enum procs { pi, pj} Turno; repeat while (Turno != pi) do_no_op; sezione critica Turno = pj; until false;

4 (4) Algoritmo n.2 bool flag[2]; repeat flag[i] = true; while (flag[j] == true) do_no_op; sezione critica flag[i] = false; until false;

5 (5) Algoritmo n.3 bool flag[2]; enum procs { pi, pj} Turno; repeat flag[i] = true; Turno = pj; while (flag[j] and Turno == pj) do_no_op; sezione critica flag[i] = false; until false;

6 (6) Algoritmo per n processi repeat choosing[i] = true; number[i] = max(number) + 1; choosing[i] = false; for(j = 0; j < n; j++) { while (choosing[j]) do no-op; while((number[j] != 0) and (number[j]+j < number[i]+i)) } sezione critica number[i] = 0; until false;

7 (7) Supporto HW: TestAndSet int TestAndSet( int * target) { int tmp = *target; *target = true; return tmp; }

8 (8) Mutua esclusione con TestAndSet repeat while (TestAndSet( &lock)) do_no_op; sezione critica lock = false; until false;

9 (9) Supporto HW: Swap void Swap( int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; }

10 (10) Mutua esclusione con Swap repeat Key = true; do { Swap( &lock, &key); } while (Key != false); sezione critica lock = false; until false;

11 (11) Implementazione di wait(S) struct semaphore { int valore; List L; } void wait(struct semaphore S) { S.valore--; // N.B. sincronizzazione !!! if S.valore < 0) { L.append(MyPID); // metti il processo nella coda // dei processi waiting }

12 (12) Implementazione di signal(S) struct semaphore { int valore; List L; } void signal(struct semaphore S) { S.valore++; // N.B. sincronizzazione !!! if S.valore < 0) { PID = L.head(); // wakeup il processo PID // dalla coda dei processi waiting }

13 (13) Sincronizzazione tra processi Uso dei semafori repeat wait(mutex); // sezione critica signal(mutex); // sezione non critica until false;

14 (14) Implementazione di region x when B do S wait(mutex); while (!B){ first_cnt++; if (second_cnt > 0) signal(second_delay); else signal(mutex); wait(first_delay); first_cnt--; second_cnt++; if (first_cnt > 0) signal(first_delay); else signal(second_delay); wait(second_delay); second_cnt--; } Regioni critiche (1)

15 (15) Regioni critiche (2) Implementazione di region x when B do S … S; // esecuzione regione critica if (first_cnt > 0) signal(first_delay); else { if (second_cnt > 0) signal(second_delay); else signal(mutex); }


Scaricare ppt "(1) Sistemi Operativi 2001-2002 Prof. P. Cattaneo ufficio: L 1 18 Ricevimento: Martedì14.00 – 16.00."

Presentazioni simili


Annunci Google