[Sistemi Operativi] Domanda sulla concorrenza

EveyH
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?

Risposte
giovx24
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

EveyH
In assembly un'istruzione del tipo:
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.

giovx24
di nulla :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.