Memorie cache

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare
Cache RAM.PNG

În informatică, memoria cache (sau simplu un cache) este o colecție de date ce sunt o "copie la indigo" a valorilor originale stocate altundeva sau calculate mai devreme, unde operația de aducere din memorie a datelor originale este costisitoare (datorită timpilor mari de acces la memorie) sau costul recalculării acestora este mare, în comparație cu costul citirii acestora din cache. Cu alte cuvinte, un cache este o arie temporară de stocare unde datele utilizate în mod frecvent pot fi depozitate pentru un acces rapid la acestea. Odată ce datele sunt stocate în cache, în viitor vor fi luate de aici și utilizate decât să se încerce readucerea datelor originale sau recalcularea acestora, astfel încât timpul mediu de acces este mai mic.

Memoria cache, sau RAM cache-ul este memorie de tip static RAM. Ca orice SRAM, are o viteza si un cost mult mai ridicate decat RAM-ul dinamic (DRAM). Avand in vedere ca programele acceseaza memoriile de date sau instructiuni in repetate randuri, s-a observat ca prin pastrarea a cat mai multe dintre aceste informatii pe SRAM, intregul sistem functioneaza mai rapid.

Memoriile de tip cache s-au dovedit a fi extrem de folositoare în multe domenii ale informaticii pentru că modelele accesului la memorie în programele aplicație obișnuite sunt de tip localitate a referinței. Există câteva feluri de localitate, dar acest articol prezintă cazul în care datele accesate sunt foarte apropiate în domeniul timp (fenomenul de localitate temporală). Datele ar putea fi sau nu localizate fizic aproape una de cealaltă (localitate spațială).

Istorie[modificare | modificare sursă]

Folosirea cuvântului "cache" în contextul informaticii datează din 1967 din timpul pregătirilor de publicare a unui articol în Jurnalul Sistemelor IBM ("IBM Systems Journal"). Subiectul lucrării era descrierea unei îmbunătățiri semnificative a modelului de memorie pentru calculatorul de tip "Model 85", intrat recent în linia de fabricație a Sistemelor IBM tip 360 ("IBM System/360"). Editorul Jurnalului, Lyle R. Johnson, pleda pentru folosirea unui termen mai sugestiv decât "tampon de mare viteză" (în engleză "high-speed buffer"); iar când nu a fost propus nimic, a sugerat folosirea cuvântului "cache" ("cache"). Documentul a fost publicat la începutul anului 1968, autorii au fost onorați de către IBM, munca lor a fost acceptată și ulterior îmbunătățită, și "cache" a devenit în scurt timp un termen standard folosit în literatura de specialitate (informatică).[1]

Modul de operare[modificare | modificare sursă]

Diagrama unei memorii cache a UCP

Un cache este un bloc de memorie folosit pentru stocarea temporară a datelor ce foarte probabil vor fi utilizate din nou. UCP-ul și hardiscul utilizează în mod frecvent un cache, precum și navigatoarele și serverele de internet.

Un cache e constituit dintr-o multitudine de intrări. Fiecărei intrări îi corespunde o părticică de date copie a uneia de pe un suport de stocare de rezervă. Fiecărei intrări îi corespunde de asemenea o etichetă, ce indică spre identitatea bucății de dată de pe suportul de rezervă a cărei copie este cea din dreptul respectivei intrări.

Când clientul cacheului (o UCP, un navigator, un sistem de operare) dorește să acceseze o parte din date despre care se crede că s-ar găsi printre datele din rezervă, controlează mai întâi în cache. Dacă poate fi găsită o intrare cu eticheta bucății căutate, este utilizată această bucată de dată. Această situație este cunoscută drept o lovitură de cache. Deci, de exemplu, un program de navigare pe internet ar putea căuta prin cacheul său local pe disc să vadă dacă are o copie locală a conținutului paginii web de la o anumită adresă URL. În acest exemplu, URL-ul este eticheta, iar conținutul paginii web este bucata de dată. Procentul de accesări a acestor date în cache (a loviturilor în cache) este cunoscut drept rată de succes a cacheului.

Situația alternativă este cunoscută drept rateu de cache, când cacheul este consultat dar găsit a nu conține acea bucată de dată cu eticheta căutată. Frântura de dată adusă din rezerva locală în timpul gestionării rateului este în mod obișnuit inserată în cache, pregătită pentru următoarea accesare.

Dacă spațiul de stocare din cache este limitat, va trebui probabil să expulzeze o altă intrare pentru a face loc. Euristica folosită pentru a selecta intrarea ce va trebui expulzată este cunoscută drept politica de înlocuire. Una din politicile populare de înlocuire, ultima recent utilizată (URU), înlocuiește intrarea de pe ultima poziție din lista sortată în ordine descrescătoare a celor mai recent utilizate (vezi algoritmii cache). cacheuri mai eficiente calculează frecvența de utilizare în raport cu dimensiunea elementelor stocate, ca și timpii de așteptare și debitele pentru cache și depozitul de rezervă. În timp ce această metodă funcționează bine pentru cantități mai mari de date, timpi de așteptare mari, și debite mici, cum este cazul folosirii unui hardisc pe post de cache la navigarea pe internet, nu este în schimb eficientă pentru a pune în cache memoria principală (RAM).

Când o înregistrare este scrisă în cache, va trebui de asemenea să fie scrisă la un moment dat și în depozitul de rezervă. Schema de programare a momentului când va trebui operată modificarea este denumită politica de scriere.

Într-un cache scrie-prin, fiecare scriere în cache determină o scriere sincronă în depozitul de rezervă.

Pe de altă parte, într-un cache scrie-înapoi, operațiile de scriere nu sunt reflectate în mod automat în depozit. În schimb, cacheul ține cont care dintre locațiile sale au fost rescrise (aceste locații sunt marcate ca fiind murdare). Datele din aceste locații sunt scrise înapoi în depozitul de rezervă când acele date sunt date afară din cache. Din acest motiv, un rateu în cacheul scrie-înapoi de cele mai multe ori va avea nevoie de două accese la memorie pentru a deservi: una pentru a aduce data necesară, și una pentru a scrie data schimbată din cache în depozit.

Scrierea înapoi a datelor poate fi declanșată de-asemenea de către alte politici. Clientul poate face modificări unei date în cache, ca mai apoi să trimită cacheului o notificare în mod explicit să scrie data înapoi.

O alocare fără scriere este o politică de cache în care doar citirile de procesor sunt trecute prin cache, ocolind astfel nevoia de a scrie-înapoi sau de a scrie-prin când vechea valoare a datei a lipsit din cache înainte de scriere.

Datele din depozitul de rezervă poate fi modificat de entități altele decât cacheul, în care caz copia din cache poate să devină irelevantă sau învechită. Pe de altă parte, când clientul înnoiește datele din cache, copiile acestor date din alte cacheuri vor deveni învechite. Protocoalele de comunicație dintre gestionarii de cache care mențin consistența datelor sunt cunoscute ca protocoale de coerență.

Organizarea memoriei cache[modificare | modificare sursă]

Memoria cache poate fi organizata in mai multe zone de memorie, cu dimensiuni si functionalitati diferite. Aceste zone ( de date, de instructiuni, TLB) se regasesc la nivelul microprocesorului,in exteriorul UCP-ului. La un nivel superior, zonele sunt unificate si rezultata cache-ul unificat, care este cel ce interactioneaza cu memoria principala.

Cache de instructiuni[modificare | modificare sursă]

Cache-ul de instructiuni este folosit pentru memorarea instructiunilor care sunt folosite frecvent, ceea ce duce la marirea vitezei de functionare a sistemului. Aceasta zona poate chiar sa faca operatii limitate, sau sa "prezica" datele ce vor fi folosite ulterior, prin memorarea instructiunilor accesate cu frecventa.

Cache-ul de Date[modificare | modificare sursă]

Cache-ul de date este un buffer foarte rapid, care poate prelua datele necesare unor instructiuni din memoria principala si sa le transmita registrilor. Odata ajunse datele in registrii, acestea pot fi folosite de catre procesor in intructiuni. Dupa terminarea executiei instructiunii, rezultatul retinut in registrii este returnat pentru memorarare in cache-ul de date si apoi transmis memoriei principale.

Cache-ul TLB[modificare | modificare sursă]

Cache-ul TLB (din engleza, Translation Look-Aside Buffer) acceseaza memoria fizica. Fiecare task care ruleaza are alocat un spatiu din memoria virtuala, care acceseaza spatii din adresa fizica. Procesorul lucreaza cu memoria virtuala, iar memoria cache si memoria de operare lucreaza cu memoria fizica. Fiecare spatiu din memoria virtuala sau fizica foloseste pagini pentru accesare. TLB-ul retine aceste pagini, si datorita vitezei caracteristice memoriei cache, accesarea spatiilor memoriei fizice este rapida, ceea ce duce la o viteza buna a procesorului pentru lucrul cu adresele virtuale si rularea taskurilor.

Tipuri de memorie cache[modificare | modificare sursă]

Exista 3 tipuri de memorie cache:

  • cache de nivel 1 (Level1 sau L1) - este memoria cache construita in Unitatea Centrala de Procesare (UCP); este cel mai rapid tip de memorie, pentru ca poate functiona la aceeasi viteza cu cea a microprocesorului
  • cache de nivel 2 (Level2 sau L2) - este memoria de pe un chip separat fata de UCP; poate ajunge sa functioneze la o viteza de aproape 2 ori mai mare decat RAM-ul.
  • cache de nivel 3 (Level3 sau L3) - folosite de anumite UCP-uri contin atat memorie de nivel 1 cat si memorie de nivel 2 atasate sistemului

RAM versus RAM cache[modificare | modificare sursă]

Astazi, UCP-urile pot lucra la viteze de 400 milioane de cicluri pe secunda - sau una-doua intructiuni executate la fiecare 2.5 nanosecunde. Programul si datele sunt aduse de pe hard drive in RAM, de unde este incarcat in cache si apoi acestea sunt executate de UCP. Modurile in care lucreaza RAM-ul si cache RAM-ul sunt foarte similare, diferenta apare la viteza si la pretul de cumparare.

Comparatie de viteza[modificare | modificare sursă]

Hard drive-urile sunt foarte lente fata de UCP. RAM-ul functioneaza mai rapid decat hard drive-urile, totusi, viteza lor este de pana la 5 ori mai mica decat cea a UCP-ului. In schimb, RAM cache-ul poate functiona la aceeasi viteza cu a microprocesorului. Prin comparatie, cache RAM este de aproape 5 ori mai rapid decat RAM-ul.

Comparatie de pret[modificare | modificare sursă]

Un dezavantaj major al memoriei RAM cache fata de RAM il reprezinta costul unitatii de stocare. Un megabyte de RAM are un pret, pe piata, de aproape 1 dolar, in schimb un megabyte de memorie RAM cache ajunge la 15 sau 20 de dolari.[necesită citare]

Aplicații[modificare | modificare sursă]

Cache-uri UCP[modificare | modificare sursă]

Memorii de mici dimensiuni pe sau aproape de chip-ul UCP pot fi confecționate astfel încât să fie mai rapide decât memoria principală. Majoritatea UCP-urilor începând din anii 1980 au folosit unul sau mai multe cache-uri, și UCP-urile moderne de uz general din interiorul calculatoarelor personale pot conține până la o jumătate de duzină, fiecare specializat pe o diferită parte a problemei execuției de programe.

Cache-uri de disc[modificare | modificare sursă]

Cache-urile UCP sunt în general gestionate în totalitate la nivelul fizic al mașinii, în afara unor arhitecturi specializate cum ar fi Arhitectura NUMA. Alte cacheuri sunt gestionate la nivelul de program al mașinii. Cache-ul sectoarelor de disc în memoria principală este de obicei gestionat de nucleul sau sistemul de fișiere ale sistemul de operare.

În schimb, un hard disc local rapid poate fi folosit pentru a pastra în cache informația ținută pe medii de stocare a datelor chiar și mai lente, cum ar fi unitățile de bandă magnetică sau magaziile de unități optice.

Alte cache-uri[modificare | modificare sursă]

Programul de tip serviciu BIND DNS ține în cache o tabelă de corespondență a numelor de domeniu la adresele IP asociate, precum o face și o bibliotecă rezolvator.

Modul de operare scrie-prin este un fapt obișnuit când se lucrează peste rețele nesigure (precum o rețea locală de tip Ethernet), din cauza enormei complexități a protocolului de coerență necesar între multiple cacheuri scrie-înapoi atunci când comunicația este nesigură. De exemplu, cacheurile de pagini web și cacheuri de parte-client a unui sistem de fișiere în rețea (ca cele din protocolul NFS sau SMB) sunt în mod tipic doar-citire sau scrie-prin cu intenția de a menține protocolul de rețea simplu și fiabil.

Un cache al paginilor web vizitate recent poate fi gestionat de către programul de navigare pe internet. Unele navigatoare sunt configurate pentru a folosi un proxy extern de tip cache de rețea, un program server prin care toate cererile de rețea sunt rutate astfel încât poate stoca în cache paginile frecvent accesate pentru toată lumea dintr-o organizație. Mulți furnizori de internet folosesc proxy cacheuri la paginile web frecvent accesate pentru a salva din lățimea de bandă a canalului de comunicare.

Motoarele de căutare servesc de asemenea în mod frecvent direct din cache paginile web pe care le-au indexat. De exemplu, Google oferă o legătură "din cache" lângă fiecare rezultat al căutării. Acesta este un lucru folositor în cazul în care paginile web sunt inaccesibile temporar de la serverul de internet.

Altă modalitate de folosire a ariilor temporare de stocare este reținerea rezultatului unor calcule care vor fi foarte probabil utilizate din nou, sau "memoizarea". Un exemplu de astfel de tip de cache este cacheul C, un program ce ține in cache rezultatul procesului de compilare pentru a crește viteza următoarei complilări.

Diferența dintre tampon și cache[modificare | modificare sursă]

Termenii nu se exclud reciproc și funcțiile sunt deseori combinate; oricum, există o diferență în intenție. Un tampon este o locație temporară de memorie, care este utilizată în mod tradițional deoarece instrucțiunile UCP-ului pur și simplu nu pot referi în mod direct date stocate în dispozitivele periferice. Astfel, memoria adresabilă este utilizată ca stadiu intermediar. În plus astfel de tampoane pot fi viabile când un bloc mare de date este asamblat sau dezasamblat (ca cerință într-un dispozitiv de stocare a datelor), sau când datele trebuie trimise în altă ordine decât cea în care sunt produse. Câștigul este prezent chiar dacă datele tamponate sunt scrise în memoria tampon o singură dată și citite din acesta o singură dată.

Un cache se comportă deseori și ca un tampon, și viceversa. În orice caz, cacheul operează presupunând că aceeași dată va fi citită din el de mai multe ori, că datele scrise vor fi citite în curând, sau că există o șansă bună ca mai multe operații de citire și scriere să fie combinate spre a forma un singur bloc mai mare. Unica sa menire este să reducă accesările mai jos la depozitul mai lent. cacheul este de asemenea în mod obișnuit un nivel abstract conceput ca să fie invizibil.

Note[modificare | modificare sursă]

  1. ^ G. C. Stierhoff and A. G. Davis. A History of the IBM Systems Journal. IEEE Annals of the History of Computing, Vol. 20, No. 1 (Jan. 1998), pages 29-35. Format:Doi-inline

Bibliografie[modificare | modificare sursă]

Legături externe[modificare | modificare sursă]

Wikţionar
Caută „cache” în Wikționar, dicționarul liber.