Cache
In informatica, la cache (nascondiglio, deposito segreto, in inglese) è un insieme di dati che viene raccolto in una locazione temporanea, dove possa essere recuperato velocemente su richiesta. Le parole chiave sono "temporanea" e "velocemente": in pratica, questo significa che non c'è nessuna certezza che i dati si trovino nella cache, ma che convenga comunque fare un tentativo per verificarne l'eventuale esistenza.
Tipologie di cache
Ci sono vari tipi di cache, che si distinguono tra loro per il luogo dove vengono utilizzate.
- La CPU cache consiste nell'avere una CPU che possa caricare al suo interno più di una locazione di memoria (generalmente dati utilizzati nell'esecuzione del programma, ma anche le istruzioni che presumilmente saranno successive a quella attualmente in esecuzione"). In questo caso si sfrutta il vantaggio di potere caricare più o meno nello stesso tempo più dati consecutivi all'interno della RAM.
- La page cache consiste nell'avere una parte della RAM usata dal sistema operativo in cui si copiano dall'hard disk i dati correntemente in uso. In questo caso, l'accesso alla RAM è più veloce dell'accesso al disco. Poiché la memoria disponibile è generalmente limitata, il sistema operativo cerca di mantenere il più possibile in memoria una pagina, mantenendo una tabella delle pagine che non sono usate correntemente ma lo sono state in passato. Quando occorre caricare una pagina nuova, verrà sovrascritta la più vecchia non ancora in uso.
- la disk cache consiste nell'avere un hard disk che ha al suo interno una parte di RAM, dove possono venire caricati i settori del disco logicamente contigui a quello richiesto. Quando si accede in lettura al disco, nel caso i dati richiesti siano presenti nella cache si evita lo spostamento della testina di lettura del disco stesso, velocizzando il reperimento dell'informazione e contribuendo al ridurre l'usura del disco stesso.
- la web cache è una parte di hard disk dedicata da un server proxy http, oppure dal browser di un utente, a salvare le pagine man mano caricate durante la navigazione, che potranno pertanto essere riproposte senza doverle chiedere di nuovo al sistema remoto. In questo caso, il collo di bottiglia che si vuole eliminare è quello della larghezza di banda. Non sempre è però lecita l'operazione di mettere una pagina in cache: si pensi ad esempio a quando si fa un'operazione bancaria on line! Generalmente è la stessa pagina web che viene inviata insieme alle istruzioni sul suo possibile utilizzo in una cache; in certi casi si può forzare il proprio browser a ricaricare la pagina, tenendo schiacchiato il tasto "ctrl" oppure "shift" mentre si clicca sull'icona di ricarica.
- la Google cache, che naturalmente è utilizzata da tutti i motori di ricerca, consiste nell'avere salvato presso i server del motore di ricerca una copia delle pagine trovate in rete. Questo presenta due vantaggi: è possibile fare ricerche locali al loro interno, e l'utente che non riesce momentaneamente a contattare il server originale può ottenere la copia.
- la cache DNS è un server DNS che non possiede informazioni autoritative, ma è in grado di chiederle ai server autoritativi e memorizzare le risposte. I server DNS utilizzati dagli utenti di Internet sono normalmente dei server cache. Il DNS usa un meccanismo di scadenza, per cui ogni record recuperato da un server autoritativo è valido per un certo tempo, dopo il quale deve essere scartato.
Funzionamento di una cache
Una cache è associata ad una memoria "principale", in cui risiedono i dati. La cache è tipicamente di capienza inferiore rispetto alla memoria principale, ma il suo utilizzo è più conveniente in termini di tempo di accesso e/o carico sul sistema. Quando è necessario l'accesso ad un dato, questo dato viene prima cercato nella cache. Se è presente e valido, viene utilizzata la copia presente nella cache. Viceversa, viene recuperato dalla memoria principale, e memorizzato nella cache, nel caso serva ancora successivamente.
La memoria principale può essere qualcosa di semplice come un disco rigido, ma anche un complesso database distribuito, come il DNS o il web. In questi casi, la memoria principale può essere modificata senza passare dalla cache, l'utilizzo di una cache comporta problemi di coerenza tra i dati "originali" e quelli presenti nella cache.
È quindi possibile che per validare i dati contenuti nella cache sia necessario interrogare la memoria principale. Questo è quello che fanno i server proxy: chiedono al server HTTP se la pagina che posseggono è stata modificata dopo la sua memorizzazione, e se non lo è evitano di trasferirla e la ripropongono direttamente al client.
Una cache riduce anche il carico di richieste che deve essere smaltito dalla memoria principale, e dal collegamenteo tra questa e l'utilizzatore dei dati. Anche questo può contribuire a migliorare le prestazioni del sistema. Si pensi per esempio ad un server proxy utilizzato da molti utenti: quando un utente richiede una pagina che era già stata richiesta da un altro, il proxy potrà rispondere senza doversi collegare al sito originale, ed eviterà così di caricare sia il sito originale che la rete.
Una cache utilizza un algoritmo per decidere quali dati mantenere e quali scartare, che tiene conto delle pagine utilizzate più di recente, della contiguità delle pagine, ...)
Una cache può indicizzare i dati memorizzati sulla base del loro indirizzo (un blocco di memoria o di dati su disco fisso) o del loro "nome" (cache associativa, ad esempio una pagina web o un nome DNS).
Problematiche
L'avere una memoria cache può complicare notevolmente la progettazione di un dispositivo elettronico dato che bisogna mantenere la coerenza tra le memorie cache e la memoria principale. Ciò si vede specialmente nelle macchine multiprocessore dove lo sviluppo dei processori e delle schede madri deve tenere conto dei potenziali problemi di coerenza delle cache e deve provvedere adeguati meccanismi che evitino corruzioni dei dati per problemi di mancata sincronizzazione tra cache e memoria principale.
