This shows you the differences between two versions of the page.
so2:cursuri:curs07:test [2013/02/10 02:10] 127.0.0.1 external edit |
so2:cursuri:curs07:test [2013/02/17 09:52] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Test Cursul 7 ====== | ====== Test Cursul 7 ====== | ||
- | 1. **Pe un sistem multiprocesor cu două procesoare, care este rezultatul rularii simultane pe cele doua procesoare a instructiunii inc 0x12(%eax)?** | + | * TODO |
- | + | ||
- | 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. | + |