26
Sistemi Operativi Lezione 7-bis Esercizi

Lezione 7-bis Esercizi - homes.di.unimi.ithomes.di.unimi.it/sisop/lucidi/Solez7-bis-0203.pdf · AA 2002/03 ©Bruschi, Rosti Sistemi Operativi Corso di Laurea in Informatica 4 N prod,

  • Upload
    voquynh

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

Sistemi Operativi

Lezione 7-bis

Esercizi

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

2

Prod-cons con buffer finitoSemaphore pieno = 0,

vuoto = N;int buffer[infinito];void prod (void){

int in = 0;int item;while (TRUE) {

produci(&item); down(vuoto);

buffer[in]= item; in = (in+1) mod n; up(pieno);}

}

void cons (void){

int out = 0;int item;while (TRUE) { down(pieno); item = buffer[out]; out = (out+1) mod n; up(vuoto); consuma(&item);}

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

3

N prod, M cons, buffer infinitoSemaphore sem =0, mutex =1;int buffer[infinito];int in = 0, out =0;void prod (void){ int item; while (TRUE) {

produci(&item);down (mutex);buffer[in] = item;in = in+1;up(mutex);up(sem)

}}

void cons (void){ int item; while (TRUE) {

down(sem);down(mutex);item = buffer[out];out = out+1;up(mutex);consuma(&item);

}}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

4

N prod, M cons, buffer finitoSemaphore pieno =0, vuoto = N,

mutex =1;int buffer[infinito];int in = 0, out =0;void prod (void){ int item; while (TRUE) { produci(&item);

down(vuoto);down (mutex);buffer[in] = item;in = (in+1) mod N;up(mutex);up(pieno)

}}

void cons (void){ int item; while (TRUE) {

down(pieno);down(mutex);item = buffer[out];out = (out+1) mod N;up(mutex);up(vuoto);consuma(&item);

}}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

5

Esercizio

• Problema dei lettori e scrittori• Un insieme di processi condivide un file dal quale

alcuni possono solo leggere i dati, altri soloscriverli

• Più lettori possono leggere simultaneamente• Un solo scrittore per volta può scrivere• Quando uno scrittore scrive, nessun lettore può

leggere• Diverso da Prod/cons

• i lettori non modificano i puntatori al buffer• i produttori leggono i puntatori, gli scrittori no

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

6

Esercizio

• Sviluppare una soluzione al problemadella corretta sincronizzazione degliaccessi• 1 scrittore, 1 lettore

• accessi in mutua esclusione al file• sia dello scrittore sia del lettore rispetto a questo

• 1 scrittore, n lettori

• m scrittori, n lettori• considerare chi ha priorità, lettori o scrittori

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

7

1 scrittore, 1 lettore

Semaphore mutex = 1, leggo =0 ;

void write (void){

while (TRUE) { down(mutex); write(item);

up(mutex); up(leggo);}

}

void read (void){

while (TRUE) { down(leggo); down(mutex);

read(item); up(mutex);}

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

8

M scrittori, n lettori con priorità

• Gli scrittori aspettano che tutti i lettoriabbiano terminato

• Gli scrittori scrivono in mutua esclusione

• I lettori devono sapere quanti sono• Se c’è un solo lettore, deve aspettare che

eventuali scrittori finiscano

• Lettori che arrivano quando altri stanno giàleggendo procedono senza aspettare

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

9

M scrittori, n lettori con priorità

Lettori_scrittori();int numlett;

/* contiamo solo i lettori perché gli scrittori li aspettano */

semaphore x = 1, scritt = 1;/* x per contare i lettori correttamente; scritt per la mutua esclusione */

{numlett = 0;parbegin

lettore; scrittore;parend

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

10

M scrittori, n lettori con prioritàlettore();{while TRUE do {

down(x);numlett = numlett + 1;if numlett == 1

down(scritt);up(x);leggi_dato();down(x);numlett = numlett - 1;if numlett == 0

up(scritt);up(x);

}}

scrittore();{while TRUE do {

down(scritt);scrivi_dato();up(scritt);}

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

11

M scrittori, n lettori con priorità

• Che tipo di semafori abbiamo usato?• Si potrebbe usare un semaforo generalizzato

per contare i lettori?• Cosa succede nei seguenti casi

• Solo lettori presenti• Solo scrittori presenti• Lettori e scrittori presenti ma

• un lettore è arrivato primo• uno scrittore è arrivato primo

• I lettori continuano ad arrivare prima che l’ultimofinisca

• In coda su scritt ci sono sia lettori che scrittori

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

12

M scrittori con priorità, n lettori

• I lettori si bloccano se c’è almeno unoscrittore che ha segnalato di voler accedereai dati

• Dobbiamo sapere quanti sono gli scrittori• L’aggiornamento del numero di scrittori deve

essere fatto in mutua esclusione• Quando c’è un solo scrittore, aspetta sulla

coda dei lettori per ragioni di priorità

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

13

M scrittori con priorità, n lettori

lettore();{while TRUE do {

aggiorna il numero dilettori in mutuaesclusione;se c’e` un solo lettore,lascia passare gli scrittori;leggi_dato();aggiorna il numero dilettori in mutuaesclusione;se non ci sono piu` lettori,lascia passare gli scrittori;

}}

scrittore();{while TRUE do {

aggiorna il numero di scrittoriin mutua esclusione;

se c’e` un solo scrittore,aspetta che i lettori finiscano;scrivi_dato() in mutuaesclusione;aggiorna il numero di scrittoriin mutua esclusione;

se non ci sono piu` scrittori,lascia passare i lettori;

}}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

14

M scrittori con priorità, n lettoriLettori_scrittori();int numlett, numscritt;semaphore x = 1, y = 1, lett = 1, scritt = 1;

/* x per contare I lettori, y per gli scrittori;

* scritt per la mutua esclusione degli scrittori, * lett per fare aspettare gli uni e gli altri */

{numlett = 0; numscritt = 0;parbegin

lettore; scrittore;parend

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

15

M scrittori con priorità, n lettorilettore();{while TRUE do {

down(lett);down(x);numlett = numlett + 1;if numlett == 1

down(scritt);up(x);up(lett);leggi_dato();down(x);numlett = numlett - 1;if numlett == 0

up(scritt);up(x);

}}

scrittore();{while TRUE do {

down(y);numscritt = numscritt + 1;if numscrit == 1

down(lett);up(y);down(scritt);scrivi_dato();up(scritt);down(y);numscritt = numscritt - 1;if numscritt == 0

up(lett);up(y);

}}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

16

M scrittori con priorità, n lettori

• Cosa succede se• ci sono solo lettori• ci sono solo scrittori• per primo arriva un lettore poi lettori e

scrittori• primo arriva uno scrittore poi lettori e

scrittori• arrivano molti lettori poi uno scrittore

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

17

M scrittori con priorità, n lettoriLettori_scrittori();int numlett, numscritt;semaphore x = 1, y = 1, z = 1, lett = 1, scritt = 1;

/* x per contare I lettori, y per gli scrittori; z per far aspettare lettori e scrittori

* su code diverse; scritt per la mutua esclusione degli scrittori, * lett per fare aspettare un lettore e uno scrittore */

{numlett = 0; numscritt = 0;parbegin

lettore; scrittore;parend

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

18

M scrittori con priorità, n lettorilettore();{while TRUE do {

down(z);down(lett);down(x);numlett = numlett + 1;if numlett == 1

down(scritt);up(x);up(lett);up(z);leggi_dato();down(x);numlett = numlett - 1;if numlett == 0

up(scritt);up(x); }

}

scrittore();{while TRUE do {

down(y);numscritt = numscritt + 1;if numscrit == 1

down(lett);up(y);down(scritt);scrivi_dato();up(scritt);down(y);numscritt = numscritt - 1;if numscritt == 0

up(lett);up(y); }

}

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

19

Osservazioni

• La programmazione della concorrenza con isemafori non è facile• P e V, Up e Down sparpagliate nel codice• problema del corretto ordine di esecuzione di P e

V• l’uso di P e V in ordine errato può portare a deadlock o a

violazione della mutua esclusione

• Proposte soluzioni alternative a livello dilinguaggio di programmazione• monitor• primitiva di sincronizzazione di alto livello

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

20

Altre soluzioni• A livello di linguaggio di programmazione

• monitor• costrutto di linguaggio tipo ADT

• Mediante primitive di comunicazione• sincronizzazione mediante scambio di messaggi con

primitive bloccanti e no• Send(destination, msg)/receive(source, msg)

• tipicamente usato in ambiente multiprocessore amemoria distribuita

• Message Passing Interface

• complesso e poco controllabile• problema dell’affidabilita dei canali, dell’autenticità

dei messaggi, dei nomi dei partecipanti

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

21

Monitor

• Collezione di procedure, variabili, strutturedati raccolte in un pacchetto• i dati del monitor non sono accessibili al di fuori di

esso• le procedure del monitor accedono ai dati

condivisi• un processo può chiamare le procedure del

monitor ovunque ma una sola per volta puòessere in esecuzione

• mutua esclusione

• il monitor è un costrutto di linguaggio• il compilatore sa cosa fare nella traduzione

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

22

MonitorI processi produttori econsumatori eseguonole procedure del monitor,senza preoccuparsi dellamutua esclusione La mutua esclusione èimplicita nell’uso del costruttomonitor

La sezione critica è tuttaraccolta nel monitor

Più semplice da controllare

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

23

Prod-cons con Monitor

Una sola procedura del monitor è attiva alla volta

Il buffer ha N slot

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

24

Deadlock• Un insieme di processi è in deadlock se

ciascuno di essi è in attesa di un evento chesi può verificare solo grazie ad un altroprocesso dell’insieme, in una catena• Es. Due processi A e B usano lo stesso file in

modo esclusivo e la stessa stampante durante laloro esecuzione. All’istante t A acquisisce il file indiviene sospeso, la CPU viene assegnata a B cheacquisisce la stampante e poi si mette in attesadel file; quando la CPU torna ad A, A si mette inattesa della stampante

• A questo punto nessuno dei due è più in grado diproseguire

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

25

Deadlock

• Il deadlock è caratterizzato da 4 condizioninecessarie1. Accesso alle risorse in mutua esclusione2. Hold and Wait

• processi in possesso di risorse possono continuare arichiederne delle nuove, senza cedere quelle giàacquisite anche se rimangono bloccati in attesa

3. Le risorse non sono prelazionabili4. Attesa circolare

• due o più processi sono in attesa di risorse usate da unaltro del gruppo

AA 2002/03©Bruschi, Rosti

Sistemi OperativiCorso di Laurea in Informatica

26

Deadlock

• In genere sono usate 4 strategie per farfronte al deadlock• Ignorarlo• Rilevamento e ripristino

• detection and recovery

• Dynamic avoidance• si usa un’attenta strategia di allocazione risorse

• Prevention• si tratta di fare in modo che una delle 4

condizioni necessarie non si verifichi mai