[Sistemi Operativi] Domanda sulla concorrenza
Ciao, in un compito di sistemi operativi ho visto questa domanda:
Considerate i due processi
P
x:=x+1
x:=x*2
Q
x:=x-1
Essi vengono lanciati in parallelo con valore di x iniziale 0. Alla fine della loro esecuzione, x può valere i valori 0, 1. Può avere altri valori?
Voi come rispondereste?
Io direi che x può avere anche altri valori, a causa della traduzione in linguaggio macchina di quelle istruzioni (del tipo x:=x+1), che ad alto livello sono composte da una singola istruzione, ma che in linguaggio macchina si traducono in più istruzioni, e quindi potrebbe arrivare un context switch prima che un'istruzione sia completata e questo potrebbe portare a risultati inconsistenti. Problema risolvibile con i semafori, ad esempio.
Che cosa ne pensate? Se x può avere altri valori, quali potrebbero essere?
Considerate i due processi
P
x:=x+1
x:=x*2
Q
x:=x-1
Essi vengono lanciati in parallelo con valore di x iniziale 0. Alla fine della loro esecuzione, x può valere i valori 0, 1. Può avere altri valori?
Voi come rispondereste?
Io direi che x può avere anche altri valori, a causa della traduzione in linguaggio macchina di quelle istruzioni (del tipo x:=x+1), che ad alto livello sono composte da una singola istruzione, ma che in linguaggio macchina si traducono in più istruzioni, e quindi potrebbe arrivare un context switch prima che un'istruzione sia completata e questo potrebbe portare a risultati inconsistenti. Problema risolvibile con i semafori, ad esempio.
Che cosa ne pensate? Se x può avere altri valori, quali potrebbero essere?
Risposte
non ho ancora studiato questa materia,
comunque penso possa assumere altri valori
immaginiamo di scomporre ogni istruzione in due istruzioni "legge", "scrive":
Q Legge 0
P Legge 0
P Scrive 0 + 1 = 1
Q Scrive 0 - 1 = - 1 (in quanto ha letto prima che P scrivesse quindi non sa che in realtà il valore reale della variabile è 1)
P Legge -1
P Scrive -1 * 2 = -2
comunque penso possa assumere altri valori
immaginiamo di scomporre ogni istruzione in due istruzioni "legge", "scrive":
Q Legge 0
P Legge 0
P Scrive 0 + 1 = 1
Q Scrive 0 - 1 = - 1 (in quanto ha letto prima che P scrivesse quindi non sa che in realtà il valore reale della variabile è 1)
P Legge -1
P Scrive -1 * 2 = -2
In assembly un'istruzione del tipo:
totale=totale + valore
diventa
(non conosco l'assembly, questo esempio però è nelle mie slide).
Da qui si capisce bene che un'istruzione singola ad alto livello diventa almeno 3 istruzioni in linguaggio macchina.
Per cui ciò che ho scritto, almeno concettualmente, dovrebbe essere corretto.
Grazie.
totale=totale + valore
diventa
lw $t0, totale //carica totale add $t0, $t0, $a0 //totale+valore sw $t0, totale //store totale
(non conosco l'assembly, questo esempio però è nelle mie slide).
Da qui si capisce bene che un'istruzione singola ad alto livello diventa almeno 3 istruzioni in linguaggio macchina.
Per cui ciò che ho scritto, almeno concettualmente, dovrebbe essere corretto.
Grazie.
di nulla
