Cache: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Pronunce varie (con referenze) |
→Tipologia: aggiunta |
||
(232 versioni intermedie di oltre 100 utenti non mostrate) | |||
Riga 1:
{{Nota disambigua
{{U|Memoria cache|informatica|gennaio 2023|commento=anche questa voce fin dalla definizione tratta di una memoria}}
{{F|componenti per computer|luglio 2012}}
In [[informatica]], la '''cache''' è un'area di [[memoria (informatica)|memoria]] estremamente veloce ma solitamente di un basso [[Ordini di grandezza (dati)|ordine di grandezza]] di capacità. Il suo scopo è di velocizzare l'[[esecuzione (informatica)|esecuzione]] dei [[Programma (informatica)|programmi]].
Un esempio è la [[memoria cache]], utilizzata per recuperare velocemente dati e programmi che si prevede debbano essere utilizzati nel breve termine.
== Etimologia e pronuncia ==
"Cache" è un [[adattamento (linguistica)|adattamento]] inglese del termine francese "''caché''" (in [[lingua italiana|italiano]] 'nascosto'). Solitamente viene pronunciato {{IPA|/ˈkaʃ/}} (influenzato dall'[[lingua inglese|inglese]] {{IPA|/ˈkæʃ/}}). L'origine del nome deriva dal fatto che la cache e il suo utilizzo sono "trasparenti" al programmatore, in pratica "nascosti" perché amministrati direttamente dal [[sistema operativo]] o dall'[[hardware]].
== Descrizione ==
Una cache è associata a 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, una copia di questo viene prima cercata nella cache: se è presente e valida, viene utilizzata tale copia; altrimenti il dato viene recuperato dalla memoria principale, e memorizzato nella cache, nel caso possa servire successivamente.
La memoria principale può essere hardware come una [[RAM]] (memoria principale di un processore) o un [[disco rigido]], ma anche un complesso [[database distribuito]], come il [[Domain Name System|DNS]] o il [[Web]]. In questi casi, la memoria principale può essere modificata senza passare dalla cache, il che comporta problemi di coerenza tra i dati "originali" e quelli nella cache, ovvero un possibile disallineamento.
In alcuni casi è possibile convalidare i dati contenuti nella cache interrogando la memoria principale per verificare se sono ancora sincronizzati e corretti. Questo è compito che nel web, per esempio, fanno i server [[proxy]]: chiedono al server [[Hypertext Transfer Protocol|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]].
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 [[Domain Name System|DNS]].
Una cache riduce il carico di richieste che deve essere smaltito dalla memoria principale, e dal collegamento 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, migliorando così le prestazioni del sistema anche per la minore quantità di richieste che devono essere inoltrate ai siti originali.
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
In alcuni casi la memoria cache supporta anche la
Tutti i tipi di cache archiviate su [[memoria non volatile]] sono facilmente eliminabili sia agendo direttamente nelle cartelle relative sia usando i comandi del sistema operativo o applicazione<ref>[https://www.macitynet.it/come-cancellare-la-memoria-cache-su-iphone/ Come cancellare la memoria cache su iPhone, a cosa serve e perché farlo, macitynet.it, 25 giugno 2023]</ref> sia ricorrendo a uno dei tanti pulitori di terze parti<ref group="N">Questo non vale per [[iOS]].</ref> quali, ad esempio, [[CCleaner]].
== Tipologia ==
Il termine cache assume diversi significati a seconda del termine a cui è associato e in dipendenza del contesto. Parliamo quindi di: [[Memoria cache|Memory cache]], Disk cache<ref>{{Cita web|url=https://www.techopedia.com/definition/6867/disk-cache|titolo=Disk Cache}}</ref>, [[Translation Lookaside Buffer|TLB]] - [[Translation Lookaside Buffer]] (Page Table cache, Branch Prediction cache, Branch history table, Branch Target Address Cache, Trace cache), che sono memorie fisiche.
Altre sono memorie gestite dal software per memorizzare dati temporanei in spazi di MM riservati, come: Disk cache, Page cache, System cache, Application cache, [[Database cache]], [[Web cache]], [[Domain Name System|DNS cache]], Browser cache, [[Router]] cache, ecc.
Alcune di queste ultime sono solamente ''"[[Buffer]]s"'' (memorie tampone), cioè ''memorie non-associative'' con accesso sequenziale (stringhe di dati) rispetto agli accessi casuali tramite associazioni di indirizzo memoria-cache delle classiche cache.
Solitamente, il semplice riavvio del dispositivo elimina queste cache, migliorando le prestazioni, come accade nelle macchine che, per scopo, devono rimanere in funzione costantemente (come taluni [[server]]). Tanto è vero che molti sistemisti pianificano uno script di riavvio automatico dei server nella notte del fine settimana.
=== Memoria cache ===
{{vedi anche|Memoria cache}}
Viene utilizzata per velocizzare l'accesso alle posizioni di memoria RAM usate più frequentemente e soprattutto nei sistemi [[Sistema multiprocessore simmetrico|multiprocessori]] con memoria condivisa (shared), per ridurre il traffico del [[bus di sistema]] e della memoria principale che è uno dei maggiori colli di bottiglia di questi sistemi.
Si tratta di una piccola quantità di memoria veloce installata direttamente sul processore o nelle sue immediate vicinanze. Questa memoria è usata per memorizzare le '''''Istruzioni''''' di un programma e i '''''Dati''''' su cui operare. Viene utilizzata una memoria di tipo [[SRAM]] (contro una [[DRAM]] della memoria principale) per la sua maggiore velocità di accesso.
Storicamente questa è stata la prima cache utilizzata. Questa memoria veniva (ed è tuttora chiamata) "Cache memory" o "Memory cache" o semplicemente "'''''cache'''''". Qualche volta, ma rarissimamente, questa viene anche chiamata, con un termine inappropriato, "''CPU cache''" (vedi nota in [[Memoria cache]]). Tutte le altre cache invece, che memorizzano altri tipi di dati, vengono sempre definite associando al termine "''cache''" la loro funzione.
=== 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.
=== 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.
=== DNS cache ===
{{vedi anche|Domain Name System#Caching}}
È un server [[Domain Name System|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.
A volte problemi di connessione del dispositivo con router o [[access point]] sono dovuti alla cache del DNS.
=== Web cache ===
{{vedi anche|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 (elettronica)|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 schiacciato il tasto "[[ctrl]]" oppure "[[Shift (tasto)|shift]]" mentre si clicca sull'icona di ricarica.
=== Google cache ===
Più propriamente cache dei [[motore di ricerca|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.
=== Browser cache ===
I [[browser]] utilizzati su qualsiasi dispositivo conservano, oltre alla cronologia di navigazione, nomi utente e password inseriti, [[cookie]] e dati dei siti, informazioni di compilazione dei moduli, anche la cache. Questa è rappresentata dai contenuti oggetto di navigazione: file, immagini, testi, ecc. Questa cache è facilmente eliminabile sia cancellando, nelle cartelle dell'utente, i singoli elementi, sia utilizzando i comandi del browser, sia impiegando i cosiddetti "pulitori".
L'esistenza di questa cache facilita e personalizza l'esperienza di navigazione. Ovviamente, quando la si cancella, le pagine caricate "perdono" le precedenti memorizzazioni e pertanto la navigazione, sui siti di cui si è eliminata la cache, è inizialmente leggermente più lenta e ricompaiono le richieste sui cookie. .
=== Cache specifiche ===
Qualsiasi [[sistema operativo]]<ref group="N">C'è da osservare che Windows, Linux e Android mettono a disposizione dei comandi per eliminare la cache o comunque permettono ad applicazioni di terze parti di farlo, anche in maniera approfondita. Con i sistemi Apple è storicamente complicato se non volutamente impossibile (occorre eseguire il reset).</ref>, a prescindere dal tipo di dispositivo, utilizza la componente cache per diversi scopi. Alcune cache sono facilmente cancellabili (sia direttamente sia usando i pulitori) altre, invece, sono, per così dire, semi permanenti nel senso che i relativi dati sono archiviati in cartelle/file di sistema o in database di configurazione (come il registro di [[Windows]]<ref group="N">In questo caso si tratta di cache in senso esteso.</ref>). Pertanto, pulire cache di questo tipo richiede in genere operatività avanzata. Per alcuni sistemi, addirittura, occorre eseguire un reset (reimpostazione) per eliminare delle cache specifiche.
In questo caso la cache ha la funzione di ottimizzare l'esperienza di utilizzo da parte dell'utente. In pratica, si rende più veloce, fluido e personalizzato l'uso del dispositivo. Lo svantaggio è che, con l'uso, occupa progressivamente più spazio nell'unità di memoria dedicata (questo, chiaramente, non vale per la cache temporanea eliminabile dal processo di riavvio del dispositivo).
Esempi di cache di sistema operativo sono:
* parole di ricerca inserite e selezionate (box "trova" o "cerca")
* file temporanei (sistema operativo, app, servizi, ecc.)
* immagini precedentemente caricate per lo sfondo, blocca schermo, schermata di accesso, salva schermo, avatar di profilo utente o account, icone, ecc.
* percorsi di installazioni di periferiche
* anteprime di immagini, video, musica/suoni, documenti in modo che siano più rapidamente visualizzate all'apertura della cartelle che li contiene
* comandi digitati ed eseguiti
* impostazioni memorizzate di: barre, notifiche, menù, elenchi, desktop, cronologie, ecc.
* dimensioni di finestre e impostazioni grafiche relative
* informazioni (dati, file, contenuti vari) utilizzate dalle applicazioni o dal sistema operativo (i cosiddetti "recenti" o i log)
* dati dei programmi maggiormente utilizzati (serve per aumentare la velocità di apertura)
* riferimenti ad applicazioni e periferiche (driver) disinstallate
* immagini di "stati" del sistema precedenti come ad esempio nel caso di ripristino, aggiornamento, reimpostazione o reinstallazione
* accessi eseguiti a cartelle e file, percorsi e dispositivi di rete, utenti e/o account, periferiche, servizi vari
* informazioni di accessi eseguiti al dominio
* chiave di cifratura e password di ripristino di dispositivi [[Trusted Platform Module|TPM]]<ref group="N">In questo caso si tratta di cache in senso esteso anche perché sono elementi critici di sicurezza (almeno sino a quando non vengono eliminati con disabilitazione della crittografia del dispositivo e/o sostituiti).</ref>
* materiale lasciato dai programmi d'installazione e aggiornamento (spesso serve per poter recuperare le versioni precedenti del sistema operativo, app e driver)
== Problemi legati all'utilizzo ==
L'avere una memoria cache può complicare notevolmente la progettazione di un dispositivo elettronico o del software di gestione, dato che bisogna mantenere la [[Cache memory#Coerenza della cache|coerenza]] tra le memorie cache e la memoria principale. Ciò si vede specialmente nelle macchine [[Multiprocessore simmetrico|multiprocessore]] dove lo sviluppo dei processori e delle [[scheda madre|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.
Il software di gestione di una memoria cache<ref>{{Cita web|url=https://www.ibm.com/docs/it/aix/7.3?topic=data-components|titolo=Componenti della memorizzazione nella cache dei dati di memoria}}</ref>, 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. In sostanza non deve mai capitare che la ricerca o la memorizzazione di un dato di cache memory impieghi risorse (in special modo il tempo) tali da appesantire troppo il recupero stesso che, paradossalmente, diventerebbe più conveniente da memoria RAM.
In generale gli algoritmi di gestione dei dati di cache sono legati a due concetti fondamentali:
# [[Principio di località (informatica)|località del codice]]
# eliminazione dalla cache dei dati usati meno recentemente
Il primo aspetto è legato direttamente alla redazione di codice che interessi pagine di memoria ben definite in ogni fase di elaborazione: una volta terminata l'elaborazione di una certa parte di codice le pagine di memoria utilizzate non dovrebbero più essere referenziate in modo tale da cambiare la località del codice ma anche dei dati che si utilizzeranno da quel momento in poi.
Il secondo aspetto, quindi, prevede che un dato presente in cache e appartenente a una pagina di memoria referenziata quando la località del codice era diversa può essere eliminato dalla cache per far posto ai dati relativi alla corrente località del codice.
== Note ==
;Annotazioni
<references group="N"/>
;Fonti
<references/>
== Voci correlate ==
* [[Buffer]]
* [[Memoria cache]]
* [[Domain Name System#Caching]]
* [[Web cache]]
Altri progetti interprogetto preposizione
== Altri progetti ==
{{interprogetto}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
{{Controllo di autorità}}
{{Portale|informatica}}
[[Categoria:Microprocessore]]
[[Categoria:Gestione della memoria]]
|