Pages: [1]   Go Down
Print
Author Topic: semafori  (Read 2602 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« 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??
« Last Edit: 21-06-2011, 15:21:26 by Dhavamba » Logged
Fabiux
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 401



« Reply #1 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?
Logged
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 21-06-2011, 00:16:46 »

penso che il risultato sia 1
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #3 on: 21-06-2011, 15:20:18 »

ma perchè? che passaggi fate???
Logged
Eleirgab
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 344


Apprezzatemi ora. Eviterete la fila


WWW
« Reply #4 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
« Last Edit: 21-06-2011, 17:48:46 by Eleirgab » Logged

Collettivo SDAI

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d-- s+:+ a-- C++ UL++ P L+++ E- W+++>$ N? o? K- w-- O? M V? PS++ PE- Y+ PGP- t 5? X+ R>+ tv-- b++ DI+++ D- G e h! r y+
------END GEEK CODE BLOCK-----
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #5 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???
Logged
Eleirgab
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 344


Apprezzatemi ora. Eviterete la fila


WWW
« Reply #6 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.
Logged

Collettivo SDAI

-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GIT d-- s+:+ a-- C++ UL++ P L+++ E- W+++>$ N? o? K- w-- O? M V? PS++ PE- Y+ PGP- t 5? X+ R>+ tv-- b++ DI+++ D- G e h! r y+
------END GEEK CODE BLOCK-----
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #7 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!!
Logged
Geko
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 166


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