Pages: [1]   Go Down
Print
Author Topic: [Esercizio] Processi, wait e signal  (Read 2053 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Agadir92
Matricola
*
Offline Offline

Posts: 42


« 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.

Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 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, a riguardo .

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 !
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Agadir92
Matricola
*
Offline Offline

Posts: 42


« Reply #2 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!
Logged
Pages: [1]   Go Up
Print
Jump to: