Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Sistemi Operativi, 9 CFU => Topic started by: Dhavamba on 15-06-2011, 10:01:57



Title: semafori
Post by: Dhavamba on 15-06-2011, 10:01:57
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.

Salve, questo era un esercizio di un compito tipo...mi potete spiegare per passaggi come si risolve??


Title: Re:semafori
Post by: Fabiux on 20-06-2011, 18:49:04
secondo me l'output di P3 sarà 1 .... però c'è qualcuno che me lo conferma o che può correggermi?


Title: Re:semafori
Post by: rox on 21-06-2011, 00:16:46
penso che il risultato sia 1


Title: Re:semafori
Post by: Dhavamba on 21-06-2011, 15:20:18
ma perchè? che passaggi fate???


Title: Re:semafori
Post by: Eleirgab on 21-06-2011, 15:34:14
X=1 S=1 R=0 T=0

L'unico processo che può partire è P1, fa una wait su S, ora le variabili valgono
X=1 S=0 R=0 T=0

P1: x=x-2  //Ora x vale -1
signal(T) //Ora T vale 1
wait(S)  //Si blocca aspettando che S torni 1

X=-1 S=0 R=0 T=1
L'unico processo che può partire è P3, fa una wait su T:
X=-1 S=0 R=0 T=0

P3:
 if (x<0) signal(R)  //Verificato R=1
wait(T) //T è zero si blocca aspettando che T torni 1

Ora l'unico processo che può partire è P2, fa una wait su R:
X=-1 S=0 R=0 T=0
P2:
x=x+2 //X=1
signal(T) // T=1
wait(R) //Si blocca

X=1 S=0 R=0 T=1
P3 è l'unico processo ad aspettare su T, quindi può proseguire:
P3:
print(x)

Output 1


Title: Re:semafori
Post by: Dhavamba on 21-06-2011, 17:02:36
grazie comunque inizia con p1 perché è l'unico che fa' wait su S che è 1 e non 0???


Title: Re:semafori
Post by: Eleirgab on 21-06-2011, 17:49:48
grazie comunque inizia con p1 perché è l'unico che fa' wait su S che è 1 e non 0???

esattamente.
Poi se vogliamo essere più formali, potrebbe iniziare uno qualunque degli altri due processi, solo che alla prima istruzione si bloccherebbero e lascerebbero il tempo di CPU agli altri.


Title: Re:semafori
Post by: Dhavamba on 21-06-2011, 23:36:06
grazie...il problema e che non il testo non spiegava che il semaforo t è sul processo p3, e così via....comunque ora l'ho capito, grazie!!


Title: Re:semafori
Post by: Geko on 26-06-2011, 17:06:10
All'inizio non capivo. Ho provato a farlo 4 volte e non mi risultava.
Mi sono steso sul letto e dopo 3 minuti circa m'è venuto in mente
"Un semaforo è una stuttura dati."
Si compone del valore e della lista. Quindi nell'esercizio ci sono 3 liste.

Non so se può servire, ma a me è sì!

nb. risulta 1

GC