sei sul sito di Giovanni Fraterno
Nel migliore dei casi il tempo di accesso alla
memoria centrale può anche essere di 40 volte più
lungo di un ciclo
di lavoro del microprocessore.
Per rimediare a questa decelerazione, gli attuali processori si servono di
memorie tampone chiamate cache.
Queste ultime sono memorie di piccole dimensioni estremamente
rapide e, grazie ad esse, il processore non
va più a cercare le istruzioni e i dati che gli occorrono nella RAM, ma
appunto nella più rapida cache.
Ma la cache è utile anche per un altro motivo, ed
esattamente perché è in grado di anticipare i
desideri del processore.
Si sa
infatti che durante l’esecuzione di un programma, se viene chiamato un
indirizzo di memoria, ci sono forti probabilità che
gli indirizzi contigui vengano anch’essi utilizzati.
Per anticipare dunque i
desideri del microprocessore, quando viene richiesto
l’accesso a un indirizzo di memoria, la cache farà in modo di caricare non solo il
contenuto dell’indirizzo in questione, ma anche quello degli indirizzi adiacenti.
E siccome capita spesso che
un’informazione memorizzata in un certo indirizzo viene utilizzata
più volte dallo stesso programma, per accelerare ulteriormente
l’esecuzione della stessa istruzione quest’ultima viene appunto conservata nella cache.
La cache permette dunque di ridurre lo scarto di velocità che si determina tra quella
di elaborazione del processore
e quella alla quale la memoria è in grado di
fornire i suoi dati.
I progettisti di
microprocessori hanno spinto questo principio fino a creare delle memorie
tampone diversificate,
una per i dati, la cosiddetta data cache, e l’altra per il codice da eseguire, la cosiddetta instructions cache.
Si badi che aumentare a dismisura la capacità della cache non serve a
molto dato che più le dimensioni crescono e più
si allungano i tempi di accesso.
Per aggirare il suddetto
problema i progettisti di microprocessori hanno moltiplicato i livelli delle
cache sfruttate dal processore stesso, ed appunto inserendo una cache di primo livello (L1) ed una cache di secondo livello (L2).
Per limitare i costi, nel Pentium II e nei primi
Pentium III, la cache di secondo livello era
esterna al microprocessore stesso, ma già a partire dal Pentium III Coppermine, Intel inizio ad integrare L1 ed L2 nel processore,
rendendo quest’ultimo veloce.