Per calcolare l'indice della linea di cache per un dato indirizzo di memoria, l'indirizzo di memoria viene diviso per la dimensione della linea di cache. Il resto di questa divisione è l'indice della riga della cache. Ad esempio, se l'indirizzo della memoria è 0x100 e la dimensione della riga della cache è 16 byte, l'indice della riga della cache sarà 4.
La funzione di mappatura diretta mappa un indirizzo di memoria su un indice di riga della cache secondo la seguente formula:
```
cacheLineIndex =memoryAddress mod cacheLineSize
```
Dove:
* cacheLineIndex è l'indice della riga della cache
* Indirizzo memoria è l'indirizzo di memoria
* cacheLineSize è la dimensione della riga della cache
Ecco un esempio di come funziona la mappatura diretta. Considera una cache con una dimensione della riga di cache di 16 byte. La tabella seguente mostra gli indirizzi di memoria associati a ciascun indice di riga della cache:
| Indice della riga della cache | Indirizzi di memoria |
|---|---|
| 0| 0x000, 0x010, 0x020, ..., 0x0F0 |
| 1| 0x100, 0x110, 0x120, ..., 0x1F0 |
| 2| 0x200, 0x210, 0x220, ..., 0x2F0 |
| 3| 0x300, 0x310, 0x320, ..., 0x3F0 |
| ... | ... |
Ora, diciamo che vogliamo accedere all'indirizzo di memoria 0x123. Per calcolare l'indice della linea di cache per questo indirizzo, dividiamo 0x123 per 16. Il resto di questa divisione è 3. Pertanto, l'indice della linea di cache per l'indirizzo di memoria 0x123 è 3.
Secondo la tabella sopra, l'indice della riga di cache 3 è mappato agli indirizzi di memoria 0x300, 0x310, 0x320, ..., 0x3F0. Pertanto, l'indirizzo di memoria 0x123 viene mappato sulla riga della cache che contiene gli indirizzi di memoria 0x300, 0x310, 0x320, ..., 0x3F0.
Programmazione © www.354353.com