Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Sistemi Operativi, 9 CFU => Topic started by: Agadir92 on 30-04-2014, 16:18:57



Title: [Esercizio] Processi, wait e signal
Post by: Agadir92 on 30-04-2014, 16:18:57
Salve raga, ho visto questa domanda nel compito messo sul suo sito
5. Supponiamo di avere 3 processi che condividono una variabile x e che i loro pseudo-codici siano i seguenti:
P1:
wait(S)
x=x-2
signal(T)
wait(S)
x=x-1
signal(T)

P2:
wait(R)
x=x+2
signal(T)
wait(R)

P3:
wait(T)
if (x<0) signal(R)
wait(T)
print(x)


Determinare l’output del processo P3 assumendo che il valore iniziale di x `e 1 e che i 3 semafori abbiano i seguenti valori iniziali: S=1, R=0, T=0.


Ma i 3 processi si bloccheranno tutti alla prima istruzioni, non si produrrà nessun output, sbaglio? l'istruzione wait su una variabile blocca il processo chiamante finchè non arriva un signal sulla stessa variabile.



Title: Re:[Esercizio] Processi, wait e signal
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 01-05-2014, 00:37:59
Devi ricorrere alla definizione di semaforo e di cosa fanno (ciascuna atomicamente) le operazioni wait e signal.

Il primo risultato che dà Google è questo (http://goo.gl/gXMCMq), a riguardo .smile.

Dopodiché, possiamo analizzare i tre processi:

P2 e P3 attendono su due variabili (R e T) che sono inizialmente poste a zero, dunque vengono sospesi fino a una successiva signal che li faccia uscire dalla coda di attesa.

P1, invece, attende sulla variabile S, che inizialmente è posta a uno, dunque non entra in sospensione, ma semplicemente pone il mutex/semaforo associato a 0, e continua l'esecuzione portando x, dal valore 1 al valore 1-2=-1.
Adesso P1 sblocca un processo dalla coda di T (cioè P3), con signal(T), e torna immediatamente ad attendere su S (su cui, almeno in questo codice, non verrà mai più fatta una signal, e che quindi resterà in attesa per sempre...);
il processo sbloccato (P3) controlla il valore di x; lo trova pari a -1, e -1<0, quindi entra nel ramo then dell'if, eseguendo signal(R), che sblocca un processo dalla coda di R (P2), e torna in attesa su T;
il processo sbloccato dalla coda di R (P2), porta x da -1 a -1+2=1 e immediatamente sblocca un processo dalla cosa di T; l'unico che era presente in tale cosa era P3 da pochissimo fa, che, adesso, può finalmente fare la print(x): siccome x contiene 1, P3 stamperà 1, e questa è la risposta .smile!


Title: Re:[Esercizio] Processi, wait e signal
Post by: Agadir92 on 05-05-2014, 10:52:06
vero! il wait fa sospendere solo se non ci sono sveglie salvate ma in S inizialmente c'è 1 già già! grazie per la risposta!