Livelli di memoria
Memoria più veloce è più costosa. Memoria meno costosa è più lenta.
La memoria più veloce è posta più vicina al processore e sfrutta i principi di località temporale e spaziale.
Località temporale
Principio secondo cui se si accede ad un dato, si avrà, con molta probabilità, necessità di accedervi entro poco tempo.
Località spaziale
Principio secondo cui se si accede ad un dato, si avrà, con molta probabilità, necessità di accedere entro poco tempo a dati vicini a quel dato.
Memoria cache
La memoria cache è una memoria molto veloce (flip flop di tipo D) e molto costosa. La memoria cache è posta vicino al processore (è dell'ordine dei kbyte, megabyte)
Hit
Quando la CPU ha bisogno di un dato, chiede alla memoria cache, se la memoria cache ha quel dato, lo fornisce.
Frequenza di hit (hit rate) è la frequenza con cui si verifica una hit, ovvero il fatto che il dato venga trovato in cache.
Miss
Quando la CPU ha bisogno di un dato, chiede alla memoria cache, se la memoria cache non ha quel dato, lo preleva in memoria principale (memoria lenta), lo copia in memoria cache e dopo lo fornisce al processore.
Frequenza di miss (miss rate) è la frequenza con cui si verifica una miss, ovvero il fatto che il dato non venga trovato in memoria cache.
Tempo di hit
Tempo di accesso alla memoria cache e tempo necessario per cercare il dato (e quindi tempo necessario per verificare se il dato è presente (hit) o no (miss).
Penalità di miss
Tempo necessario per caricare un dato dalla memoria principale, o eventualmente sostituirlo con uno già presente.
Struttura memoria cache
La memoria cache è suddivisa in blocchi (o linee) di k byte.
Quando viene richiesto un dato alla memoria principale, la memoria cache non prende solo il singolo dato, ma (per sfruttare la località spaziale) prende un blocco di dati (della dimensione della linea di cache).
Mappatura ad associazione diretta
Come si fa a sapere se un blocco è in memoria cache?
Ogni linea di cache ha un campo tag, tale campo contiene una porzione dell'indirizzo da cui è stato prelevato il blocco. Questo avviene sfruttando l'operazione di modulo.
ind_bloc mod n_linee_cache
Dove ind_bloc è l'indirizzo del blocco in memoria principale.
Cache set-associative
Ibrido tra mappatura associativa e diretta.
Ogni blocco di memoria principale può essere presente in un numero prefissato n di blocchi di cache. Una cache con questa organizzazione viene detta a n vie.
Le linee di cache, diventano insiemi di blocchi. Un blocco di memoria può essere salvato in maniera diretta in una linea di cache, ma al suo interno possono esserci n blocchi, in cui viene salvata in maniera associativa.
Mappatura associativa
Nella mappatura associativa un blocco di memoria principale può trovarsi in un blocco qualsiasi, in questo caso, quando lo si cerca, è necessario scorrere tutti i blocchi della cache.
Bit di validità
Come verificare se in una determinata linea di cache è salvato un blocco di memoria? Viene aggiunto un altro campo alle line di cache: un bit di validità.
Prestazioni
Hit rate e miss rate sono delle frequenze da prendere in considerazione nel caso in cui si vogliono misurare le prestazioni della memoria cache. Entrano in gioco anche l'algoritmo di sostituzione di blocco e la mappatura utilizzata.