This is an old revision of the document!
1. Pe un sistem multiprocesor cu două procesoare, care este rezultatul rularii simultane pe cele doua procesoare a instructiunii inc 0x12(%eax)?
Depinde de valoarea din registrul eax}. Dacă este aceeași pe ambele procesoare atunci putem incrementa o singură dată sau de 2 ori aceeași locație de memorie – inc} nu este atomic la nivel de sistem. Dacă valorile din eax} sunt diferite atunci nu se întâmplă nici o condiție de cursă.
eax} NU conține 0x12} și NU se face incrementare cu 0x12}!
2. De ce sunt necesare sincronizări între 2 apeluri ale unei rutine de întrerupere? De ce sunt necesare sincronizări între rutina de întrerupere și codul kernel?
Accesul la date partajate în ambele cazuri. În cazul rutinelor de întrerupere e posibil ca ele să fie serializate sau distribuite pe mai multe procesoare.
3. Care este starea celor două linii de cache a unor două procesoare ce folosesc protocolul MESI pentru secvența (completați tabelul, cu bold e ce era deja în tabel).
Procesor A | nop | eax ← [a] | nop | [a] ← eax | nop |
---|---|---|---|---|---|
Procesor B | nop | nop | eax ← [a] | nop | eax ← [a] |
Cache A | I | E | S | M/E | S |
Cache B | I | I | S | I | S |
Vedeți https://www.scss.tcd.ie/Jeremy.Jones/vivio/caches/MESI.gif
Singurele combinații valide sunt I* și SS.