Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows 7, XP
  • Organizarea fizică și logică a memoriei sistemelor de calcul. Organizarea memoriei în calculatoare

Organizarea fizică și logică a memoriei sistemelor de calcul. Organizarea memoriei în calculatoare

Capitol 11

Organizare calculul memoriei sisteme

În sistemele de calcul care combină multe procesoare sau mașini paralele, sarcina organizare corectă memoria este una dintre cele mai importante. Diferența dintre viteza procesorului și a memoriei a fost întotdeauna o piatră de poticnire în VM-urile cu uniprocesor. Multiprocesarea VS duce la o altă problemă - problema accesului simultan la memorie de la mai multe procesoare.

În funcție de modul în care este organizată memoria sistemelor multiprocesor (multicomputer), sistemele de calcul se disting cu memorie partajată(memorie partajată) și VS cu memorie distribuită. V sisteme de memorie partajată(este adesea numită și memorie partajată sau partajată) Memoria Soarelui este considerată o resursă comunitară, iar fiecare dintre procesoare are acces complet la întreg spațiul de adrese. Sunt apelate sisteme de memorie partajată strâns legat(sisteme strâns cuplate). O construcție similară a sistemelor de calcul are loc atât în ​​clasa SIMD, cât și în clasa MIMD. Uneori, pentru a sublinia acest fapt, sunt introduse subclase speciale, folosind abrevierile SM-SIMD (Shared Memory SIMD) și SM-MIMD (Shared Memory MIMD) pentru a le desemna.

In optiune cu memorie distribuită fiecărui procesor îi este atribuită propria memorie. Procesoarele fuzionează v rețea și pot, dacă este necesar, să facă schimb de date stocate în memoria lor, transmițându-și unul altuia așa-numitele mesaje. Acest tip de aeronavă se numește slab cuplate(sisteme slab cuplate). Slab sisteme aferente se găsesc, de asemenea, atât în ​​clasa SIMD, cât și în clasa MIMD și, uneori, de subliniat această caracteristică, introduceți subclasele DM-SIMD (Distributed Memory SIMD) și DM-MIMD (Distributed Memory MIMD).

În unele cazuri, sunt apelate sisteme de calcul cu memorie partajată multiprocesoare,și sisteme cu memorie distribuită - mtsltcomputers.

Diferența dintre memoria partajată și cea distribuită este diferența de structură memorie virtuala, adică în modul în care arată memoria din partea procesorului. Din punct de vedere fizic, aproape fiecare sistem de memorie este împărțit în componente de sine stătătoare care poate fi accesat independent. Modul în care subsistemul de memorie interpretează adresa celulei primite de la procesor este detașat din memoria partajată. De exemplu, să presupunem că procesorul execută comanda încărcare RO, i, ceea ce înseamnă „Încărcați registrul R0 cu conținutul celulei i”. În cazul memoriei partajate, i este adresa globală și indică aceeași locație pentru orice procesor. V sistem distribuit memoria i este adresa locala Dacă două procesoare execută comanda load RO, i, atunci fiecare dintre ele accesează i-a celulăîn memoria sa locală, adică să celule diferite, iar valori inegale pot fi încărcate în registrele R0.

Diferența dintre cele două sisteme de memorie trebuie să fie ținută în minte de către programator, deoarece determină modul în care părțile unui program paralel interacționează. În varianta cu memorie partajată, este suficient să creați o structură de date în memorie și să transferați referințele la această structură în subrutine paralele. Într-un sistem de memorie distribuită, trebuie să aveți o copie a datelor partajate în fiecare memorie locală. Aceste copii sunt create prin imbricarea datelor partajate în mesajele trimise altor procesoare.

Memorie cu alternativ adrese

Din punct de vedere fizic, memoria unui sistem de calcul este formată din mai multe module (bănci), în timp ce întrebarea esențială este cum este distribuit spațiul de adrese în acest caz (setul tuturor adreselor pe care le poate forma procesorul). O modalitate de a distribui adrese virtuale între modulele de memorie este împărțirea spațiului de adrese în blocuri secvențiale. Dacă memoria constă din NS bănci, apoi celula cu adresa iîn cazul divizării blocurilor, acesta va fi în banca cu numărul eu /n.În sistem memorie intercalată(memorie intercalată) adresele consecutive sunt situate în bănci diferite: celula cu adresa i se află în banca cu numărul i mod NS. Să fie, de exemplu, memoria formată din patru bănci, câte 256 de octeți fiecare. Într-o schemă de adresare bloc, prima bancă va fi alocată adrese virtuale 0-255, al doilea - 256-511 etc. Într-o schemă cu adrese alternante, celulele consecutive din prima bancă vor avea adrese virtuale 0, 4, 8, .... în a doua bancă - 1, 5, 9 , etc. (Figura 11.1, a).

Distribuția spațiului de adrese între module face posibilă procesarea simultană a cererilor de acces la memorie, dacă adresele corespunzătoare aparțin unor bănci diferite, procesorul poate solicita accesul la o celulă într-unul dintre cicluri. i iar în ciclul următor - la celula j. Dacă eu sij sunt in banci diferite, informatiile vor fi transmise in cicluri succesive. Aici, un ciclu se referă la un ciclu de procesor, în timp ce un ciclu complet de memorie necesită mai multe cicluri de procesor. Astfel, în acest caz, procesorul nu trebuie să aștepte până la finalizarea întregului ciclu de acces la celulă. i. Tehnica luată în considerare vă permite să creșteți debitul: dacă sistemul de memorie este format din

https://pandia.ru/text/78/264/images/image002_61.jpg "width =" 62 "height =" 15 "> Distanța dintre elemente se numește pas cu index sau Pas(pas). Unul dintre aplicatii interesante această proprietate poate servi drept Acces la matrice. Dacă pasul de index este cu unul mai mult decât numărul de rânduri din matrice, o singură cerere de acces la memorie va returna toate elementele diagonale ale matricei (Figura 11.1, b). Responsabilitatea de a se asigura că toate elementele extrase ale matricei sunt localizate în bănci diferite revine programatorului.

Modele de arhitectură de memorie a sistemelor de calcul

Atât în ​​memoria partajată, cât și în cea distribuită, sunt implementate mai multe modele de arhitecturi ale sistemelor de memorie.

DIV_ADBLOCK84 ">

Orez. 11.3. Memoria partajată: a - combinarea procesoarelor folosind o magistrală; b - un sistem cu cache-uri locale; v- performanta sistemului in functie de numarul de procesoare de pe magistrala; d - VS multiprocesor cu memorie partajată, format din module separate

Mod alternativ construcția unui VS multiprocesor cu memorie partajată bazată pe NML este prezentată în Fig. 11.3, G. Aici vârful este înlocuit de un comutator care direcționează cererile procesorului către unul dintre mai multe module de memorie. În ciuda faptului că există mai multe module de memorie, toate aparțin unui singur spațiu de adrese virtuale. Avantajul acestei abordări este că comutatorul este capabil să servească mai multe cereri în paralel. Fiecare procesor poate fi conectat la propriul modul de memorie și poate avea acces la el la viteza maximă permisă. Rivalitatea între procesoare poate apărea atunci când încercați să accesați același modul de memorie în același timp. În acest caz, doar un procesor are acces, iar celelalte sunt blocate.

Din păcate, arhitectura UMA nu se scalează bine. Cele mai comune sisteme conțin 4-8 procesoare, mult mai rar 32-64 procesoare. În plus, astfel de sisteme nu pot fi clasificate drept tolerante la erori, deoarece defecțiunea unui procesor sau a unui modul de memorie implică defecțiunea întregii aeronave.

O altă abordare a construirii unei VS cu memorie partajată este acces neuniform la memorie, notat ca NUM A (Acces neuniform la memorie), există încă un singur spațiu de adrese, dar fiecare procesor are memorie locală. Procesorul accesează direct propria memorie locală, ceea ce este mult mai rapid decât accesarea memoriei de la distanță printr-un comutator sau rețea. Un astfel de sistem poate fi suplimentat cu memorie globală, apoi dispozitivele de stocare locale acționează ca memorie cache rapidă pentru memoria globală. O astfel de schemă poate îmbunătăți performanța aeronavei, dar nu este capabilă să întârzie la nesfârșit egalizarea performanței directe. Dacă fiecare procesor are un cache local (Figura 11.3.6), există o probabilitate mare (p> 0.9) că comanda sau datele necesare sunt deja în memoria locală. Probabilitatea rezonabilă de a atinge memoria locală reduce semnificativ numărul de apeluri la procesor La memorie globală și duce astfel la creșterea eficienței. Locul ruperii în curba de performanță (curba superioară din Fig.11.3, v), punctul în care adăugarea procesoarelor este încă eficientă este mutat acum în regiunea procesorului 20, iar cea mai subțire, unde curba devine orizontală, în regiunea procesorului 30.

În cadrul conceptului NUMA sunt implementate mai multe abordări diferite, notate prin abrevieri SOMA,CC-NUMAși NCC-NUMA.

V arhitectură numai cache(SOMA, Cache Only Memory Architecture) Memoria locală a fiecărui procesor este construită ca un cache mare pentru acces rapid din partea procesorului „propriu”. Cache-urile tuturor procesoarelor sunt considerate colectiv memoria globală a sistemului. Nu există o memorie globală reală. Caracteristica fundamentală a conceptului SOMA este exprimată în dinamică. Aici, datele nu sunt legate static la un anumit modul de memorie și nu au o adresă unică care rămâne neschimbată pe toată durata de viață a variabilei. În arhitectura SOMA, datele sunt transferate în memoria cache a procesorului care le-a solicitat ultima dată, în timp ce variabila nu este fixată cu o adresă unică și poate fi localizată în orice celulă fizică în orice moment. Mutarea datelor dintr-un cache local în altul nu necesită participarea la acest proces sistem de operare dar implică un hardware complex și costisitor de gestionare a memoriei. Pentru a organiza un astfel de regim, așa-zisul directoarele cache. Rețineți, de asemenea, că ultima copie a articolului nu este niciodată eliminată din cache.

Deoarece în arhitectura SOMA datele sunt mutate în memoria cache locală a procesorului proprietar, astfel de aeronave au un avantaj semnificativ de performanță față de alte arhitecturi NUM A. Pe de altă parte, dacă o singură variabilă sau două variabile diferite stochează aceeași cache într-una linie este cerută de două procesoare, această linie de cache trebuie mutată înainte și înapoi între procesoare de fiecare dată când datele sunt accesate. Astfel de efecte pot depinde de detaliile alocării memoriei și pot duce la situații imprevizibile.

Model acces neuniform la memorie coerent în cache(CC-NUMA, Сache Coherent Non-Uniform Memory Architecture) este fundamental diferit de modelul SOMA. Sistemul CC-NUMA nu folosește memoria cache, ci memoria obișnuită alocată fizic. Nu are loc copierea paginilor sau a datelor între locațiile de memorie. Nu există mesaje software. Există doar un stick de memorie, cu părți conectate fizic prin cablu de cupru și hardware inteligent. Coerența cache-ului bazată pe hardware înseamnă că nu este necesar niciun software pentru a stoca mai multe copii ale datelor actualizate sau pentru a le transfera. Nivelul hardware se ocupă de toate acestea. Accesul la modulele de memorie locale din diferite noduri ale sistemului se poate realiza simultan și este mai rapid decât la modulele de memorie la distanță.

Diferența dintre modelul cu acces neuniform la memorie cache-incoerent(NCC-NUMA, Non-Cache Coherent Non-Uniform Memory Architecture) de la CC-NUMA este evident din nume. Arhitectura memoriei presupune un singur spațiu de adresă, dar nu oferă consistența hardware a datelor globale. Gestionarea utilizării acestor date revine în întregime software-ului (aplicații sau compilatoare). În ciuda acestei împrejurări, care pare a fi un dezavantaj al arhitecturii, se dovedește a fi foarte utilă în creșterea performanței sistemelor de calcul cu o arhitectură de memorie de tip DSM, luată în considerare în secțiunea „Modele de arhitecturi de memorie distribuită”.

În general, sunt apelate AC-uri cu memorie partajată construite conform schemei NUMA arhitecturi de memorie virtuală partajată(arhitecturi de memorie virtuală partajată). Acest fel arhitectura, în special CC-NUMA, în timpuri recente este considerat un tip independent și destul de promițător de sisteme de calcul din clasa MIMD, prin urmare, astfel de aeronave vor fi discutate mai detaliat mai jos.

Modele de arhitectură de memorie distribuită

Într-un sistem de memorie distribuită, fiecare procesor are propria sa memorie și poate doar să o adreseze. Unii autori numesc acest tip de sisteme aeronave multicomputer sau multicomputer, subliniind faptul că elementele de bază ale unui sistem sunt ele însele mici sisteme de calcul cu procesor și memorie. Modelele de arhitecturi de memorie distribuită sunt de obicei notate ca arhitectura fara acces direct la memoria de la distanță(NORMA, Fără acces la memorie la distanță). Acest nume rezultă din faptul că fiecare procesor are acces doar la memoria sa locală. Accesul la memoria de la distanță (memoria locală a altui procesor) este posibil doar prin schimbul de mesaje cu procesorul care deține memoria adresabilă.

Această organizație are o serie de avantaje. În primul rând, la accesarea datelor, nu există concurență pentru magistrală sau comutatoare - fiecare procesor poate folosi pe deplin lățimea de bandă a căii de comunicație cu propria sa memorie locală. În al doilea rând, absența unei magistrale partajate înseamnă că nu există restricții asociate cu privire la numărul de procesoare: dimensiunea sistemului este limitată doar de rețeaua de procesoare. În al treilea rând, problema coerenței cache-ului este eliminată. Fiecare procesor are dreptul de a-și schimba datele în mod independent, fără a-și face griji cu privire la potrivirea copiilor de date din propria memorie cache locală cu cache-urile altor procesoare.

Principalul dezavantaj al unui computer cu memorie distribuită este complexitatea schimbului de informații între procesoare. Dacă vreunul dintre procesoare are nevoie de date din memoria altui procesor, trebuie să facă schimb de mesaje cu acest procesor. Acest lucru duce la două tipuri de costuri:

· Este nevoie de timp pentru a forma și a redirecționa un mesaj de la unul! procesor la altul;

· Pentru a oferi un răspuns la mesajele de la alți procesoare, procesorul care primește trebuie să primească o cerere de întrerupere și să execute procedura de gestionare a acestei întreruperi.

Structura unui sistem de memorie distribuită este prezentată în Fig. 11.4. Pe stanga! piese (fig.11.4, A) este prezentat un element de prelucrare (PE). Include) procesorul în sine (P), memoria locală (M) și două controlere I/O (Ko și KD Pe partea dreaptă (Fig.11.4, b) este prezentat un sistem cu patru procesoare care ilustrează modul în care mesajele sunt trimise de la un procesor la altul. În raport cu fiecare PE, toate celelalte elemente de procesare pot fi privite pur și simplu ca dispozitive de intrare/ieșire. Pentru a trimite un mesaj către un alt PE, procesorul formează un bloc de date în memoria locală și îl notifică controlor local despre necesitatea transferului de informații către un dispozitiv extern. Prin intermediul rețelei de interconectare, acest mesaj este transmis către controlerul I/O receptor al PE receptor. Acesta din urmă găsește spațiu pentru mesaj în propria memorie locală și anunță procesorul sursă că mesajul a fost primit.

DIV_ADBLOCK89 ">

O variantă interesantă a unui sistem de memorie distribuită este; model memorie partajată distribuită(DSM, Distribuire memorie partajată), cunoscut și sub un alt nume arhitectura cu eterogeneacces la memorie și coerență software(SC-NUMA, Software-Coerent Non-Uniform Memory Architecture). Ideea acestui model este că BC, fiind fizic un sistem cu memorie distribuită, datorită sistemului de operare apare utilizatorului ca un sistem cu memorie partajată. Aceasta înseamnă că sistemul de operare oferă utilizatorului un singur spațiu de adresă, în ciuda faptului că accesul efectiv la memoria computerului aeronavei „străin” este încă asigurat prin schimbul de mesaje.

Multiprocesorcoerenţă cache- memorie

Un sistem multiprocesor cu memorie partajată este format din două sau mai multe procesoare independente, fiecare dintre ele executând fie o parte a unui program mare, fie un program independent. Toate procesoarele accesează instrucțiunile și datele stocate în memoria principală partajată. Deoarece memoria este o resursă partajată, există concurență între procesoare la accesarea acesteia, ceea ce crește latența medie de acces la memorie. Pentru a reduce această latență, fiecărui procesor i se atribuie un cache local, care, prin deservirea acceselor la memoria locală, în multe cazuri previne necesitatea accesului la memoria principală partajată. La rândul său, echiparea fiecărui procesor cu o memorie cache locală duce la așa-numitul problema de coerență sau oferind în acordmemorie cache. Conform sistemului, sistemul este coerent dacă fiecare operație de citire la o anumită adresă, efectuată de oricare dintre procesoare, returnează valoarea introdusă în timpul ultimei operațiuni de scriere la această adresă, indiferent de ce procesor a fost ultimul care a scris.

V cea mai simpla forma problema coerenței cache-ului poate fi explicată după cum urmează (Figura 11.5). Lăsați două procesoare Rgși Pr sunt conectate la memoria partajată printr-o magistrală. În primul rând, ambele procesoare citesc variabila NS. Copii ale blocurilor care conțin această variabilă sunt transferate din memoria principală în cache-urile locale ale ambelor procesoare (Figura 11.5, A). Apoi procesorul Pt realizează operația de creștere a valorii variabilei NS pe unitate. Deoarece o copie a variabilei se află deja în memoria cache a acestui procesor, va avea loc o lovitură în cache și valoarea va fi modificată doar în memoria cache 1. Dacă acum procesorul P2 efectuează din nou o operație de citire NS, atunci va apărea și o lovitură de cache și P2 va primi valoarea „veche” stocată în memoria sa cache NS(fig.11.5, b).

Menținerea coerenței necesită ca atunci când un element de date este modificat de către unul dintre procesoare, modificările corespunzătoare să fie făcute în memoria cache a celorlalte procesoare, unde există o copie a articolului de date modificat, precum și în memoria partajată. O problemă similară apare, de altfel, în sistemele uniprocesor, unde există mai multe niveluri de memorie cache. Aici este necesară reconcilierea conținutului cache-urilor de diferite niveluri.

Există două abordări pentru rezolvarea problemei de coerență: software și hardware. Unele sisteme folosesc strategii care combină ambele abordări.

Software moduri solutiiProbleme coerenţă

Tehnicile software pentru rezolvarea problemei de coerență fac posibil să se facă fără echipament adițional sau păstrați-l la minimum.

ProtocolBerkeley. Protocolul Berkeley a fost aplicat sistemului multiprocesor Berkeley bazat pe procesoare RISC.

Suprafața ratelor de cache este atenuată de ideea protocolului de proprietate asupra unei linii de cache. În general, memoria principală este considerată proprietara tuturor blocurilor de date. Înainte de a modifica conținutul unui rând din memoria cache a acestuia, procesorul trebuie să dobândească dreptul de proprietate asupra rândului. Aceste drepturi sunt dobândite prin operațiuni speciale de citire și scriere. Dacă, la accesarea unui bloc, proprietarul căruia în acest moment nu este memoria principală, are loc o pierdere a memoriei cache, procesorul care deține rândul împiedică citirea din memoria principală și alimentează procesorul solicitant cu date din memoria cache locală.

O altă îmbunătățire este introducerea unui stat comun. Când procesorul scrie pe una dintre liniile memoriei sale cache locale, de obicei generează un semnal pentru a elimina copiile blocului modificabil din alte cache. În protocolul Berkeley, semnalul de eliminare este generat numai dacă există astfel de copii în alte cache-uri. Acest lucru poate reduce semnificativ traficul neproductiv cu autobuzele. Următoarele scenarii sunt posibile.

În primul rând, de fiecare dată când un procesor scrie în memoria sa cache, șirul mutabil este pus într-o stare Private Dirty (PD). În plus, dacă șirul este partajat, un semnal de invalidare este trimis către magistrală, iar în toate cache-urile locale unde există o copie a acestui bloc de date, aceste copii sunt puse în starea „invalid” (I, Invalid). Dacă există o pierdere de scriere, procesorul obține o copie a blocului din memoria cache a masterului curent al blocului solicitat. Abia după aceste acțiuni procesorul scrie în cache-ul său.

În cazul pierderii în cache de citire, procesorul trimite o solicitare proprietarului blocului pentru a obține cea mai recentă versiune a acestuia din urmă și pune noua sa copie în starea de doar citire (RO, Read Only). Dacă rândul a fost deținut de un alt procesor, acesta marchează copia sa a blocului ca Shared Dirty (SD).

Diagrama de stare a protocolului Berkeley este prezentată în Fig. 11.10.

Comparând protocoalele de scriere o singură dată și Berkeley, se pot observa următoarele. Ambele protocoale folosesc strategia rescriere, în care blocurile modificate sunt păstrate în memoria cache cât mai mult posibil. Memoria principală este actualizată numai atunci când un rând este șters din cache. Limita superioară a numărului total de tranzacții de scriere pe magistrală este determinată de acea parte a protocolului de scriere o dată în care este implementată scrierea, deoarece strategia din urmă generează o operație de scriere pe magistrală cu fiecare modificare inițiată de procesor. Deoarece prima operație de scriere într-un protocol de scriere o dată este transmisă, aceasta este efectuată chiar dacă datele nu sunt partajate. Aceasta presupune trafic suplimentar bus, care crește odată cu creșterea capacității de cache. S-a dovedit că protocolul Write-Once are ca rezultat mai mult trafic de autobuz în comparație cu protocolul Berkeley .







Lovitură de lectură

Orez. 11.10. Protocolul Berkeley

O linie care poate fi citită și actualizată în protocolul de scriere o singură dată necesită ca linia să fie citită în cache, modificată local în cache și scrisă înapoi în memorie. Întreaga procedură necesită două operații pe magistrală: citirea din memoria principală (RAM) și scrierea înapoi în RAM. Protocolul Berkeley, pe de altă parte, se referă la obținerea permisiunilor de rând. Apoi blocul este modificat în cache. Dacă rândul nu a fost accesat înainte de ștergerea din cache, ciclurile magistralei vor fi aceleași ca în protocolul de scriere o singură dată. Cu toate acestea, este mai probabil ca linia să fie solicitată din nou, apoi din punctul de vedere al unei singure memorie cache, actualizarea liniei cache necesită o singură operație de citire pe magistrală. Astfel, protocolul Berkeley transferă linii direct între cache, în timp ce protocolul de scriere o singură dată transferă un bloc din memoria cache sursă în memoria principală și apoi din OP către cache-urile solicitante, rezultând o latență generală a sistemului de memorie. .

ProtocolIllinois. Protocolul Illinois, propus de Marc Papamarcos, urmărește, de asemenea, să reducă traficul de autobuz și, astfel, timpul de expirare a procesorului pentru accesarea autobuzului. Aici, ca și în protocolul Berkeley, ideea proprietății blocurilor este dominantă, dar ușor modificată. În protocolul Illinois, proprietatea este deținută de orice cache care conține o copie validă a unui bloc de date. În acest caz, același bloc poate avea mai mulți proprietari. Când se întâmplă acest lucru, fiecărui procesor i se atribuie o anumită prioritate, iar proprietarul cu o prioritate mai mare devine sursa de informații.

Ca și în cazul precedent, semnalul de invalidare este generat doar atunci când copii ale acestui bloc sunt disponibile în alte cache-uri. Scenarii posibile pentru protocolul Illinois sunt prezentate în Fig. 11.11.

Orez. 11.11. Protocolul Illinois

De fiecare dată când un procesor scrie în cache-ul său, șirul modificat este plasat într-o stare Private Dirty (PD).Dacă blocul de date este partajat, un semnal kill este trimis către magistrală și în toate cache-urile locale există o copie a acestui bloc , aceste copii sunt transferate în starea „invalid” (I, Invalid). Dacă apare o pierdere de scriere, procesorul preia o copie din memoria cache a proprietarului actual al blocului solicitat. Numai după acțiunile indicate, procesorul scrie în cache-ul său. După cum puteți vedea, în această parte există o coincidență completă cu protocolul Berkeley.

În cazul unei rate de citire a memoriei cache, procesorul trimite o solicitare proprietarului blocului pentru a obține cea mai recentă versiune a acestuia din urmă și pune noua sa copie în starea „exclusiv” (E, Exclusiv), cu condiția să că este singurul proprietar al rândului. În caz contrar, starea este schimbată în „partajat” (S, Partajat).

Este esențial ca protocolul să fie extensibil și strâns legat atât de rata de pierdere a memoriei cache, cât și de cantitatea de date care este proprietatea comună a unui sistem multiprocesor.

ProtocolLicurici. Protocolul a fost propus de Tucker și colaboratorii și implementat în Firefly Multiprocessor Workstation, un sistem multiprocesor dezvoltat la centrul de cercetare Digital Equipment Corporation.

Protocolul Firefly utilizează o înregistrare de actualizare. Stările posibile ale liniei cache sunt aceleași cu cele ale protocolului Illinois (Figura 11-12). Diferența este că strategia de writeback se aplică numai rândurilor în starea PD sau E, în timp ce write-through se aplică rândurilor în starea S. Cache-urile Watcher folosesc write-through pentru a-și actualiza copiile. În plus, observarea cache-urilor care găsesc o copie a liniei în ele invocă o linie de magistrală specială „partajată”, astfel încât controlerul de scriere să poată decide în ce stare să pună linia în care a fost scrisă. O linie „partajată” pe o eroare de citire a memoriei cache servește pentru a informa controlerul local de cache de unde provine copia liniei: din memoria principală sau din alt cache. Astfel, starea S se aplică numai datelor care sunt efectiv partajate.

https://pandia.ru/text/78/264/images/image018_2.jpg "width =" 491 height = 316 "height =" 316 ">

Orez. 11.13. Protocolul Dragonului

ProtocolMESI. Desigur, dintre protocoalele de supraveghere cunoscute, cel mai popular este protocolul MESI (Modified / Exclusive / Shared / Invalid). Protocolul MESI este utilizat pe scară largă în comerț sisteme cu microprocesoare, de exemplu bazat pe microprocesoare Pentium și PowerPC. Deci, poate fi găsit în memoria cache internă și controler cache extern i82490 al microprocesorului Pentium, în procesorul i860 și controlerul cache MC88200 de la Motorola.

Protocolul a fost conceput pentru cache-urile de scriere înapoi. Unul dintre obiectivele principale ale protocolului MESI este amânarea scrierii înapoi a datelor încapsulate în memoria principală BC pentru cât mai mult posibil. Acest lucru îmbunătățește performanța sistemului prin reducerea la minimum a transferurilor necesare de informații între cache și memoria principală. Protocolul MESI atribuie fiecărei linii cache una dintre cele patru stări, care sunt controlate de cei doi biți de stare MESI din eticheta acelei linii. Starea liniei cache poate fi modificată atât de procesor, pentru care această memorie cache este locală, cât și de alte procesoare ale „schemei” multiprocesor. Gestionarea stării liniilor cache poate fi atribuită dispozitivelor logice externe. Una dintre versiunile protocolului prevede utilizarea schemei de scriere o singură dată considerată anterior.

Impartit(S, Partajat) - o linie cache se potrivește cu o linie similară din memoria principală (datele sunt valide) și poate fi prezentă în unul sau mai multe dintre celelalte cache.

Invalid(I, Invalid) - O linie cache marcată invalid nu conține date valide și devine inaccesibilă din punct de vedere logic.

Orez. 11.15. Secvența schimbărilor de stare în protocolul MESI: a - procesorul 1 citește x;

b- procesorul 2 citește x; c - procesorul 1 realizează prima înregistrare în x;

G- procesorul 1 face o altă înregistrare în x

Ordinea în care o linie cache trece de la o stare la alta depinde de: starea curentă a liniei, operația efectuată (citire sau scriere), rezultatul unui apel de cache (loc sau ratat) și, în final, dacă linia este partajată sau nu. În fig. 11.14 prezintă o diagramă a tranzițiilor principale fără a lua în considerare modul de scriere o singură dată.

Să presupunem că unul dintre procesoare face o solicitare de citire dintr-o linie care nu se află în prezent în memoria cache-ului local (read miss). Solicitarea va fi transmisă prin autobuz. Dacă niciunul dintre cache nu conține o copie a liniei necesare, atunci nu va exista niciun răspuns din partea controlorilor de monitorizare ai altor procesoare, linia va fi citită în memoria cache a procesorului solicitant din memoria principală, iar copia va fi alocată starea E. Dacă oricare dintre cache-urile locale conține copia pe care o căutați, va fi primit un răspuns de la controlerul de urmărire corespunzător indicând accesul la șirul partajat. Toate copiile liniei în cauză din toate cache-urile vor fi transferate în starea S, indiferent de starea în care se aflau înainte (I, E sau S).

Când un procesor face o cerere de scriere la un șir care nu se află în memoria cache locală (write miss), șirul trebuie citit din memoria principală (RAM) și actualizat înainte de a fi încărcat în memoria cache. Înainte ca procesorul să poată încărca un rând, trebuie să se asigure că o versiune validă a datelor este de fapt în memoria principală, adică că nicio copie modificată a rândului nu se află în alte cache-uri. Secvența de operații formată în acest caz se numește citește cu intenția de modificarețiuni(RWITM, Citiți cu intenție de modificare). Dacă o copie a liniei necesare a fost găsită într-unul dintre cache-uri și în starea M, atunci procesorul cu această copie întrerupe secvența RWITM și rescrie linia în OP, după care schimbă starea liniei din cache-ul său. la I. Apoi secvența RWITM este reluată și reaccesând memoria principală pentru a citi rândul actualizat. Starea finală a liniei va fi M, în care nu există o copie mai sigură a acesteia nici în OP, nici în alte cache. Dacă o copie a liniei a existat într-un alt cache și nu a avut o stare M, atunci o astfel de copie este eliminată și accesul la memoria principală este efectuat imediat.

Un cache de citire nu modifică starea liniei citite. Dacă procesorul efectuează acces de scriere la o linie existentă în starea S, transmite către magistrală pentru a informa celelalte cache, actualizează linia din memoria cache și o setează la starea M. Toate celelalte copii ale liniei sunt mutate în starea I. Dacă procesorul efectuează acces de scriere la linia în starea E, singurul lucru pe care trebuie să-l facă este să scrie pe linie și să-și schimbe starea în M, deoarece nu există alte copii ale liniei în sistem.

În fig. 11.15 prezintă o secvență tipică de evenimente într-un sistem de două procesoare care solicită acces la celula x. Accesarea oricărei celule dintr-o linie cache este considerată un acces la întreaga linie.

Să ilustrăm etapele în care procesorul 2 încearcă să citească conținutul celulei x "(Fig. 11.16). În primul rând, există o pierdere de citire a memoriei cache și procesorul încearcă să acceseze memoria principală. Procesorul 1 monitorizează magistrala, detectează accesul la un celulă, a cărei copie se află în memoria cache și se află în




Orez. 11.16. Tranziția de la starea E la starea S în protocolul MESI: a- procesor 2

citește x; b - procesorul 1 scrie înapoi x "în memoria principală;

i - procesorul 2 citește x "din memoria principală

starea M, deci blochează operația de citire de la procesorul 2. Apoi procesorul 1 rescrie linia care conține x „în OP și eliberează procesorul 2 pentru a putea repeta accesul la memoria principală. Acum procesorul 2 primește linia care conține x” și îl încarcă în memoria cache. Ambele copii sunt marcate cu S.

Până acum, a fost luată în considerare o versiune scrisă o singură dată a protocolului MESI. Luând în considerare o singură scriere, diagrama de stare prezentată în Fig. 11.14, ușor modificată. Toate erorile de citire a memoriei cache provoacă o tranziție la starea S. Prima lovitură de scriere este urmată de o tranziție la starea E (o așa-numită tranziție de scriere o singură dată). Următorul hit în timpul scrierii implică o schimbare a stării liniei la M.

Protocoale bazate pe director

Protocoale de coerență bazate pe director tipic pentru sistemele complexe cu multiprocesor cu memorie partajată, unde procesoarele sunt unite printr-o rețea de interconectare ierarhică în mai multe etape. Complexitatea topologiei face ca utilizarea protocoalelor de supraveghere cu mecanismul lor de difuzare să fie costisitoare și ineficientă.

Protocoalele bazate pe director colectează și urmăresc informații despre conținutul tuturor cache-urilor locale. Astfel de protocoale sunt de obicei implementate cu un controler centralizat care face parte fizic din controlerul de memorie principal. Cartea de referință în sine este stocată în memoria principală. Atunci când controlerul de cache local face o cerere, controlerul de director detectează o astfel de solicitare și generează instrucțiunile necesare pentru a transfera date din memoria principală sau dintr-un alt cache local care conține cea mai recentă versiune a datelor solicitate. Controlorul central este responsabil pentru actualizarea informațiilor despre starea cache-urilor locale, de aceea trebuie să fie notificat cu privire la orice acțiune locală care ar putea afecta starea blocului de date.

Directorul conține multe intrări care descriu fiecare locație de memorie cache care poate fi partajată de procesoarele de sistem. Referința se face ori de câte ori unul dintre procesoare modifică o copie a unei astfel de celule în memoria locală. În acest caz, informațiile din director sunt necesare pentru a invalida sau actualiza copiile celulei modificate (sau întregul rând care conține această celulă) în alte cache-uri locale unde astfel de copii sunt disponibile.

Pentru fiecare șir partajat, a cărui copie poate fi plasată în memoria cache, o intrare este alocată în directorul care stochează pointeri către o copie a acestui șir. În plus, în fiecare înregistrare este evidențiat un bit de modificare (D), indicând dacă copia este murdară (D = 1 - murdar) sau curată (D = 0 - curat), adică dacă conținutul liniei din cache s-au schimbat.memoria după ce a fost încărcată acolo. Acest bit indică dacă procesorul este autorizat să scrie în acest șir.

În prezent, există trei moduri cunoscute de implementare a protocoalelor de coerență a cache-ului bazate pe director: referința completă, referința limitată și referința concatenată.

În protocol referință completă un singur director centralizat menține informații despre toate cache-urile. Referința este stocată în memoria principală.


Orez. 11.17. Protocolul de coerență a memoriei cache de referință completă

Într-un sistem de N procesoare, fiecare intrare de director va conține N indicatori de un bit. Dacă există o copie a datelor în memoria cache locală corespunzătoare, bitul indicator este setat la 1, în caz contrar - la 0. Diagrama cu referința completă este prezentată în Fig. 11.17. Aceasta presupune că există o copie a liniei în fiecare cache. Fiecărei linii îi sunt alocați doi indicatori de stare: un bit valid (V, Valid) și un bit de proprietate (P, Privat). Dacă informațiile din linie sunt corecte, V-bit-ul său este setat la 1. O singură valoare a P-bit indică faptul că procesorul dat are dreptul de a scrie pe linia corespunzătoare a memoriei sale cache locale.

Să presupunem că procesorul 2 scrie în locația x. Inițial, procesorul nu a primit încă permisiunea pentru o astfel de înregistrare. Formează o cerere către controlerul de director și așteaptă permisiunea pentru a continua operațiunea. Ca răspuns la o solicitare către toate cache-urile în care există copii ale rândului care conține celula x, este emis un semnal pentru a elimina copiile existente. Fiecare cache care primește acest semnal resetează bitul de validitate a șirului nullabil (bit V) la 0 și returnează un semnal de confirmare controlerului de director. După primirea tuturor semnalelor de confirmare, controlerul de director setează bitul de modificare (D-bit) al intrării de director corespunzătoare la unu și trimite un semnal către procesorul 2 pentru a permite scrierea în celula x. Din acest moment, procesorul 2 poate continua să scrie în propria copie a celulei x, precum și în memoria principală, dacă schema de scriere este implementată în cache.

Principalele probleme ale protocolului de director complet sunt legate de numărul mare de intrări. Pentru fiecare celulă din sistemul de referință a N procesoare, este necesar N + 1 bit, adică odată cu creșterea numărului de procesoare, coeficientul de complexitate crește liniar. Protocolul de director complet permite fiecărui cache local să aibă copii ale tuturor celulelor partajate. În practică, o astfel de posibilitate nu rămâne întotdeauna la cerere - în orice moment, doar una sau mai multe copii sunt de obicei relevante. V protocolcu referință limitată copiile unei singure linii pot fi doar într-un număr limitat de cache - nu poate fi mai mult de NS copii ale șirului, în timp ce numărul de pointeri din intrările directorului este redus la n (n< N ). Pentru a identifica în mod unic memoria cache care stochează copia, indicatorul în loc de un bit ar trebui să fie format din log2 N biți și lungimea totală a pointerilor din fiecare intrare de director, în loc de N biți va fi egal NSlog2N pic. Cu o valoare constantă NS rata de creștere a factorului de complexitate al unui director restricționat pe măsură ce dimensiunea sistemului crește este mai mică decât în ​​cazul unei relații liniare.

Când mai mult de NS copii, controlorul decide pe care dintre copii să păstreze și pe care să le anuleze, după care se fac modificările corespunzătoare în indexurile înregistrărilor din director.

Metodă directoare legate urmărește și comprimarea volumului cărții de referință. Folosește o listă legată pentru a stoca înregistrările, care poate fi implementată ca una legată (unidirecțională) și dublu legată (bidirecțională).

Orez. 11.18. Protocolul de coerență a memoriei cache a directorului concatenat

Într-o listă legată individual (Figura 11.18), fiecare intrare de director conține un pointer către o copie a șirului într-unul dintre cache-urile locale. Copiile liniilor cu același nume în cache de sistem diferite formează un lanț unidirecțional. Pentru a face acest lucru, etichetele lor oferă un câmp special în care este introdus un pointer către memoria cache care conține următoarea copie a lanțului. În etichetă ultimul exemplar un caracter delimitator special este plasat în lanț. Referința concatenată permite șiruri de lungime N, adică suportă N copii ale celulei. Când se creează o altă copie, lanțul trebuie distrus și trebuie să se formeze unul nou. Să presupunem, de exemplu, că procesorul 5 nu are o copie a celulei x și se întoarce la memoria principală pentru aceasta. Pointerul din director este schimbat astfel încât să indice către numărul cache 5, iar pointerul din cache 5 - astfel încât să indice către cache 2. Pentru aceasta, controlerul de memorie principal, împreună cu datele solicitate, trebuie să transfere și un pointer la cache la memoria cache 5 - memoria cu numărul 2. Numai după ce se formează întreaga structură a lanțului, procesorul 5 va primi permisiunea de a accesa celula x. Dacă procesorul scrie într-o celulă, un semnal de invalidare este trimis pe calea definită de lanțul de pointeri corespunzător. Lanțul trebuie actualizat atunci când o copie este ștearsă din orice memorie cache.

O listă dublu legată acceptă atât indicatori înainte, cât și înapoi. Acest lucru vă permite să inserați mai eficient indicatori noi în lanț sau să ștergeți din acesta care nu mai sunt necesari, dar necesită stocarea unui număr mai mare de pointeri.

Schemele bazate pe director suferă de congestie în controlerul centralizat, precum și de supraîncărcare de comunicare în căile dintre controlerele cache locale și controlerul central. Cu toate acestea, ele se dovedesc a fi foarte eficiente în sistemele multiprocesor cu topologie complexă de interconectare între procesoare, unde protocoalele de monitorizare nu pot fi implementate.

Mai jos este o scurtă descriere a protocoalelor relevante în prezent pentru asigurarea coerenței memoriei cache pe baza cărții de referință. Pentru o cunoaștere detaliată a acestor protocoale, sunt furnizate legături către sursele literare corespunzătoare.

ProtocolTang. Există un director global centralizat care conține o copie completă a tuturor informațiilor despre director pentru fiecare dintre cache-urile locale. Aceasta duce la problema blocajeleși necesită, de asemenea, căutarea intrărilor corespunzătoare.

ProtocolCădelniță. Schema de referință Censier utilizează un vector de bit pointer pentru a indica ce procesoare dețin o copie locală a unui anumit bloc de memorie. Există un astfel de vector pentru fiecare bloc de memorie. Dezavantajele acestei metode sunt ineficiența ei în un numar mare procesoare și necesită, de asemenea, acces la memoria principală pentru a actualiza liniile cache.

ProtocolArchibald. Schema de referință Archibald este o pereche de scheme complicate pentru rețelele de procesoare organizate ierarhic. CU descriere detaliata acest protocol poate fi găsit în.

ProtocolStenstrom. Manualul Stenstrom oferă șase stări valide pentru fiecare bloc de date. Acest protocol este relativ simplu și potrivit pentru orice topologie de interconectare a procesorului. Referința este stocată în memoria principală. În cazul unei pierderi de citire a memoriei cache, se accesează memoria principală, care trimite un mesaj către memoria cache care deține blocul, dacă există. La primirea acestui mesaj, proprietarul memoriei cache trimite datele solicitate și, de asemenea, transmite un mesaj tuturor celorlalți procesoare care partajează aceste date pentru ca aceștia să își actualizeze vectorii de biți. Schema nu este foarte eficientă cu un număr mare de procesoare, totuși este în prezent cel mai matur și utilizat protocol bazat pe directoare.

Control întrebări

1. Analizați influența caracteristicilor AC cu memorie partajată și AC cu memorie distribuită asupra dezvoltării software. De ce se numesc aceste VS-uri, respectiv, puternic cuplate și, respectiv, slab cuplate?

2. Explicați ideea de a alterna adrese de memorie. Care sunt considerentele pentru alegerea unui mecanism de alocare a adreselor? Cum este legat de clasa de arhitectură BC?

3. Oferiți o descriere comparativă a abordărilor omogene și eterogene
la memorie.

4. Care sunt avantajele arhitecturii SOMA?

5. Cheltuiește analiza comparativa modele cu acces coerent în cache și incoerent în cache la memorie eterogenă.

6. Formulați avantajele și dezavantajele arhitecturii fără acces direct la memoria de la distanță.

7. Explicați semnificația memoriei distribuite și partajate.

8. Dezvoltați exemplul dvs. pentru a ilustra problema coerenței cache-ului.

9. Descrieți caracteristicile soluțiilor software la problema coerenței, evidențiați avantajele și punctele slabe ale acestora.

10. Comparați tehnicile de scriere pentru a scrie cu cele de scriere și de a difuza, evidențiind meritele și dezavantajele acestora.

11. Oferiți o descriere comparativă a metodelor de menținere a coerenței în sistemele multiprocesor.

12. Efectuați o analiză comparativă a protocoalelor de observație pe care le cunoașteți.

13. Care dintre protocoalele de observare este cel mai popular? Justificați motivele interesului crescut față de el.

14. Oferiți o descriere detaliată a protocoalelor de coerență pe baza cărții de referință și a metodelor de implementare a acestora. Care sunt diferențele dintre aceste protocoale și protocoalele de observare?

Clasificarea sistemelor MKMD

Într-un sistem MCMD, fiecare element de procesare (PE) își execută programul destul de independent de celelalte PE. În același timp, elementele de prelucrare trebuie să interacționeze cumva între ele. Diferența în modul de astfel de interacțiune determină împărțirea condiționată a sistemelor MCMD în AC cu memorie partajată și sisteme cu memorie distribuită (Fig. 5.7).

În sistemele cu memorie partajată, care sunt caracterizate ca fiind strâns cuplate, există o memorie partajată de date și instrucțiuni disponibile pentru toate elementele de procesare folosind o magistrală comună sau o rețea de conexiuni. Astfel de sisteme se numesc multiprocesoare. Acest tip include multiprocesoare simetrice (UMA (SMP), Symmetric Multiprocessor), sisteme cu acces neuniform la memorie (NUMA, Non-Uniform Memory Access) și sisteme cu așa-numita memorie locală în loc de memorie cache (COMA, Cache Only Memory Access) ).

Dacă toate procesoarele au acces egal la toate modulele de memorie și la toate dispozitivele I/O, iar fiecare procesor este interschimbabil cu alte procesoare, atunci un astfel de sistem se numește sistem SMP. În sistemele cu memorie partajată, toate procesoarele au șanse egale de a accesa un singur spațiu de adrese. O singură memorie poate fi construită ca un singur bloc sau modulară, dar acesta din urmă este de obicei cazul.

Sistemele SMP aparțin arhitecturii UMA. Sisteme de calcul Memoria partajată, în care orice procesor accesează memoria în mod uniform și ia aceeași perioadă de timp, este numită sisteme Uniform Memory Access (UMA).

Din punctul de vedere al nivelurilor de memorie utilizată în arhitectura UMA, sunt luate în considerare trei opțiuni pentru construirea unui multiprocesor:

Clasic (numai cu memorie principală partajată);

Cu cache local suplimentar pentru fiecare procesor;

Cu memorie tampon locală suplimentară pentru fiecare procesor (Figura 5.8).

Din punctul de vedere al modului în care procesoarele interacționează cu resursele partajate (memorie și CBV), în cazul general, se disting următoarele tipuri de arhitecturi UMA:

Cu un autobuz comun și diviziune de timp (7,9);

Cu un comutator transversal;

Bazat pe rețele cu mai multe etape.

Utilizarea unei singure magistrale limitează dimensiunea unui multiprocesor UMA la 16 sau 32 de procesoare. Pentru a obține o dimensiune mai mare, este necesar un alt tip retea de comunicatii... Cea mai simplă schemă de conectare este un comutator transversal (Figura 5.10). Comutatoarele transversale au fost folosite de zeci de ani pentru a conecta aleatoriu un grup de linii de intrare la un număr de linii de ieșire.

Bara transversală este o rețea care nu blochează. Aceasta înseamnă că procesorul va fi întotdeauna asociat cu blocul corect de memorie, chiar dacă o linie sau un nod este deja ocupat. În plus, nu este necesară o planificare preliminară.


Comutatoarele cu bară transversală sunt destul de potrivite pentru sistemele de dimensiuni medii (Figura 5.11).


Pe baza comutatoarelor 2x2, puteți construi rețele în mai multe etape. O opțiune posibilă este rețeaua omega (Figura 5.12). Pentru n procesoare și n module de memorie, sunt necesare log 2 n pași, n / 2 comutatoare pentru fiecare pas, adică un total de (n / 2) log 2 n comutatoare pentru fiecare pas. Acest lucru este mult mai bun decât n 2 noduri (puncte de intersecție), în special pentru n mari.

Multiprocesoarele UMA cu o singură magistrală sunt de obicei limitate la câteva zeci de procesoare, în timp ce multiprocesoarele coordonate sau multiprocesoarele cu comutatoare necesită un proces costisitor. Hardware si nu sunt mult mai mari. Pentru a obține mai mult de 100 de procesoare, aveți nevoie de un alt acces la memorie.

Pentru o scalabilitate mai mare a multiprocesoarelor, este adaptată arhitectura cu acces neuniform la memorie NUMA (NonUniform Memory Access). La fel ca multiprocesoarele UMA, acestea oferă un singur spațiu de adresă pentru toate procesoarele, dar spre deosebire de mașinile UMA, modulele de memorie locală sunt accesate mai rapid decât modulele de memorie la distanță.

În cadrul conceptului NUMA sunt implementate abordările notate prin abrevierile NC-NUMA și CC-NUMA.

Dacă timpul de acces la memoria la distanță nu este ascuns (pentru că nu există memorie cache), atunci un astfel de sistem se numește NC-NUMA (No Caching NUMA - NUMA without caching) (Fig.5.13).

Dacă sunt prezente cache-uri coerente, sistemul se numește CC-NUMA (Arhitectura de memorie non-uniformă a memoriei cache coerente - NUMA cu cache coerent) (7.14).

Memoria principala

Memoria principala este un dispozitiv de stocare conectat direct la procesor și conceput pentru a stoca programe executabile și date direct implicate în operațiuni. Are performanță suficientă, dar volum limitat. Memoria principală este împărțită în diferite tipuri, dintre care principalele sunt memoria cu acces aleatoriu (RAM) și memoria doar în citire (ROM) (Fig. 1).

RAM este conceput pentru a stoca informații (programe și date) direct implicate în proces de calculîn stadiul actual de funcţionare.

RAM este utilizat pentru primirea, stocarea și emiterea de informații. Procesorul „preia” programele și datele inițiale pentru procesare, în care scrie rezultatele. Această memorie și-a primit numele „operațional” deoarece funcționează foarte rapid, astfel încât procesorul practic nu trebuie să aștepte în timp ce citește date din memorie și scrie în memorie. Cu toate acestea, datele pe care le conține sunt păstrate numai când computerul este pornit. Când opriți computerul, conținutul memoriei RAM este șters. Astfel, RAM este o memorie volatilă.

Orez. 1. Principalele tipuri de memorie principală

Adesea, denumirea RAM (memorie cu acces aleatoriu, adică memorie cu acces aleatoriu). Accesul aleatoriu este înțeles ca abilitatea de a accesa direct orice celulă de memorie specificată (arbitrară), iar timpul de acces pentru orice celulă este același.

RAM se bazează pe mare circuite integrate conţinând matrice de elemente de stocare semiconductoare (declanşatoare). Elementele de stocare sunt situate la intersecția magistralelor verticale și orizontale ale matricei; înregistrarea și citirea informațiilor se realizează prin aplicarea de impulsuri electrice prin acele canale ale matricei, care sunt conectate la elementele aparținând celulei de memorie selectate.

Cantitatea de RAM instalată în computer afectează nu numai capacitatea de a lucra cu programe consumatoare de resurse, ci și performanța acesteia, deoarece atunci când nu există suficientă memorie, un hard disk este folosit ca extensie logică, timpul de acces la care este incomparabil mai lung. Pe lângă cantitatea de RAM, performanța unui computer este afectată și de viteza acestuia și de metoda folosită pentru a face schimb de date între microprocesor și memorie.

OP este implementat pe cipuri DRAM (OP dinamic), care, în comparație cu alte tipuri de memorie, se caracterizează prin costuri reduse și capacitate specifică ridicată, dar consum mare de energie și performanțe mai scăzute. Fiecare octet de date (0 și 1) din DRAM este stocat ca o încărcare a condensatorului. Datorită prezenței curenților de scurgere, încărcarea condensatorului trebuie reînnoită la intervale regulate. Din cauza necesității continue de actualizare, o astfel de memorie se numește memorie dinamică. Regenerarea conținutului memoriei necesită timp suplimentar, iar înregistrarea informațiilor în memorie în timpul regenerării nu este permisă.

Costul RAM a scăzut recent drastic (din vara lui 1995 până în vara lui 1996 - de peste 4 ori), astfel încât cerințele mari ale multor programe și sisteme de operare pentru RAM din punct de vedere financiar au devenit mai puțin împovărătoare.

Pentru a accelera accesul la RAM pe computerele de mare viteză, se folosește o memorie cache stabilă de ultra-rapidă, care se află, așa cum ar fi, „între” microprocesor și RAM și stochează copii ale celor mai frecvent utilizate secțiuni ale RAM. Când microprocesorul accesează memoria, mai întâi caută datele necesare din memoria cache. Deoarece timpul de acces la memoria cache este de câteva ori mai mic decât la memoria obișnuită și, în majoritatea cazurilor, datele cerute de microprocesor sunt deja stocate în memoria cache, timpul mediu de acces la memorie scade. Memoria cache este implementată pe un cip SRAM (RAM statică).

Pentru computerele bazate pe Intel-386DX sau 80386SX, dimensiunea cache-ului de 64 KB este suficientă, iar 128 KB este suficientă. Calculatoarele bazate pe Intel-80486DX, DX2, DX4 și Pentium au de obicei 256 KB de cache.

Microprocesoarele din seriile 486 și Pentium conțin o memorie cache internă mică, prin urmare, pentru o terminologie lipsită de ambiguitate, uneori în literatura tehnică, memoria cache situată pe o placă de bază se numește memorie cache L2.

În microprocesorul Pentium Pro, memoria cache L2 este conținută într-un singur pachet cu procesorul însuși (se poate spune că este încorporat în microprocesor).

Nu este necesar să ai toată memoria, informația în care trebuie să se schimbe. Este mai bine să păstrați în permanență unele dintre cele mai importante informații în memoria computerului. Această memorie se numește persistentă. Datele au fost introduse în memoria permanentă în timpul fabricării. De regulă, aceste date nu pot fi modificate; programele care rulează pe computer le pot citi doar. Acest tip de memorie este de obicei numit ROM (memorie numai în citire) sau ROM (memorie numai în citire).

Pe computerul IBM - computer compatibil memoria permanentă stochează programe pentru testarea echipamentelor, un computer, inițierea încărcării sistemului de operare (OS) și efectuarea funcțiilor de bază pentru întreținerea dispozitivelor computerizate. Deoarece majoritatea acestor programe sunt legate de serviciul I/O, conținutul memoriei numai în citire este adesea numit BIOS (Basic Input - output System).

Multe computere instalează un BIOS bazat pe memorie FLASH. Această memorie poate fi schimbată prin programe, ceea ce vă permite să actualizați BIOS-ul folosind programe speciale, fără a înlocui placa de bază sau cipul BIOS.

Toate computerele, cu excepția celor foarte vechi, conțin și un program de configurare a computerului (SETUP) în BIOS. Vă permite să setați unele caracteristici ale dispozitivelor computerizate (tipuri de controler video, hard disk-uriși unități de dischetă, unele și moduri de funcționare cu RAM, solicitarea unei parole la boot-ul etc.). De obicei, programul de configurare este invocat dacă utilizatorul, în timpul bootstrap va apăsa o cheie specifică sau o combinație de taste (cel mai adesea tasta Del).

Capacitate de memorie FLASH de la 32 Kbytes la 2 Mbytes, timp de acces la citire 0,06 μs, timp de scriere de un octet aproximativ 10 μs; Memorie FLASH - memorie nevolatilă.

Pe lângă memoria cu acces aleatoriu obișnuit și memoria numai pentru citire, un computer are o mică secțiune de memorie pentru stocarea parametrilor de configurare a computerului. Este adesea denumită memorie CMOS deoarece această memorie este de obicei realizată cu tehnologie CMOS (semiconductor complementar de oxid de metal) cu consum redus de energie. Conținutul memoriei CMOS nu se modifică atunci când computerul este oprit, deoarece pentru alimentarea acestuia se folosește o baterie specială.

Astfel, capacitatea memoriei principale este formată din milioane de celule de memorie individuale cu o capacitate de 1 octet fiecare. Capacitatea totală a memoriei principale a computerelor moderne variază de obicei între 1 și 4 GB. Capacitatea RAM este cu două ordine de mărime mai mare decât capacitatea ROM: ROM-ul necesită până la 2 MB pe plăcile de bază noi), restul este RAM.

ORGANIZAREA MEMORIEI ÎN MAȘINI DE CALCULATOR

Scop, parametri de bază și

Clasificarea tipurilor de memorie

Dispozitive de memorie (dispozitive de stocare) VM sunt concepute pentru a înregistra, stoca și citi informațiile prezentate în formă digitală/ 2,3 /. Dispozitivele de memorie, precum procesoarele, funcționează cu două tipuri de informații - programe și date, prin urmare, caracteristicile memoriei determină în mare măsură performanța și funcţionalitate VM.

Dispozitivele de memorie funcționează în două moduri - acces la memorieși depozitare... În modul de acces la memorie, informațiile sunt înregistrate sau informațiile sunt citite din memorie. Dacă memoria nu este accesată, aceasta intră în modul de stocare.

Principalii parametri care caracterizează dispozitivele de memorie sunt capacitatea de informare (volum), performanța, consumul de energie și costul / 2,5,8 /.

Capacitatea de informare (volum) dispozitivul de memorie este definit număr maxim informațiile stocate și sunt măsurate în octeți, KBytes, MBytes, GBytes și TBytes.

1 KB = 2 10 octeți; 1MB = 2 20 octeți; 1 GB = 2 30 de octeți și 1 TB = 2 40 de octeți.

Performanța memoriei este caracterizată de următorii parametri principali:

timpul de prelevare (acces) t B, determinat de intervalul de timp dintre momentele semnalului de eșantionare (începutul ciclului de citire) și primirea datelor citite la ieșirea memoriei;

durata ciclului t Ц, care este determinat de intervalul de timp minim admis între accesările succesive la memorie. Având în vedere că accesul la memorie înseamnă scriere sau citire, uneori se separă durata ciclului de citire t C.RT... și durata ciclului de înregistrare t Ts.ZP. pentru tipurile de memorie în care acești timpi de ciclu sunt diferiți, de ex. t CH. ≠ t C.ZP .

În cazul general, ciclul de acces constă dintr-o fază de preluare (acces) și o fază de regenerare (recuperare) a memoriei, prin urmare t C> t V.

Performanța memoriei poate fi caracterizată și prin rata de transfer a datelor scrise sau citite și măsurate în MB/s.

Consumul de energie pentru multe tipuri de memorie în modul de acces este semnificativ mai mare decât în ​​modul de stocare. Memoria nevolatilă în modul de stocare nu consumă deloc energie. Dar o serie de tipuri de memorie, de exemplu, memoria dinamică electronică, necesită cicluri de regenerare în modul de stocare, astfel încât consumul de energie în acest mod este comparabil cu consumul de energie în modul de acces.

Pentru comparație tipuri diferite memorie, este convenabil să utilizați consumul de energie redus la o celulă (adică specific) și costul dispozitivelor de memorie.

Un parametru important de memorie este, de asemenea latimea autobuzului date de memorie, definirea numărului de octeți cu care poate fi efectuată simultan o operație de citire sau scriere.

Dispozitivele de memorie VM pot fi clasificate după diverse criterii: după principiul fizic de funcționare, după scopul funcțional, după modul de organizare, nevoia de alimentare cu energie în modul de stocare etc.

După principiul fizic de funcționare, memoria este clasificată în electronică, magnetică, optică, magnetică - optică.

Memorie electronică realizat pe elemente semiconductoare și implementat sub forma unui LSI. Memoria electronică este împărțită în staticși dinamic.

În LSI al memoriei statice, declanșează static pe bipolar sau tranzistoare cu efect de câmp... După cum știți, numărul de stări stabile de declanșare este de două, ceea ce face posibilă utilizarea acestuia pentru a stoca o unitate de informații - un pic. Celulele de memorie pentru stocarea octeților și cuvintelor folosesc 8 și, respectiv, 16 declanșatori.

În memoria dinamică LSI, condensatorii electrici sunt utilizați ca celule de memorie elementare. Prezența unei taxe corespunde stocării unui „1 logic”, absența unei taxe corespunde stocării unui „0” logic. Fie capacitățile interelectrode ale tranzistoarelor MOS, fie condensatoarele special create în cristalul LSI sunt folosite ca condensatoare de stocare. Un fragment din schema bloc a memoriei dinamice, care conține două celule 1 și 2, este prezentat în Fig. 6.1.

Fiecare celulă de memorie elementară conține un condensator MOS de memorie C (zecimi de pF) și un comutator tranzistor T, care conectează acest condensator la magistrala de date. Poarta comutatorului MOS a tranzistorului este conectată la ieșirea corespunzătoare a decodorului de adrese. Când celula este selectată, cheia T se deschide și conectează condensatorul C la magistrala de date. În plus, în funcție de tipul de comandă: scriere (WR) sau citire (RD) - prin amplificatorul corespunzător se scriu datele de intrare (DI) sau se citesc datele de ieșire (DO).

În comparație cu memoria statică, memoria dinamică este mult mai simplă, mai ieftină și oferă un grad foarte ridicat de integrare, de exemplu. capacitate specifică mai mare. Dar, în comparație cu memoria dinamică statică, este mai lentă și necesită regenerare (restaurare) periodică a informațiilor din celulele elementare. Cu alte cuvinte, este necesară restabilirea periodică a încărcării pe condensatoarele de stocare C, care se autodescărcă în timp, adică. „Pierzi” informații. Pentru a face acest lucru, la fiecare câteva milisecunde (msec) citiți informații din celulele de memorie și apoi rescrieți informațiile, ceea ce vă permite să restabiliți încărcarea condensatoarelor de stocare C. Necesitatea organizării ciclurilor de reîmprospătare periodice complică oarecum gestionarea dinamică a memoriei.

Pentru modulele de memorie electronice tipice, timpul de eșantionare t B este unități - zeci de nanosecunde ( nsec), iar capacitatea de informare este de zeci - sute de Mbytes.

Memoria electronică statică și dinamică este volatil, adică când sursa de alimentare este oprită, informațiile din celule nu sunt salvate. De asemenea este si ne volatil memorie electronică - memorie read-only (ROM), informații din care în timpul funcționării VM-ului nu pot fi citite decât. Locațiile memoriei ROM vor fi discutate mai jos.

Memoria magnetică pe baza prezenței unui număr de materiale magnetice (de exemplu, oxid de fier) ​​două stări stabile de magnetizare remanentă de semn opus. Astfel de materiale magnetice caracterizat printr-o buclă de histerezis dreptunghiulară B = f (H), iar din ele se aplică un strat magnetic de lucru, aplicat pe suprafața diferitelor suporturi mobile - discuri magnetice. Pentru a scrie și a citi informații, se folosesc capete magnetice, care sunt inductori în miniatură înfășurați pe un miez magnetic cu un spațiu. În timpul înregistrării, capul magnetic magnetizează porțiunea stratului magnetic care trece sub spațiul de lucru în direcția determinată de direcția curentului care curge. În timpul citirii, suprafețele magnetizate trec în apropierea capului de citire inductiv și induc impulsuri EMF în acesta. Dispozitivele de memorie care folosesc acest principiu au un cost specific foarte scăzut de stocare a informațiilor, sunt nevolatile, dar, fiind electromecanice, sunt semnificativ inferioare memoriei electronice în ceea ce privește viteza, fiabilitatea și consumul de energie. Pentru hard disk-urile, viteza de transfer de date ajunge la zeci de MB/s, iar capacitatea de informații este de sute de GB.



V memorie optică pentru a stoca informații, se folosește o modificare a proprietăților optice (în principal, gradul de reflexie) ale suprafeței purtătoare. Suportul optic este sub forma unui disc ( Compact disc- CD), al cărui strat reflectorizant (pulverizare metalică) este acoperit cu un strat de colorant organic. La înregistrare, fasciculul laser este modulat de un flux de biți înregistrate și arde gropi în stratul de colorant în anumite puncte ale pistei. Datorită diferenței de coeficient de reflexie a gropilor și a zonelor nearse ale suprafeței în timpul citirii, are loc modularea luminozității fasciculului reflectat, care codifică informațiile citite de pe CD. Produs Tipuri variate CD-uri optice: CD-ROM (Read Only Memory) - permițând doar citirea informațiilor scrise într-un mod matriceal, CD-R (Recordable) - permițând cel puțin o scriere pe un disc și citire multiplă, CD-RW (ReWritable) - permițând rescrierea multiplă pe disc (și bineînțeles citirea). Discurile optice sunt ieftine și au o capacitate de informare semnificativă (până la un GB), sunt nevolatile și ușor de înlocuit, dar în ceea ce privește viteza, fiabilitatea și consumul de energie, ca și discurile magnetice, sunt semnificativ inferioare memoriei electronice.

În ceea ce privește funcționalitatea, dispozitivele de memorie pot fi clasificate în memorie cu acces aleatoriu (SRAM), memorie cu acces aleatoriu (RAM), memorie doar în citire (ROM) și dispozitive de stocare externe (VCD).

RAM destinat stocării programelor (sistem, aplicație) și a datelor utilizate direct de CPU la momentul curent. Timpii ciclului de citire și scriere pentru RAM sunt de obicei aceleași. De obicei, memoria dinamică cu un volum de până la unități de GB este utilizată ca RAM, în funcție de scopul și domeniul de aplicare al MS.

Pozu sau Memorie cache- aceasta este o cantitate mică de memorie de mare viteză, în care durata ciclului de acces t C este mai mică decât durata ciclului de mașină al procesorului. Prin urmare, atunci când accesați memoria cache, nu este nevoie să introduceți cicluri de așteptare ale procesorului în ciclurile de acces la memoria mașinii. Memoria cache este o memorie tampon între RAM și CPU și se bazează pe memorie statică. Cache-ul stochează copii ale blocurilor (paginilor) de programe și date ale acelor zone ale RAM la care a avut loc ultimul acces, precum și un director - o listă a corespondenței lor curente cu zonele RAM. La fiecare acces la memoria principală, controlerul directorului cache verifică dacă există o copie validă a blocului (pagina) solicitat în cache. Dacă există o copie, atunci acesta este cazul. accesări în cache, și numai memoria cache este accesată pentru date sau cod. Dacă nu există o copie validă, atunci acesta este cazul. rata de numerar, iar blocul (pagina) necesar din RAM este scris în cache, iar scrierea se face în locul celui mai mic bloc (pagină) șters anterior din memoria cache din RAM, adică. blocul de informații, numărul de apeluri la care a fost cel mai mic. Datorită programelor și datelor inerente astfel proprietăți fundamentale, Cum spațialăși localitate temporară/ 2,7,13 / numărul de accesări în cache este de multe ori mai mare decât numărul de erori de cache, chiar și cu memorie cache mică (unități - zeci de KB). Prin urmare, utilizarea memoriei cache îmbunătățește semnificativ performanța VM. De obicei, cache-ul este implementat conform unei scheme pe trei niveluri: cache-ul primar (L1 Cache), dimensiunea de zeci de KB, și cache-ul secundar (L2 Cache), sute de KB, situat în cristalul MP, al treilea nivel. cache (L3 Cache), unitățile de MB sunt instalate pe placa de bază sau în clădirea MP.

rom Este o memorie electronică nevolatilă care este utilizată pentru a stoca informații care sunt neschimbate sau rareori modificate în timpul funcționării unui VM: software de sistem (BIOS), software de aplicație pentru VM-uri încorporate și on-board, seturi de tabele, parametri de configurare ai diferitelor sisteme, etc. Principalul mod de funcționare al ROM-ului este citirea, ceea ce dă naștere unui alt nume comun pentru o astfel de memorie ROM (Read Only Memory). Scrierea informațiilor pe ROM, numită programare, este de obicei mult mai dificilă, necesită mai mult timp și energie decât citirea.

VCU concepute pentru stocarea nevolatilă a unor volume mari într-un anumit mod informatii structurate: fisiere, baze de date, arhive. Trăsătură caracteristică memoria externă este că dispozitivele sale funcționează cu blocuri de informații, și nu cu octeți sau cuvinte, așa cum permite RAM. În plus, procesorul poate accesa OVC-ul doar prin intermediul memoriei RAM. Unitățile de disc (HDD, CD) sunt de obicei folosite ca VCU, care pot stoca sute de GB de informații.

Memorie electronică tampon incluse în controlorii diverselor dispozitive externe, rezolvarea problemelor afișarea și introducerea informațiilor, sarcini de comunicare, conversie de semnal etc. Prezența memoriei tampon face posibilă coordonarea ratelor de transfer de date semnificativ diferite ale magistralei de sistem și ale dispozitivelor externe, reducerea timpului petrecut de fiecare dintre dispozitivele externe pe magistrala de sistem și creșterea performanței VM.

Modul de organizare a memoriei este determinat de metoda de plasare și căutare a informațiilor în memorie. Pe această bază, faceți distincția între organizarea memoriei de adresă, asociativă și stiva.

V memorie de adrese pentru a accesa celulele de memorie, acestea sunt folosite adrese, care sunt înțelese ca coduri ale numerelor de celule de memorie. Organizarea adresabilă a memoriei permite accesarea celulelor de memorie după adresele lor într-o ordine arbitrară, iar durata ciclului de acces este aceeași pentru toate celulele, indiferent de adresă. Prin urmare, termenul „memorie cu acces aleatoriu (RAM)” sau RAM (memorie cu acces aleatoriu) este de asemenea folosit pentru a denumi o astfel de memorie. De exemplu, RAM și ROM au o organizare a memoriei adresabilă.

V memorie asociativă(ADS) informațiile sunt căutate nu după adresele celulelor de memorie, ci după conținutul acestora sau o parte a acestuia. În cazul general, o solicitare către memoria asociativă este efectuată prin specificarea unei liste de biți prin care să se caute o celulă de memorie și prin specificarea conținutului biților alocați. Lista de cifre pentru căutare este setată registru-mască. Acest registru are aceeași lățime de biți ca și celula de memorie CAM și îi conține numai în acei biți care sunt căutați. V contextul cazului conținutul acestor biți este setat, iar lățimea sa de biți este egală cu lățimea de biți a registrului de mască.

Dacă se găsește o celulă cu o combinație dată de zerouri și unu, CAM generează un răspuns pozitiv indicând adresa celulei găsite. Apoi, adresa este transmisă decodorului de adrese și întregul conținut al unei astfel de celule poate fi citit sau conținut nou poate fi scris în ea. În caz contrar, AMS generează un răspuns negativ la cerere.

Căutarea informațiilor după context în CAM este efectuată simultan în toate celulele de memorie, prin urmare, CAM-ul este de multe ori mai rapid decât RAM, dar este și mult mai scump. În sistemele de calcul moderne, CAM sunt utilizate, de exemplu, ca parte a memoriei cache.

Stack memorie(Stiva), precum și asociativ, nu este abordat. O stivă poate fi văzută ca o colecție de celule care formează o matrice unidimensională, în care celulele adiacente sunt conectate între ele prin lanțuri de transmisie de cuvinte biți. În această memorie, scrierea și citirea sunt efectuate conform regulii „ultimul scris se citește primul” sau „Ultima intrare, prima ieșire (LIFO)”. Prin urmare, stiva se numește memorie „push” cu ordine inversă citi cu voce tare. De obicei, stiva este organizată în RAM. Numărul de cuvinte din stivă este determinat de indicatorul de stivă SP, iar scrierea și citirea din stivă sunt efectuate de comenzile PUSH și, respectiv, POP. Memoria stivă este utilizată pe scară largă, așa cum sa discutat deja mai sus, atunci când se gestionează întreruperi și se apelează subrutine.

Împreună cu memoria stivă, memoria cumpărată din magazin cu comandă directă de citire a devenit larg răspândită, de exemplu. „Primul scris este citit mai întâi” sau „Prima intrare, prima ieșire (FIFO)”. Această memorie se numește memorie tampon și, ca și stiva, este organizată în RAM.

Organizarea subsistemului de memorie într-un PC

Memoriile subsistemului de memorie PC pot fi aranjate în următoarea ierarhie (Tabelul 9.1):

Tabelul 9.1. Ierarhia subsistemului de memorie PC
Tipul memoriei anul 1985 2000 an
Timp de prelevare Volumul tipic Preț/octet Timp de prelevare Volumul tipic Preț/octet
Memoria super-operatorie (registre) 0,2 5 ns 16/32 biți $ 3 - 100 0,01 1 ns 32/64/128 biți $ 0,1 10
Stocare tampon de mare viteză (cache) 20 100 ns 8Kb - 64Kb ~ $ 10 0,5 - 2 ns 32Kb 1Mb $ 0,1 - 0,5
Memoria operațională (principală). ~ 0,5 ms 1MB - 256MB $ 0,02 1 2 ns 20 ns 128 MB - 4 GB $ 0,01 0,1
Stocare externă (stocare în masă) 10 - 100 ms 1MB - 1GB $ 0,002 - 0,04 5 - 20 ms 1 GB - 0,5 TB $ 0,001 - 0,01

Registrele procesorului constituie contextul acestuia și stochează datele utilizate de instrucțiunile procesorului care execută în prezent. Registrele procesorului sunt de obicei accesate prin denumirile lor mnemonice din instrucțiunile procesorului.

Cache-ul este folosit pentru a se potrivi cu viteza procesorului și a memoriei principale. Sistemele de calcul folosesc un cache cu mai multe niveluri: cache de nivel I (L1), cache de nivel II (L2) etc. Sistemele desktop folosesc de obicei un cache cu două niveluri, în timp ce sistemele server utilizează un cache cu trei niveluri. Cache-ul stochează instrucțiuni sau date care probabil vor fi trimise procesorului pentru procesare în viitorul apropiat. Funcționarea memoriei cache este transparentă pentru software, astfel încât memoria cache nu este de obicei accesibilă software-ului.

RAM stochează, de regulă, complet funcțional module software(nucleul sistemului de operare, programele executabile și bibliotecile acestora, driverele de dispozitiv etc.) și datele acestora, direct implicate în funcționarea programelor, și este, de asemenea, folosit pentru a salva rezultatele calculelor sau a altor prelucrări de date înainte de a le trimite către un extern memorie, către un dispozitiv de ieșire de date sau interfețe de comunicare.

Fiecărei celule de memorie i se atribuie o adresă unică. Metodele de alocare a memoriei organizaționale oferă programatorilor capacitatea de a utilizare eficientăîntregul sistem informatic. Aceste metode includ modelul de memorie continuă („plată”) și modelul de memorie segmentată. Când se utilizează un model plat de memorie, programul operează cu un singur spațiu de adrese contiguu, un spațiu de adrese liniar, în care celulele de memorie sunt numerotate secvenţial și continuu de la 0 la 2n-1, unde n este capacitatea CPU la adresa respectivă. Când se utilizează un model segmentat pentru un program, memoria este reprezentată de un grup de blocuri de adrese independente numite segmente. Pentru a adresa un octet de memorie, un program trebuie să folosească o adresă logică constând dintr-un selector de segment și un offset. Selectorul de segment selectează un anumit segment, iar offset-ul indică o anumită celulă din spațiul de adrese al segmentului selectat.



Metodele organizatorice de alocare a memoriei fac posibilă organizarea unui sistem de calcul în care spațiul de adresă de lucru al programului depășește dimensiunea RAM disponibilă efectiv în sistem, în timp ce lipsa RAM este umplută de o memorie externă mai lentă sau mai ieftină (hard disk). , memorie flash etc.) ) Acest concept se numește memorie virtuală. În acest caz, spațiul de adrese liniar poate fi mapat la spațiul de adrese fizice fie direct (o adresă liniară este o adresă fizică), fie folosind mecanismul de paginare. În al doilea caz, spațiul de adrese liniar este împărțit în pagini de dimensiuni egale care alcătuiesc memoria virtuală. Paginare oferă o mapare a paginilor de memorie virtuală necesare la spațiul de adrese fizice.

Pe lângă implementarea sistemului de memorie virtuală, sunt folosite dispozitive de stocare externe pentru depozitare pe termen lung programe și date sub formă de fișiere.

Memorie cache

Memoria cache este un dispozitiv de stocare de mare viteză situat pe aceeași matriță cu procesorul sau extern procesorului. Cache-ul servește ca un buffer de mare viteză între CPU și memoria principală relativ lentă. Ideea memoriei cache se bazează pe prezicerea celor mai probabile accesări CPU la RAM. Această abordare se bazează pe principiul localității temporale și spațiale a programului.



Dacă CPU a accesat un obiect din RAM, este foarte probabil ca CPU să se refere în curând la acel obiect din nou. Un exemplu al acestei situații ar fi codul sau datele în bucle. Acest concept este descris de principiul localității temporare, conform căruia obiectele utilizate frecvent din memoria principală ar trebui să fie „mai aproape” de CPU (în cache).

Sunt utilizate trei metode de scriere pentru a reconcilia conținutul memoriei cache și RAM:

  • Scriere prin - simultan cu memoria cache, memoria RAM este actualizată.
  • Buffered write through - informațiile sunt întârziate în memoria cache înainte de a fi scrise în RAM și rescrise în RAM în acele cicluri când CPU nu o accesează.
  • Scrie înapoi - se folosește bitul de modificare din câmpul de etichetă, iar linia este rescrisă în RAM numai dacă bitul de modificare este 1.

De regulă, toate metodele de scriere, cu excepția trecerii, permit amânarea și gruparea scrierilor în RAM pentru a crește performanța.

În structura memoriei cache se disting două tipuri de blocuri de date:

  • memorie de afișare a datelor (de fapt datele în sine, duplicate din RAM);
  • memoria etichetelor (semne care indică locația datelor din cache în RAM).

Spațiul de memorie pentru afișarea datelor în cache este împărțit în linii - blocuri de lungime fixă ​​(de exemplu, 32, 64 sau 128 de octeți). Fiecare linie de cache poate conține un bloc aliniat contigu de octeți din memoria principală. Ce bloc de RAM este mapat la o linie de cache dată este determinat de eticheta de linie și de algoritmul de mapare. Conform algoritmilor de mapare a memoriei RAM la cache, există trei tipuri de memorie cache:

  • cache complet asociativ;
  • cache de afișare directă;
  • cache asociativ multiplu.

Este caracteristic unui cache complet asociativ faptul că controlerul cache poate plasa orice bloc de RAM în orice linie a memoriei cache (Figura 9.1). În acest caz, adresa fizică este împărțită în două părți: offset-ul din bloc (linia cache) și numărul blocului. Când un bloc este plasat în cache, numărul blocului este stocat în eticheta liniei corespunzătoare. Când CPU accesează memoria cache pentru blocul necesar, ratarea cache-ului va fi detectată numai după compararea etichetelor tuturor liniilor cu numărul blocului.

Unul dintre principalele avantaje aceasta metoda display - buna utilizare a RAM, tk. nu există nicio restricție privind blocul care poate fi mapat la o anumită linie de cache. Dezavantajele includ implementarea hardware complexă a acestei metode, care necesită o cantitate mare de circuite (în principal comparatoare), ceea ce duce la o creștere a timpului de acces la un astfel de cache și la o creștere a costului acestuia.

Măriți imaginea
Orez. 9.1. Cache 8x8 complet asociativ pentru o adresă de 10 biți

O modalitate alternativă de a mapa RAM la cache este un cache mapat înainte (sau cache asociativ unidirecțional). În acest caz, adresa de memorie (numărul blocului) determină în mod unic linia cache în care va fi plasat acest bloc. Adresa fizică este împărțită în trei părți: offset-ul blocului (linia cache), numărul liniei cache și eticheta. Acesta sau acel bloc se va potrivi întotdeauna într-o linie cache strict definită, înlocuind un alt bloc stocat acolo dacă este necesar. Când CPU accesează memoria cache pentru un bloc de care are nevoie, trebuie doar să verifice o singură linie de etichete pentru a determina o atingere sau o pierdere a memoriei cache.

Avantaje evidente ale acestui algoritm sunt simplitatea și costul redus de implementare. Dezavantajele includ eficiența scăzută a unui astfel de cache din cauza reîncărcărilor frecvente probabile de linie. De exemplu, când ne referim la fiecare a 64-a celulă de memorie din sistem din Fig. 9.2, controlerul cache va fi forțat să supraîncarce constant aceeași linie de cache, complet fără a utiliza restul.

Măriți imaginea
Orez. 9.2. Cache de mapare înainte 8x8 pentru adresa de 10 biți

În ciuda defectelor evidente, această tehnologie a găsit o aplicație de succes, de exemplu, în MP Motorola MC68020, pentru organizarea cache-ului de instrucțiuni de primul nivel (Fig. 9.3). Acest microprocesor implementează un cache de afișare directă de 64 de linii de 4 octeți. Eticheta șirului, pe lângă cei 24 de biți care specifică adresa blocului din cache, conține un bit de semnificație care determină validitatea șirului (dacă bitul de semnificație este 0, șir dat este considerat nevalid și nu va cauza accesări în cache). Accesul la date nu este stocat în cache.

Măriți imaginea
Orez. 9.3. Diagrama organizării memoriei cache în MP Motorola MC68020

Compensația dintre primii doi algoritmi este cache-ul asociativ multiplu sau cache-ul asociativ parțial (Figura 9.4). Cu această metodă de organizare a memoriei cache, liniile sunt combinate în grupuri, care pot include 2, 4,: linii. În conformitate cu numărul de linii din astfel de grupuri, se disting 2 intrări, 4 intrări etc. cache asociativ. La accesarea memoriei, adresa fizică este împărțită în trei părți: offset-ul din bloc (linia cache), numărul grupului (setul) și eticheta. Un bloc de memorie a cărui adresă corespunde unui anumit grup poate fi plasat în orice linie a acestui grup, iar valoarea corespunzătoare este plasată în eticheta de linie. Evident, în cadrul grupului selectat se respectă principiul asociativității. Pe de altă parte, acesta sau acel bloc nu se poate încadra decât într-un grup strict definit, ceea ce face ecou principiul organizării cache-ului de afișare directă. Pentru ca procesorul să poată identifica rata de cache, va trebui să verifice etichetele unui singur grup (2/4/8 /: rânduri).

Măriți imaginea
Orez. 9.4. Cache asociativ 8x8 cu două intrări pentru adresă de 10 biți

Acest algoritm de afișare combină avantajele unui cache complet asociativ (utilizare bună a memoriei, de mare viteză) și cache cu acces direct (simplitate și cost redus), doar puțin inferioare în aceste caracteristici față de algoritmii originali. De aceea, cache-ul asociativ multiplu este cel mai răspândit (Tabelul 9.2).

Tabelul 9.2. Specificații subsistemului cache IA-32
Intel486 Pentium Pentium MMX P6 Pentium 4
Cache de instrucțiuni L1
Tip de 4 inchi. conf. univ. 2 inchi. conf. univ. 4 inchi. conf. univ. 4 inchi. conf. univ. 8 inchi conf. univ.
Dimensiunea liniei, octeți -
Volumul total, KB 8/16 8/16 12Kmops
Cache de date L1
Tip de Partajat cu memoria cache de instrucțiuni 2 inchi. conf. univ. 4 inchi. conf. univ. 2/4 inchi. conf. univ. 4 inchi. conf. univ.
Dimensiunea liniei, octeți
Volumul total, KB 8/16
cache L2
Tip de Extern extern de 4 inchi. conf. univ. 4 inchi. conf. univ. 8 inchi conf. univ.
Dimensiunea liniei, octeți
Volumul total, KB 256/512 128-2048 256/512

Note: Intel-486 folosește o singură instrucțiune L1 și cache de date. În Pentium Pro L1, memoria cache de date este de 8 Kbytes 2-way asociativ, în alte modele P6 este de 16 Kbytes 4-way asociative. În Pentium 4, în loc de cache-ul de instrucțiuni L1, este folosit cache-ul micro-op L1 (cache-ul de urmărire).

Pentru a organiza memoria cache, puteți utiliza arhitectura Princeton (cache mixt pentru instrucțiuni și date, de exemplu, în Intel-486). Acest lucru evident (și inevitabil pentru sistemele von Neumann cu memorie cache externă CPU) nu este întotdeauna cea mai eficientă soluție. Separarea memoriei cache în cache de instrucțiuni și date (cache cu arhitectură Harvard) îmbunătățește eficiența cache-ului din următoarele motive:

  • Multe procesoare moderne au o arhitectură pipeline în care blocurile pipeline rulează în paralel. Astfel, preluarea instrucțiunilor și accesul la datele de instrucțiuni sunt efectuate în diferite etape ale conductei, iar utilizarea unei memorie cache separată permite ca aceste operațiuni să fie efectuate în paralel.
  • Cache-ul de instrucțiuni poate fi implementat doar pentru citire și, prin urmare, nu necesită algoritmi de scriere înapoi, ceea ce face ca cache-ul să fie mai simplu, mai ieftin și mai rapid.

De aceea, toate cele mai recente modele IA-32, începând cu Pentium, folosesc arhitectura Harvard pentru a organiza memoria cache L1.

Criteriul pentru funcționarea eficientă a cache-ului poate fi considerat o scădere a timpului mediu de acces la memorie comparativ cu un sistem fără memorie cache. În acest caz, timpul mediu de acces poate fi estimat după cum urmează:

T cf = (T lovit x R lovit) + (T ratat x (1 R lovit))

unde T hit este timpul de acces la memoria cache în cazul unei lovituri (include timpul pentru a identifica o ratare sau o lovitură), T miss este timpul necesar pentru a încărca un bloc din memoria principală într-o linie cache în cazul unui cache miss și apoi trimite datele solicitate la procesor , R hit-hit rate.

Evident, cu cât valoarea lui R hit este mai aproape de 1, cu atât valoarea lui T cf este mai aproape de T hit. Rata de accesare este determinată în primul rând de arhitectura și dimensiunea cache-ului. Impactul prezenței și absenței memoriei cache și al dimensiunii acesteia asupra creșterii performanței CPU este prezentat în tabel. 9.3.

Top articole similare