Documente Academic
Documente Profesional
Documente Cultură
Rezultă că:
P(t) = Ni Np Tc (sec).
Datele care trebuie prelucrate sunt aduse din registrele interne în registrele de
intrare ale ALU, unde acestea rămân în timpul în care ALU face operaţiunea de
calcul aritmetic şi logic. Rezultatul calculului preluat de registrele de ieşire ale ALU
este stocat într-unul din registrele de uz general.
Există trei tipuri de instrucţiuni (vezi figura 3.2):
instrucţiuni registre-memorie: se încarcă date din memorie în registre
şi viceversa. Datele pot fi folosite mai departe de alte instrucţiuni sau
chiar de instrucţiunile respective. În acest ultim caz, rezultatul este depus
în registre;
instrucţiuni registre-registre: mută operanzii din registrul de la intrarea
ALU, execută asupra lor o anumită operaţie şi depun din nou operanzii
în registru;
instrucţiuni memorie-memorie: preiau operanzii din memorie, îi
plasează în registrul de intrare ALU, se execută o anumită operaţie şi se
stochează rezultatul în memorie.
72 ARHITECTURA SISTEMELOR DE CALCUL
3.2. Memoria
1
rA = [cuv/s].
tA
Timpul de ciclu la o unitate de memorie (tC) este timpul minim între două
accese succesive şi reprezintă timpul din momentul în care o unitate master
lansează o comandă spre unitatea de memorie şi până când poate lansa o nouă
comandă la aceeaşi unitate de memorie. Uzual, tC > tA, diferenţa lor numindu-se
timp de revenire (tR = tC – tA). Acesta reprezintă timpul minim necesar pentru
inactivarea primei comenzi, până la activarea celei de-a doua.
Rata de transfer (rT) este inversa timpului de ciclu şi reprezintă cantitatea
maximă de informaţie (exprimată în cuvinte pe secundă) care poate fi transferată
la/de la memorie într-o secundă:
1
rT = [cuv/s].
tC
CT
CU = [cost/cuv].
CM
Cu cât memoria este mai rapidă, cu atât costul unitar este mai mare.
Modul de acces la locaţiile unităţii de memorie arată ordinea în care
informaţia memorată poate fi accesată. Acesta poate fi serial sau paralel.
74 ARHITECTURA SISTEMELOR DE CALCUL
Dacă locaţiile de memorie pot fi accesate în orice ordine, iar timpul de acces
este independent de locaţia accesată, atunci accesul este aleator, iar unitatea de
memorie se numeşte memorie cu acces aleator (Random Access Memory, RAM).
În general, memoriile semiconductoare sunt memorii cu acces aleator.
Prin ierarhizarea unităţilor de memorie, blocurile de date cu probabilitatea
cea mai mare de accesare sunt aduse pe niveluri superioare, mai aproape de
unitatea centrală (localizare spaţială). Dintre acestea, datele cele mai recent
accesate sunt păstrate în apropierea procesorului (localizare temporală).
ROR (RAS Only Refresh) este o metodă de împrospătare din exterior, prin
care se transmit memoriei adresa de rând (AR) şi semnalul de validare a
adresei de linie, RAS (Row Address Select), fără a se activa semnalul de
validare a adresei de coloană, CAS (Column Address Select). Unitatea
master externă este anunţată periodic să facă refresh de către un ceas de
timp real, care este programat software de către sistemul de operare.
Observaţie: RAS, CAS şi WE (Write Enable) sunt semnale active pe 0.
CBR (CAS Before RAS) este tot o metodă de împrospătare din exterior,
prin care se transmit semnalele CAS şi RAS, activate în această ordine.
În acest caz, memoria dispune de un numărător de adrese intern, pentru
indicarea liniei care trebuie împrospătată, fără a fi nevoie de transmiterea
adresei din exterior. De asemenea, perioada de repetiţie a ciclurilor de
refresh este determinată de un ceas de timp real extern.
Auto-împrospătare cu ajutorul circuitelor interne memoriei DRAM. În
interior, memoria conţine un numărător de adrese de rând, un ceas de
timp real şi o logică de control pentru generarea semnalelor CAS şi
RAS, conform metodei CBR.
Memoria DRAM poate fi de două tipuri: asincronă şi sincronă.
Memoria DRAM asincronă nu necesită semnal de ceas pentru sincronizarea
cu unitatea master apelantă. Ca şi la SRAM, memoriile DRAM asincrone sunt mai
lente decât cele sincrone, dar sunt mai ieftine şi au un consum de energie mai mic.
Dintre memoriile DRAM asincrone, se pot enumera: FPM (Fast Page Mode), EDO
(Extended Data Out) şi BEDO (Burst EDO) DRAM (vezi paragraful 3.2.9). La
toate memoriile, accesul aleator este lent. În acces aleator, timpul de acces faţă de
RAS (tRAC) este de 50–70 ns, iar timpul de ciclu (tC) este de 90–120 ns.
Structura unui calculator 81
S. de c-dă MEMR\
(citire memorie) (înaltă impedanţă)
Semnale de date Date valide (citite)
>0
tAR
tMEMR
tC
S. de c-dă MEMW\
(scriere memorie) (înaltă impedanţă)
Semnale de date Date valide (scrise)
>0
tAW tMEMW
tC
Observaţii:
1. la citire, data este generată după apariţia semnalelor de adresă şi de
comandă şi se menţine un timp scurt după dezactivarea acestora;
2. la scriere, data trebuie să apară pe magistrală înaintea semnalului de scriere
şi să fie validă pe toată durata de activare a semnalului de comandă;
3. timpul de acces acoperă întârzierile care apar într-un modul de memorie
datorită circuitelor de decodificare a adresei şi de selecţie a
amplificatoarelor de intrare sau de ieşire;
4. proiectantul trebuie să aleagă circuite de memorie cu parametri de timp
acoperitori pentru restricţiile impuse pe magistrală şi să ia în calcul
întârzierile produse de circuitele de amplificare din interfaţă şi de pe
magistrală.
Există două moduri de organizare a octeţilor în memorie, şi anume:
a) Big Endian;
b) Little Endian.
Exemplu. Se consideră că se lucrează pe cuvinte de 32 biţi. Cele două
moduri de organizare a octeţilor sunt reprezentate în figura 3.9.
Fig. 3.9. Modurile de organizare a memoriei de tip Big Endian (a) şi Little Endian (b).
RAS\
CAS\
WR\
tacces
tciclu
RAS\
CAS\
WR\
tacces
tciclu
RAS\
CAS\
WR\
Arhitectura dual-channel
Motivul care a dus la dezvoltarea acestei arhitecturi a fost apariţia unui
bottleneck între procesor şi memorie. Arhitectura dual-channel presupune o
tehnologie prin care se poate dubla transferul dintre RAM şi controlerul de
memorie. Controlerele de memorie care suportă dual-channel utilizează pentru
transfer două canale de date de 64 biţi, rezultând o lăţime a căii de date de 128 biţi.
Pentru a putea beneficia de avantajele arhitecturii dual-channel, este nevoie de
două sau mai multe module de memorie instalate în bancurile corespunzătoare. De
obicei, aceste bancuri sunt colorate diferit pe placa de bază. Cele două canale permit
accesul fiecărui modul de memorie la controler, crescând astfel lărgimea de bandă.
Teoretic, nu este absolut necesar ca cele două module de memorie să fie identice, dar
acest lucru este recomandat pentru a evita eventualele probleme de compatibilitate.
De asemenea, se pot folosi un modul single-sided şi unul double-sided, dar câştigul
de performanţă şi fiabilitate depind foarte mult de controlerul de memorie.
În cazul în care pe o placă de bază există două perechi de socket-uri DIMM
din bancuri diferite (în general, culoarea socket-ului identifică bancul căruia acesta
aparţine), se poate instala o pereche de două module în bancul 0 şi o pereche de
altă capacitate în bancul 1, atât timp cât acestea funcţionează la aceeaşi viteză. În
acest mod, sistemul va folosi arhitectura dual-channel.
Chiar şi module care funcţionează la frecvenţe diferite pot fi folosite în
modul dual-channel, dar, în acest caz, toate modulele vor rula la frecvenţa celui
mai lent modul. Deşi arhitectura permite – cel puţin teoretic – toate aceste
combinaţii, foarte multe plăci de bază au probleme cu anumite module de memorie
dacă urmează să le folosească în mod dual-channel. Tocmai din acest motiv este
recomandat să se utilizeze perechi identice de module.
Merită reţinut faptul că arhitectura dual-channel este o tehnologie care ţine
de plăcile de bază, şi nu de memorii. Cu alte cuvinte, orice două module de
memorii compatibile vor suporta atât operaţii single-channel, cât şi dual-channel.
88 ARHITECTURA SISTEMELOR DE CALCUL
pentru magistrale de memorie de 100 MHz. Cipurile au anumite limite, care reduc
viteza la aproape 66 MHz. SDRAM-urile nu pot opera la viteze mai mari de 100
MHz, pentru că sloturile SIMM-urilor devin nesigure la frecvenţe mai mari.
Memoriile SDRAM sunt adaptate standardului de magistrală sincronă
introdus de microprocesoarele familiei Intel P6 (Pentium Pro, Pentium II şi
III). În figura 3.24 este prezentată structura unei memorii organizate pe 4 blocuri,
care sunt accesibile în mod concurent.
Tabelul 3.1
Ratele de transfer la o viteză dată a magistralei locale
Aşa cum se observă din figură, unul din atu-urile memoriei RDRAM este că
fiecare cip de memorie poate conţine până la 32 de bancuri de memorie. Aceste
bancuri sunt individuale şi aparţin riguros aceluiaşi cip, spre deosebire de bancurile
SDRAM, care sunt împrăştiate printre mai multe cipuri de memorie. Revenind la
diagramă, fiecare banc de memorie are dimensiunea de 1 MB, ceea ce face ca
întregul cip să aibă o capacitate de 32 MB.
Fiecare banc reprezintă o matrice DRAM organizată în 512 linii a câte
128 dualocţi (dualoctul este cea mai mică unitate de memorie adresabilă de către
RDRAM). Fiecare dualoct conţine 16 octeţi şi, deci, dimensiunea totală a liniilor
matricei este de 2 KB. În mod ideal, se poate păstra activă câte o linie din fiecare
din cele 32 de bancuri, pentru a maximiza şansele de a primi datele dintr-o linie
activă. În realitate, însă, pot exista numai 16 bancuri deschise simultan sau, mai
precis, doar jumătate din bancurile existente pe cip.
Figura 3.26 prezintă două operaţii: una de citire şi cealaltă de scriere din/în
memorie, pentru a ilustra lucrul simultan cu doar jumătate din bancurile disponibile.
Modul de funcţionare este următorul. Atunci când procesorul citeşte un dualoct
de 16 octeţi dintr-un banc, datele respective părăsesc bancul şi pătrund în
amplificatoarele de semnal (numerotate), care sunt plasate de o parte şi de alta a
bancurilor de memorie. Data A şi Data B reprezintă două jumătăţi ale unui dualoct (cu
8 octeţi fiecare), care părăsesc bancul de memorie pe căi separate, aşa cum se observă
în figura 3.26. Cele două magistrale care încadrează bancurile de memorie au fiecare o
lăţime de 8 octeţi, deci jumătatea dualoctului reprezentată de Data A se va transfera pe
magistrala din dreapta, iar cea reprezentată de Data B pe magistrala din stânga.
Deşi pe diagramă pare că fiecare banc este conectat la 4 amplificatoare de
semnal, de fapt, fiecare pereche de căsuţe cu aceeaşi etichetă (0/1, 1/2 etc.) plasată
la stânga şi la dreapta unui banc constituie un singur amplificator de semnal.
98 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.29. Sistem de memorie DDR SDRAM cu 3 DIMM-uri a câte 4 bancuri pe 64 de biţi.
Tabelul 3.2
Standardele pentru modulele de memorie DDR2
Tabelul 3.3
Standardele pentru modulele de memorie DDR3
O tehnologie complet nouă, folosită pentru prima dată în cazul DDR3, este
topologia Fly-By. Generaţiile SDRAM anterioare, inclusiv DDR2, utilizau o topologie
stea pentru a împărţi datele spre mai multe căi de semnal. Topologia Fly-By utilizează
o singură legătură directă către toate componentele DRAM, ceea ce permite un
răspuns mult mai rapid din partea sistemului.
Motivul pentru care DDR2 nu s-a putut dezvolta mai mult decât a făcut-o nu
se datorează atât procesului de fabricaţie, care ar fi trebuit rafinat mai mult, cât
unor limitări mecanice. În esenţă, DDR2 nu este pregătit să atingă viteze mai mari.
Teoretic, acest lucru ar fi posibil, dar, practic, tehnologia mecanică dezvoltată până
azi nu permite acest lucru. La frecvenţe mai mari, DIMM-ul începe să întâmpine
probleme în ceea ce priveşte integritatea semnalului. În cazul topologiei stea
folosite de DDR2, această problemă s-ar rezolva dacă s-ar reuşi echilibrarea tuturor
ramurilor. Din păcate, efortul necesar pentru a face acest lucru este peste limitele
fizice din ziua de azi.
Pentru DDR3, integritatea semnalului este rezolvată la nivelul fiecărui modul
DRAM, în locul încercării unei echilibrări la nivelul întregii platforme de memorie.
Acum, atât adresele, cât şi semnalele de control, sunt transmise pe aceeaşi cale.
Practic, topologia Fly-By elimină limitările cauzate de echilibrarea mecanică
folosită în DDR2, înlocuind-o cu un semnal automat de întârziere, generat de către
controlerul de memorie. O altă inovaţie prezentă la DDR3 constă în apariţia unui
pin de reset. Acest pin permite resetarea unui modul de memorie fără resetarea
întregului sistem, ceea ce duce la o scădere a timpului şi a energiei pierdute.
De remarcat este şi prezenţa unui senzor de temperatură, pentru prima dată
la memoriile DDR, senzor care detectează momentul în care modulul se apropie de
un anumit prag de temperatură şi, în consecinţă, poate scurta intervalele de refresh.
Acest sistem de siguranţă permite şi el o reducere a consumului de energie.
Un alt element caracteristic DDR3 este sistemul XMP (eXtended Memory
Profile). Acest sistem, implementat pe placa de bază, permite utilizatorului unei
configuraţii alcătuite dintr-un procesor Intel şi o memorie DDR3 să realizeze un
overclocking foarte simplu. Doar prin selectarea unei anumite opţiuni, sistemul va
decide singur factorii de multiplicare, tensiunile şi frecvenţele până la care poate fi
forţat ceasul pentru a câştiga un plus de performanţă.
XDR DRAM (eXtreme Data Rate DRAM)
Memoriile XDR-RAM sunt considerate ca fiind succesorul memoriilor
Rambus (RDRAM), fiind în concurenţă directă cu DDR2, SDRAM şi GDDR4
(memoriile grafice pentru plăcile grafice din familia GeForce FX). XDR-ul a fost
proiectat în special pentru sisteme mici, care necesită o lărgime de bandă ridicată,
şi pentru sisteme GPU (Graphical Processing Unit) de top. Această tehnologie
elimină problemele cauzate de întârzierile ridicate, prezente la primele modele
RDRAM. De asemenea, XDR DRAM permite o lărgime de bandă per pin mult mai
mare, ceea ce duce la scăderea costurilor de producţie a plăcilor de circuite
integrate. Scăderea costurilor este posibilă datorită faptului că sunt necesare mai
puţine căi de transmisie a datelor pentru aceeaşi lărgime de bandă.
Structura unui calculator 105
1. microprocesor;
2. cache intern (un bloc de 8 KB);
3. cache intern (al doilea bloc de 8 KB);
4. cache extern;
5. cip de marcare a zonelor de memorie cache (TAG RAM);
6. memorie RAM.
C = A mod L,
unde:
C = numărul liniei din memoria cache;
A = adresa din memoria principală;
L = numărul de linii din memoria cache.
Pentru exemplul considerat, L = 128 şi C = A mod128. Funcţia de mapare
poate fi implementată simplu, utilizând adresa de 16 biţi. Cei 3 biţi mai puţin
semnificativi, câmpul cuvânt (offset), identifică un cuvânt (octet) unic în cadrul
unui bloc al memoriei principale. Restul de 13 biţi specifică unul din cele 213 = 8
Kblocuri ale memoriei principale.
Câmpul de 7 biţi, numit linie sau index (slot), indică numărul blocului,
modulo128. Astfel, blocurile 0, 128, 256, …, 8064 vor fi amplasate în linia 0;
blocurile 1, 129, …, 8065 vor fi amplasate în linia 1, şi aşa mai departe, până la
blocurile 127, 255, …, 8191, care vor fi amplasate în linia 127.
118 ARHITECTURA SISTEMELOR DE CALCUL
Câmpul de 6 biţi, numit marcaj sau etichetă (tag), are rolul de a identifica
în mod unic blocul din linie. Astfel, blocurile 0, 128, 256, …, 8064 au numerele de
marcaj 0, 1, 2, …, respectiv 63.
Considerând din nou figura 3.40, o operaţie de citire are loc astfel. Memoriei
cache i se prezintă o adresă de 16 biţi. Numărul liniei de 7 biţi este utilizat ca un
index în memoria cache pentru accesul la o anumită linie. Dacă marcajul de 6 biţi
este egal cu marcajul liniei respective, atunci numărul de 3 biţi al cuvântului este
utilizat pentru a selecta unul din cei 8 octeţi ai liniei respective. În caz contrar,
marcajul şi numărul liniei (în total 13 biţi) se utilizează pentru a încărca un bloc din
memoria principală.
Memoria cache cu mapare asociativă
Maparea directă este o tehnică care se poate implementa simplu. Principalul
dezavantaj al acesteia este că există o locaţie fixă în memoria cache pentru oricare
bloc dat. Deci, dacă un program face referire în mod repetat la cuvinte din două
blocuri diferite care se mapează în aceeaşi linie, blocurile vor fi interschimbate în
mod continuu în memoria cache şi rata de succes va fi redusă.
O metodă care elimină dezavantajul mapării directe este maparea asociativă,
reprezentată în figura 3.41. În acest caz, adresa memoriei principale constă dintr-un
marcaj de 13 biţi şi un număr al cuvântului de 3 biţi. Un bloc din memoria principală
se poate încărca în oricare linie, iar marcajul său de 13 biţi se memorează împreună
cu blocul. Pentru a determina dacă un bloc se află în memoria cache, sunt necesare
circuite pentru a compara simultan marcajul său cu marcajele fiecărei linii.
Structura unui calculator 119
L = I J,
K = A mod I,
să includă acea parte a adreselor din memoria principală care sunt implicate în
câmpul linie (index) al memoriei cache.
Atât timp cât etichetele cache reprezintă doar câţiva biţi, ocupă spaţiu puţin,
putând fi citite şi comparate rapid. Unul dintre avantajele mapării directe este acela
că lasă loc speculaţiilor rapide şi simple. Atunci când o adresă a fost calculată, i s-a
ataşat index cache unic, care ar putea conţine datele. Noua intrare în cache poate fi
citită, iar procesorul îşi continuă lucrul cu acele date pe care le avea înainte de a
termina procesul de verificare, dacă adresa cerută se potriveşte cu eticheta actuală.
Ideea ca procesorul să folosească date depozitate în cache înainte ca eticheta
să se potrivească complet poate fi aplicată şi la cache-ul asociativ. O parte din
etichetă, numită cheie (hint), poate fi folosită pentru a alege una din adresele
cerute, aflate posibil în harta cache. Aceste date pot fi folosite în paralel cu
verificarea întregii etichete. Tehnica hint lucrează excelent când este folosită în
contextul translatării adreselor.
Alte tehnici propun un cache „oblic” (skewed cache), unde indexul căii 0
este direct, dar indexul căii 1 este format cu o funcţie hash. O funcţie hash de
calitate are proprietatea că adresele care intră în conflict cu maparea directă tind să
nu mai aibă conflicte când sunt mapate cu funcţia hash şi este mai neplăcut ca un
program să sufere din cauza unui număr neaşteptat de mare de conflicte. Pe de altă
parte, există latenţă în implementarea funcţiei hash. În plus, când trebuie încărcată
o nouă linie şi exclusă una veche, ar putea deveni dificil să se determine care dintre
liniile existente a fost ultima folosită, deoarece noua linie intră în conflict cu datele
de la diferiţi indecşi ai fiecărei căi. Metoda LRU (vezi paragraful 3.2.12.3)
urmăreşte principiul vecinătăţii (cache nears) într-un cache non-oblic (non-skewed),
împărţindu-l pe seturi. Aşadar, asociativitatea completă are un avantaj major faţă
de asociativitatea pe seturi.
H = 1 – M.
Dacă timpul de citire din memoria cache este TH (hit time), iar timpul pierdut
până se ratează este TM (miss time), atunci se poate măsura timpul mediu de acces
la memoria cache cu următoarea formulă:
T = TH H + TM M.
Se observă că timpul unei ratări (TM) nu este neapărat egal cu timpul de citire
din memoria lentă, Tl, deoarece, în cazul unei ratări, întâi trebuie constatat dacă
datele sunt în memoria cache, iar, dacă nu sunt, se accesează memoria lentă.
Memoria cache va fi eficientă dacă T < Tl.
Parametrul H depinde de mărimea memoriei cache: pentru o memorie cache
de dimensiunea memoriei lente (caz limită), toate datele pot fi ţinute în memoria
rapidă şi se va obţine H = 1. Pentru o memorie cache de dimensiune 0, H = 0,
pentru că niciodată datele nu se găsesc în această memorie. Relaţia între mărimea
memoriei cache, a memoriei lente şi parametrul H nu este o linie dreaptă, ci creşte
rapid la început, aşa cum se observă în figura 3.43. Din cauza aceasta, o memorie
cache relativ redusă ca mărime are o importanţă mare ca eficienţă.
metoda Posted Write, prin care din memoria cache este rezervată o
anumită porţiune care va juca un rol de buffer şi în care vor fi memorate
blocuri de date până când magistrala memoriei devine disponibilă,
moment în care buffer-ul îşi transferă conţinutul în RAM.
În vederea menţinerii coerenţei memoriilor cache, cu precădere în sistemele
multiprocesor, există două posibilităţi, în funcţie de procesul de scriere:
126 ARHITECTURA SISTEMELOR DE CALCUL
Write Invalidate, prin care CPU care scrie determină ca toate copiile din
celelalte memorii cache să fie invalidate înainte ca ea să-şi modifice
blocul din cache-ul propriu;
Write Broadcast, prin care CPU care pune data de scris pe magistrala
comună, spre a fi actualizate toate copiile din celelalte cache-uri.
Ambele strategii de menţinere a coerenţei pot fi asociate cu oricare dintre
metodele de scriere, dar de cele mai multe ori se preferă Write Back cu invalidare.
Tabelul 3.4
Tipuri de acces în memoria cache
Fig. 3.48. Rata de pierderi (miss rate) în funcţie de capacitatea memoriei cache.
Scratch Pad
Folosirea eficientă a spaţiului de memorie integrat în cipul procesorului
(on-chip) este extrem de importantă în aplicaţiile moderne ale sistemelor dedicate
(embedded systems), bazate pe nucleele procesoarelor. În completarea memoriei
cache de date, care realizează interfaţa cu memoria mai lentă din afara cipului
procesorului (off-chip), în diverse aplicaţii se foloseşte adesea o memorie SRAM
rapidă, de tip on-chip, numită memorie scratch pad (vezi schema din figura 2.29)
Cache integrat şi cache divizat
Memoria cache multinivel introduce un nou design al deciziilor.
Exemple. În unele procesoare, toate datele din cache-ul L1 trebuie să se
găsească undeva în cache-ul L2. Aceste memorii sunt numite cache strict inclusiv.
Alte procesoare (cum ar fi AMD Athlon) au un cache exclusiv: datele sunt
garantate a fi în cel mult unul dintre nivelurile L1 sau L2, nu în amândouă.
Totodată, alte procesoare, precum Intel PII, PIII şi P4, nu solicită ca datele din
cache-ul L1 să se găsească şi în L2, deşi ar putea face acest lucru.
Nu sunt acceptate nume universale pentru această politică intermediară, deşi
termenul inclusiv a fost deja folosit. Avantajul cache-ului exclusiv este acela că
depozitează mai multe date. Acest avantaj este cu atât mai mare, cu cât cache-ul L1
exclusiv este compatibil cu L2, caz în care se diminuează memoria L2, aceasta
fiind mai mare decât L1. Când apare o situaţie de cache miss în L1 şi cache hit în
L2 la un acces, linia din cache-ul L2 pe care se află blocul cu hit este schimbată cu
o linie din L1. Acest schimb implică ceva mai multă muncă decât copierea liniei
din L2 în L1, ceea ce o face doar cache-ul inclusiv.
Un avantaj al cache-ului strict inclusiv este că atunci când dispozitivele
externe sau alte procesoare într-un sistem multiprocesor doresc să şteargă o linie
cache, nu au decât să caute în L2. În memoria cache, ierarhiile care nu au pus în
aplicare mecanismele includerii trebuie să verifice şi cache-ul L1. În schimb, există
o corelaţie între asociativitatea cache-ului L1 şi cea a cache-ului L2: dacă cache-ul
L2 nu are cel puţin atâtea căi ca L1, asociativitatea cache-ului L1 este
restricţionată.
Cache-ul strict inclusiv foloseşte linii de dimensiuni mari în cache, ceea ce
reduce mărimea etichetelor din cache-ul secundar (cache-ul exclusiv necesită ca
ambele cache-uri să aibă linii de aceeaşi dimensiune, pentru a le putea schimba
când în L1 apare cache miss şi în L2, cache hit). Dacă cache-ul secundar este cu un
ordin de mărime mai mare şi datele sunt tot cu un ordin de mărime mai mari decât
etichetele, această zonă poate fi etichetată ca zonă de salvare şi poate fi
incrementată comparabil până la dimensiunile zonei de care au nevoie L1 şi L2 să
depoziteze date.
După cum s-a mai spus, calculatoarele puternice au un alt cache între L2 şi
memoria principală, numit cache de nivel trei (L3). Acest cache poate fi
implementat pe un chip separat de procesor şi, începând din 2004, poate varia ca
mărime de la 2 MB la câţiva GB. Beneficiile unui chip L3 depind de cererea de
acces a aplicaţiilor. Staţiile de lucru high-end şi serverele au memoria de tip L3
implementată în procesor, ceea ce duce la mărirea vitezei şi reducerea costurilor.
Structura unui calculator 131
Exemplu. Intel Xeon MP, produs numit Tulsa, are un cache L3 încorporat
de 16 MB, partajat între cele două nuclee ale procesorului.
În cele din urmă, la celălalt capăt al ierarhiei (în cazul staţiilor de lucru low-end),
registrul de fişiere al procesorului poate fi considerat drept cel mai mic şi cel mai
rapid cache din sistem, cu caracteristica de a fi programat software de un compilator,
ca şi cum ar aloca registre pentru a păstra valori primite din memoria principală.
Studiu de caz: memoria cache la procesorul AMD Athlon 64 (K8)
Pentru a exemplifica specializările cache-ului multinivel, integrat şi divizat, se
foloseşte ierarhia din nucleul K8 al procesorului AMD Athlon 64 (vezi figura 3.49).
Nucleul K8 are patru memorii cache: una pentru instrucţiuni, una pentru
blocul TLB, una pentru datele TLB-ului şi una pentru date. Fiecare dintre aceste
cache-uri este specializat:
1. Cache-ul pentru instrucţiuni păstrează cópii ale celor 64 de linii ale
memoriei şi aduce din memorie 16 B la fiecare ciclu. Fiecare octet din acest cache
este depozitat în 10 biţi în loc de 8, cu un marcaj suplimentar de bit al limitelor
instrucţiunilor (acesta este un exemplu de precodare). Cache-ul are doar protecţie
de paritate, mai degrabă decât ECC, deoarece informaţia de paritate ocupă spaţiu
mai puţin, iar datele avariate pot fi înlocuite de date proaspete aduse din memorie.
2. Instrucţiunile blocului TLB păstrează cópii ale intrărilor din tabelul
paginilor (PTE). Fiecare ciclu de instrucţiuni adus din memorie are propria sa adresă
virtuală, translatată cu ajutorul TLB-ului într-o adresă fizică. Fiecare intrare are 4 sau
8 octeţi în memorie, iar fiecare TLB este împărţit în două secţiuni: una pentru a
păstra PTE-urile care ocupă 4 KB din hartă şi alta pentru a păstra PTE-urile care
ocupă 2 sau 4 MB din hartă. Împărţirea permite o potrivire a circuitului în fiecare
secţiune în mod complet asociativ. Sistemul de operare mapează secţiuni diferite
ale spaţiului de adrese virtuale cu diferite mărimi ale PTE-urilor.
132 ARHITECTURA SISTEMELOR DE CALCUL
3. Datele TLB-ului au două cópii, care conţin intrări identice. Cele două
cópii permit accesul la două date per ciclu, pentru a translata adresele virtuale în
adrese fizice. Ca şi instrucţiunile TLB-ului, şi aceasta este împărţită în două tipuri
de intrări.
4. Datele cache-ului păstrează cópii ale celor 64 de linii ale memoriei. Este
împărţită în 8 bancuri (fiecare depozitând câte 8 KB de date) şi poate aduce din
memorie doi octeţi de date pe ciclu.
Nucleul K8 are, de asemenea, un cache multinivel. Există instrucţiuni de
nivel 2 şi date ale TLB-ului care depozitează numai PTE-uri mapate pe 4 KB.
Ambele cache-uri, de instrucţiuni şi de date, pot fi umplute din cache-ul L2. Acest
cache este exclusiv, atât pentru instrucţiunile cât şi pentru datele din L1, ceea ce
înseamnă că orice linie de 1 octet se poate găsi numai într-o singură instrucţiune
dată cache-ului L1 sau în cache-ul L2. Cu toate acestea, este posibil ca o linie de
date în cache să aibă un PTE care este într-unul din TLB-uri – sistemul de operare
este responsabil cu păstrarea TLB-ului coerent.
3.2.12.9. Concluzii
Se poate spune că introducerea în practică a conceptului de memorie cache
ca memorie tampon a adus o serie de îmbunătăţiri sistemelor de calcul, mărind
foarte mult viteza de procesare, desigur în funcţie şi de dimensiunea memoriei
cache instalate în sistem. Totuşi, se poate pune şi aici o întrebare: până unde poate
merge memoria cache ca dimensiune şi cât de folositoare este mărimea acesteia?
În ultimul timp se construiesc sisteme care pot avea pe placa de bază până la
câţiva gigaocteţi de cache extern. Dar o supradimensionare a memoriei cache
externe fără a se ţine seama de scopul în care va fi folosit calculatorul nu va duce
decât la încărcarea notei de plată (memoria cache, fiind o memorie statică, este cu
mult mai scumpă decât RAM-ul), deoarece avantajele obţinute vor fi insesizabile.
Datorită faptului că procesorul execută programele pe segmente, bucle de
program de maximum 64 KB, un astfel de segment poate fi cuprins în primii 64
KB ai memoriei cache. Deci, un spor de viteză de circa 90–95% (din totalul
sporului adus de o memorie cache montată) se va obţine folosind doar 64 KB de
memorie cache. Ridicând dimensiunea cache-ului la 256 KB se va obţine o creştere
doar de 2–3 %.
Se consideră că o memorie cache de 256 KB este suficientă pentru un
procesor Pentium, în timp ce pentru Pentium Pro este nevoie de 512 KB cache în
condiţii de lucru deosebite, iar pentru procesoarele actuale valorile de ordinul
sutelor de MB sau chiar de GB au devenit deja comune. Problema care se pune este
atunci când se lucrează în mod multitasking sau în reţea, şi unde cei 64 KB cache
de date ai unei sarcini sunt înlocuiţi de cei 64 KB ai altei sarcini, la viteze foarte
mari. În acest caz, este evident că procesorul va avea nevoie de mai multe
„depozite“ de 64 KB, pentru fiecare sarcină cel puţin două, astfel încât să crească
probabilitatea ca procesorul să-şi găsească datele necesare într-unul din aceste
„depozite“ cache, fără să fie nevoit să mai acceseze RAM-ul. De aceea, în cazul în
care calculatorul va juca rol de file server sau va fi folosit în activităţi multitasking,
este necesară mult mai multă memorie cache.
Structura unui calculator 133
Exemplu. Fie o memorie ROM care conţine 8 cuvinte de câte 4 biţi (vezi
figura 3.51.a). O combinaţie binară care se aplică pe cele 3 intrări de adresă (A2,
A1, A0) selectează unul din cele 8 cuvinte, iar cei 4 biţi de date ai cuvântului
selectat sunt disponibili la ieşiri (O0, O1, O2, O3), cu condiţia ca semnalul de
validare a ieşirii, OE (Output Enable) să fie activ (activarea se face pe 0 logic).
Dacă OE = 1, ieşirile memoriei sunt în starea de impedanţă înaltă (high Z). Tabelul
de adevăr din figura 3.51.b este un exemplu care arată o posibilitate de implementare
a 4 funcţii binare de câte 3 variabile.
Fig. 3.52. Structura internă a unui cip de memorie ROM cu 1024 cuvinte de 8 biţi.
Structura unui calculator 135
Ultimii 128 KB rezervaţi din zona de memorie superioară (vezi figura 3.53)
sunt utilizaţi de componenta BIOS de pe placa de bază. Componenta BIOS este, de
obicei, memorată în cipuri de memorie ROM. Programele din componenta ROM
BIOS controlează sistemul pe durata pornirii (până la preluarea controlului de către
sistemul de operare) şi rămân ca driver-e pentru subsistemele hard pe durata
funcţionării normale a sistemului. Deoarece aceste programe trebuie să fie
disponibile imediat, la pornirea sistemului ele nu pot fi încărcate de pe discuri (sau
alte dispozitive de memorare).
Principalele funcţii ale programelor de pe placa de bază sunt:
autotestarea la punerea sub tensiune (POST);
rutina de încărcare a sistemului de operare (bootstrap loader) – iniţiază
căutarea sistemului de operare pe discurile disponibile;
sistemul de bază pentru operaţii de intrare-ieşire (BIOS) – este interfaţa
soft sau programul principal de control pentru toate componentele hard
ale sistemului.
Acest sistem conţine un prim meniu – Standard CMOS Setup –, unde se
stabilesc tipul şi parametrii unităţilor de disc, tastaturii sau plăcii video, ora şi data
curentă a sistemului.
Un al doilea meniu – Advanced CMOS Setup – cuprinde o serie de parametri
reglabili pentru a obţine maximul de performanţă. În acest meniu, se pot activa sau
dezactiva memoria cache internă şi externă, se poate stabili o parolă de intrare în
sistem, ordinea de căutare a sistemului de operare pe disc etc.
Al treilea meniu – Advanced Chip-set Setup – conţine reglaje foarte fine de
optimizare, cum ar fi configurarea magistralelor sau a stărilor de aşteptare ale
microprocesorului.
Datorită uşurinţei cu care se poate accesa BIOS-ul, parametrii care definesc
funcţionarea generală a calculatorului pot fi modificaţi foarte simplu, dar
configurarea arbitrară a parametrilor BIOS poate produce dereglări ale sistemului.
Tot aici se poate menţiona unitatea specială MMU (Memory Management
Unit), care se ocupă cu transferul conţinutului memoriei ROM (cel de pe placa de
bază: ROM-ul de sistem, ROM-ul video, segmentele ROM ale unor adaptoare sau
extensii) în memoria de lucru RAM. Este un dispozitiv integrat în microprocesor.
Această posibilitate de transfer a rutinelor şi datelor ROM în RAM ridică
foarte mult performanţele sistemului, deoarece timpul de acces al memoriei ROM
este foarte mare (150–200 ns) şi operaţiile care implică folosirea conţinutului ROM
se desfăşoară lent. Activarea opţiunilor de transfer (shadowing) se face din meniul
BIOS Features Setup din CMOS, prin activarea punctelor de Shadow definite de
adrese specificate (System Shadow, Video Shadow etc.). MMU va dezactiva
automat toate cartuşele ROM al căror conţinut a fost citit şi scris apoi în RAM, iar
în continuare va marca aceste zone de memorie RAM în care s-a transferat
conţinutul ROM, protejându-le.
Legătura memoriei ROM cu exteriorul se face prin magistrala de adrese,
corespunzătoare pinilor notaţi cu A0÷Am (pentru detectarea locaţiei care conţine
informaţia cerută) şi magistrala de date, pentru transferul datelor, prin pinii notaţi
cu D0÷Dn, în funcţie de numărul de pini al cipului respectiv.