Documente Academic
Documente Profesional
Documente Cultură
ARHITECTURA
SISTEMELOR DE CALCUL
ediţia a IV-a
revizuită și completată
004
1. Introducere 11
1.1. Limbaje şi maşini virtuale 13
1.2. Calculatoarele actuale – calculatoare multinivel 14
1.3. Etapele evoluţiei arhitecturii calculatoarelor 16
1.3.1. Generaţia 0: calculatoarele mecanice (1642-1944) 16
1.3.2. Prima generaţie: tuburile cu vid (1945-1955) 17
1.3.3. A doua generaţie: tranzistoarele (1956-1965) 18
1.3.4. A treia generaţie: circuitele integrate (1965-1980) 19
1.3.5. A patra generaţie: circuitele VLSI (după 1980) 20
1.3.6. A cincea generaţie: prezent şi viitor (după 1990/2010) 20
1.4. Categorii de calculatoare (după destinaţie) 25
1.4.1. Exemple de familii de calculatoare 26
1.4.2. Spectrul sistemelor de calcul 27
2. Tipuri de arhitecturi 29
2.1. Clasificarea arhitecturii sistemelor de calcul 29
2.1.1. Clasificarea Flynn 29
2.1.1.1. Arhitectura SISD 29
2.1.1.2. Arhitectura SIMD 30
2.1.1.3. Arhitectura MISD 33
2.1.1.4. Arhitectura MIMD 33
2.1.1.5. Sisteme cu memorie partajată (shared memory) 35
2.1.1.6. Sisteme fără memorie partajată (shared nothing) 41
2.1.2. Clasificarea Wang 42
2.1.3. Clasificarea Tanenbaum 43
2.2. Structura fizică a unui calculator secvenţial 43
2.2.1. Structuri de calculatoare paralele 45
2.2.1.1. Calculatoare pipeline 45
2.2.1.2. Calculatoare matriceale 47
2.2.1.3. Calculatoare multiprocesor 48
2.2.2. Mecanisme de prelucrare paralelă 49
2.2.2.1. Soluţii hardware de prelucrare paralelă 49
2.2.2.2. Soluţii software de prelucrare paralelă 56
2.3. Categorii de calculatoare mari 62
2.3.1. Mainframe-uri 62
2.3.2. Supercalculatoare 63
2.3.3. Servere 65
2.3.4. Cluster-e 66
2.3.6. Centre de date 66
2.4. Exemple de arhitecturi 67
2.4.1. Arhitecturi uniprocesor 67
8 ARHITECTURA SISTEMELOR DE CALCUL
Limbajul şi maşina virtuală sunt într-o relaţie foarte limitată. Orice maşină
prin limbajul său formează un ansamblu de instrucţiuni de bază pe care le poate
executa. Se poate spune deci că o maşină defineşte un limbaj. Reciproc, un limbaj
defineşte o maşină şi, mai precis, un limbaj defineşte maşina care poate executa
toate programele scrise în acel limbaj. Desigur, maşina definită printr-un limbaj
oarecare poate fi extraordinar de complexă şi cu un cost prohibitiv. Dar, cu toate
acestea, ea poate exista, aşa cum se poate observa în figura 1.2.
Cea mai mare parte a calculatoarelor actuale au mai mult de două niveluri.
Predomină foarte mult calculatoarele care au curent 6 niveluri (vezi figura 1.3). La
primul nivel (nivelul „subteran” –1), se află logica cablată (nereprezentat în figură).
Cea mai mare parte a vechilor calculatoare utilizate în trecut a ieşit astăzi din
uz, ajungând piese de muzeu. Cu toate acestea, au existat câteva maşini automate
care au avut un rol important în evoluţia calculatoarelor. Pentru acestea se vor
analiza în continuare câteva din principalele caracteristici.
Au urmat apoi alte asemenea maşini, dintre care poate fi amintită prima
maşină analitică, inventată de Charles Babbage în 1834, la Cambridge. Aceasta
cuprindea patru părţi: memoria (magazia), unitatea de calcul, intrarea (cititorul de
cartele perforate) şi ieşirea. Memoria dispunea de 1.000 de cuvinte de 50 de cifre
zecimale, care puteau fi utilizate pentru stocarea variabilelor şi rezultatelor. Unitatea
de calcul prelua operanzii proveniţi din memorie, făcea diverse operaţii asupra lor
(adunare, scădere, înmulţire, împărţire) şi întorcea rezultatul tot în memorie. Toate
aceste blocuri erau în întregime mecanice.
Marea noutate a acestei maşini consta în faptul că putea citi instrucţiuni de
pe cartelele perforate şi apoi le putea trata. Unele instrucţiuni puteau comanda
maşinii să preia doi operanzi din memorie, să efectueze o operaţie asupra lor şi să
trimită rezultatul în memorie. Unul dintre cei mai apropiaţi colaboratori ai lui
Babbage a fost Ada Augusta Lovelace, nepoata poetului romantic Lord Byron,
considerată ca fiind prima femeie programator din lume. În onoarea ei, unuia dintre
limbajele de nivel înalt din anii 1970 i-a fost atribuit numele său: Ada.
Procesul a continuat până în anul 1944, când Howard Aiken a construit
prima maşină electronică, Mark I, care avea 72 cuvinte a 23 cifre zecimale şi un
ciclu maşină de 6 secunde. A urmat îndeaproape succesoarea sa, Mark II. Se poate
afirma că, practic, era electronicii începuse.
Această etapă este cea în care încep să apară primele calculatoare personale
(PC), acest lucru fiind posibil datorită unor factori decisivi:
perfecţionarea tehnologiei VLSI (Very Large Scale Integration);
dezvoltarea reţelelor de calculatoare;
diversitatea mare de modele de arhitecturi;
apariţia conceptelor de multimedia şi de programare orientată pe obiecte.
Un pas important în această etapă a fost reprezentat de apariţia primelor
calculatoare personale realizate de firma IBM în colaborare cu Intel. Au rezultat
câteva modele care au avut o mare priză la public, dintre care IBM PS1, PS2. Un
alt mare consorţiu format din Apple şi Motorola scoate pe piaţă modelele
MacIntosh 68000, 68040. Trebuie remarcat faptul că toate aceste modele erau
calculatoare personale, deci accesibile ca preţ persoanelor fizice.
Caracteristicile computerelor din a patra generaţie:
Folosirea de unităţi centrale de prelucrare (CPU) cu mii de tranzistoare;
Introducerea de microprocesoare produse prin tehnologia VLSI;
Mult mai mici decât a treia generaţie, modele: desktop, laptop, palmtop;
Folosirea unui mouse;
Utilizarea în reţele de calculatoare;
Mai ieftine decât generaţia a treia;
Introducerea interfeţelor grafice pentru utilizatori (GUI);
Foarte rapide, în comparaţie cu generaţiile precedente;
Peste 19 miliarde de tranzistoare în microprocesoarele de top (Super VLSI),
faţă de 2.300 la Intel 4004.
An Nume Subiect
1642 Blaise Pascal Prima maşină de calculat mecanică
Maşina analitică de la Cambridge,
1834 C. Babbage
cu instrucţiuni pe cartelă perforată
1904 J.A. Flemming Dioda
1906 L. De Forest Trioda
1936 K. Zuse Primul calculator cu relee, Berlin
Guvernul britanic,
1943 Primul calculator electronic cu tuburi cu vid, Colossus
cu concursul lui A. Turing
Primul calculator american, Mark 1,
1944 H. Aiken
începutul erei electronicii
Eniac, Universitatea Pennsylvania: debutul primei
1946 J. Mauchly şi J.P. Eckert
generaţii de calculatoare (tuburi cu vid)
J. Bardeen, W. Shockley,
1948 Tranzistorul
W. Brattain
1948 N. Wiener Cibernetica
M. Wilkes, cu arhitectură
1949 Primul calculator cu program înregistrat, EDSAC
von Neumann
1951 MIT Primul calculator în timp real, Whirlwind
1951 J. Mauchly şi J.P. Eckert Primul calculator comercializat, Univac 1
Calculatorul IAS (Princeton) răspândeşte
1952 J. von Neumann
arhitectura de bază von Neumann
1955 Laboratoarele Lincoln Primul calculator echipat cu tranzistoare, TX 0
1956 Firma IBM Calculatorul IBM 704
1960 Circuitele integrate (CI)
Primul minicalculator, PDP-1; începutul generaţiei a
1960-
Firma DEC doua de calculatoare (cu tranzistoare) şi a mini-
61
informaticii
1961 Firma IBM Maşina de gestiune 1401
Primul calculator ştiinţific puternic (36 de biţi),
1962 Firma IBM
IBM 7094
Calculatorul B 5000, primul calculator dedicat unui
1963 Firma Borroughs
limbaj de programare de nivel înalt: Algol 60
Prima familie de calculatoare, IBM 360;
1964 Firma IBM multiprogramare, IBM preia supremaţia în informatică;
începutul generaţiei a treia de calculatoare (CI)
1964 Firma CDC Primul supercomputer ştiinţific, 6600
Introducere 23
1965 Firma DEC Primul minicalculator produs în masă (12 biţi), PDP-8
Minicalculatorul PDP-11 cu producţie de masă,
1970 Firma DEC
DEC preia supremaţia în mini-informatică
1970 Circuite integrate pe scară largă (VLSI)
1971 Firma Intel Primul microprocesor de 4 biţi, 4004
1972 Firma Intel Primul microprocesor de 8 biţi, 8008
1974 Firma Cray Primul supercomputer vectorial, Cray-1
1974 Firma Intel Microprocesorul 8080, prima unitate centrală pe un cip
1978 Firma Intel Primul microprocesor de 16 biţi, 8086
1978 Firma DEC Primul superminicomputer de 32 biţi, VAX
1979 Firma Motorola Primul procesor al familiei 680X0, 68000
1980 Era calculatoarelor personale (PC):
Firma IBM
1981 începutul generaţiei a patra de calculatoare (VLSI)
1981 Firma Osborne Primul calculator portabil, Osborne-1
1982 Firma Intel Microprocesorul de 16 biţi, 80286
1983 SUA Tehnologia LAN este folosită pe scară largă
1983 Firma Apple Primul PC cu interfaţă grafică de utilizator (GUI): Lisa
1984 Firma Motorola Primul microprocesor de 32 biţi, 68020
1985 Firma Intel Primul microprocesor Intel de 32 biţi, 80386
1985 Firma MIPS Primul calculator RISC comercial, MIPS
1985 Firma Xilinx Primul FPGA
Microprocesorul de 32 biţi cu unitate
1987 Firma Motorola
de gestiune a memoriei, 68030
1987 Firma Sun Prima staţie de lucru (workstation) RISC, SPARC
Microprocesorul de 32 biţi cu coprocesor
1989 Firma Intel
şi memorie cache, 80486
1989 Firma Grid Systems Primul computer-tabletă comercial, GridPad
1990 Firma IBM Prima maşină superscalară, RS6000
1990 Prelucrarea masiv paralelă, CM2 şi CM5:
Firma Thinking Machines
1991 începutul generaţiei a cincea de calculatoare
Laboratorul CERN, Serviciul de informaţii WWW
1992
Geneva (World Wide Web), oferit pe Internet
1992 Firma DEC Primul PC de 64 biţi, Alpha
1992 Firma IBM Primul smartphone, Simon
1993 Firma Intel Microprocesorul cu structură superscalară, Pentium
1993 Firma Apple Primul computer-palmtop (PDA), Newton
Sistemul masiv paralel cu memorie partajată distribuit
1993 Firma Cray Research
(DSM), Cray/MPP
1995 Firma Sun Microsystems Interactivitatea serviciului WWW prin tehnologia Java
Microprocesorul cu arhitectură superpipeline,
1996 Firma Cyrix
686 P200+
1997 Firma AMD Microprocesoarele RISC K5, K6
1998 Firma AMD Microprocesorul K6-2 3D
1998 Firma Intel Microprocesorul Mendocino
1999 Firma Intel Microprocesorul Pentium III
1999 Firma AMD Microprocesorul Athlon/K7
2000 Firma AMD Microprocesorul Sharptooth/K6-3
24 ARHITECTURA SISTEMELOR DE CALCUL
A. Calculatoare dispensabile
Carduri de acces/securitate
Cipuri ID: RFID (Radio Frequency ID)
B. Microcontrolere
ARM/AVR
C. Calculatoare mobile şi pentru jocuri
Tablete, smartphones, smartwatches etc.
PlayStation
Computere multimedia/VR
D. Calculatoare personale (PC)
E. Mainframe-uri
F. Supercalculatoare
G. Servere
Cluster-e
COTS (Commodity Off The Shelf)
Centre de date (Data Centers)
Cloud computing
Pe parcursul lucrării se va reveni asupra celor mai importante dintre
categorii. Industria computerelor are o dinamică deosebit de mare, în comparaţie cu
orice alt domeniu. Forţa ei motrice stă în capacitatea producătorilor de circuite
integrate de a încorpora din ce în ce mai multe tranzistoare pe cip în fiecare an. Mai
multe tranzistoare înseamnă memorii mai mari şi procesoare mai puternice.
Gordon Moore, co-fondator şi fost preşedintele Intel, a glumit odată spunând
că dacă tehnologia aviatică ar fi avansat la fel de repede ca tehnologia informatică,
un avion ar costa 500 de dolari şi ar înconjura Pământul în 20 de minute, cu un
singur litru de combustibil. Cu toate acestea, avionul ar fi, conform tendinţei de
miniaturizare din industria IT, de dimensiunea unei cutii de pantofi.
În timp ce pregătea un discurs pentru un grup industrial, Moore a observat că
fiecare nouă generaţie de cipuri de memorie a fost introdusă la 3 ani după cea
anterioară. Deoarece fiecare nouă generaţie avea de patru ori mai multă memorie
decât predecesoarea sa, a realizat că numărul de tranzistoare pe un cip a fost în
creştere cu o rată constantă pe an şi a prezis că această creştere va continua timp de
decenii. Această observaţie a devenit cunoscută sub numele de legea lui Moore,
fiind o expresie a forţelor tehnico-economice care acţionează în industria IT.
Legea lui Moore pentru cipuri de memorie se poate formula astfel (vezi
figura 1.6): dublarea numărului de tranzistoare are loc la fiecare 18 luni (66%/an).
Consecinţa legii lui Moore este aşa-numitul „cerc virtuos”:
Progresul tehnologic (numărul de tranzistoare/cip) duce la produse mai bune
şi la preţuri mai mici. Preţurile scăzute stimulează noi aplicaţii, care conduc la
apariţia de noi pieţe de desfacere şi de noi companii, care profită de pe urma
acestora. Existenţa companiilor creează concurenţă, care, la rândul ei, generează
cerere economică pentru tehnologii superioare/competitive. Astfel cercul se închide.
26 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 1.6. Reprezentarea grafică a legii lui Moore pentru cipuri de memorie [71].
În cazul arhitecturii x86, legea lui Moore se poate extinde pentru cipurile
CPU Intel, aşa cum se poate observa în figura 1.8. Legea lui Moore se poate aplica
pentru cipurile microprocesoarelor construite şi de alte firme (de exemplu, AMD).
Introducere 27
Fig. 1.8. Reprezentarea grafică a legii lui Moore pentru cipurile CPU Intel [71].
B. Arhitectura ARM
Microcontrolerele din familia ARM (Advanced RISC Machines) fac parte
din categoria high-end, iar un exemplu reprezentativ este arhitectura Nvidia Tegra
2 system-on-a-chip (2011) [71].
C. Arhitectura AVR
Microcontrolerele din familia AVR (Atmel/Microchip Technology) fac parte
din categoria low-end, acestea putând fi clasificate, la rândul lor, în trei clase, aşa
cum se observă în figura 1.9.
Fig. 1.10. Gama computerelor disponibile în prezent, costurile fiind orientative [71].
2. TIPURI DE ARHITECTURI
Caracteristici:
instrucţiunile sunt executate serial, însă pot exista suprapuneri în
execuţie (pipeline). Majoritatea structurilor SISD rămase astăzi în uz
folosesc structuri pipeline.
30 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.3. Exemplu de arhitectură SIMD: nucleul de la GPU Fermi (Nvidia) [71].
Caracteristici:
fiecare UC lucrează cu şirul de instrucţiuni propriu SI1, ..., SIn;
fiecare UP lucrează cu acelaşi şir de date, care suportă mai multe prelucrări;
partajare pe orizontală (un singur şir de date, mai multe şiruri de instrucţiuni);
ieşirea de la UP1 devine intrare pentru UP2 ş.a.m.d.
Structura se numeşte macro-pipeline (are doar o valoare teoretică).
Fig. 2.6. Exemple de sisteme MIMD cu cuplaj strâns/slab: (a) paralelism pe cip,
(b) coprocesor, (c) multiprocesor/multinucleu, (d) multicalculator/reţea, (e) grid [71].
Tipuri de arhitecturi 35
din acest motiv, timpul de acces la memorie este neuniform. Explicaţia este aceasta:
accesul la datele aflate în memoria locală este foarte rapid, în timp ce accesul la
datele aflate în memoria locală a altor elemente de procesare va fi mult mai lent, din
cauza faptului că datele respective vor fi transportate prin reţeaua de comunicaţie.
Fig. 2.14. (a) Arhitectura sistemelor multiprocesor; (b) Arhitectura reţelei crossbar (multistage).
O schemă funcţională a unui CPL este ilustrată în figura 2.20, în care există
două structuri pipeline: una pentru date scalare şi una pentru date vectoriale. Faza
de încărcare a operaţiilor este divizată în două subfaze independente, corespunzătoare
operării cu scalari sau cu vectori. Faza de execuţie se desfăşoară în două procesoare
distincte, asociate scalarilor sau vectorilor.
Tehnica pipeline
Execuţia unei instrucţiuni este privită ca fiind alcătuită din mai multe faze
(sau stagii), care se succed una după alta şi care pot fi tratate de unităţi specializate,
într-un mod asemănător funcţionării unei linii de asamblare (de ex.: de automobile).
Fig. 2.21. Exemplu de şir de procese la execuţia unei instrucţiuni şi desfăşurarea lor în timp.
Tipuri de arhitecturi 47
Exemplu. Fie un şir de procese care are loc la execuţia unei instrucţiuni. Se
presupune că de fiecare din aceste procese se ocupă o unitate specializată. Când se
atinge al cincilea impuls de ceas, la toate cele cinci procese se lucrează în paralel;
astfel se măreşte de cinci ori viteza de execuţie. În faza încadrată, instrucţiunea 5
este în faza de încărcare, instrucţiunea 4 în faza de decodare etc.
Problema este că începând din momentul de timp încadrat poate să apară
fenomenul de strangulare, pentru că una sau mai multe instrucţiuni aflate între P1
şi P5 pot să nu fie instrucţiuni utile (de exemplu, instrucţiuni de salt). Deşi există un
paralelism în execuţia instrucţiunilor, aceasta este o maşină pipeline de tip SISD.
Fig. 2.27. Exemplu de arhitectură superscalară cu trei unităţi pipeline în paralel [71].
52 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.28. Exemplu de structură superscalară cu pipeline dual (5 stagii cu unitate IF comună) [71].
Fig. 2.29. Exemplu de procesor superscalar cu 5 stagii şi 5 blocuri pipeline la stagiul S4 [71].
Fig. 2.30. Modul de operare al tehnicilor pipeline (a), superpipeline (b) şi superscalară (c).
Fig. 2.32. Sistem ierarhizat de memorie fizică cu 5 niveluri, vârful piramidei indicând
poziţia microprocesorului (capacitatea şi timpul de acces cresc de sus în jos) [71].
Exemple:
un program conţine bucle care presupun execuţia repetitivă a aceleiaşi
secvenţe de instrucţiuni;
execuţia instrucţiunilor este, în majoritatea cazurilor, secvenţială
(succesiunea în execuţie), excepţie făcând instrucţiunile de salt;
secvenţa de program (procedura) utilizează repetitiv aceeaşi variabilă sau
adresează repetat elemente ale unei structuri de date (tablouri, înregistrări).
Concluzie. Statistic s-a constatat că pentru majoritatea programelor este
valabilă următoarea regulă: 90% din timpul afectat unui program este utilizat
pentru execuţia a numai 10% din codul acestuia. Pe baza acestor observaţii,
informaţiile pot fi amplasate în mod dinamic pe diferite niveluri ierarhice ale
memoriei, în funcţie de probabilitatea de a fi utilizate.
Multiprogramarea
În acelaşi interval de timp pot exista mai multe programe (procese) active în
sistemul de calcul, concurând pentru memorie, I/O şi CPU. Totuşi, unele programe
sunt orientate către calcule (utilizând intens CPU), în timp ce altele sunt orientate
către citirea/scrierea dispozitivelor I/O. Se pot astfel organiza (intercala) cele două
clase de programe pentru a obţine un timp de prelucrare global cât mai bun. În
figura 2.33.b, câştigul de timp este notat cu Δ.
Intercalarea programelor permite utilizarea mai eficientă a resurselor
calculatorului prin suprapunerea operaţiilor I/O cu operaţiile CPU. Acest mod de
organizare este gestionat de sistemul de operare (programul de supervizare). Astfel,
multiprogramarea se poate defini ca intercalarea operaţiilor CPU cu operaţii I/O
pentru mai multe programe.
Observaţii.
1. P1, P2 şi P3 pot aparţine aceluiaşi program sau unor programe diferite.
2. În cadrul multiprogramării, se poate întâmpla ca un proces cu prioritate
mare să ocupe CPU un timp îndelungat şi în acest fel se împiedică
execuţia altor procese. Neajunsul se poate înlătura folosind un sistem de
operare cu divizare în timp.
Diviziunea în timp (time sharing)
Diviziunea în timp reprezintă împărţirea timpului de execuţie al CPU între
toate procesele (task-urile) active din sistemul de calcul. Cuantele de timp alocate
fiecărui proces pot fi egale (cu proces dominant) sau inegale de la un proces la altul
(proporţionale cu etapele de calcul ale proceselor, deci fără proces dominant).
Dacă există proces dominant, viteza de prelucrare poate creşte astfel, mai
mult decât în cazul multiprogramării, doar pentru procesele care urmează celui
dominant ca durată a etapelor de calcul (vezi cazul particular din figura 2.34).
C = TP p
Multithreading on-chip
Fie thread-urile (firele de execuţie) A, B şi C, care conţin cicluri de
aşteptare, din cauza întârzierilor memoriei, a dependenţei de rezultatele anterioare
sau a salturilor condiţionate (vezi figura 2.35, a, b şi c).
Noţiunea de multithreading on-chip permite CPU să gestioneze mai multe
fire simultan, în încercarea de a masca aceste pauze. Pe scurt, dacă firul 1 este
blocat, CPU are posibilitatea de a rula firul 2, în scopul de a menţine resursele
hardware complet ocupate.
Granulaţia fină maschează pauzele prin rularea circulară a firelor, cu fire
diferite în fiecare ciclu succesiv. Dacă numărul ciclurilor de aşteptare din fiecare fir
este mai mic decât numărul firelor în paralel, atunci pauzele sunt eliminate.
Tipuri de arhitecturi 61
Fig. 2.35. Exemplu de aplicare pentru multithreading on-chip: (a), (b), (c) trei thread-uri;
(d) multithreading de granulaţie fină; (e) multithreading de granulaţie brută [71].
În exemplul din figura 2.35 d, pauzele din fire nu durează mai mult de două
cicluri, iar numărul firelor în paralel este trei, deci execuţia are loc întotdeauna la
timp (fără pauze).
Granulaţia brută rulează un fir până apare un ciclu de aşteptare, după care
comută la firul următor. Este mai puţin eficientă decât granulaţia fină (poate admite
un ciclu de pauză înainte de comutarea între fire), dar funcţionează mai bine decât
aceasta atunci când condiţia anterioară nu mai este îndeplinită.
În exemplul din figura 2.35 e, numărul ciclurilor de aşteptare din fire (două)
nu este mai mare decât numărul firelor în paralel (trei), deci există pauze.
Fig. 2.36. Exemplu de multithreading on-chip pe un CPU superscalar dual (cu două
pipeline-uri): (a) granulaţie fină; (b) granulaţie brută; (c) multithreading simultan [71].
Fig. 2.37. Exemplu de hyperthreading cu partajarea resurselor între două thread-uri (alb/gri)
în microarhitectura Intel Core i7 (Sandy Bridge) [71].
2.3.1. Mainframe-uri
În cea mai mare parte, mainframe-urile nu sunt mult mai rapide decât
serverele puternice, dar au întotdeauna o capacitate de intrare/ieşire mai mare şi
sunt adesea echipate cu un discuri extrem de vaste, care deţin mii de gigaocteţi de
date. Cu toate că sunt scumpe, au continuat să funcţioneze datorită investiţiilor
imense în software, date, proceduri de operare şi personal de operare. Multe
companii consideră că este mai ieftin de plătit „doar” câteva milioane de dolari din
când în când pentru unul nou decât chiar luarea în considerare a efortului necesar
reprogramării tuturor aplicaţiilor lor pentru maşini mai mici.
Aceasta este categoria de calculatoare care a condus la infama problemă
Y2K (a anului 2000), cauzată de programatorii (mai ales în COBOL) din anii 1960
şi 1970, care au reprezentat anul cu două cifre zecimale (pentru a economisi
memorie). Aceştia nu şi-au imaginat niciodată că software-ul lor va dura trei sau
patru decenii. În timp ce dezastrul prezis nu a mai avut loc niciodată datorită unei
cantităţi uriaşe de muncă depusă pentru rezolvarea problemei, multe companii au
repetat aceeaşi greşeală prin adăugarea în continuare a încă două cifre pentru an.
Specialiştii prezic acum sfârşitul civilizaţiei umane exact la miezul nopţii de 31
decembrie 9999, atunci când toate programele COBOL, vechi de peste 8000 de ani
la acea dată, se vor prăbuşi simultan.
În plus faţă de utilizarea lor pentru a rula software vechi de 40 de ani,
Internetul a adus un suflu nou pentru mainframe. Mainframe-urile şi-au găsit o
nouă nişă de utilizare ca servere puternice de Internet, de exemplu, prin
manipularea unui număr mare de tranzacţii e-commerce pe secundă, în special, în
companii cu baze de date uriaşe.
2.3.2. Supercalculatoare
2.3.3. Servere
2.3.4. Cluster-e
Aceasta conţine:
CPU – unitatea centrală de prelucrare, care include:
o R0, ..., R15 = 16 registre generale a câte 32 biţi fiecare;
o PC = contorul de program (program counter);
o ALU = unitatea aritmetică şi logică;
o ML = memoria locală;
MD = memorie de diagnoză;
68 ARHITECTURA SISTEMELOR DE CALCUL
Fereastra de instrucţiuni. Deoarece partea din spate este mult mai lată
decât a predecesorilor, buffer-ul de reorganizare (Reorder Buffer, ROB) a crescut la
96 de intrări, de la 40 cât avea Pentium M, iar staţia de rezervare (Reservation
Station, RS) a fost mărită. Fereastra de instrucţiuni a fost mărită nu numai fizic
(ROB+RS), ci şi virtual. Macro-fuziunea şi micro-operaţiile (descrise anterior),
permit lui Intel Core să reţină mai multe instrucţiuni cu un număr mai mic de resurse.
Fig. 2.52. Structura hardware pentru decodarea instrucţiunilor din arhitectura Intel Core.
Tipuri de arhitecturi 81
având în total, în sistem, patru nuclee CPU. Aceste două CPU-uri sunt
interconectate printr-o magistrală coerentă dedicată tehnologiei HyperTransport.
În CPU-urile quad-core de la Intel, nucleele sunt organizate în perechi.
Nucleele fiecărei perechi pot interschimba informaţii direct (la fel se întâmplă la
AMD dual-core şi la Intel Core 2 Duo), dar pentru a schimba informaţii cu unul
dintre nucleele localizate în cealaltă pereche trebuie să acceseze magistrala externă
a CPU, ceea ce se întâmplă pe platforma Quad FX, unde CPU-urile comunică între
ele folosind magistrala externă coerentă HyperTransport.
Diferenţa dintre platforma Quad FX şi arhitectura utilizată de către
procesoarele Intel quad-core se poate remarca în figurile 2.55 şi 2.56.
Comparând cele două arhitecturi, se poate observa că platforma Quad FX
deţine un avantaj în ceea ce priveşte accesul la memorie. Magistrala externă a
CPU-ului Intel quad-core (Front Side Bus, FSB) este utilizată pentru a accesa
memoria RAM şi alte dispozitive prezente pe PC, precum şi pentru comunicarea
între perechile de nuclee, cu viteze de până la 8 GB/s.
Pe platforma Quad FX, CPU-urile folosesc un canal de comunicaţie dedicat
(magistrala coerentă HyperTransport), care transferă date cu până la 4 GB/s în
fiecare direcţie. Magistrala HyperTransport oferă două canale de comunicaţie, câte
unul pentru fiecare direcţie. În procesoarele AMD, controlerul de memorie este
încorporat în CPU şi, ca urmare, memoria este accesată utilizând o magistrală
dedicată, separat de canalul folosit de către CPU pentru a accesa restul PC-ului.
Datorită faptului că platforma Quad FX foloseşte o arhitectură de
multiprocesare simetrică, fiecare CPU îşi accesează propria memorie RAM.
Procesoarele utilizate pe platforma Quad FX pot accesa, de asemenea, memoria
controlată de un alt CPU.
Fig. 2.57. Arhitectura Intel Core i7-3960X, de 21×21 mm, cu 2,27 miliarde tranzistoare.
Tipuri de arhitecturi 85
Seria Intel Core a continuat să evolueze, cu variantele i7, i5, i3, i9, acestea
fiind microprocesoarele multinucleu pentru calculatoare de performanţă medie şi
înaltă. O imagine a variantei i7 (2011) este prezentată în figura 2.57.
Intel a lansat şi variante superioare, dar în versiunea Xeon apar integrate opt
nuclee, fiecare având propriile sale memorii cache de nivel 1 şi 2, dar există, de
asemenea, o memorie cache comună de nivel 3 (L3), utilizată de toate nucleele.
AMD FX
AMD rămâne fidel filosofiei sale de proiectare a procesoarelor multinucleu
şi în cazul modelului octa-core AMD FX, în care modul de operare al arhitecturii
superscalare este orientat pe perechi de nuclee Bulldozer, aşa cum se observă în
figura 2.58, în care se disting patru căi de date pipeline independente. Paralelismul
la nivelul ALU se reflectă prin separarea calculelor cu întregi şi în virgulă mobilă,
dar şi prin contopirea operaţiilor de adunare şi înmulţire pe 128 de biţi.
Fig. 2.58. Arhitectura AMD FX octa-core cu 4 module, bazată pe nucleul Bulldozer [71]:
FMAC = Fused Multiply–Add Capability (contopirea operaţiilor de şi pe 128 de biţi),
FP = Floating Point, NB = Northbridge, Scheduler = planificator de operaţii (Integer/FP)
Fig. 2.59. Arhitectura de multiprocesare omogenă pe un singur cip la Intel Core i7 [71].
Funcţiile nucleelor din schemă sunt diferite, fiecare fiind conceput cu grijă să
fie extrem de bun pentru ceea ce face, la cel mai mic preţ posibil.
De exemplu, semnalul DVD video este comprimat utilizând o schemă
cunoscută sub numele de MPEG-2. Arhitectura sistemului conţine cipuri
multiprocesor eterogene cu nuclee multiple, special concepute pentru aplicaţii
audio-video. Cu toate acestea, pentru că procesorul de control este un CPU
programabil de uz general, cipul multiprocesorului poate fi, de asemenea, utilizat în
alte aplicaţii similare, cum ar fi un DVD recorder. Similar se procedează şi în cazul
unui smartphone avansat.
Pe lângă proiectarea procesoarelor şi a sistemului de memorie, o altă
problemă care trebuie rezolvată este proiectarea sistemul de comunicaţie între toate
aceste nuclee. Pentru sisteme mici, o singură magistrală este, de obicei, de ajuns,
dar pentru sisteme mai mari aceasta devine rapid un obstacol. Adesea, problema
poate fi rezolvată trecând la mai multe magistrale sau, eventual, la o reţea inel între
nuclee. În ultimul caz, arbitrajul este realizat prin trecerea unui mic pachet, numit
token, de-a lungul reţelei inel. Pentru a transmite, un nucleu trebuie mai întâi să
prindă tokenul. La terminarea transmisiei, nucleul pune tokenul înapoi pe reţeaua
inel, pentru ca acesta să-şi continue circulaţia.
Acest protocol previne coliziunile în inel. Ca exemplu de interconectare pe
cip, se poate lua în considerare modelul IBM CoreConnect, ilustrat în figura 2.61.
Fig. 2.61. Arhitectura IBM CoreConnect de multiprocesare eterogenă cu trei magistrale [71].
Fig. 2.62. (a) Arhitectură multiprocesor cu 16 CPU şi memorie partajată global (GSM);
(b) Imagine partiţionată în 16 secţiuni, analizate de CPU diferite [71].
Două procese pot comunica pur şi simplu prin faptul că unul dintre ele scrie
date în memorie, iar celălalt le citeşte. Capacitatea a două (sau mai multe) procese
de a comunica doar prin accesarea memoriei (citire şi scriere) este motivul pentru
care multiprocesoarele sunt foarte populare. Este un model uşor de înţeles pentru
programatori şi este aplicabil la o gamă largă de probleme.
Fie, de exemplu, un program care inspectează o imagine bitmap şi listează
toate obiectele din aceasta. O copie a imaginii este păstrată în memorie, aşa cum se
arată în figura 2.62 b. Fiecare dintre cele 16 CPU rulează un singur proces, căruia i-
a fost atribuită una din cele 16 secţiuni din memorie pentru a o analiza. Cu toate
acestea, fiecare proces are acces la întreaga imagine, ceea ce este esenţial, deoarece
unele obiecte pot ocupa mai multe secţiuni. Dacă un proces descoperă că unul
dintre obiectele sale se extinde peste o limită a secţiunii, atunci urmează obiectul în
secţiunea următoare prin citirea cuvintelor din acea secţiune.
În acest exemplu, unele obiectele vor fi descoperite prin mai multe procese,
deci este necesară la final o anumită coordonare între procese (un grad de cuplaj
între procesoare), pentru a determina cât de multe case, copaci şi avioane există.
90 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.63. (a) Arhitectură multicalculator cu 16 CPU şi memorie partajată distribuit (DSM);
(b) Imagine divizată între cele 16 memorii locale asociate CPU [71].
Fig. 2.64. Arhitectura cipului pentru nodul de bază IBM BlueGene/P [71].
Acesta se compune din patru nuclee PowerPC 450, care rulează la 850 MHz.
PowerPC 450 este un procesor superscalar dual, popular în embedded systems.
Fiecare nucleu are o pereche de unităţi duale de calcul în virgulă mobilă (FPU),
care împreună pot rula patru instrucţiuni în virgulă mobilă pe ciclu de ceas.
Unităţile FPU au fost augmentate cu o serie de instrucţiuni de tip SIMD utile în
domeniul ştiinţific pentru calcule matriceale. După performanţă, acest cip nu este
un multiprocesor de top.
Pe cip există trei niveluri de memorie cache. Primul constă într-o divizare a
nivelului L1 în cache de instrucţiuni şi cache de date (arhitectură Harvard), ambele
având 32 KB.
Al doilea nivel este o memorie cache unificată de 2 KB (L2). Memoria L2
este mai degrabă un buffer de prefetch decât un cache autentic, comunicaţia între
cele patru blocuri L2 realizându-se prin modul snoop. Al treilea nivel (L3) este un
cache unificat de 4 MB, care furnizează date pentru L2.
94 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 2.65. IBM BlueGene/P: (a) cip; (b) card; (c) placă; (d) cabinet; (e) sistem [71].
Un set de opt plăci este conectat într-un backplane şi introdus într-un sertar
(cage) de carduri. Fiecare cabinet deţine trei sertare de carduri, având în total 96 de
procesoare Opteron, plus sursele de alimentare şi ventilatoarele necesare. Sistemul
complet constă din 108 de cabinete pentru nodurile de calcul, oferind un total de
10.368 procesoare Opteron (20.736 CPU-uri) cu 10 TB de memorie RAM. Fiecare
procesor are acces doar la propriul său RAM, neexistând memorie partajată
(arhitectură DSM). Puterea teoretică de calcul a sistemului este de 41 teraflops/sec.
Interconectarea între procesoarele Opteron se realizează prin procesoare de
reţea Seastar (router) customizate, câte unul pentru fiecare Opteron. Acestea sunt
conectate într-o topologie de reţea de tip tor 3D, de dimensiune 27×16×24, cu un
procesor Seastar în fiecare nod. Fiecare Seastar are şapte legături bidirecţionale de
24 Gbps: la nord, est, sud, vest, în sus, în jos şi la Opteron. Timpul de tranzit între
noduri adiacente este de 2 μs, iar de-a lungul întregului set de noduri de calcul este
de doar 5 μs. O a doua reţea care utilizează Ethernet de 100 Mbps este folosită
pentru service şi întreţinere.
În plus faţă de cele 108 cabinete de calcul, sistemul conţine şi 16 cabinete
pentru I/O şi procesoare de servicii. Fiecare cabinet are 32 de procesoare Opteron.
Cele 512 CPU-uri sunt împărţite astfel: 256 pentru I/O şi 256 pentru servicii.
Restul spaţiului este pentru discuri, care sunt organizate ca matrice RAID 3 şi
RAID 5, fiecare având un disc de paritate şi un disc rezervă hot-swapping. Spaţiul
total al discului este de 240 TB, iar lărgimea sa totală de bandă este de 50 GB/sec.
Sistemul este împărţit în secţiuni clasificate şi neclasificate, cu switch-uri
între părţi, astfel încât acestea să poată fi cuplate sau decuplate mecanic. Un total
de 2688 procesoare Opteron se află în secţiunea clasificată, iar alte 2688 în
secţiunea neclasificată. Restul de 4992 procesoare Opteron poate fi comutat în
oricare dintre secţiuni, aşa cum se arată în figura 2.67.
Google a învăţat trei lucruri cheie despre rularea serverelor Web masive care
suportă tranzacţii repetitive:
1. Componentele vor cădea, deci trebuie planificată protecţia la erori;
2. Replicarea componentelor asigură viteza de transfer şi disponibilitatea;
3. Trebuie optimizat raportul performanţă/preţ.
Rezolvarea primei probleme necesită software tolerant la defectări, cea de-a
doua indică folosirea de hardware şi software redundant, iar cea de-a treia rezultă
ca o consecinţă a primelor două. Pe ansamblu, cât mai multe resurse hardware vor
asigura o performanţă superioară atunci când toate componentele sunt funcţionale.
Fig. 2.69. (a) sistem de tip magistrală comună (b MB/s) cu 4 CPU: b/4 MB/s;
(b) sistem de tip magistrală comună cu 16 CPU: b/16 MB/s; (c) sistem de tip grid cu 4 CPU
şi 4 conexiuni: b MB/s; (d) sistem de tip grid cu 16 CPU şi 24 de conexiuni: 1,5b MB/s [71].
S = n / [1 + (n – 1)(1 – f)].
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.
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
108 ARHITECTURA SISTEMELOR DE CALCUL
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.
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ă).
Astfel, în acces aleator, timpul de acces este mare (zeci de ns), însă scade
foarte mult (în funcţie de tipul memoriei DRAM), dacă se restricţionează accesul în
modul pagină (vezi paragraful 3.2.9 – FPM), putând ajunge la doar de două ori mai
mare decât cel al memoriei SRAM.
Celula de memorie este mult mai mică decât la memoria SRAM, ceea ce
permite realizarea unor densităţi mari de integrare. Circuitele de memorie DRAM
au, prin urmare, capacităţi de memorare mari, şi, implicit, un număr mare de linii
de adresă. Reprezentarea memoriei DRAM se găseşte în figura 3.6.
Memorarea datelor se bazează pe stocarea şi transferul de sarcini electrice, şi
nu pe mecanisme de comutare, ca în cazul memoriilor SRAM. Fiecare bit de
informaţie este memorat prin încărcarea sau descărcarea unui condensator. Când
condensatorul este încărcat, se spune că se memorează valoarea 1, iar când acesta
este descărcat, valoarea memorată este 0. Faţă de celula SRAM, mecanismul de
memorare nu presupune consum de curent de la sursa de alimentare.
Schema bloc a memoriei DRAM este trasată în figura 3.7. Celulele de
memorie sunt dispuse într-o arie pătrată sau dreptunghiulară de locaţii de memorie,
fiecare locaţie memorând un cuvânt de m biţi. Semnalele de comandă acţionează
prin intermediul logicii de control. Eventual, memoria DRAM poate avea circuit
intern de împrospătare, care presupune un numărător de adrese de rând şi un ceas
de timp real. În funcţie de tipul memoriei, ciclurile de împrospătare pot fi realizate
în trei moduri:
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 DRAM. În interior,
memoria are un numărător de adrese de rând, un ceas de timp real şi o
logică de control pentru generarea semnalelor CAS/RAS, după metoda 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.
O altă categorie de memorii DRAM este cea care utilizează o interfaţă
sincronă. Prin implementarea unei interfeţe sincrone, s-au eliminat perioadele de
aşteptare de către procesor, obţinându-se, de asemenea, unele avantaje
suplimentare. În cazul funcţionării sincrone, se memorează anumite date de la
procesor în circuitele latch ale memoriei DRAM, sub controlul ceasului de sistem.
Aceste circuite păstrează adresele, datele şi semnalele de control, ceea ce permite
procesorului să execute alte operaţii. După un număr specific de cicluri de ceas,
datele devin disponibile şi procesorul le poate citi de pe liniile de ieşire. Un alt
avantaj al unei interfeţe sincrone este că ceasul sistemului este singurul semnal de
sincronizare care trebuie furnizat memoriei DRAM, ceea ce elimină necesitatea
propagării semnalelor multiple de sincronizare. Intrările sunt simplificate, deoarece
semnalele de control, adresele şi datele pot fi memorate fără temporizările de setare
şi menţinere monitorizate de procesor. Avantaje similare se obţin şi la operaţiile de ieşire.
O altă categorie este reprezentată de memoriile DRAM bazate pe
protocoale. Categoriile precedente de memorii au linii separate de adrese, date şi
control, ceea ce limitează viteza la care poate funcţiona circuitul cu tehnologia
curentă. Pentru eliminarea acestui dezavantaj, au fost proiectate memorii DRAM
bazate pe protocoale, care implementează toate aceste semnale pe aceeaşi
magistrală. Cele mai cunoscute memorii din această categorie sunt DRDRAM
(Direct Rambus) şi SLDRAM (SyncLink) DRAM.
116 ARHITECTURA SISTEMELOR DE CALCUL
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
Fig. 3.9. Modurile de organizare a memoriei: (a) Big endian; (b) Little Endian [71].
118 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.10. (a) înregistrare Big endian; (b) înregistrare Little endian; (c) transfer Big endian –
Little endian; (d) transfer & swap [71].
RAS\
CAS\
WR\
tacces
tciclu
RAS\
CAS\
WR\
tacces
tciclu
RAS\
CAS\
WR\
de pe hard disk-ul mult mai lent, fără a mai lua în consideraţie drumul pe care l-ar
avea de parcurs datele pe magistralele la fel de lente. Acest aspect nu are însă un
caracter imperativ, deoarece s-a demonstrat că, începând de la 16–32 MB instalaţi,
performanţele sistemului rămân aproape constante.
Totuşi există anumite aplicaţii care cer resurse deosebite şi îndeosebi RAM.
Este cazul profesioniştilor care lucrează mai ales în domeniul graficii (atât statică –
proiectare CAD, fotografie, design, cât şi dinamică – animaţii, spoturi publicitare,
filme, aplicaţii ştiinţifice, simulări etc.), fiind necesari peste 1–2 GB de RAM. Un
alt caz deosebit este al serverelor de reţea, unde necesarul de RAM este uriaş şi
poate atinge valori peste 4 GB.
Privitor la modul în care microprocesorul operează fizic cu memoria
instalată, aceasta se plasează pe placa de bază în două sau mai multe segmente
fizice numite bancuri de memorie. Acestea sunt segmentele minime de memorie
care pot fi accesate de microprocesor, numerotate începând cu 0, fiecare banc
având unul sau mai multe sloturi pentru plăcuţele de memorie. Toate aceste bancuri
sunt văzute ca nişte porţi spre memoria fizică instalată şi au dimensiuni date de
lăţimea magistralei microprocesorului (inclusiv biţii de paritate), de exemplu, de 72
de biţi pentru Pentium.
În sloturile aceluiaşi banc, se introduc întotdeauna memorii de acelaşi tip
(având în special timpi de acces identici) şi aceeaşi dimensiune, pentru a nu
provoca accesări greşite de memorie sau chiar blocarea sistemului de calcul.
Exemplu. Pentru un banc cu două sloturi: 2 plăci 1 MB sau 2 plăci 2 MB.
În bancuri diferite, se pot monta (teoretic) memorii diferite (ex.: 2 1 MB în
bancul 0 şi 2 4 MB în bancul 1), dar, practic, este bine să se utilizeze valori pare.
Exemplu. În loc de 2 4 MB + o plăcuţă de 1 MB ar trebui montate 2 4
MB + o plăcuţă de 2 MB), pentru a evita unele neplăceri.
În figura 3.14 este prezentată dispunerea bancurilor pe placa de bază.
Fig. 3.15. Două moduri de organizare a unei memorii de 4 Mb: (a) 512K×8; (b) 4096K×1 [71].
Fig. 3.16. Două moduri de organizare a unei memorii de 512 Mb: (a) 32M×16; (b) 128M×4 [71].
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 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.
Fig. 3.18. Cipul DIP al microcontrolerului Atmel ATmega 168 (28 pini) [71].
Fig. 3.31. Plăcuţă de memorie DIMM cu 8 cipuri de 256 MB DDR3 şi conector în soclu [71].
RIMM (Rambus In-line Memory Modules)
Este tipul de încapsulare folosit la memorii Rambus (vezi figura 3.32), al
căror format logic este tratat în paragraful următor. Un modul RIMM este foarte
asemănător DIMM-ului, dar foloseşte setări diferite ale pinilor. Se remarcă prin
prezenţa de radiatoare pe ambele feţe ale modulului de memorie, pentru a preveni
încălzirea excesivă a acestuia.
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.36 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.36.
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.
Structura unui calculator 135
Din acest motiv, canalul Rambus suportă până la cinci domenii pentru
semnalul de ceas, doar pentru a putea păstra o sincronizare între transferurile pe
magistrala de memorie. Aceste schimbări ale domeniilor de tact complică însă şi
mai mult arhitectura sistemului de memorie Rambus, prezentată în figura 3.38.
Fig. 3.39. 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 posibile.
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ţă.
Exemplu: memoria DDR3 de la microprocesorul Intel Core i7, cu 8 bancuri
pe cip. Magistrala de memorie de la Intel Core i7 este o magistrală tranzacţională,
care operează în mod pipeline, cu 4 tranzacţii simultane, în trei paşi (faze):
faza de activare a memoriei (ACT) – deschide o linie a memoriei
DRAM pentru acces;
faza de citire/scriere a memoriei (READ/WRITE) – accese multiple în
linia DRAM deschisă, fie la cuvinte individuale, fie la cuvinte multiple
secvenţiale în modul burst (rafală);
faza de preîncărcare (PCHRG) – închide linia DRAM curentă şi
pregăteşte următoarea activare.
Diagrama de timp a cererilor de memorie în mod pipeline la interfaţa DDR3
pentru Intel Core i7 este reprezentată în figura 3.41.
142 ARHITECTURA SISTEMELOR DE CALCUL
Fig. 3.41. Diagrama de timp a citirilor pipeline din memorie în interfaţa DDR3 la Core i7 [71].
Interfaţa memoriei DDR3 la Intel Core i7 are patru căi primare de semnal:
CK = ceasul magistralei: coordonează întreaga activitate a memoriei sincrone;
CMD = READ: cu două perioade de ceas după ACT;
CMD = DATA: cu o perioadă de ceas după READ;
CMD = PRCHRG: cu minimum două perioade de ceas după DATA;
ADDR = liniile de adresă;
DATA = liniile de date.
DDR4 SDRAM (Double Data Rate Four Synchronous DRAM)
Fig. 3.42. Reprezentarea evoluţiei în timp a memoriilor din familia DDR [71].
Structura unui calculator 143
XIO este compus din unul până la 12 blocuri de cerere a magistralei (RQ –
ReQuest bus block), un bloc de control (CTL) şi un număr variabil de blocuri de
date de 8 sau 9 biţi – în cazul memoriilor cu cod corector de erori (DQ). Blocul RQ
asigură subsistemelor memoriei informaţiile referitoare la adrese şi control. Blocul
CTL asigură accesul la registre, iniţializarea, întreţinerea şi testarea funcţiilor
sistemului. Un bloc DQ este capabil să primească şi să transmită date cu o
frecvenţă de până la 4 GHz.
Memoriile XDR DRAM vin sub forma unor module XDIMM, specifice
Rambus. Acestea oferă flexibilitate în ceea ce priveşte upgrade-ul, o capacitate
ridicată şi performanţă ridicată, esenţială în cazul serverelor, de exemplu. Datorită
tehnologiei Dynamic Point-to-Point, XDIMM-urile pot fi instalate atât în
configuraţie single-channel, cât şi în configuraţie dual-channel, păstrând întreagă
lărgimea de bandă a sistemului şi conservând integritatea semnalului, caracteristică
topologiei point-to-point.
O altă inovaţie tehnologică adusă de XDR este tehnologia DRSL
(Differential Rambus Signaling Level). Această tehnologie presupune un standard
de semnalizare de joasă tensiune, joasă putere, diferenţial, care permite o
magistrală scalabilă, multi-GHz, bidirecţională, de tip point-to-point, care
conectează celula XIO la dispozitivele XDR DRAM.
XDR foloseşte şi standardul RSL (Rambus Signaling Level), dezvoltat
iniţial pentru RDRAM, standard care permite conectarea a până la 36 de
dispozitive într-un mod sincron, adresate prin intermediul unei magistrale şi
comandate prin nişte semnale. Sistemul de memorie Rambus XDR satisface
nevoile computaţionale din numeroase domenii, cum ar fi computere grafice,
servere, reţelistică sau electronică de larg consum.
eDRAM (embedded DRAM)
eDRAM reprezintă o memorie dinamică cu acces aleator, capacitivă,
integrată în mod uzual în acelaşi pachet cu procesorul, spre deosebire de modulele
DRAM externe şi SRAM-urile utilizate tipic pentru memorii cache.
Împachetarea permite folosirea de magistrale mult mai mari şi o viteză
sporită a operaţiilor. Datorită unei densităţi mult crescute pentru DRAM în
comparaţie cu SRAM, pot fi utilizate cantităţi mai mari de memorie. Diferenţa în
procesul de fabricaţie determină dificultatea integrării pe aria cipului procesorului,
astfel încât mai multe circuite integrate de pe arie trebuie împachetate într-un chip,
ridicând costul. Cele mai recente dezvoltări surmontează această limitare, utilizând
procesarea CMOS standard pentru a fabrica eDRAM, ca în formatul de memorie
1T-SRAM (vezi paragraful următor).
Memoria eDRAM este folosită într-o largă varietate de console de jocuri.
Atât celula microprocesoare utilizată în PlayStation 3, cât şi cea pentru IBM
Power, folosesc eDRAM la cache-ul L2, în nodul de procesare de 45 nm al IBM.
1T-SRAM (1 Transistor Static RAM)
Tehnologia de fabricare a memoriilor 1T-SRAM, introdusă de către MoSys,
oferă o alternativă la memoriile SRAM tradiţionale, permiţând atingerea unei
capacităţi mai mari.
Structura unui calculator 145
Fig. 3.48. Plasarea memoriei cache între CPU şi memoria principală (RAM) [71].
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.
Fig. 3.50. Principiul memoriei cache, văzută ca dublă interfaţă între procesor şi 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 2 13 = 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.
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 figura 3.52, 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 acelei linii. În caz contrar, marcajul plus
numărul liniei (13 biţi) se folosesc 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.53. Î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.
L = I J;
K = A mod I.
Astfel, blocul conţinând adresa A poate fi mapat în oricare din liniile setului I.
Observaţie. Dacă I = L şi J = 1, maparea asociativă pe seturi se reduce la
maparea directă, iar dacă I = 1 şi J = L, se obţine maparea asociativă.
Utilizarea a două linii pe set (J = 2) este cea mai utilizată organizare
asociativă pe seturi, care creşte semnificativ rata de succes faţă de maparea directă.
Exemplu. Cache-ul L1 din AMD Athlon este asociativ pe două seturi, adică,
orice locaţie din memoria principală poate fi depozitată în două locaţii din L1.
160 ARHITECTURA SISTEMELOR DE CALCUL
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.55. Din cauza aceasta, o memorie
cache relativ redusă ca mărime are o importanţă mare ca eficienţă.
162 ARHITECTURA SISTEMELOR DE CALCUL
În cazul în care ecoul din partea cache-ului este pozitiv, adresarea către
RAM este abandonată. De aici rezultă, faţă de metoda anterioară, avantajul vitezei,
evitându-se căutarea secvenţială: întâi în cache, apoi în RAM.
Dezavantajul apare prin faptul că magistrala memoriei este tot timpul
folosită şi, astfel, nu mai este disponibilă – în momentele de scanare a memoriei –
altor accesări din partea perifericelor. Mai ales în modul multitasking, acest lucru
se reflectă în întârzieri semnificative ale vitezei de execuţie a diferitelor sarcini.
metoda Write Back (vezi figura 3.59), în care scrierea se face în cache,
în cazul în care adresa de memorie la care se face scrierea există şi ea în
cache (de fapt, dacă blocul de date de la acea adresă se află încărcat în
cache). În cazul în care blocul de date localizat de acea adresă nu mai
există în cache, scrierea se face direct în RAM;
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:
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
tip
situaţie în cache acţiune în cache
acces
Fig. 3.60. Rata de pierderi (miss rate) în funcţie de capacitatea memoriei cache. [71]
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.
Dacă OE = 1, ieşirile memoriei sunt în starea de impedanţă înaltă (high Z). Tabelul
de adevăr din figura 3.63 b este un exemplu care arată o posibilitate de
implementare a 4 funcţii binare de câte 3 variabile.
Fig. 3.63. (a) Memorie ROM cu 8 cuvinte de 4 biţi; (b) Tabelul de adevăr asociat.
Fig. 3.64. Structura internă a unui cip de memorie ROM cu 1024 cuvinte de 8 biţi.
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.
Fig. 3.67. (a) Structura LUT pentru un FPGA; (b) Configuraţia LUT pentru un numărător
de 3 biţi cu resetare: I0,1,2 = I+1, I3 = CLR, I4..7 = 0, O0..3 I0..3 [71].