Sari la conținut

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.

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

Folosirea cuvântului "cache" (în original "cache", cuvânt englezesc) î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

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ţă.

Aplicaţii

Cache-uri UCP

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 cacheuri, ş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 de disc

cacheurile 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. cacheul sectoarelor de disc în memoria principală este de obicei gestionat de nucleul sau sistemul de fişiere ale sistemul de operare.

În schimb, un hardisc local rapid poate fi folosit pentru a ţine î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

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

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.

Vezi şi

Note

  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

Legaturi externe