Architetture di elaborazione_Es cache

hastings1
Qualcuno può aiutarmi con questo esercizio sulla cache? Non l'ho capito!!
" Si consideri una cache a mappa diretta da 1MB, in un sistema con indirizzi a 24 bit e blocchi di memoria da 32 byte:
a) specificare la struttura della slot e dell'indirizzo, indicando in bit o byte la dimensione di ciascun campo
b) determinare, esprimendo in decimale, il numero di n di slot in cui entra in cache il blocco che contiene il byte di indirizzo C01758;
c) supponendo che il bus di memoria abbia 32 linee dati, quanti cicli occorrono per trasferire un blocco da memoria a cache? (ris. 8 ma perchè?)d) specificare l'indirizzo di un qualsiasi byte al cui blocco corrisponde la slot di cache numero $(573)_10$

Risposte
Malcolm1
"settembre":
Qualcuno può aiutarmi con questo esercizio sulla cache? Non l'ho capito!!
"Si consideri una cache a mappa diretta da 1MB, in un sistema con indirizzi a 24 bit e blocchi di memoria da 32 byte:
a) specificare la struttura della slot e dell'indirizzo, indicando in bit o byte la dimensione di ciascun campo
b) determinare, esprimendo in decimale, il numero di n di slot in cui entra in cache il blocco che contiene il byte di indirizzo C01758;
c) supponendo che il bus di memoria abbia 32 linee dati, quanti cicli occorrono per trasferire un blocco da memoria a cache? (ris. 8 ma perchè?)d) specificare l'indirizzo di un qualsiasi byte al cui blocco corrisponde la slot di cache numero $(573)_10$


E' facile, ma sono di fretta. Comunque: lo slot di indirizzo per una cache a mappa diretta è composto da tre campi: etichetta, linea e parola. La dimensione dell'intero indirizzo è 24 bit, di questi i 15 meno significativi servono ad indirizzare i 32 kbyte all'interno del blocco, i successivi 5 ad indirizzare i 2^20 -2^15 blocchi della cache e i restanti 4 fungono da etichetta.
A questo punto, per detrminare che blocco contenga C01758, consideri l'esadecimale

  C    0    1    7    5    8
1100 0000  0001 0111 0101 1000


questi sono 24 bit. Ora li suddividi secondo lo schema di prima:

1100 | 00000 | 001 0111 0101 1000
  12      0     1    7    5    8

Per un puro caso, l'indirizzo è uguale, ma come ben vedi, il blocco, che è quello che ci interessa, è il numero 0 (il campo linea di 5 bit).

Quanto alla C, banalmente perchè un byte è fatto di otto bit. 32 linee, 32 byte un bit alla volta, otto cicli di clock.
Dell'ultima non ho capito la notazione, ma devi invertire il processo di prima.

EDIT: grammatica.

hastings1
scusami, ma non ho capito come fai a dire che i 24 bit sono così ripartiti
i 15 meno significativi servono ad indirizzare i 32 byte all'interno del blocco, i successivi 5 ad indirizzare i 2^20 -2^15 blocchi della cache e i restanti 4 fungono da etichetta.

in particolare da dove esce il 15? C'è qualcosa come $2^15$? però 1MB sono $2^20$, o sbaglio?
i successivi 5 sarebbero l'esponente di $2^5=2^20/2^15=2^(20-15)$?
Etichetta o TAG è lo stesso, giusto?

Malcolm1
"settembre":
scusami, ma non ho capito come fai a dire che i 24 bit sono così ripartiti

Eh, ti credo, perché sono pirla e ho sbagliato a leggere: sono 32 byte, non 32 kbyte. Le cose stanno quindi così:

2^24 è la dimensione della memoria, quindi l'indirizzo totale è di 24 bit. Ci siamo.
2^20 è la dimensione della cache, per cui ci serviranno venti bit per indirizzarla. I restanti 4 sono quelli di tag.
Questi 20 bit sono così suddivisi: il campo parola, che indirizza le parole all'interno del blocco, è di 5 bit (2^5=32, la dimensione del blocco). I restanti byte indirizzano ogni singola linea di cache, e ve ne sono 2^20 (1MB, la dimensione della cache) / 2^5 (32 byte, ancora la dimensione di blocco) = 2^15 byte.
I conti tornano, ora. Chiedo scusa per l'errore belluino.

"settembre":
Etichetta o TAG è lo stesso, giusto?

Proprio.

hastings1
:D grazie!

Ehm... un'ultima cosuccia:
per quanto riguarda il punto d) ho convertito 573 in 1000 1111 01.
poiché chiede di trovare l'indirizzo di un qualsiasi byte al cui blocco corrisponde il numero 573, credo che del numero binario corrispondente mi interessino solo i primi 4 bit a partire da sinistra cioé (1000) che rappresentano il TAG, e i 5 bit successivi cioè 11110 per l'indirizzamento all'interno del blocco. L'ultimo 1 rimane fuori, non ci interessa.
E' giusto così, o mi sbaglio?
Inizialmente avevo pensato che 573 fosse solo relativo al campo parola per l'indirizzamento all'interno del blocco, ma per tradurre 573 in binario servono almeno 9 bit. Però il campo parola ne conta solo 5.
Ho sbagliato?

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