Upload
voquynh
View
228
Download
0
Embed Size (px)
Citation preview
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