PDA

View Full Version : Processi con semafori URGENTE!!!!!!


LOVE85
18-02-2007, 09:45
Sincronizzazione di 3 Processi coi Semafori.
Si considerino i processi A, B e C che si sincronizzano come
mostrato nel seguito attraverso i semafori Sem1, Sem2 e Sem3
(inizializzati a 0) e che operano sulle variabili condivise x, y e z. Che
sono inizializzate come segue: x = 1; y = 2; z = 1;
Con quale ordine i processi stampano i valori delle tre variabili?
Qual è il valore delle tre variabili che viene infine stampato?

Process A {
P(Sem1);
z = (x - z)*y ;
x = x+z+y;
V(Sem3);
P(Sem1);
x = x + y;
Print(x);
}

Process C {
V(Sem2);
P(Sem3);
x = x / y ;
y = 2z + x ;
V(Sem1);
z = x + z;
Print(z);
}

Process B {
P(sem2);
x = x + y;
z = x - z;
y=(y-z)+x;
Print(y);
V(sem1);
}
E' vero che stampa prima y,poi z e infine x?

E' vero che mi stampano i seguenti valori?
x = 5
y = 3
z = 3/2

I processi si influenzano tra di loro?
Cioè quando acquisiscono le variabili inizializzate esse unavolta elaborate dal processo vengono passate o solo utilizzate per stampare ogni variabile? Grazie. mI SERVE PER CAPIRE CHE DOMANI HO STA PROVAA!!!

cionci
18-02-2007, 13:23
Ad occhio V è equivalente ad una signal e P ad una wait...in tal caso:

- l'unico processo che non si blocca all'inzio è C, ma si blocca su P(Sem3) avendo prima sbloccato B con V(Sem2).
- a questo punto B esegue i calcoli e stampa y e sblocca A
- A esegue i calcoli sblocca C e si blocca su Sem1
- C esegue i calcoli e sblocca A

Ora la situazione è strana ci sono due processi in esecuzione contemporaneamente...non essendoci mutua esclusione e lavorando sulle stesse variabili (che secondo il testo sono appunto condivise), il risultato non è predicibile.

giannola
18-02-2007, 16:37
Ad occhio V è equivalente ad una signal e P ad una wait...in tal caso:

- l'unico processo che non si blocca all'inzio è C, ma si blocca su P(Sem3) avendo prima sbloccato B con V(Sem2).
- a questo punto B esegue i calcoli e stampa y e sblocca A
- A esegue i calcoli sblocca C e si blocca su Sem1
- C esegue i calcoli e sblocca A

Ora la situazione è strana ci sono due processi in esecuzione contemporaneamente...non essendoci mutua esclusione e lavorando sulle stesse variabili (che secondo il testo sono appunto condivise), il risultato non è predicibile.

esatto C dovrebbe sbloccare A solo dopo aver eseguito tutti i calcoli e stampato, altrimenti per la race condition, la z potrebbe avere valori diversi.
Va da sè che i due processi non sarebbero in esecuzione contemporaneamente come afferma il buon cionci.
Uno sarebbe in esecuzione e l'altro sarebbe nella coda dei processi pronti, però appunto non si può predire in questo modo quale dei due a causa di una interruzione o della scadenza del suo quanto di tempo sia in grado di essere completato prima.

Ipotesi 1:

C fa la sua signal su sem1 e continua a lavorare, in questo caso
z sarà uguale a x+z, poi però si può interrompere e parte A che eseguirà
x=x+y e magari continua e stampa x.

Ipotesi 2:

C fale stesse cose di cui sopra però arriva a terminare e dunque riuscirà a stampare z

Ipotesi 3 (la più dannosa):

C fa la signal su sem1 e viene sospeso, a questo punto A esegue x=x+z e magari si interrompe.

Ora quando C riprende non avrà più un operazione z=x+z, ma è z=(x+y)+z.

Tralasciando le precedenze sulla stampa che possono ancora in questo caso essere influenzate a seconda che subentrino altre interruzioni o no, è grave che proprio il risultato della variabile globale z possa essere fondamentalmente modificato.;)

cionci
18-02-2007, 17:03
Non è detto che non siano in esecuzione contemporaneamente...in un ambiente multiprocessore (che è solitamente la supposizione che si fa per questo genere di problemi, cioè il worst case) potrebbero essere in esecuzione anche contemporaneamente ;)

giannola
18-02-2007, 18:30
Non è detto che non siano in esecuzione contemporaneamente...in un ambiente multiprocessore (che è solitamente la supposizione che si fa per questo genere di problemi, cioè il worst case) potrebbero essere in esecuzione anche contemporaneamente ;)

Già, dimenticavo l'ambiente multiprocessore :stordita:
Davo per scontato che si limitasse al monoprocessore.:D

EDIT: aggiungo che lo davo per scontato proprio perchè si parlava delle wait, che da sole in ambiente multiprocessore non possono esistere, perchè per essere eseguite bisognerebbe disabilitare le interruzioni su tutti i processori, sul multiprocessore occorre utilizzare le tsl.
Ecco perchè mi ero risolto al solo aspetto monoprocessore.

71104
18-02-2007, 20:20
Già, dimenticavo l'ambiente multiprocessore :stordita:
Davo per scontato che si limitasse al monoprocessore.:D semi-ot: indipendentemente dal numero di processori e dalle specificità dell'architettura, quando si ragiona con le teorie di programmazione concorrente va definito quali operazioni sono atomiche e quali non lo sono. possono esistere architetture multiprocessore sulle quali sono atomiche operazioni che non lo sono su altre (sempre multiprocessore), e viceversa.