Cache
In [[informatica]], la cache è un insieme di dati che viene memorizzato in una posizione temporanea, dalla quale possa essere recuperato velocemente su richiesta. L'origine del nome deriva appunto dal fatto che la memoria cache ed il suo utilizzo sono trasparenti al programmatore, quindi "nascosti" allo stesso.
Funzionamento di una cache
Una cache è associata ad una memoria principale, in cui risiedono i dati. Essa è 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. Viceversa, viene recuperato dalla memoria principale, e memorizzato nella cache, nel caso possa servire successivamente.
Tale meccanismo risulta assai prestazionale per le operazioni di scambio e recupero dati sia quando la memoria principale è qualcosa di semplice come un [[disco rigido]] e sia quando è un complesso [[database]] distribuito, come il [[DNS]] o il [[WEB]].
In alcuni casi è possibile validare i dati contenuti nella cache interrogando la memoria principale per verificare se sono ancora attuali, in altri casi si utilizza un meccanismo di scadenza a tempo dei dati memorizzati, e fino a quando un dato presente nella cache non è scaduto questo viene utilizzato, anche se non corrisponde a quanto presente nella memoria principale (questo è il meccanismo adottato dal DNS).
Una cache, inoltre, riduce l'intero carico di richieste che deve essere smaltito dalla memoria principale, e dal collegamento tra questa e l'utilizzatore dei dati, come nel caso di un sito web: quando un utente richiede una pagina che era già stata richiesta da un altro ad un [[server proxy]], quest'ultimo potrà rispondere senza doversi collegare al sito originale ma sfruttare la pagina già presente nella cache, evitando 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, o di diversi altri fattori.
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).
In alcuni casi la memoria cache supporta anche la modifica dei dati. Questo è di implementazione semplice se la cache è l'unico percorso di accesso alla memoria principale, come nel caso della cache della memoria [[RAM]] presente nei processori. In questo modo, se un dato in memoria è modificato frequentemente dal processore, è possibile mantenere le modifiche nella cache ed evitare continui trasferimenti verso la RAM.
Tipologie di cache
Esistono vari tipi di cache, che si distinguono tra loro per il contesto dove vengono utilizzate.
-
La [[CPU cache]] viene utilizzata per accelerare l'accesso alle posizioni di memoria RAM usate più frequentemente. Si tratta di una piccola quantità di memoria veloce (di tipo [[SRAM]]) installata direttamente sul processore o nelle sue immediate vicinanze.
-
La [[page cache]] consiste nell'avere una parte della RAM usata dal [[sistema operativo]] in cui si copiano dal [[disco fisso]] 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, creando una tabella delle pagine consultate in ordine sequenziale, sovrascrivendo quando necessario sempre la meno recente.
-
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 [[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.
-
la [[web cache]] è una parte di hard disk dedicata da un server proxy http, oppure dal [[web 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.
-
la [[Google cache]], o più propriamente cache dei [[motori di ricerca]], consiste in copie delle pagine web salvate presso i server di un motore di ricerca. Queste vengono utilizzate per due motivi: eseguire ricerche locali all'interno delle pagine ed offrire la possibilità di vedere una copia, per quanto non aggiornata, di una pagina non disponibile, per problemi momentanei o perché è stata rimossa dal server originale.
Problematiche
L'avere una memoria cache può complicare notevolmente la progettazione di un dispositivo elettronico o del software di gestione, dato che bisogna mantenere la coerenza tra le memorie cache e la memoria principale. Ciò si vede specialmente nelle macchine [[multiprocessore]].
Il software di gestione di una memoria cache, inoltre, deve essere altamente sofisticato sia nella realizzazione sia nella strategia di recupero dei dati (algoritmo) in modo da evitare il cosiddetto [[overhead]] da recupero ovvero evitare che la ricerca o la memorizzazione di un dato di cache impieghi risorse (in special modo il tempo) tali da appesantire troppo il recupero stesso che, paradossalmente, diventerebbe più conveniente da memoria RAM.





