|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 86
|
Processi con semafori URGENTE!!!!!!
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!!! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Città: Palermo
Messaggi: 2579
|
Quote:
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.
__________________
Utente gran figlio di Jobs ed in via di ubuntizzazione Lippi, perchè non hai convocato loro ? |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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
Ultima modifica di cionci : 18-02-2007 alle 17:06. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2005
Città: Palermo
Messaggi: 2579
|
Quote:
Davo per scontato che si limitasse al monoprocessore. 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.
__________________
Utente gran figlio di Jobs ed in via di ubuntizzazione Lippi, perchè non hai convocato loro ? Ultima modifica di giannola : 19-02-2007 alle 07:28. |
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:11.




















