Cache [1] [2] [3] [4] sau cache [5] [6] [7] ( eng. cache , din franceză cacher - „ascunde”; pronunțat [ kæʃ ] - „cache”) - buffer intermediar cu acces rapid la acesta, conținând informații care pot fi solicitate cu cea mai mare probabilitate. Accesarea datelor din cache este mai rapidă decât preluarea datelor originale dintr-o memorie mai lentă sau dintr-o sursă la distanță, dar volumul acestora este semnificativ limitat în comparație cu depozitul de date sursă.
Cuvântul „cache” a fost folosit pentru prima dată într-un context informatic în 1967 , în timp ce pregătea un articol pentru publicare în IBM Systems Journal . Articolul s-a ocupat de îmbunătățirile de memorie ale modelului IBM System/360 85 în curs de dezvoltare . Editorul jurnalului Lyle Johnson a cerut un termen mai descriptiv decât „buffer de mare viteză”, dar din lipsă de idei, el însuși a sugerat cuvântul „cache”. Articolul a fost publicat la începutul anului 1968, autorii au fost premiați de IBM , munca lor a fost diseminată și ulterior îmbunătățită, iar cuvântul „cache” a devenit curând un termen comun în literatura informatică [8] .
Un cache este o memorie cu o viteză de acces mai mare, concepută pentru a accelera accesul la datele conținute permanent în memorie cu o viteză de acces mai mică (denumită în continuare „memorie principală”). Memorarea în cache este utilizată de CPU , hard disk-uri , browsere , servere web , servicii DNS și WINS .
Cache-ul constă dintr-un set de intrări. Fiecare intrare este asociată cu un element de date sau cu un bloc de date (o bucată mică de date), care este o copie a elementului de date din memoria principală. Fiecare intrare are un identificator , numit adesea etichetă , care definește corespondența dintre elementele de date din cache și omologii lor din memoria principală.
Când un client de cache (CPU, browser web, sistem de operare) accesează date, memoria cache este examinată mai întâi. Dacă se găsește o intrare în cache cu un ID care se potrivește cu ID-ul articolului solicitat, atunci elementele din cache sunt utilizate. Un astfel de eveniment se numește cache hit . Dacă o intrare care conține elementul de date solicitat nu este găsită în cache, atunci este citită din memoria principală în cache și devine disponibilă pentru accesările ulterioare. Un astfel de caz se numeștecache miss . Procentul de accesări în cache atunci când este găsit un rezultat se numește rata de accesare sau rata de accesare în cache .
De exemplu, un browser web verifică memoria cache locală de pe disc pentru o copie locală a unei pagini web care se potrivește cu adresa URL solicitată. În acest exemplu, adresa URL este identificatorul, iar conținutul paginii web este elementele de date.
Dacă memoria cache este limitată în dimensiune, atunci în caz de ratare se poate decide să renunți la o intrare pentru a elibera spațiu. Sunt utilizați diferiți algoritmi de evacuare pentru a selecta înregistrarea de eliminat .
Când elementele de date din cache sunt modificate, acestea sunt actualizate în memoria principală. Întârzierea dintre modificarea datelor din cache și actualizarea memoriei principale este controlată de așa-numita politică de scriere .
Într-o memorie cache numai pentru scriere , fiecare modificare determină o actualizare sincronă a datelor din memoria principală.
Într-o memorie cache write- back (sau write- back), o actualizare are loc atunci când un element de date este evacuat, periodic, sau la cererea clientului. Pentru a ține evidența elementelor de date modificate, intrările în cache stochează un indicator de modificare ( modificat sau „murdar” ). O pierdere a memoriei cache cu o rescriere poate necesita două accesări la memoria principală: prima pentru a scrie datele înlocuite din cache, a doua pentru a citi elementul de date necesar.
În cazul în care datele din memoria principală pot fi modificate independent de memoria cache, atunci intrarea în cache poate deveni învechită . Protocoalele de comunicare între cache care mențin consistența datelor sunt numite protocoale de coerență a memoriei cache .
Datorită creșterii frecvenței la care funcționează procesoarele și creșterii performanței subsistemului RAM ( RAM), interfața de transfer de date a devenit blocajul sistemului de calcul.
Memoria cache poate oferi beneficii semnificative de performanță atunci când viteza de ceas a memoriei RAM este semnificativ mai mică decât cea a procesorului. Un număr de modele de procesoare au propriul cache pentru a minimiza timpul de acces la memoria cu acces aleatoriu (RAM), care este mai lent decât registrele (acești registre și buffer-uri I/O pot fi considerate cache de nivel zero). Viteza de ceas pentru memoria cache nu este de obicei cu mult mai mică decât frecvența procesorului.
Procesoarele care acceptă adresarea virtuală includ adesea un buffer mic și rapid de traducere a adresei (TLB). Viteza sa este importantă deoarece este interogat la fiecare acces la memorie.
Problema sincronizării între diferitele cache (atât unul cât și mai multe procesoare) este rezolvată prin coerența cache .
Există trei opțiuni pentru schimbul de informații între cache-uri de diferite niveluri sau, după cum se spune, arhitecturi cache: inclusive, exclusive și neexclusive.
Memoria cache exclusivă presupune unicitatea informațiilor situate în diferite niveluri ale memoriei cache (preferată de AMD ).
În cache-urile neexclusive se pot comporta după bunul plac.
Nivelurile cache al procesoruluiCache-ul CPU este împărțit în mai multe niveluri. Numărul maxim de cache este de patru. Într-un procesor universal , numărul de niveluri poate fi în prezent de până la trei. Cache-urile de nivel N+1 sunt în general mai mari și mai lente în ceea ce privește accesul și transferul de date decât cache-urile de nivel N.
Una dintre caracteristicile fundamentale ale memoriei cache - nivelul de asociativitate - reflectă segmentarea sa logică, care este cauzată de faptul că enumerarea secvențială a tuturor liniilor cache în căutarea datelor necesare ar necesita zeci de cicluri și ar anula tot câștigul din folosind memoria integrată în procesor. Prin urmare, celulele RAM sunt conectate la liniile cache (fiecare linie poate conține date de la un set fix de adrese), ceea ce reduce semnificativ timpul de căutare.
Cu aceeași dimensiune cache, o schemă cu o asociativitate mai mare va fi cea mai puțin rapidă, dar cea mai eficientă (după o implementare cu patru fire, creșterea „eficienței specifice” pe fir crește puțin).
Multe periferice de stocare folosesc un cache intern pentru a accelera lucrurile, în special, hard disk-urile folosesc cache de la 1 MB până la 256 MB ( modelele NCQ / TCQ îl folosesc pentru stocare și procesarea interogărilor), discurile CD/DVD/BD memorează și informațiile de citire în cache pentru a accelera regăsire.
Sistemul de operare utilizează, de asemenea, o parte din memoria RAM ca cache pentru operațiunile de pe disc (de exemplu, pentru dispozitivele externe care nu au propriul cache, inclusiv hard disk-uri, memorie flash și dischete). Adesea, toată memoria RAM gratuită (nealocată proceselor) este furnizată pentru stocarea în cache a hard disk-urilor.
Utilizarea stocării în cache a unităților externe se datorează următorilor factori:
Când este citit, memoria cache vă permite să citiți blocul o dată, apoi să stocați o copie a blocului în RAM pentru toate procesele și să returnați conținutul blocului „instantaneu” (comparativ cu o solicitare de disc). Există o tehnică de „pre-cerere” - în fundal, sistemul de operare citește și următoarele câteva blocuri (după cel necesar) în cache.
Când scrieți, memoria cache vă permite să grupați înregistrările scurte în altele mai mari care sunt procesate mai eficient de unități sau să evitați scrierea modificărilor intermediare. În acest caz, toate stările intermediare ale blocului sunt vizibile pentru procesele din RAM.
Memorarea în cache a stocării externe îmbunătățește considerabil performanța sistemului prin optimizarea utilizării I/O. Avantajul tehnologiei este optimizarea automată transparentă (invizibilă pentru programe) a utilizării memoriei pe disc, în timp ce logica aplicațiilor care lucrează cu fișiere rămâne neschimbată.
Dezavantajul memorării în cache de scriere este intervalul de timp dintre o solicitare de scriere de la un program și scrierea efectivă a unui bloc pe disc, precum și reordonarea scrierilor, care poate duce la pierderea de informații sau la inconsecvențe de structură în timpul unei căderi de curent sau a unui sistem. atârna. Această problemă este atenuată de sincronizarea periodică forțată (scrierea liniilor de cache modificate) și jurnalizarea sistemului de fișiere.
La citirea datelor, memoria cache oferă un câștig clar de performanță. La scrierea datelor, câștigurile pot fi obținute doar cu prețul unei fiabilități reduse. Prin urmare, diferite aplicații pot alege politici diferite de scriere în cache.
Există două politici principale de scriere în cache - write-through și write-back:
Inițial, toate anteturile bufferelor sunt plasate pe lista liberă de buffere. Dacă un proces intenționează să citească sau să modifice un bloc, atunci execută următorul algoritm:
Procesul citește datele în memoria tampon primită și le eliberează. În cazul modificării, procesul marchează tamponul ca „murdar” înainte de a-l elibera. Când este eliberat, tamponul este plasat în fruntea listei libere de buffere.
În acest fel:
Dacă lista de buffer-uri libere este goală, atunci algoritmul de spălare a tamponului este executat. Algoritmul de evacuare afectează semnificativ performanța memoriei cache. Există următorii algoritmi:
Utilizarea unui algoritm sau altuia depinde de strategia de stocare în cache a datelor. LRU este cel mai eficient dacă se garantează că datele vor fi reutilizate cât mai curând posibil. MRU este cel mai eficient dacă se garantează că datele nu vor fi reutilizate în curând. Dacă aplicația specifică în mod explicit o strategie de stocare în cache pentru un anumit set de date, atunci memoria cache va funcționa cel mai eficient.
Memoria cache RAM constă din următoarele elemente:
În procesul de transfer de informații într-o rețea, se poate folosi caching-ul paginilor web - procesul de stocare a documentelor solicitate frecvent pe serverele proxy (intermediare) sau pe mașina utilizatorului, pentru a preveni descărcarea constantă a acestora de pe serverul sursă și pentru a reduce traficul . Astfel, informația se apropie de utilizator. Memorarea în cache este controlată de antetele HTTP .
Alternativ, memorarea în cache a paginilor web se poate face folosind CMS -ul unui anumit site pentru a reduce încărcarea serverului în timpul traficului ridicat. Memorarea în cache se poate face atât în memorie, cât și în cache-ul fișierelor [9] . Dezavantajul stocării în cache este că modificările efectuate într-un browser nu pot fi reflectate imediat în alt browser care preia date din cache.
Multe programe scriu undeva rezultate intermediare sau auxiliare ale lucrării, pentru a nu le calcula de fiecare dată când sunt necesare. Acest lucru accelerează munca, dar necesită memorie suplimentară (RAM sau disc). Un exemplu de astfel de stocare în cache este indexarea bazei de date .
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |