Memorie cache

De la Wikipedia, enciclopedia liberă

Î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.

[1] Memoria cache, sau RAM cache-ul este memorie de tip static RAM. Ca orice SRAM, are o viteză și un cost mult mai ridicate decât RAM-ul dinamic (DRAM). Având în vedere că programele accesează memoriile de date sau instrucțiuni în repetate rânduri, s-a observat că prin păstrarea a cât mai multe dintre aceste informații pe SRAM, întregul sistem funcționează 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ă).[2]

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 organizată în mai multe zone de memorie, cu dimensiuni și funcționalități diferite. Aceste zone ( de date, de instrucțiuni, TLB) se regăsesc la nivelul microprocesorului,în exteriorul UCP-ului. La un nivel superior,zonele sunt unificate și rezultată cache-ul unificat, care este cel ce interacționează cu memoria principală.

Cache de instrucțiuni[modificare | modificare sursă]

Cache-ul de instrucțiuni este folosit pentru memorarea instrucțiunilor care sunt folosite frecvent, ceea ce duce la mărirea vitezei de funcționare a sistemului. Această zonă poate chiar să facă operații limitate, sau să "prezică" datele ce vor fi folosite ulterior, prin memorarea instrucțiunilor accesate cu frecvență.

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

Cache-ul de date este un buffer foarte rapid, care poate prelua datele necesare unor instrucțiuni din memoria principală și să le transmită regiștrilor. Odată ajunse datele în regiștrii, acestea pot fi folosite de către procesor în instrucțiuni. După terminarea execuției instrucțiunii, rezultatul reținut în regiștrii este returnat pentru memorare în cache-ul de date și apoi transmis memoriei principale.

Cache-ul TLB[modificare | modificare sursă]

Cache-ul TLB (din engleză, Translation Look-Aside Buffer) accesează memoria fizică. Fiecare task care rulează are alocat un spațiu din memoria virtuală, care accesează spații din adresa fizică. Procesorul lucrează cu memoria virtuală, iar memoria cache și memoria de operare lucrează cu memoria fizică. Fiecare spațiu din memoria virtuală sau fizică folosește pagini pentru accesare. TLB-ul reține aceste pagini, și datorită vitezei caracteristice memoriei cache, accesarea spațiilor memoriei fizice este rapidă, ceea ce duce la o viteză bună a procesorului pentru lucrul cu adresele virtuale și rularea taskurilor.

Tipuri de memorie cache[modificare | modificare sursă]

Există 3 tipuri de memorie cache:

  • cache de nivel 1 (Level1 sau L1) - este memoria cache construită în Unitatea Centrală de Procesare (UCP); este cel mai rapid tip de memorie, pentru că poate funcționa la aceeași viteză cu cea a microprocesorului
  • cache de nivel 2 (Level2 sau L2) - este memoria de pe un chip separat față de UCP; poate ajunge să funcționeze la o viteză de aproape 2 ori mai mare decât RAM-ul.
  • cache de nivel 3 (Level3 sau L3) - folosite de anumite UCP-uri conțin atât memorie de nivel 1 cât și memorie de nivel 2 atașate sistemului

RAM versus RAM cache[modificare | modificare sursă]

Astăzi, UCP-urile pot lucra la viteze de 400 milioane de cicluri pe secundă - sau una-două instrucțiuni executate la fiecare 2.5 nanosecunde. Programul și datele sunt aduse de pe hard drive în RAM, de unde este încărcat în cache și apoi acestea sunt executate de UCP. Modurile în care lucrează RAM-ul și cache RAM-ul sunt foarte similare, diferența apare la viteză și la prețul de cumpărare.

Comparație de viteză[modificare | modificare sursă]

Hard drive-urile sunt foarte lente față de UCP. RAM-ul funcționează mai rapid decât hard drive-urile, totuși, viteza lor este de până la 5 ori mai mică decât cea a UCP-ului. În schimb, RAM cache-ul poate funcționa la aceeași viteză cu a microprocesorului. Prin comparație, cache RAM este de aproape 5 ori mai rapid decât RAM-ul.

Comparație de preț[modificare | modificare sursă]

Un dezavantaj major al memoriei RAM cache față de RAM îl reprezintă costul unității de stocare. Un megabyte de RAM are un preț, pe piață, de aproape 1 dolar, în 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. ^ Cache webopedia.com
  2. ^ 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ă]

Vezi și[modificare | modificare sursă]

Legături externe[modificare | modificare sursă]

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