Esercizio
Sia data la procedura swap così definita:
proc swap(var x,var y)
var aux;
begin-atomic
aux := y;
y := x;
x
:= aux;
end-atomic
che scambia il contenuto di x e y in modo "atomico" cioe' senza
possibili interferenze
dello scheduler.
E' possibile utilizzare questa funzione al posto, ad. es. della test&set,
per assicurare la
proprieta' di mutua esclusione da una sezione critica?
Esercizio
Considerate il seguente programma concorrente
semaphor s1:=0;
semaphor s2:=0;
P: process {
up(s1);
down(s2);
print P
down(s2);
print R
up(s1);
}
Q: process {
up(s2);
down(s1);
print A;
up(s2);
down(s1);
print I;
}
Descrivere il comportamento e i possibili output
dell’esecuzione parallela di P e Q.
Esercizio
Si consideri il problema dei lettori e scrittori, con riferimento alla
soluzione proposta nel testo e riportata di seguito:
semaphore mutex=1;
semaphore db=1;
int rc=0;
void reader (void) {
while (TRUE) {
down(&mutex);
rc=rc+1;
if
(rc==1) down(&db) endif; (-2-)
up(&mutex);
read_DataBase();
down(&mutex);
rc=rc-1;
if
(rc==0) up(&db); (-3-)
up(&mutex);
use_data_read();
}
}
void writer(void) {
while (TRUE) {
Think_Up_Data();
down(&db);
(-0-)
write_data_base();
up(&db);
(-1-)
}
}
Dire cosa accade se:
a)
si eliminano gli statement (-0-) e (-1-)
b)
b) si elimina lo statement (-2-)
c) si elimina lo
statement (-3-)
Soluzione:
a)
si possono avere corse critiche (interferenze) fra i lettori e gli
scrittori e fra più scrittori
b)
i lettori possono accedere al database mentre uno scrittore lo sta
modificando
c)
gli scrittori possono rimanere bloccati per sempre in attesa su db
Esercizio
Considerate i seguenti
due processi
Risorse condivise |
|
Processo P1 } |
Processo P2 |
supponete che P1 e P2 vengano eseguiti concorrentemente dalla stessa CPU.
E1.1)
Vale la proprieta' di mutua esclusione rispetto alla variabili x? E
rispetto a y?
Soluzione:
Le regioni critiche per P1 sono
per P2
La prop. di mutua esclusione vale per la variabile x ma non
vale per la variabile y.
La parte di codice racchiusa tra down e up in P1 e P2 protegge
infatti ogni accesso
(lettura e scrittura) alla variabile x. Per definizione di P1 e P2 solo uno dei
processi puo accedere alla regione critica per x (P1 e P2 si alternano).
La variabile y invece e' parzialmente protetta dai semafori: la
condizione (y>0)
e' potenzialmente soggetta a race-conditions (cioe' dopo aver
passato il test in P1,
la variabile potrebbe assumere un valore =0 a causa dell'intervento di P2).
E1.2)
Descrivere le possibili sequenze di output per K>1 motivando
brevemente la risposta.
Soluzione:
Quando eseguito su K fissato e > 1 il programma concorrente P1 | P2
da origine a
due possibili sequenze di output:
S1= 1 2 ... K 1 2 ... K-1 .... 1 2 1
S2= 1 2 ... K 1 2
... K-1 .... 1 2 1 1
P1 infatti sblocca P2 solo quando x raggiunge il valore di y.
al che P2 decrementa y azzera x e passa il controllo a x.
Notate tuttavia che quando x=y=1, P1 ha stampato 1 e ha passato il controllo
a P2 (cioe' ha eseguito up(T) ma non ha ancora controllato (y>0))
ci sono due possibili esecuzioni (causate dalla race-condition su y):
a. viene eseguito prima P2 (che mette y a 0) e poi P1 che esce perche
(y>0)=falso
Questa sequenza corrisponde a S1
oppure
b. viene eseguito prima P1 che passa il test (y>0), e si blocca su S.
A questo punto P2 pone y=0 e x=0 e sblocca P1.
P1 stampa ancora 1, esegue up(S) e poi esce dal ciclo
(y>0)=falso, lasciando
P2 in deadlock per sempre.
Questa sequenza corrisponde a S2
E1.3)
Supponete ora di modificare l'inizializzazione dei semafori come segue:
semaphore S=0;
semaphore T=1;
Descrivere le possibili sequenze di output per K>1 motivando
brevemente la risposta.
Soluzione:
Nuovamente ci sono due possibili sequenze
S1'= vuota
S2'= 1
Infatti P2 pone y=-1, risveglia P1 e poi va in attesa su T.
P1 potrebbe non essere ancora entrato nel ciclo quindi trova (y>0)=falso
ed esce: sequenza S1'.
Se invece P1 era gia in attesa su S: stampa 1 e poi trova (y>0)=falso ed
esce:
sequenza S2'.
Esercizio
Considerate i seguenti due processi
Risorse condivise |
|
Processo P1 } |
Processo P2 |
supponete che P1 e P2 vengano eseguiti concorrentemente dalla stessa CPU.
<!--[if
!supportEmptyParas]-->E1.1)
Descrivere le possibili sequenze di output per K>1 motivando brevemente
la risposta.
Soluzione:
Quando eseguito su K fissato e > 1 il programma concorrente P1 | P2
da origine a
due possibili sequenze di output:
S1= 1 2 ... K-1 1 2 ... K-2 .... 1 2 1
S2= 1 2 ... K-1 1 2 ...
K-2 .... 1 2 1 1
Infatti P2 inizialmente mette y a K-1 e x a 0 e poi passa il controllo a P1.
P1 sblocca P2 solo quando x raggiunge il valore di y.
al che P2 decrementa y azzera x e passa il controllo a x.
Notate tuttavia che quando x=y=1, P1 ha stampato 1 e ha passato il controllo
a P2 (cioe' ha eseguito up(T) ma non ha ancora controllato (y>0))
ci sono due possibili esecuzioni (causate dalla race-condition su y):
a. viene eseguito prima P2 (che mette y a 0) e poi P1 che esce perche
(y>0)=falso
Questa sequenza corrisponde a S1
oppure
b. viene eseguito prima P1 che passa il test (y>0), e si blocca su S.
A questo punto P2 pone y=0 e x=0 e sblocca P1.
P1 stampa ancora 1, esegue up(S) e poi esce dal ciclo
(y>0)=falso, lasciando
P2 in deadlock per sempre.
Questa sequenza corrisponde a S2
E1.2)
Supponete che le parti di codice racchiuse tra down e up in
P1 e P2 rappresentino regioni critiche.
Vale la proprieta' di progesso per il sistema globale composta da P1
e P2?
Soluzione:
La prop. di progesso non vale perche' quando il processo P1 esce dal
while e termina le
sue operazioni P2 rimane sospeso sul semaforo T per sempre -> dedalock.
E1.3)
Supponete ora di modificare l'inizializzazione della variabile x
come segue:
int x=0;
Descrivere le possibili sequenze di output per K>1 motivando
brevemente la risposta.
Soluzione:
Nuovamente ci sono due possibili sequenze
S1'= vuota
S2'= 1
Infatti P2 pone y=-1, risveglia P1 e poi va in attesa su T.
P1 potrebbe non essere ancora entrato nel ciclo quindi trova (y>0)=falso
ed esce: sequenza S1'.
Se invece P1 era gia in attesa su S: stampa 1 e poi trova (y>0)=falso ed
esce:
sequenza S2'.
Esercizio
Considerate i
seguenti processi
Risorse condivise |
|
|
Processo P1 |
Processo P2 |
Processo P3 |
supponete che i processi vengano eseguiti concorrentemente sulla stessa CPU.
<!--[if
!supportEmptyParas]-->
Soluzione
·
Si, la variabile x non 'e protetta adeguatamente. Ad esempio, P1 e P2
possono accedere ad x simultaneamente.
·
In generale: P1 e P2 lavorano in concorrenza (race conditions su x).
P3 puo partire solo dopo P2 e solo se P3 pone x=1;
Quando attivi P1 e P3 lavorano in concorrenza (race conditions su x).
Vi sono quindi vari interleaving:
·
Cosi' facendo inseriamo un punto di sincronizzazione in P1: write(x)
verra' eseguita solo se P2 o P3 hanno prima eseguito una up.
Tuttavia rimangono le race conditions tra i tre assegnamenti.
Quindi i possibili output rimangono sempre 1, 3 e 10.
Esercizio
Considerate i
seguenti processi
Risorse condivise |
|
Processo P1 |
Processo P2 |
supponete che i processi vengano eseguiti concorrentemente sulla stessa CPU.
Soluzione
Esercizio
Considerate i
seguenti processi
Risorse condivise |
|
Processo P1 |
Processo P2 |
supponete che i processi vengano eseguiti concorrentemente sulla stessa CPU.
Soluzione
Le regioni critiche sono protette da semafori per
cui non vi sono race conditions su x
Esercizio
Considerate i
seguenti processi
Risorse condivise |
|
Processo P1 |
Processo P2 |
supponete che i processi vengano eseguiti concorrentemente sulla stessa CPU.
Soluzione
Sia K il valore in input