Sunteți pe pagina 1din 180

Radu RĂDESCU

ARHITECTURA SISTEMELOR DE CALCUL

Această lucrare este dedicată


tuturor studenților mei
din ultimii 25 ani.
Radu RĂDESCU s-a născut în 1963, la
Sighişoara (jud. Mureş), unde urmează cursurile
liceale. În 1988, este absolvent al Facultăţii de
Electronică şi Telecomunicaţii din cadrul
Universităţii „Politehnica“ din Bucureşti (UPB),
secţia de Electronică Aplicată. În perioada
octombrie 1988 – aprilie 1990, lucrează ca
inginer electronist la Întreprinderea de
Echipamente Periferice din Bucureşti, apoi este
angajat prin concurs ca asistent la Departamentul de Electronică
Aplicată şi Ingineria Informaţiei din UPB. În 1996, devine şef de
lucrări, în 1999, conferenţiar și, în 2017, profesor în cadrul aceluiași
departament. În 1992, se înscrie ca membru în IEEE. Obţine
doctoratul în electronică în 1998, sub îndrumarea regretatului profesor
Adrian-Traian Murgan, cu lucrarea Contribuţii la dezvoltarea teoriei
codurilor. A predat, de-a lungul celor peste 28 de ani de experienţă
pedagogică, disciplinele Teoria Transmisiunii Informaţiei, Detecţie şi
Estimare în Prelucrarea Semnalelor, Prelucrarea Digitală a
Semnalelor, Transmisiunea Digitală a Informaţiei, Arhitectura
Sistemelor de Calcul, Echipamente Periferice (la ciclul de licență) și
Tehnologii și Echipamente Multimedia, Managementul Activităților
cu Suport Electronic (e-activities) și Rețele Complexe de
Interconectare (la ciclul de masterat). A efectuat stagii de pregătire la
Universitatea Tehnică din Darmstadt, Germania (1997) şi la Şcoala
Superioară de Chimie Fizică şi Electronică din Lyon, Franţa (1999–
2000 şi 2001–2002, specializându-se în domeniul e-learning).
A elaborat 10 cărţi, 21 de manuale, îndrumare şi ghiduri de lucrări
practice, opt discipline noi de studiu, precum şi peste 200 de articole şi
comunicări ştiinţifice publicate în reviste de specialitate sau prezentate
la conferinţe naţionale şi internaţionale. A fost responsabilul a șapte
granturi sau proiecte naţionale şi internaţionale, contribuind la alte
15 contracte de cercetare, dintre care șapte granturi acordate de
Academia Română, Agenţia Naţională pentru Ştiinţă, Tehnologie şi
Inovaţii şi Consiliul Naţional al Cercetării Ştiinţifice din Învăţământul
Superior. Este inițiatorul și autorul platformei e-learning Easy-
Learning (lansată în 2005). A participat la un program de colaborare
cu Şcoala Politehnică Federală din Lausanne, Elveţia (1994).
A susţinut prelegeri ştiinţifice la Universitatea Södertörns din
Stockholm, Suedia (2004) şi la Politecnico di Torino, Italia (2006), în
cadrul programelor europene Socrates-Erasmus. Între anii 2001 şi
2003 a imprimat 11 conferinţe pentru emisiunea „Universitatea
Radio“, Canalul România Cultural. La Conferinţa Naţională de
Învăţământ Virtual (CNIV), organizată de Facultatea de Matematică şi
Informatică din cadrul Universităţii din Bucureşti, a fost distins cu
Mențiune, Premiul de popularitate (2005) și Premiul de creativitate
(2006). În 2015, a obținut Diploma pentru contribuţia cu articole
ştiinţifice publicate la International Conference on Virtual Learning
(ICVL).
Radu RĂDESCU

ARHITECTURA
SISTEMELOR DE CALCUL

ediţia a IV-a
revizuită și completată

EDITURA POLITEHNICA PRESS


Bucureşti, 2018
Copyright © 2018, Editura Politehnica Press
Toate drepturile asupra acestei ediţii sunt rezervate editurii.

Adresa: Calea Griviţei, nr. 132


010737, sector 1, Bucureşti
Telefon: 021.402.90.74

Referenţi ştiinţifici (ed. a IV-a):


prof. dr. ing. Radu DOGARU
prof. dr. ing. Sever PAŞCA

Descrierea CIP a Bibliotecii Naţionale a României


RĂDESCU, RADU
Arhitectura sistemelor de calcul / Radu Rădescu. - Ed. a 4-a, reviz.. - Bucureşti :
Politehnica Press, 2018
ISBN: 978-606-515-849-8

004

Coperta: Sonia MILITARU

Bun de tipar: 19.12.2018


ISBN: 978-606-515-849-8
PREFAŢĂ LA EDIŢIA A PATRA

Lucrarea de faţă este rezultatul muncii de elaborare a cursului la disciplina


Arhitectura Sistemelor de Calcul, predat în anii al III-lea şi al IV-lea studenţilor de
la programele de studii de Calculatoare şi Tehnologia Informaţiei, respectiv,
Electronică Aplicată, de la Facultatea de Electronică, Telecomunicaţii şi
Tehnologia Informaţiei a Universităţii „Politehnica“ din Bucureşti.
După primele trei ediţii, ale căror tiraje din anii 1999, 2003 și 2008 s-au
epuizat rapid, autorul revine cu o a patra ediţie, revizuită și completată, pentru
care a pornit de la scheletul celei de-a treia ediţii, pe care au fost operate
schimbări majore, ţinând cont de evoluţia extrem de dinamică a domeniului
tehnicii de calcul.
Astfel, întreaga perspectivă de abordare a materialului nou prezentat a fost
subordonată unei viziuni moderne, care are la bază principiile ordonării schematice
şi (crono)logice a temelor tratate. S-a avut în vedere, de asemenea, elaborarea unei
structuri diferite a capitolelor, completarea materialului grafic (peste 280 de figuri)
şi adaptarea limbajului tehnic folosit în concordanţă cu neologismele din aria IT.
Completările de substanţă faţă de ediţia anterioară constau în noutăţi şi
contribuţii aduse următoarelor aspecte:
 modele recente de arhitecturi multinivel (multinucleu, multiprocesor,
multicalculator, cluster, cloud, grid);
 sisteme de calcul paralel (GSM, DSM, arhitecturi masiv paralele);
 arhitecturi multithreading (cu granulație fină, brută și superscalare);
 metodologii recente de evaluare a performanţelor sistemelor de calcul;
 formate fizice şi logice actuale ale memoriei RAM (până la DDR4);
 standarde moderne de interfeţe (wireless) și de arhitecturi de rețea;
 standarde noi de magistrale bazate pe fibră optică și arhitecturi switch;
 exemple noi de microprocesoare (Intel Core i7), microcontrolere (ARM
și AVR), modele recente de embedded systems și system-on-a-chip;
 exemple de sisteme microprogramate (micromașina Tanenbaum Mic-1);
 extinderea algoritmilor folosiți în politicile de înlocuire a paginilor;
 exemple noi de gestiune a memoriei virtuale (Motorola, Unix, ARM).
În elaborarea lucrării, autorul a beneficiat de interacţiunea utilă cu
generaţiile de studenţi cărora acest curs le-a fost destinat în ultimii zece ani și al
căror feedback s-a dovedit extrem de valoros prin observaţiile şi sugestiile
transmise. Lor, precum şi colaboratorilor mai vechi sau mai noi şi colegilor din
cadrul departamentului care m-au susţinut, ţin să le aduc mulţumiri.

19 noiembrie 2018 Autorul


CUPRINS

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

2.4.2. Arhitecturi multiprocesor 69


2.4.2.1. Arhitecturi cu procesoare multiple 69
2.4.2.2. Arhitecturi biprocesor 71
2.4.2.3. Arhitecturi multinucleu 76
2.4.2.4. Multiprocesare omogenă şi eterogenă pe cip 85
2.4.2.5. Arhitecturi de multiprocesoare şi multicalculatoare 89
2.4.2.6. Arhitecturi de procesoare masiv paralele (MPP) 92
2.4.2.7. Arhitecturi Cluster Computing 98
2.4.2.8. Arhitecturi Grid Computing 100
2.4.2.9. Legea lui Amdahl pentru arhitecturi paralele 102
3. Structura unui calculator 103
3.1. Unitatea centrală (procesorul) 103
3.1.1. Execuţia unei instrucţiuni 104
3.1.2. Tipuri de unităţi centrale 104
3.1.2.1. Performanţa unităţii centrale 104
3.1.2.2. Indici de performanţă 105
3.1.3. Organizarea unităţii centrale 106
3.2. Memoria 107
3.2.1. Caracteristicile unităţilor de memorie 107
3.2.2. Ierarhizarea memoriei 108
3.2.2.1. Registrele de memorie 109
3.2.2.2. Memoria internă 109
3.2.2.3. Memoria externă 110
3.2.3. Memoria RAM 111
3.2.3.1. Memoria SRAM 111
3.2.3.2. Memoria DRAM 113
3.2.4. Organizarea locaţiilor de memorie 116
3.2.5. Metodologia de proiectare a memoriilor statice 118
3.2.6. Metodologia de proiectare a memoriilor dinamice 119
3.2.7. Module de memorie 120
3.2.8. Formate fizice de memorie 123
3.2.9. Formate logice de memorie 130
3.2.10. Verificarea prin controlul parităţii 150
3.2.11. Metode de acces la memorie 151
3.2.12. Memoria cache 152
3.2.12.1. Maparea memoriei cache 155
3.2.12.2. Eficienţa şi localizarea datelor în memoria cache 161
3.2.12.3. Reînnoirea conţinutului memoriilor cache 162
3.2.12.4. Conectarea memoriei cache la microprocesor 163
3.2.12.5. Depunerea în memorie a rezultatelor 164
3.2.12.6. Cache hit şi cache miss 165
3.2.12.7. Tipuri de celule cache 167
3.2.12.8. Memorii cache specializate 168
3.2.12.9. Concluzii la memoria cache 172
3.2.4. Memoria ROM 172
3.2.5. Memorii nevolatile şi comparaţie cu memoria RAM 178
Cuprins 9

3.3. Organizarea dispozitivelor de intrare-ieşire (I/O) 181


3.3.1. Organizarea dispozitivelor I/O la calculatoare mari 181
3.3.2. Organizarea dispozitivelor I/O la microcalculatoare 182
3.4. Conectarea perifericelor la sistem 183
3.4.1. Transmisia paralelă 186
3.4.1.1. Configuraţia porturilor paralele 187
3.4.2. Transmisia serială 188
3.4.2.1. Configuraţia porturilor seriale 189
3.4.2.2. Standarde pentru transmisii seriale 190
3.4.3. Tipuri de transmisii 192
3.4.4. Standarde de interfeţe 195
3.4.4.1. Interfeţe seriale 195
3.4.4.2. Interfeţe paralele 202
3.4.4.3. Interfeţe wireless 205
3.4.5. Gestionarea tranzacţiilor I//O 210
3.4.5.1. Transferuri DMA (Direct Memory Access) 210
3.4.5.2. Canale IRQ (Interrupt Request) 213
3.4.5.3. Adresa de intrare-ieşire 217
3.4.6. Proiectarea unui sistem I//O 218
4. Nivelul fizic 221
4.1. Microprocesorul 222
4.2. Întreruperile 224
4.2.1. Gestionarea întreruperilor 225
4.3. Magistrala 226
4.3.1. Conceptul de magistrală 226
4.3.2. Elemente definitorii ale magistralei 227
4.3.3. Tipuri, familii şi standarde de magistrală 229
4.3.4. Magistrala procesorului 233
4.3.4.1. Conectarea la magistrală 236
4.3.4.2. Magistrale sincrone 236
4.3.4.3. Magistrale asincrone 238
4.3.4.4. Transferul datelor pe magistrala locală a procesorului 240
4.3.4.5. Arbitrajul magistralei 241
4.3.4.6. Magistrala VME 197
4.3.5. Magistrala memoriei 246
4.3.6. Magistrala de adrese 248
4.3.7. Magistrala I/O 248
4.3.7.1. Magistrala ATA 249
4.3.7.2. Magistrala SCSI 250
4.3.8. Magistrala locală 251
4.3.8.1. Magistrala PCI 252
4.3.8.2. Magistrala AGP 257
4.3.9. Magistrala serială 258
4.3.9.1. Magistrala USB 258
4.3.9.2. Magistrala FireWire (standardul IEEE 1394) 263
4.3.9.3. Magistrala I2C 266
10 ARHITECTURA SISTEMELOR DE CALCUL

4.3.9.4. Magistrala Fibre Channel 267


4.3.9.5. Magistrala InfiniBand 268
4.3.9.6. Magistrala PCI Express 269
4.3.10. Comparaţii între magistrale 276
5. Nivelul microprogramat 277
5.1. Exemplu de maşină microprogramată 278
5.2. Microinstrucţiunile 279
5.2.1. Structura unei microinstrucţiuni 280
5.2.2. Execuţia unei microinstrucţiuni 281
5.2.3. Unitatea de comandă 282
5.2.4. Modul de lucru al microsecvenţiatorului 284
5.2.5. Maşina microprogramată Tanenbaum Mic-1 284
5.3. Microprogramarea orizontală şi verticală 291
5.3.1. Micromaşina cu format vertical 291
5.3.2. Comparaţie între cele două microprograme 295
5.4. Nanoprogramarea 295
5.5. Exemple de sisteme cu nivel microprogramat 296
6. Nivelul sistemului de operare 299
6.1. Conceptul de paginare 299
6.1.1. Realizarea unei paginări simple 301
6.1.2. Politica de înlocuire a paginilor 303
6.1.2.1. Algoritmul optim de înlocuire (Belady) 305
6.1.2.2. Algoritmul Not Recently Used (NRU) 306
6.1.2.3. Algoritmul First-In First-Out (FIFO) 306
6.1.2.4. Algoritmul Second Chance (SC) 307
6.1.2.5. Algoritmul Clock (C) 308
6.1.2.6. Algoritmul Least Recently Used (LRU) 309
6.1.2.7. Algoritmul Random (R) 310
6.1.2.8. Algoritmul Not Frequently Used (NFU) 310
6.1.2.9. Algoritmul Aging (A) 311
6.1.2.10. Algoritmul Working Set (WS) 312
6.1.2.11. Algoritmul WSClock (Working Set Clock) 313
6.1.2.12. Comparaţie între algoritmi 313
6.2. Conceptul de segmentare 315
6.2.1. Implementarea segmentării 321
6.2.2. Algoritmi de înlocuire a segmentelor 321
6.2.2.1. Compactarea 321
6.2.2.2. Algoritmul best fit 322
6.2.2.3. Algoritmul first fit 323
6.3. Exemple de gestionare a memoriei 323
6.3.1. Memoria virtuală la Motorola 323
6.3.2. Memoria virtuală la în sistemele de operare Unix 324
6.3.3. Memoria virtuală la ARM OMAP4430 325
6.3.4. Comparaţii 327
Bibliografie 329
1. INTRODUCERE

Un calculator numeric (computer digital) este o maşină care poate executa o


sarcină prin efectuarea instrucţiunilor care i-au fost atribuite. O secvenţă de
instrucţiuni care descrie modul de efectuare a unei anumite sarcini se numeşte
program. Circuitele electronice ale fiecărui computer pot recunoaşte şi executa în
mod direct un set limitat de instrucţiuni simple în care toate programele trebuie
convertite înainte de a fi executate. Aceste instrucţiuni de bază sunt arareori mult
mai complicate decât operaţiile cu două numere, comparaţia cu 0 a unei valori sau
unui set de date dintr-o parte a memoriei computerului în altă parte.
Împreună, instrucţiunile primare ale unui computer formează o limbă prin
care operatorul poate comunica cu computerul. O astfel de limbă se numeşte
limbaj maşină. Persoanele care proiectează un computer nou trebuie să decidă ce
instrucţiuni să includă în limbajul maşină. De obicei, proiectanţii încearcă să facă
instrucţiunile primare cât mai simple posibil, în concordanţă cu utilizarea şi
performanţele urmărite ale computerului, cerinţele de reducere a complexităţii şi
costurile electronicii necesare. Deoarece majoritatea limbilor maşină sunt atât de
simple, folosirea directă a acestora este adesea este anevoioasă şi obositoare pentru
utilizatori. Această observaţie banală a condus, în timp, la un mod de structurare a
computerelor ca o secvenţă de abstractizări, fiecare nivel de abstractizare bazându-
se pe cel de dedesubt. În acest fel, complexitatea poate fi mai uşor gestionată, iar
sistemele informatice pot să fie proiectate într-un mod sistematic şi organizat.
Această abordare se numeşte organizarea structurată a calculatoarelor sau
arhitectura sistemelor de calcul. În capitolul de faţă, se va descrie ceea ce se
înţelege prin acest termen. După aceea, se vor trata unele repere ale evoluţiei
istorice a maşinilor automate, stadiul tehnicii actuale şi câteva exemple importante.
Aşadar, lucrarea de faţă tratează aspecte funcţionale, constructive şi
relaţionale ale blocurilor unui sistem de calcul numeric. Aplicaţiile derulate pe
calculatoare sunt agregate într-o structură piramidală (vezi figura 1.1), care conţine:
 prelucrările de date;
 prelucrările de informaţii;
 prelucrările de cunoştinţe;
 prelucrările inteligente (inteligenţa artificială).
Spaţiul datelor. Materialul prelucrat la baza piramidei este un spaţiu de date
din care fac parte numere reprezentate în diverse formate. Datele prelucrate sunt
considerate mutual independente în spaţiul lor. Spaţiul datelor este cel mai mare
spaţiu al obiectelor prelucrate de sistemul de calcul, incluzând caractere, simboluri
şi/sau reprezentări multidimensionale ale acestora, numere în diverse formate.
12 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 1.1. Structura piramidală a tipurilor de prelucrări.

Spaţiul informaţiilor. Termenul de informaţie reprezintă o colecţie de date


legate între ele printr-o anumită relaţie sau structură sintactică. El se prezintă ca un
subspaţiu al spaţiului de date. Prin sintaxă se înţelege un set de reguli care
guvernează alcătuirea propoziţiilor dintr-un limbaj.
Spaţiul cunoştinţelor. Formează un subspaţiu în spaţiul informaţiilor.
Informaţiile sunt legate între ele printr-o structură semantică. Semantica reprezintă
un set de reguli care extrag înţelesul propoziţiilor dintr-un limbaj.
Spaţiul prelucrărilor de tip inteligenţă artificială (IA). Lucrează cu baze
de cunoştinţe, reguli de inferenţă (raţionament) sau cu alte mijloace specifice
domeniului de inteligenţă artificială. Calculatoarele de astăzi au devenit suficient
de rapide şi performante pentru a fi considerate ca sisteme-expert. Cu toate acestea,
nici un calculator actual nu este un sistem inteligent care gândeşte independent.
Un calculator este o maşină capabilă de a rezolva probleme aplicând
instrucţiuni definite în prealabil. Circuitele electronice ale fiecărui calculator nu pot
recunoaşte şi executa direct decât un număr limitat de instrucţiuni, care sunt
executate direct de calculator şi care formează ceea ce s-a definit anterior prin
limbajele maşină. Acestea sunt atât de primitive încât folosirea lor ca atare este
extrem de greoaie. Sunt două lucruri de rezolvat în privinţa acestei probleme,
ambele vizând construirea unui nou set de instrucţiuni mai practic de utilizat decât
limbajul maşină. În ansamblu, aceste noi instrucţiuni formează un nou limbaj care
va fi numit L2, în timp ce ansamblul instrucţiunilor corespunzătoare limbajului
maşină de bază formează nivelul L1.
Prima sarcină de executat a unui program scris în limbajul L2 este de a
înlocui fiecare instrucţiune a programului cu instrucţiunile corespunzătoare
limbajului L1 care îi sunt echivalente. Calculatorul va executa deci noul program în
limbajul L1 şi nu vechiul program care a fost scris în limbajul L2. Se poate spune
că are loc o conversie de limbaj, această tehnică numindu-se traducere.
A doua sarcină este de a scrie un program în limbajul L1 capabil să execute
direct secvenţa de instrucţiuni în limbajul L1 echivalent, după examinarea fiecărei
instrucţiuni a programului din L2. Această tehnică, cu ajutorul căreia nu mai este
nevoie să se genereze un program echivalent în L1 care va examina şi executa
fiecare instrucţiune din L2, poartă denumirea de interpretare.
Introducere 13

Traducerea şi interpretarea se aseamănă mult. În fiecare caz, toate


instrucţiunile în L2 sunt convertite în final într-o suită echivalentă de instrucţiuni
corespunzătoare lui L1. Dar trebuie notat că în fiecare caz al traducerii, programul
scris în L2 este mai întâi convertit într-un program scris în L1; apoi programul în
L2 dispare şi programul în L1 va fi cel executat. În replică, interpretarea constă în
analizarea şi apoi executarea imediată a fiecărei instrucţiuni din limbajul L2.
Aceste două metode sunt foarte utilizate în proporţii aproximativ identice.
Pentru a simplifica lucrurile, este mai uşor de imaginat existenţa unui
calculator virtual (maşină virtuală), al cărui limbaj maşină este L2. Dacă se
poate construi această maşină la un preţ rezonabil nu va mai fi nevoie de limbajul
L1 şi nici de o maşină capabilă să execute acest limbaj. Utilizatorii vor scrie tot mai
simplu programele în limbajul L2 şi calculatorul va executa direct aceste programe.

1.1. Limbaje şi maşini virtuale

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.

Fig. 1.2. Calculator multinivel folosind conceptul de maşină virtuală [71].


14 ARHITECTURA SISTEMELOR DE CALCUL

Un calculator alcătuit din n niveluri poate fi văzut ca n maşini virtuale


distincte, fiecare maşină virtuală având propriul său limbaj. Programele scrise în
limbajele L2, L3, …, Ln trebuie să fie interpretate de un interpretor având un nivel
mai mic sau să fie traduse într-un limbaj inferior. Programatorul care are
programele scrise pentru o maşină virtuală de nivelul n nu este interesat de
compilatoare şi nici de interpretoarele aflate la un nivel inferior. Nu este important,
în acest caz, dacă programele sunt traduse într-un limbaj cunoscut de calculator sau
dacă sunt executate direct de circuitele digitale aflate la nivelul fizic. În ambele
cazuri, se ajunge la acelaşi rezultat: programele sunt rulate, indiferent de metodă.

1.2. Calculatoarele actuale – calculatoare multinivel

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

Fig. 1.3. Prezentarea nivelurilor stratificate ale unui calculator.


Introducere 15

Nivelul 0, primul nivel care intră în alcătuirea unui calculator, poartă


denumirea de nivel fizic. Obiectele utilizate la acest nivel sunt porţi, care prin
definiţie pot fi privite ca nişte componente logice interconectate între ele. Fiecare
poartă dispune de una sau mai multe intrări logice şi întoarce ca rezultat o funcţie
simplă, obţinută conform semnificaţiei de la intrare (de exemplu, ŞI, SAU, NU
etc.). O poartă este realizată cu ajutorul tranzistoarelor. Acest nivel execută
instrucţiunile limbajului microprogramat (următorul nivel ierarhic), care acţionează
asupra nivelului 0 ca nişte comenzi. De reţinut este faptul că nivelul 0 poate să nu
fie nivelul cel mai scăzut, sub el putând exista un alt nivel care poartă denumirea de
nivel componentă şi care, de regulă, nu apare în schema nivelurilor calculatorului.
Nivelul următor este nivelul 1 sau nivelul microprogramat. El este nivelul
limbajului intern al maşinii. Aici există un microprogram care interpretează
instrucţiunile de nivel 2 şi care este realizat cu un set restrâns de instrucţiuni simple
(în medie, cam 12÷20 de instrucţiuni), de transfer şi teste simple ale unor condiţii.
El este scris într-o memorie ROM internă, la care are acces doar producătorul.
Deasupra nivelului 1 se află nivelul 2 sau nivelul maşinii tradiţionale.
Fiecare procesor defineşte în mod implicit un limbaj de nivel 2 şi o maşină virtuală
al cărei limbaj maşină este interpretat de un microprogram. Denumirea de nivel al
maşinii tradiţionale este dată deoarece componentele au caracteristici comune.
Aceeaşi structură fizică poate corespunde la două sau mai multe maşini dacă
microprogramul de pe nivelul 1 este scris în mod adecvat şi aceeaşi maşină
tradiţională se poate implementa prin diverse structuri fizice. Există şi excepţii:
unele calculatoare nu dispun de nivelul microprogramat (nivelul 1), în acest caz
instrucţiunile de pe nivelul 2 fiind tratate direct de nivelul 0.
Al treilea nivel este un nivel hibrid: cea mai mare parte a instrucţiunilor care
definesc limbajul 3 sunt de tip maşină, dar aici se găsesc şi sarcini specifice privind
gestionarea memoriei şi capacitatea de execuţie a mai multor programe în paralel.
Acest nivel poartă denumirea de nivelul sistemului de operare.
De remarcat că nivelurile 1 şi 2 nu sunt accesibile programatorului mediu.
Ele sunt necesare pentru interpretarea nivelului inferior, fiind scrise de specialişti.
Limbajele de nivel 1, 2 şi 3 sunt orientate către modul numeric, iar începând cu
nivelul 4 apar limbaje formate din simboluri şi cuvinte, care au o sintaxă.
Nivelul 4 este nivelul limbajului de asamblare. Este un nivel care nu poate
să lipsească. Aici compilatorul generează cod direct pentru nivelul 3. Există o
caracteristică specifică acestui nivel: nivelurile inferioare (2 şi 3) sunt întotdeauna
interpretate, iar nivelurile superioare au asociate programe traducătoare.
Programele realizate în limbaj de asamblare sunt mai întâi traduse în limbaje pentru
nivelurile 1, 2 şi 3 şi apoi interpretate de maşinile reale sau virtuale corespondente.
Următorul nivel ierarhic este nivelul 5, numit nivelul limbajului de
aplicaţie. Aici se află limbaje concepute pentru a fi utilizate de către programatorii
de aplicaţii. Ele mai sunt adesea denumite şi limbaje de nivel înalt şi sunt extrem
de numeroase. Printre cele mai cunoscute pot fi amintite: C, C++, C#, Java etc.
Programele scrise în unul din aceste limbaje sunt adesea traduse pentru nivelurile 3
sau 4 de către programe traducătoare specializate, numite compilatoare.
16 ARHITECTURA SISTEMELOR DE CALCUL

Nivelul 6, care este şi cel mai specializat, este reprezentat de un ansamblu de


programe şi este denumit nivelul sistemelor expert. Aceste programe conţin
numeroase date pentru aplicaţii care pot aparţine de domenii diferite de lucru.
În concluzie, se poate spune că un calculator poate fi văzut ca o suită de
niveluri, fiecare nivel înglobând toate nivelurile precedente. Un nivel reprezintă un
grad oarecare de abstractizare şi conţine diverse obiecte şi operaţii cu aceste
obiecte. În structura stratificată a nivelurilor din figura 1.3, în sens ascendent creşte
complexitatea prelucrării, iar în sens descendent creşte volumul materialului
prelucrat. Ansamblul tipurilor de date, operaţiilor şi caracteristicilor fiecărui nivel
poartă denumirea de arhitectura nivelului. În particular, arhitectura calculatoarelor
şi structura lor semnifică aproape acelaşi lucru.
Cu toate că nivelul microprogramat poate lipsi în unele situaţii, procesoarele
moderne se bazează în continuare pe microprogramare pentru a traduce instrucţiuni
complexe în microcodul intern care poate fi executat direct pe hardware-ul asociat.
Scopul acestei discuţii este de a arăta că limita dintre hardware şi software este
arbitrară şi în continuă schimbare. Software-ul de azi poate fi hardware-ul de mâine
şi viceversa. În plus, graniţele dintre diferitele niveluri sunt, de asemenea, fluide.
Din punctul de vedere al programatorului, nu este important cum este pusă de fapt
în aplicare o instrucţiune (cu excepţia considerentelor care îi determină viteza de
execuţie). De exemplu, programarea la nivelul limbajului maşină poate folosi
instrucţiunea de înmulţire ca şi cum ar fi o instrucţiune hardware, fără a fi nevoie să
se preocupe de suportul fizic al acesteia, sau chiar să conştientizeze dacă aceasta
este într-adevăr o instrucţiune hardware. Ceea ce pentru un proiectant reprezintă
hardware-ul pentru un altul va reprezenta software-ul. Acesta este, în esenţă,
principiul de bază al proiectării combinate (co-design) hardware-software.

1.3. Etapele evoluţiei arhitecturii calculatoarelor

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.

1.3.1. Generaţia 0: calculatoarele mecanice (1642–1944)

Meritul de a fi realizat prima maşină de calcul îi revine lui Blaise Pascal


(1642). În onoarea sa a fost denumit primul limbaj de programare de nivel înalt
care a fost inventat. Acest prim calculator a fost în întregime mecanic, bazat pe
angrenajul unor roţi dinţate acţionate manual, principalele operaţii care puteau fi
efectuate fiind adunări şi scăderi. Treizeci de ani mai târziu acestei maşini de calcul
i-au fost adăugate de către Leibnitz alte două noi operaţii: înmulţirea şi împărţirea.
Introducere 17

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.

1.3.2. Prima generaţie: tuburile cu vid (1945–1955)

Se poate spune că al doilea război mondial a grăbit apariţia apariţiei primelor


calculatoare echipate cu componente electronice, chiar dacă acestea aveau să fie
tuburile cu vid. Primul calculator construit şi folosit a fost Enigma, folosit pentru
criptarea mesajelor radio trimise de către armata germană submarinelor sale. Nici
armata britanică nu a stat cu mâinile în sân, ea reuşind să pună la punct un
calculator numit Colossus, folosit pentru decodarea mesajelor, deoarece erau foarte
multe calcule de făcut pentru găsirea cheii de criptare prin metoda forţei brute
(testarea, pe rând, a tuturor combinaţiilor posibile în mai puţin de 24 de ore).
Părintele lui Colossus a fost savantul englez Alan Turing, considerat azi drept a
doua cea mai influentă personalitate ştiinţifică a secolului XX, după Albert
Einstein, şi a cărui contribuţie remarcabilă la dezvoltarea tehnicii moderne de
calcul a fost dezvăluită (fiind secret militar) abia după 50 de ani (în 1994).
Urmează apoi un nou model, numit ENIAC. Acest calculator cuprindea
18.000 de tuburi cu vid şi 1.500 de relee, cântărea peste 30 de tone şi consuma 150
KW. Din punct de vedere al unităţii de calcul, dispunea de 20 registre a 10 cifre
zecimale. La foarte puţin timp după aceasta, îşi face apariţia un nou calculator, al
cărui realizator, John von Neumann, va intra în istorie, putând fi considerat pe
drept cuvânt părintele calculatoarelor actuale. Maşina von Neumann era alcătuită
din 5 părţi: memoria, unitatea aritmetică şi logică, unitatea de control, dispozitivele
de intrare şi cele de ieşire.
Schema maşinii von Neumann este reprezentată în figura 1.4.
18 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 1.4. Schema unei maşini cu arhitectura de bază von Neumann.

Memoria dispunea de 4.096 cuvinte, fiecare cuvânt având 40 de biţi (0 sau1).


Instrucţiunile cuprindeau două câmpuri: 8 biţi pentru tipul instrucţiunii şi 12 biţi
pentru adresă. Unitatea aritmetică şi logică conţinea un registru intern special,
numit acumulator. Maşina nu dispunea de capacitate de calcul în virgulă mobilă.
Făcând un salt peste timp, se ajunge la modelul IBM 704 (1956), care avea aceeaşi
structură cu 4 K de memorie, instrucţiuni de 36 de biţi şi dispozitive speciale de
calcul în virgulă mobilă.
Caracteristicile calculatoarelor din prima generaţie:
 Tuburi cu vid pentru circuite;
 Timp de viaţă mic din cauza emisiei de electroni din metale în tub cu vid;
 Baterii magnetice utilizate pentru memorie;
 Uriaşe, lente, scumpe şi adesea lipsite de siguranţă în funcţionare;
 Costuri de exploatare ridicate;
 Consum foarte mare de putere;
 Emisii mari de căldură, care le-au făcut să funcţioneze defectuos;
 Rezolvarea serială a problemelor;
 Intrări pe bază de cartele perforate;
 Ieşiri tipărite la imprimantă;
 Utilizarea de benzi magnetice;
 Utilizarea de limbaj maşină;
 Memorie principală de capacitate limitată;
 Programatorii au lucrat numai în limbaj maşină.

1.3.3. A doua generaţie: tranzistoarele (1956–1965)

Primul calculator cu tranzistoare a fost realizat în laboratoarele Lincoln


(1955), fiind denumit TX 0 (Transistorized eXperimental Computer 0). În 1961,
apare PDP-1, o maşină de 4 K cuvinte de 18 biţi, având ciclul maşină de 5 ms. În
comparaţie cu IBM 7090, care avea un preţ exorbitant, calculatorul PDP-1 costa
120.000 de dolari, fapt care a determinat vânzarea sa de către firma DEC şi, deci,
participarea la naşterea unei industrii mini-informatice.
Introducere 19

În 1964, apare pe piaţă modelul 6600 al firmei CDC, o maşină aproape de 10


ori mai rapidă decât bătrânul IBM 7094. Impactul asupra publicului a fost unul
foarte puternic, numeroase firme exprimându-şi dorinţa de a cumpăra un astfel de
calculator. Diferenţa faţă de modelul IBM: o arhitectură paralelă. În concluzie,
dispunea de mai multe unităţi funcţionale capabile să execute simultan diverse
operaţii. Acest model putea executa 10 instrucţiuni în acelaşi timp.
În figura 15 este reprezentată schema modelului PDP-8 (1965), bazată pe
magistrala comună Omnibus, specifică arhitecturii mini-calculatoarelor de la acea
vreme, în care CPU, memoria şi dispozitivele I/O erau conectate la acelaşi bus.

Fig. 1.5. Magistrala Omnibus de la PDP-8 [71].

Caracteristicile computerelor din a doua generaţie:


 Folosirea transistoarelor;
 Mai rapide şi mai fiabile decât sistemele din prima generaţie;
 Dimensiuni mai mici, mai ieftine şi mai rapide faţă de prima generaţie;
 Emisii importante de căldură, deşi ceva mai reduse;
 Bazate pe tot pe cartele perforate şi imprimante pentru intrări/ieşiri;
 Folosirea limbajelor de asamblare şi a limbajelor de nivel înalt;
 Date stocate pe medii magnetice;
 Costurile au rămas în continuare ridicate;
 Necesitau aer condiţionat pentru răcire;
 Introducerea limbajului de asamblare şi a sistemului de operare software.

1.3.4. A treia generaţie: circuitele integrate (1965–1980)

Inventarea circuitelor integrate a permis plasarea de numeroase tranzistoare


într-o singură capsulă de siliciu, ceea ce a condus la calculatoare mai mici, mai
rapide şi mai ieftine. În anul 1965, firma IBM, numărul unu în domeniul
informaticii, scoate pe piaţă modelul IBM 360, acesta fiind primul calculator
capabil de a simula un alt calculator. Apariţia circuitelor integrate a dus la
dezvoltarea industriei micro-informaticii, prin apariţia unor noi modele, dintre care
poate fi amintit calculatorul PDP-11 realizat de firma DEC (1970), asemănător cu
modelul 360 al firmei IBM, dar cu un raport performanţă/cost mult mai bun.
Caracteristicile computerelor din a treia generaţie:
 Folosirea circuitelor integrate;
 Introducerea procesării paralele;
 Ceva mai mici, mai ieftine şi mai rapide faţă de a doua generaţie;
20 ARHITECTURA SISTEMELOR DE CALCUL

 Folosirea plăcilor de bază;


 Date introduse de la tastatură;
 Rezultate vizualizate pe monitoare;
 Sisteme de operare cu multitasking;
 Limbaje de programare simplificate (BASIC).

1.3.5. A patra generaţie: circuitele VLSI (după 1980)

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.

1.3.6. A cincea generaţie: prezent şi viitor (după 1990/2010)

Începutul generaţiei a cincea este marcată de dezvoltarea calculatoarelor cu


prelucrare masiv paralelă, de exemplu CM 2 şi CM 5 de la Thinking Machines Co.
Un element esenţial este apariţia şi dezvoltarea serviciului World Wide Web, iniţiat
de Laboratorul CERN din Geneva în colaborare cu mai multe universităţi americane.
În 1993, Intel construieşte microprocesorul cu structură superscalară – Pentium.
Apar sistemele masiv paralele cu memorie partajată distribuit (Cray/MPP).
Interactivitatea serviciului WWW este asigurată prin introducerea tehnologiei Java.
Introducere 21

Evoluţia procesoarelor a luat apoi un avânt puternic, frecvenţele de lucru


crescând în numai opt ani de la 100 MHz la peste 3 GHz, înregistrându-se în
acelaşi timp şi o îmbunătăţire a arhitecturii microprocesoarelor prin specializare,
memorie cache, paralelism (pipe-line) şi optimizarea algoritmilor.
Progresul tehnologic şi ştiinţific a condus spre aplicaţii extrem de avansate în
domeniul inteligenţei artificiale (IA) şi a mediului de stocare cloud, iar extinderea
folosirii oricărui dispozitiv pe port USB şi lansarea tehnologiei Internet of Things
au făcut să se extindă spectaculos computerele invizibile (embedded şi low power).
Cea de-a cincea generaţie de calculatoare este construită pe progresul
tehnologic obţinut în generaţiile anterioare de computere. Se intenţionează să se
atingă astfel cea de-a patra revoluţie industrială (4IR).
Implementarea sistemelor este concepută pentru a îmbunătăţi interacţiunea
om-maşină, prin valorificarea inteligenţei umane şi a volumelor mari de date (Big
Data) care s-au acumulat de la începutul erei digitale. Fundamentul celei de-a
cincea generaţii este privit ca sistemul ciber-fizic şi provine din teoria, conceptul şi
implementarea a două ramuri de dezvoltare: inteligenţa artificială (IA) şi Machine
Learning (ML). IA şi ML nu coincid, dar sunt folosite în mod interschimbabil
pentru marca ştiinţa creării de dispozitive şi programe suficient de inteligente
pentru a interacţiona cu oameni, alte computere, mediu şi programe, apelând la
Data Mining şi Big Data pentru atingerea obiectivelor stabilite.
Proliferarea dispozitivelor computerizate, cu posibilitatea de auto-învăţare,
reacţie şi interacţiune, în moduri normale şi diferite, bazate pe experienţa dobândită
şi pe mediul înconjurător, a dat un impuls conceptului de Internet of Things (IoT).
Prin tehnologia de vârf şi cu algoritmii potriviţi, computerele vor fi capabile
de procesare la niveluri înalte în Deep Learning, în mod similar creierului uman.
Numeroase proiecte de IA sunt deja implementate, în timp ce altele sunt încă în
faze de dezvoltare. Pionierii în accelerarea IA includ: Google, Amazon, Microsoft,
Apple, Facebook şi Tesla.
Implementările iniţiale sunt acum prezente pe dispozitive casnice inteligente,
destinate să automatizeze şi să integreze activităţile zilnice, la fel ca dispozitivele
audio-vizuale şi autovehiculele inteligente.
Caracteristicile computerelor IA din a cincea generaţie:
 Obiectivele majore în domeniul IA sunt de a permite dispozitivelor:
 să înţeleagă limbajul natural;
 să recunoască discursul uman;
 să vadă lumea în perspectivă tridimensională;
 să joace jocuri interactive;
 să pună în aplicare sisteme-expert în domeniul medical şi în alte
domenii complexe;
 să aplice analize bazate pe algoritmi euristici de clasificare;
 să implementeze reţelele neuronale;
 Alte domenii care sunt orientate spre realizarea de aplicaţii în IA sunt:
 calculul cuantic;
 procesarea masiv paralelă;
22 ARHITECTURA SISTEMELOR DE CALCUL

 Proiecte IA în curs de desfăşurare:


 asistenţi personali virtuali, de exemplu: Siri, Google Now, Braina;
 automobile inteligente, de exemplu: maşinile autopilot Tesla, Google;
 instrumente automate generatoare de ştiri, de exemplu: Wordsmith
(folosit de Yahoo şi Fox);
 diagnosticarea asistată de calculator pentru depistarea cancerului.
Este prezentat în continuare un scurt istoric al dezvoltării domeniului, cu
punctarea reperelor importante din evoluţia sa cronologică.

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
686 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

2001 Firma IBM Primul multiprocesor cu cip dual-core, POWER4


Introducerea termenului de ubiquitous computing sau
2002 M. Weiser
pervasive computing: calculatoare embedded invizibile
2002 Firma Intel Microprocesorul Pentium 4
2002 Firma AMD Microprocesorul Athlon XP 2600+
Principiul de codesign (proiectare combinată HW-SW)
2003 J. Henkel et al.
în realizarea computerelor embedded
2003 Firma AMD Microprocesorul Opteron
2004 Firma AMD Microprocesorul Sempron
2005 Firma AMD Microprocesorul dual-core Athlon 64
2006 Firma Intel Microprocesorul dual-core Core 2 Duo
2007 Firma AMD Microprocesorul Phenom X4
2008 Firma Intel Microprocesorul Atom
2008 Firma Intel Microprocesorul quad-core Core i7 desktop
Microprocesoarele triple-core Phenom II X3
2009 Firma AMD
şi quad-core Phenom II X4
Microprocesoarele quad-core Core i7 mobil
2009 Firma Intel
şi quad-core Core i5 desktop
2010 Firma Intel Microprocesorul quad-core Core i5 mobil
2010 Firma Intel Microprocesoarele dual-core Core i3 desktop/mobil
2010 Firma Intel Microprocesorul hexa-core Core i7 desktop
2011 Firma AMD Microprocesoarele desktop/mobil pe liniile A4/A6/A8
2012 Firma AMD Microprocesoarele desktop pe linia A10
2013 Firma Intel Primul microprocesor GPU pe soclul BGA-1364
Microprocesoarele compatibile
2014 Firma AMD
cu arhitectura Socket AM1
2014 Firma AMD Microprocesoarele dual-core APU Pro A A6/A8/A10
Microprocesoarele octa-core Ryzen 7,
2017 Firma AMD
hexa-core Ryzen 5 şi quad-core Ryzen 3
Primele microprocesoare deca-core Core i9
2017 Firma Intel
şi dodeca-core Core i9
2017 Firma AMD Primul microprocesor 16-core Ryzen Threadripper
Primele microprocesoare 14-core Core i9,
2017 Firma Intel
16-core Core i9 şi 18-core Core i9
Primul microprocesor hexa-core Core i9
2018 Firma Intel
pe soclul BGA-1440
2019* Firma AMD Microprocesorul octa-core Zen 2/Ryzen 3000
2019* Firma AMD Microprocesorul Threadripper 3rd Gen
2019* Firma Intel Microprocesoarele 9th Gen Core KF SKUs
Microprocesoarele Comet Lake (deca-core), Cannon
2019* Firma Intel
Lake, Cascade Lake (48-core), Cooper Lake, Ice Lake
2020* Firma AMD Microprocesorul Zen 3
2021* Firma Intel Microprocesoarele cu nuclee Willow Cove/Golden Cove
?* Firma Intel Seria de microprocesoare Lakefield Heterogenous
?* Firma AMD Microprocesorul Zen 4
?* Firma Intel Platforma HEDT bazată pe Core i9 (16/24/26/28-core)
* anunţat (2018)
Introducere 25

1.4. Categorii de calculatoare (după destinaţie)

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

1.4.1. Exemple de familii de calculatoare

A. Arhitectura Intel x86

Fig. 1.7. Repere ale arhitecturii CPU Intel [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.9. Clasele de microcontrolere din familia AVR [71].

1.4.2. Spectrul sistemelor de calcul

Richard Hamming, fost cercetător la Bell Labs, a observat odată că


schimbarea unui ordin de mărime în cantitate determină o schimbare a calităţii.
Astfel, o maşină de curse care poate ajunge la 1000 km/oră în modernul circuit
auto de la Târgu Mureş este fundamental diferită faţă de o maşină obişnuită care
merge cu 100 km/oră pe noua autostradă din regiunea Moldovei (#şîeu).
În mod similar, o clădire „zgârie-nori” cu 100 de etaje din Statele Unite ale
Americii nu este doar o simplă clădire cu 10 etaje din România construită la o scară
de 10 ori mai mare.
28 ARHITECTURA SISTEMELOR DE CALCUL

În cazul calculatoarelor, nu este vorba de factori de 10 (un ordin de mărime),


ci de factori de un milion (trei ordine de mărime), obţinuţi de parcursul a cinci
decenii de progres tehnologic constant. Câştigurile oferite de legea lui Moore pot fi
astfel folosite de producătorii de cipuri în mai multe feluri. O primă modalitate este
de a construi calculatoare din ce în ce mai puternice la preţ constant. O altă
abordare este construirea aceluiaşi calculator la un cost tot mai scăzut în fiecare an.
Industria de calculatoare a parcurs ambele căi, şi a făcut chiar mai mult,
astfel încât s-a ajuns la gama deosebit de largă de sisteme de calcul disponibile în
prezent. O clasificare foarte aproximativă a computerelor actuale este oferită în
figura 1.10.

Fig. 1.10. Gama computerelor disponibile în prezent, costurile fiind orientative [71].
2. TIPURI DE ARHITECTURI

2.1. Clasificarea arhitecturii sistemelor de calcul

2.1.1. Clasificarea Flynn

Clasificarea Flynn se face după gradul de multiplicitate al şirurilor formate


din secvenţe de instrucţiuni şi secvenţe de date care pot fi tratate simultan din punct
de vedere hardware. Prin secvenţă de date se înţelege un şir de date de intrare,
rezultate parţiale sau rezultate temporare care sunt apelate de către o secvenţă de
instrucţiuni.
Conform acestei clasificări există patru tipuri de arhitecturi:
 SISD (Single Instruction Stream – Single Data Stream);
 SIMD (Single Instruction Stream – Multiple Data Stream);
 MISD (Multiple Instruction Stream – Single Data Stream);
 MIMD (Multiple Instruction Stream – Multiple Data Stream).
Pentru aceste arhitecturi există trei tipuri de componente de sistem: UC
(unitatea centrală), UP (unitatea de prelucrare) şi MM (modulul de memorie).
Deşi sunt diferite între ele, toate schemele următoare respectă succesiunea
evenimentelor din arhitectura Von Neumann: instrucţiunile şi datele sunt extrase
din memorie, instrucţiunile sunt decodate de UC care trimite secvenţa de
instrucţiuni către UP pentru execuţie, datele circulă între memorie şi procesor pe o
cale bidirecţională.
În continuare se va nota şirul de date cu SD şi cel de instrucţiuni cu SI.

2.1.1.1. Arhitectura SISD

Fig. 2.1. Structura arhitecturii SISD.

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

 un calculator cu structură SISD poate avea mai multe elemente de


prelucrare (funcţii definite), toate găsindu-se sub supervizarea aceleiaşi
unice UC.
Exemple: IBM 7090, VAX 11/780, CDC 6600, IBM 360/91, CRAY.
Limitările arhitecturii SISD
La acest tip de arhitecturi, viteza calculatorului este determinată de perioada
ceasului. Dacă perioada ceasului scade, calculatorul devine în consecinţă mai rapid.
Pentru a obţine un ceas mai rapid există două posibilităţi:
 calea de semnal să fie mai scurtă;
 tranzistoarele folosite să fie mai rapide.
Din nefericire, se pare că ambele au atins o anumită limitare din punct de
vedere tehnologic.
Scurtarea căii de semnal ar costa foarte mult. Creşterea numărului de
tranzistoare pe unitatea de arie ar duce la creşterea dramatică a căldurii disipate în
exterior. Sistemele suplimentare de răcire ar costa şi ele foarte mult.
Se lucrează în prezent la fabricarea unor cipuri de joasă putere (Low Power
Chips) care ar duce la scăderea căldurii generate. Aceasta se poate realiza prin
menţinerea constantă a densităţii de energie în timp ce numărul de tranzistoare pe
unitatea de arie a cipurilor ar creşte.
Realizarea de tranzistoare mai rapizi este, de asemenea, foarte costisitoare.
În acest scop se lucrează la scăderea rezistenţei firelor prin care trece curentul.
Aluminiul este elementul folosit în 1998, dar recent s-a reuşit construcţia unui cip
cu fire din cupru. Concomitent cu scăderea rezistenţei firelor se lucrează şi la
îmbunătăţirea izolaţiei dintre fire.
Este evident că perioada ceasului nu poate fi făcută egală cu 0. În consecinţă,
modul secvenţial de tratare a operaţiilor impus de arhitectura von Neumann
distruge orice speranţă într-o viitoare creştere a vitezei calculatoarelor. Această
situaţie este cunoscută sub denumirea de gâtul sticlei lui Neumann (Neumann
bottleneck). Pentru a sparge această limitare, trebuie introdusă o arhitectură de tip
neserial. Alternativa este reprezentată de arhitecturile de calcul paralele.

2.1.1.2. Arhitectura SIMD


Caracteristici:
 există mai multe UP datorită şirului de date multiplu, preluat din
memoria partajată (memoria împărţită în mai multe memorii);
 corespunde matricelor de microprocesoare: UP identice şi supervizate
de o singură UC;
 toate UP primesc instrucţiunile (setul unic de instrucţiuni) care acţionează
asupra unor seturi de date diferite, provenite din şiruri diferite de date
SD1, ..., SDn;
 maşinile SIMD pot efectua două tipuri de prelucrări: pe cuvânt (word-
slice) şi pe bit (bit-slice).
Tipuri de arhitecturi 31

Fig. 2.2. Structura arhitecturii SIMD.

Aceste tipuri de maşini lucrează foarte bine pe seturi de date formate de


matrice de dimensiuni foarte mari atunci când este necesar să se execute asupra lor
aceeaşi operaţie. Maşinile SIMD sunt eficiente şi în cazul procesării reţelelor neurale.
Exemplu: CM (Connection Machine) fabricată de Thinking Machines
Company din Cambridge (Massachusetts).
Unităţile moderne de procesare grafică (GPU) se bazează foarte mult pe
procesarea SIMD, care oferă o putere computaţională masivă cu puţine
tranzistoare. Programele grafice se rezolvă cu procesoare SIMD deoarece
majoritatea algoritmilor sunt foarte regulaţi, cu operaţii repetate pe pixeli, vârfuri,
texturi şi muchii.
Figura 2.3 arată procesorul SIMD bazat pe nucleul GPU Nvidia Fermi. Un
GPU Fermi conţine până la 16 multiprocesoare de flux SIMD (SM), fiecare SM
conţinând 32 de procesoare SIMD. În fiecare ciclu, planificatorul selectează două
fire (threads) pe care să le execute pe procesorul SIMD. Următoarea instrucţiune
din fiecare fir se execută apoi pe maximum 16 procesoare SIMD, deşi posibil pe
mai puţine, dacă nu există suficient paralelism pe calea de date. Dacă fiecare fir
este capabil să efectueze 16 operaţii pe ciclu, un nucleu Fermi GPU complet
încărcat cu 32 SM-uri va efectua 512 operaţii pe ciclu. Aceasta este o trăsătură
impresionantă, având în vedere că un procesor quad-core de dimensiuni similare
poate realiza cel mult o prelucrare de 1/32 din aceasta.
Un procesor vectorial îi apare unui programator într-un mod foarte
asemănător unui procesor SIMD. La fel ca un procesor SIMD, este foarte eficient
la execuţia unei secvenţe de operaţii pe perechi de elemente de date. Dar, spre
deosebire de un procesor SIMD, toate operaţiile sunt realizate într-o singură unitate
funcţională, cu un grad foarte ridicat de pipeline.
Compania Cray Research a produs multe procesoare vectoriale, începând cu
Cray-1 (1974) şi până la modelele curente. Atât procesoarele SIMD cât şi cele
vectoriale lucrează cu matrice de date. Ambele execută instrucţiuni singulare care,
de exemplu, adună componentele pe perechi la procesarea a doi vectori. Dar, în
timp ce procesorul SIMD o face având la dispoziţie un număr de sumatoare egal cu
numărul de componente ale vectorului, procesorul vectorial foloseşte conceptul de
registru vectorial, care constă dintr-un set de registre convenţionale care pot fi
încărcate din memorie la o instrucţiune singulară, încărcarea efectivă fiind serială.
32 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.3. Exemplu de arhitectură SIMD: nucleul de la GPU Fermi (Nvidia) [71].

Apoi, o instrucţiune de adunare vectorială efectuează adunarea pe perechi a


componentelor celor doi vectori prin încărcarea acestora la un sumator pipeline din
cele două registre vectoriale. Rezultatul de la ieşirea sumatorului este un alt vector,
care poate fi stocat într-un registru vectorial sau utilizat direct ca operand pentru o
altă operaţie vectorială. Instrucţiunile SSE (Streaming SIMD Extension), disponibile
în arhitectura Intel Core, utilizează acest model de execuţie pentru a accelera
puternic calculele obişnuite pentru aplicaţii multimedia şi de software ştiinţific.
Limitările arhitecturii SIMD
Aceste tipuri de maşini sunt destul de scumpe în ceea ce priveşte costurile de
producţie, deoarece bancurile de procesoare nu sunt componente standard. Chiar
dacă numărul celor care au nevoie de astfel de maşini este în continuă creştere,
aceştia nu sunt destul de numeroşi pentru a justifica existenţa unor fabrici dedicate
exclusiv producţiei de SIMD-uri. În consecinţă, aceste maşini sunt în general
făcute la comandă şi costă foarte mult.
Tipuri de arhitecturi 33

2.1.1.3. Arhitectura MISD


Deşi această maşină este posibil de realizat din punct de vedere teoretic, nu a
fost niciodată fabricată în scop comercial. A fost construită în laboratoare de
cercetare, dar nu au existat clienţi dornici să investească într-o astfel de arhitectură,
deoarece nu se adresează nici uneia dintre aplicaţiile de bază.

Fig. 2.4. Structura arhitecturii MISD.

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

2.1.1.4. Arhitectura MIMD


Aceste tipuri de calculatoare sunt cunoscute sub denumirea de
multiprocesoare, chiar dacă şi maşinile SIMD sunt tot multiprocesor. În
calculatoarele MIMD paralelismul este realizat prin lansarea în execuţie a mai
multor instrucţiuni în acelaşi timp pe diferite seturi de date. Este evident că sunt
necesare elemente adiţionale de control pentru a trimite instrucţiunea corectă şi
data care trebuie la procesorul ales, toate în acelaşi timp. Cele mai multe sisteme
multiprocesor intră în această clasă.

Fig. 2.5. Structura arhitecturii MIMD.

Avantajele arhitecturii MIMD sunt:


 viteză mare de prelucrare, dacă prelucrarea poate fi descompusă în fire
paralele, toate procesoarele prelucrând simultan;
34 ARHITECTURA SISTEMELOR DE CALCUL

 întrucât procesoarele şi blocurile de memorie sunt resurse de tip general,


defectarea unei unităţi se poate compensa prin alocarea sarcinii de
prelucrare altei unităţi (grad ridicat de toleranţă la defectări);
 se poate utiliza reconfigurarea dinamică pentru a face faţă gradelor
variabile de încărcare a procesoarelor.
Exemple de sisteme MIMD: C.mmp, Cm* (Carnegie Mellon University),
Ultracomputer (New York University), Cedar (University of Illinois), BBN
Butterfly, Alliant FX, CM-5 (Thinking Machine Corporation), seria Intel iPSc etc.
Sistemele MIMD se mai numesc intrinseci sau propriu-zise dacă au UP
interactive: toate şirurile de date provin din acelaşi spaţiu de memorie adresat de
cele n procesoare (dacă nu se întâmplă acest lucru – spaţii disjuncte ale memoriei –
se spune că există un set de n sisteme SISD independente).
Cele două tipuri de sisteme prezentate mai sus se mai numesc shared
memory (memoria este accesată de toate procesoarele) şi shared nothing (fiecare
procesor are propria memorie, propriul disc şi propriul sistem de comunicaţii).
Dacă la un sistem MIMD intrinsec interacţiunea între microprocesoare este
puternică, sistemul se numeşte cu cuplaj strâns. Legătura procesor – memorie se
face prin intermediul unor magistrale de interconectare. Comunicaţia şi sincronizarea
între procesoare se realizează prin zone comune de memorie. Avantaj: comoditate
de programare oferită de spaţiul comun de adrese (shared address space).
În caz contrar, sistemul se numeşte cu cuplaj slab. Legătura procesor –
memorie se face prin conexiuni seriale punct-la-punct (de tip reţea). Comunicaţia
între procesoare se face prin mesaje (message passing). Fiecare procesor dispune
de memorie proprie (private memory). Avantaj: scalabilitate (posibilitate comodă
de expandare). Cele mai multe sisteme comerciale sunt cu cuplaj slab.
Exemple: IBM 370/168 – cuplaj slab, CRAY 2 – cuplaj strâns.
Figura 2.6 arată 5 cazuri în care gradul de cuplaj scade de la stânga la dreapta.

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

2.1.1.5. Sisteme cu memorie partajată (shared memory)


În cazul maşinilor cu memorie partajată, maşina originală von Neumann a
fost extinsă prin includerea a ceea ce se numeşte memorie cache. Aceasta este o
memorie locală ataşată fiecărui procesor în parte, care îi permite procesorului să
aibă acces rapid la propriile seturi de instrucţiuni şi date, dar să poată accesa în
continuare memoria principală prin magistrala de memorie. Acest tip de maşină se
mai numeşte arhitectură cu multiprocesare simetrică şi este prezentat în figura 2.7.

Fig. 2.7. Arhitectura sistemelor shared memory.

Dintre sistemele mai vechi, în această categorie se înscrie seria IBM


RS/6000: J40, J50, R40 şi R50. Modelul J40 are două nivele de cache în loc de
unul singur. În loc să folosească o magistrală pentru a lega diferitele procesoare cu
memoria principală, IBM a dezvoltat un aşa-numit crossbar care, spre deosebire de
magistrala convenţională, permite până la patru transferuri simultane cu memoria.
Limitările arhitecturilor MIMD cu memorie partajată

Fig. 2.8. Limitările calculatoarelor cu memorie partajată.

La aceste arhitecturi, „gâtul sticlei” (bottleneck) îl reprezintă magistrala de


memorie. Toate instrucţiunile şi datele fiecărui procesor trebuie să treacă prin
această magistrală. Când procesoarele care folosesc aceeaşi memorie sunt puţine,
performanţele depind liniar de numărul procesoarelor. Pe măsură ce acesta creşte,
mărirea performanţelor este din ce în ce mai slabă, aşa cum rezultă din figura 2.8.
36 ARHITECTURA SISTEMELOR DE CALCUL

Există două tipuri de sisteme MIMD cu memorie partajată:


 cu resurse globale (Global Shared Memory):
o arhitectura UMA (Uniform Memory Access);
o arhitectura UMA cu memorii cache locale;
 cu resurse distribuite (Distributed Shared Memory):
o arhitectura NUMA (Non-Uniform Memory Access);
o arhitectura COMA (Cache-Only Memory Access);
o arhitectura CC-NUMA (Cache Coherent Non-Uniform Memory Access).
A. Arhitecturile GSM (Global Shared Memory)
Calculatoarele MIMD cu spaţiu unic de memorie au un cost relativ scăzut şi, din
acest motiv, se bucură de o popularitate ridicată. Acestea sunt considerate a fi sisteme
cu cuplaj strâns, datorită gradului ridicat de partajare a resurselor. Funcţionarea
întregului sistem paralel este coordonată de către un singur sistem de operare, care
se ocupă de planificarea în execuţie a proceselor pe procesoarele disponibile în
sistem, în condiţiile în care se doreşte o încărcare cât mai echilibrată a acestora.
Arhitectura UMA (Uniform Memory Access)
Memoria fizică a calculatoarelor de tip UMA este compusă din mai multe
blocuri care formează un spaţiu unic de adresare. Procesoarele accesează blocurile
de memorie prin intermediul reţelei de interconectare (vezi figura 2.9), care poate fi
statică (formată din conexiuni fixe, punct-la-punct, între nodurile reţelei) sau
dinamică (formată din conexiuni variabile în timp, de tip crossbar).

Fig. 2.9. Arhitectura UMA.

Principala caracteristică a calculatoarelor UMA este că toate procesoarele au


timp de acces egal la memoria partajată. Însă, tocmai de aceea, numărul
procesoarelor utilizate în cadrul sistemului paralel nu poate fi foarte mare, deoarece
creşterea numărului de procesoare din sistem atrage după sine o probabilitate mai
mare de conflict în ceea ce priveşte accesarea concurentă a aceleiaşi zone de
memorie. Într-un astfel de caz, se vor înregistra timpi de aşteptare care vor conduce
la o utilizare ineficientă a procesoarelor şi la o încărcare neechilibrată a acestora.
În plus, pentru obţinerea unor performanţe deosebite, reţeaua de comunicaţie
va trebui să ofere o lărgime de bandă suficient de mare, deoarece fiecare procesor
poate necesita accesul la memoria partajată, ceea ce presupune transportul datelor
solicitate din memoria comună către procesorul care a formulat cererea.
Tipuri de arhitecturi 37

Arhitectura UMA cu memorii cache locale


O îmbunătăţire adusă modelului UMA o reprezintă utilizarea memoriilor
cache la nivelul elementelor de procesare (vezi figura 2.10). Fiecare procesor va
avea asociată o astfel de memorie. Atunci când un procesor solicită date, mai întâi
se verifică dacă aceste date se găsesc deja în memoria cache locală. În caz
afirmativ, acestea se transferă foarte rapid procesorului, fără a accesa memoria
partajată. Astfel, problema conflictelor de acces concurent la spaţiul unic de
memorie se rezolvă, cel puţin, parţial. Mult mai puţine cereri vor ajunge să
acceseze memoria partajată şi, din acest motiv, probabilitatea de apariţie a
conflictelor devine mult mai mică.

Fig. 2.10. Arhitectura UMA cu memorii cache locale.

Utilizarea memoriilor cache presupune însă şi asigurarea consistenţei


acestora. În momentul în care anumite date stocate în memoria globală se modifică,
aceste modificări trebuie să fie semnalate tuturor memoriilor cache care stochează
cópii ale datelor respective. Mai mult chiar, atunci când se schimbă conţinutul
datelor de la nivelul unei memorii cache este nevoie ca modificările să fie efectuate
în toate memoriile cache care conţin cópii ale datelor actualizate. Menţinerea
coerenţei memoriei cache se poate realiza atât prin mecanisme software, cât şi prin
mecanisme hardware. Modelele cu acces neuniform la memorie încearcă să evite
dezavantajele întâlnite la calculatoarele de tip UMA.
B. Arhitecturile DSM (Distributed Shared Memory)
Reprezintă sisteme cu memorie partajată, dar care este distribuită din punct
de vedere fizic. Astfel, procesoarele au asociate memorii locale care formează
împreună o memorie globală care poate fi accesată direct de către toate elementele
de procesare. Timpul de acces la locaţiile de memorie nu mai este uniform, el
depinzând de localizarea fizică a datelor care se doresc a fi transferate.
Arhitectura NUMA (Non-Uniform Memory Access)
În cazul acestui model, memoria partajată este distribuită fizic procesoarelor
din sistem (vezi figura 2.11). Astfel, fiecare element de procesare are asociată o
memorie locală. Toate aceste memorii locale formează un spaţiu unic de adresă şi,
38 ARHITECTURA SISTEMELOR DE CALCUL

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.11. Arhitectura NUMA.

Observaţie. Sistemele NUMA sunt foarte asemănătoare sistemelor distribuite,


din moment ce fiecare procesor dispune de o memorie locală, iar toate aceste
module locale formează un spaţiu unic de adresare.
O caracteristică importantă pentru maşinile NUMA este factorul NUMA.
Acest factor arată diferenţele de latenţă pentru accesarea datelor din memoria
locală comparativ cu accesarea dintr-o zonă care nu este locală. În funcţie de
conexiunile sistemului, factorul NUMA poate diferi pentru diverse părţi ale
maşinii: accesarea datelor dintr-un nod vecin este mai rapidă decât accesarea
datelor dintr-un nod mai îndepărtat pentru care este necesară traversarea unui
număr mai mare de etaje crossbar. Aşadar, atunci când este menţionat, factorul
NUMA se referă de obicei la cele mai îndepărtate două procesoare ale unei reţele.
Arhitectura COMA (Cache-Only Memory Access)
În cazul modelului COMA, spaţiul global de adrese este format din memorii
cache locale fiecărui procesor. Atunci când un procesor are nevoie de anumite date,
acestea sunt mai întâi aduse în memoria cache de către controlerul de memorie,
după care acestea vor fi accesate foarte rapid (vezi figura 2.12).

Fig. 2.12. Arhitectura COMA.


Tipuri de arhitecturi 39

Observaţie. Dispare conceptul de memorie globală, controlerul de memorie


având responsabilitatea de a încărca în memoriile cache locale datele ce urmează a
fi accesate de către procesoare. Încărcarea datelor presupune localizarea şi
transportul acestora prin intermediul reţelei de interconectare. Prin folosirea
memoriilor cache locale, probabilitatea ca un procesor să acceseze majoritar date
numai din memoria locală creste foarte mult.
Totuşi, folosirea memoriilor cache pe post de memorii locale atrage după
sine şi o serie de probleme. Atunci când se încearcă aducerea unui bloc de date
într-o memorie cache integral ocupată, apare necesitatea mutării unui alt bloc de
date pentru a se crea spaţiul necesar memorării noului bloc care va fi accesat de
către procesor. Însă, din cauza faptului că nu mai există o memorie globală în care
să se scrie acest bloc, va fi nevoie ca datele conţinute să fie mutate în memoria cache
a unui alt procesor. Aceste date însă nu vor fi niciodată accesate de către procesorul
care foloseşte memoria respectivă, ceea ce conduce la o scădere a eficienţei de
utilizare a sistemului. În plus, operaţia de transfer a blocului de date dintr-o
memorie cache în alta este şi ea consumatoare de timpi de procesare, din moment
ce datele trebuie să circule prin reţeaua de interconectare. Aceşti timpi morţi atrag
după sine o utilizare ineficientă şi o încărcare neechilibrată a procesoarelor.
O altă problemă o reprezintă asigurarea coerenţei memoriilor cache, în
contextul în care operaţiile de mutare a blocurilor devin din ce în ce mai
complicate, atunci când numărul de procesoare din sistem este din ce în ce mai
mare. Controlerul de memorie trebuie să asigure gestiunea nu numai a datelor care
vor fi aduse în memoriile cache, ci şi a blocurilor care au fost mutate dintr-o memorie
locală în alta. Din aceste motive, arhitectura COMA este tot mai rar folosită.
Arhitectura CC-NUMA (Coherent Cache NUMA)
Modelul CC-NUMA combină modul în care este construit spaţiul unic de
adresă la calculatoarele de tip NUMA şi la cele de tip COMA. Fiecare element de
procesare al unui calculator de tip CC-NUMA dispune atât de o memorie locală.
cât şi de o memorie cache asociată (vezi figura 2.13).

Fig. 2.13. Arhitectura CC-NUMA.


40 ARHITECTURA SISTEMELOR DE CALCUL

Ca şi în cazul modelului NUMA, accesul la datele stocate în memoria locală


proprie este foarte rapid. Accesarea unor date aflate în memoria locală a unui alt
procesor implică aducerea acestora în memoria locală proprie. Transferul de date
folosind reţeaua de comunicaţie atrage după sine întârzieri, deoarece nu este la fel
de rapid precum accesarea memoriilor locale.
Existenţa memoriilor cache are ca efect reducerea traficului prin reţeaua de
comunicaţie. Datele solicitate de către un procesor sunt mai întâi căutate în
memoriile locale, după care sunt aduse în memoria cache, în cazul în care acestea
se găsesc în memoria locală a unui alt procesor. La accesările ulterioare, se va
folosi copia datelor respective stocată în memoria cache, deci nu va mai fi nevoie
ca datele să fie din nou transferate prin reţeaua de interconectare.
Utilizarea memoriile cache implică necesitatea implementării unor
mecanisme software sau hardware care să asigure consistenţa memoriilor cache. La
modificarea unor date aflate în memoria locală a unui procesor, este nevoie să se
actualizeze toate copiile acestor date aflate în memoriile cache. Aceste mecanisme
care asigură coerenţa memoriilor cache contribuie la creşterea traficului efectuat în
cadrul reţelei de interconectare.
Arhitectura CC-NUMA este utilizată de o serie de supercalculatoare foarte
cunoscute: Bull NovaScale, HP Superdome şi SGI Altix.
Dezavantajele arhitecturilor DSM
Principalul dezavantaj al arhitecturilor MIMD cu memorie distribuită şi cu
spaţiu individual de adresare (NUMA, COMA, CC-NUMA) îl reprezintă
întârzierile care pot să apară atunci când un procesor doreşte să acceseze date aflate
în memoria locală a unui alt element de procesare. Aceste întârzieri sunt cauzate de
faptul că procesorul respectiv va aştepta ca datele solicitate să fie transportate în
memoria sa locală. Pentru minimizarea timpilor de inactivitate, procesorul în cauză
poate efectua o comutare de procese, atunci când procesul activ este blocat în
aşteptarea datelor solicitate. În general comutarea proceselor este o operaţiune
complexă, implicând costuri importante, ce pot influenţa performanţele sistemului.
Eficienţa operaţiei de comutare poate fi substanţial îmbunătăţită prin
utilizarea firelor de execuţie (thread-uri). Un proces poate fi împărţit în mai multe
fire de execuţie, care comunică între ele prin accesul la spaţiul de adresă alocat
procesului, pe care îl partajează. Din acest motiv, firele de execuţie reprezintă un
mecanism eficient de exploatare a concurenţei programelor.
Un fir de execuţie reprezintă cea mai mică entitate de planificare în sistemele
bazate pe thread-uri. Comutarea între două fire de execuţie care aparţin aceluiaşi
proces este o operaţie foarte rapidă, care nu atrage după sine costuri suplimentare
semnificative. Astfel, procesul activ este suspendat până în momentul în care datele
solicitate au fost aduse în memoria locală. În acest timp, este executat un alt fir de
execuţie al aceluiaşi proces. Această comutare între fire de execuţie aparţinând
aceluiaşi proces conduce la scăderea timpilor de inactivitate şi, implicit, la creşterea
eficienţei cu care este utilizat sistemul paralel.
Calculatoarele MIMD cu memorie distribuită se numesc multicalculatoare şi
reprezintă sisteme cu cuplaj slab, din cauza gradului redus de partajare a resurselor.
Tipuri de arhitecturi 41

Principalul avantaj al acestor sisteme îl reprezintă scalabilitatea, adică,


posibilitatea extinderii prin conectarea unor noi procesoare. Creşterea numărului de
procesoare nu atrage după sine probleme legate de accesul concurent la memorie,
deoarece majoritatea apelurilor sunt către memoria locală. Însă transferul de mesaje
presupune schimburi de date care pot aglomera reţeaua. Transferul de date între
două procesoare este o operaţie mare consumatoare de timp. Din acest motiv,
performanţele reţelei de interconectare pot influenţa în mod hotărâtor eficienţa cu
care este utilizat sistemul paralel. În plus, este foarte greu ca sarcina de calcul
distribuită procesoarelor să fie echilibrată. Sistemul de operare rulează în fiecare
nod şi, din acest motiv, întregul sistem poate fi văzut ca fiind format din staţii de
lucru care comunică prin transfer de mesaje. Complexitatea acestor sisteme este
foarte mare, datorită faptului că într-un nod de procesare individual se poate găsi
un simplu procesor sau un întreg sistem de tip UMA.
Exemple de arhitecturi MIMD cu memorie partajată
Din perspectivă istorică, maşinile paralele cu memorie partajată sunt de trei
categorii: bazate pe magistrală (Pentium SMP, nodul IBM SP), bazate pe directoare
de tip CC-NUMA (Origin 2000) şi cu spaţiu de adresare global (Cray T3D, T3E).
Maşinile multiprocesor din anii '60 ai secolului trecut aveau structura din
figura 2.14 a. Capacitatea de memorare sau posibilitatea de comunicare I/O se
puteau ameliora prin adăugarea de module de memorie şi de dispozitive I/O.

Fig. 2.14. (a) Arhitectura sistemelor multiprocesor; (b) Arhitectura reţelei crossbar (multistage).

Creşterea capacităţii de procesare se putea realiza prin adăugarea de


procesoare. Apărea deja necesitatea unei interconectări a modulelor de memorie, a
procesoarelor şi a legăturilor cu canalele I/O. Se foloseau reţele multietajate de tip
crossbar sau multistage (vezi figura 2.14 b). Memoriile cache, marea lovitură a
anilor '70, au fost de natură a influenţa puternic structurile de memorare. Sistemele
de memorie scalate prin adăugarea de module suplimentare aveau nevoie de
capacitate, dar şi de viteză ridicată. Memoria era o sursă de strangulări (bottleneck).
Introducerea memoriilor cache a schimbat aproape radical datele problemei.

2.1.1.6. Sisteme fără memorie partajată (shared nothing)


În acest caz, fiecare procesor are propria lui memorie. Aceste maşini sunt
practic calculatoare independente legate într-o reţea. Fiecare calculator se mai
numeşte şi nod (al reţelei). Arhitectura shared nothing se mai numeşte cu
multiprocesare asimetrică şi este prezentată în figura 2.15.
42 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.15. Arhitectura sistemelor shared nothing.

Pentru ca aceste calculatoare să lucreze bine trebuie să existe un protocol


bun de transmitere a mesajelor între ele. Acest protocol trebuie să fie foarte rapid şi
fără erori. IBM foloseşte în acest scop protocolul Message Passing Interface (MPI)
şi mai multe căi redundante care formează un switch de mare viteză.
Aceste noduri sunt conectate şi printr-o reţea convenţională Ethernet din
motive de management al sistemului.

2.1.2. Clasificarea Wang

Criteriul de clasificare este în acest caz gradul de paralelism în procesarea


cuvintelor, respectiv biţilor de date. Datele pot fi configurate într-o matrice (vezi
figura 2.16). Se notează cu m numărul de cuvinte procesate la un moment dat şi cu
n lungimea unui cuvânt.

Fig. 2.16. Organizarea datelor într-o matrice.

Conform acestei clasificări, există patru tipuri de arhitecturi:


 WSBS (Word Serial – Bit Serial). Se lucrează pe un singur cuvânt,
fiecare cuvânt fiind prelucrat bit cu bit: m = 1, n = 1;
 WSBP (Word Serial – Bit Parallel): m = 1, n > 1;
 WPBS (Word Parallel – Bit Serial): m > 1, n = 1;
 WPBP (Word Parallel – Bit Parallel): m > 1, n > 1.
În cazul tipului WPBP, structura paralelă este completă, corespunzătoare
prelucrării pe matrice m  n.
În cazul tipului WSBP, prelucrarea este pe orizontală, iar în cazul tipului
WPBS, prelucrarea este pe verticală.
Tipuri de arhitecturi 43

2.1.3. Clasificarea Tanenbaum

Clasificarea Tanenbaum este una integratoare, care ţine cont şi de criteriile


clasificării Flynn, pe care o include, dar şi de toate tipurile de structuri de
paralelism, inclusiv modul de partajare al memoriei (shared memory) şi de
organizare a fluxurilor de date (message passing), aşa cum se vede în figura 2.17.

Fig. 2.17. Clasificarea calculatoarelor paralele (Tanenbaum) [71], cu:


MPP = procesoare masiv paralele (Massive Parallel Processors);
COW = cluster de staţii de lucru (Cluster Of Workstations).

2.2. Structura fizică a unui calculator secvenţial

Calculatorul numeric este un sistem fizic de prelucrare automată a


informaţiei codificate sub formă de valori discrete, conform unui program, care
indică o succesiune determinată de operaţii aritmetice şi logice. Sistemul de calcul
este compus din două subsisteme principale:
 subsistemul hardware (echipamente fizice componente);
 subsistemul software (programele şi structurile de date).
Structura de bază a calculatorului secvenţial, cu program memorat, stabilită
de von Neumann în 1945, este reprezentată în figura 2.18 şi cuprinde cinci unităţi
funcţionale: unitatea de intrare (UI), unitatea de memorare (M), unitatea de ieşire
(UE), unitatea aritmetico-logică (UAL) şi unitatea de comandă (UCd).
44 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.18. Maşina von Neumann.

Linia continuă reprezintă fluxul de date şi instrucţiuni, iar linia întreruptă,


fluxul de comenzi şi stări.
Unitatea de comandă (UCda) controlează activitatea tuturor componentelor
din sistem pe baza unei secvenţe de instrucţiuni, reprezentând programul memorat.
Caracterul secvenţial al calculatorului rezultă din modul de execuţie al
programului. Sunt necesare următoarele etape majore (vezi figura 2.19):
 încărcarea instrucţiunii IF (instruction fetch);
 decodificarea instrucţiunii ID (instruction decoding);
 încărcarea (din memorie) a operanzilor OF (operand fetch);
 execuţia operaţiilor impuse de instrucţiune EX (execution).
După terminarea unei instrucţiuni, se trece la următoarea instrucţiune. Astfel,
programul este executat secvenţial, instrucţiune cu instrucţiune.

Fig. 2.19. Etapele execuţiei secvenţiale a unei instrucţiuni.

Unitatea aritmetico-logică (ALU) realizează prelucrarea informaţiei preluate


din memorie, iar rezultatele se depun din nou în memorie sau sunt furnizate în
exterior.
Tipuri de arhitecturi 45

ALU realizează două categorii de operaţii:


 aritmetice: adunare, scădere, înmulţire, împărţire;
 logice: ŞI, SAU, SAU-EXCLUSIV, NEGAŢIE.
Unitatea de comandă, cea aritmetico-logică şi memoria formează unitatea
centrală (UC sau CPU) a calculatorului. Datele şi programele sunt introduse în
calculator prin intermediul unităţii de intrare, fiind apoi depuse în memorie.

2.2.1. Structuri de calculatoare paralele

Calculatoarele paralele se clasifică în trei configuraţii arhitecturale:


 calculatoare pipeline (CPL);
 calculatoare (procesoare) matriceale (CM);
 calculatoare (sisteme) multiprocesor (CMP).
Un calculator pipeline utilizează paralelismul temporar. Procesoarele
matriceale se bazează pe mai multe unităţi ALU sincronizate pentru a atinge
paralelismul spaţial. Un sistem multiprocesor este caracterizat de paralelism
asincron, în sensul că setul de procesoare din structura sa interacţionează şi îşi
împart resursele (memorii, baze de date). În acelaşi timp, procesoarele matriceale
apelează la paralelism sincron (blocuri comandate printr-un unic semnal de ceas).
Cele patru tipuri de paralelism enunţate nu se exclud reciproc. Cele mai
multe dintre procesoarele actuale au structura internă bazată pe tehnologia pipeline
şi multe dintre acestea pot fi organizate în sisteme matriceale sau multiprocesor.
Diferenţa de bază dintre un procesor matriceal şi un sistem multiprocesor este
aceea că unităţile funcţionale din procesorul matriceal operează sincron, în timp ce
procesoarele sistemului multiprocesor funcţionează asincron. Tendinţele indică
utilizarea calculatoarelor controlate prin flux de date cu procesoare
algoritmice VLSI. Aceste tipuri de calculatoare sunt caracterizate printr-o creştere
masivă a hardware-ului pentru a atinge paralelismul.

2.2.1.1. Calculatoare pipeline


Execuţia unei instrucţiuni presupune patru faze majore: încărcarea
instrucţiunii – IF, decodarea instrucţiunii – ID, încărcarea operanzilor – OF şi
execuţia efectivă – EX. În procesoarele non-pipeline, aceste faze se desfăşoară
secvenţial, iar în procesoarele pipeline se desfăşoară cu paralelism temporal.
Pentru procesoare complexe, faza de execuţie a instrucţiunii poate fi
partajată în suboperaţii organizate după principiul pipeline. Problemele care apar în
calculatoarele pipeline sunt datorate conflictelor de acces la memorie, salturilor şi
întreruperilor. Datorită suprapunerii operaţiilor, calculatoarele pipeline (CPL) sunt
optimizate pentru a efectua operaţii de acelaşi tip. Ori de câte ori se modifică tipul
operaţiei (instrucţiunii), registrele pipeline trebuie şterse şi reîncărcate şi, ca
urmare, se consumă timp suplimentar. Proiectarea CPL include: secvenţializarea
sarcinilor (task-urilor), prevenirea conflictelor de acces (coliziunilor), controlul
congestiei şi controlul salturilor în program.
46 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.20. Structura funcţională a unui calculator pipeline.

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.

2.2.1.2. Calculatoare matriceale


Un procesor matriceal tipic este prezentat în figura 2.22. Există două unităţi
funcţionale distincte: o unitate de control şi sincronizare a elementelor de procesare
(care are ca sarcină suplimentară efectuarea operaţiilor cu scalari) şi o unitate de
prelucrare matriceală. Fiecare element de prelucrare (EP) reprezintă un element
pasiv, adică, fără posibilitatea de a decodifica instrucţiuni.
Încărcarea instrucţiunilor şi decodarea lor (fazele IF şi ID) pentru unitatea de
prelucrare matriceală este efectuată de către unitatea de control, prin intermediul
unei reţele de interconectare între EP. Fiecare element de prelucrare este alcătuit
dintr-o unitate ALU, registre şi memorie locală, iar conexiunea dintre elemente este
realizată într-o arhitectură de tip NUMA.

Fig. 2.22. Structura funcţională a unui calculator matriceal.


48 ARHITECTURA SISTEMELOR DE CALCUL

Pentru o sesiune de lucru specifică, unitatea de control stabileşte funcţia


ALU pentru fiecare EP, după care transferă operanzi din exterior către memoriile
locale ale EP şi rezultatele de la un EP spre alt EP (utilizând reţeaua de
interconectare). Programarea CM este mult mai dificilă decât programarea CPL.

2.2.1.3. Calculatoare multiprocesor


Structură de bază a unui CMP este prezentată în figura 2.23.

Fig. 2.23. Calculator multiprocesor.

Notaţiile din figura 2.23 sunt următoarele:


 P1 … Pn – procesoare;
 ML1 … MLn – memorii locale.
Sistemul este alcătuit din mai multe procesoare care împart resurse comune
(memorie), dar posedă şi resurse proprii (private), într-o arhitectură de tip UMA cu
memorii (cache) locale. Procesoarele funcţionează independent (asincron), dar
trebuie să comunice între ele.
Structura de interconectare între procesoare şi între procesoare şi resursele
comune determină organizarea sistemului multiprocesor. Există trei mari categorii
de interconectări:
1. partajarea unei magistrale comune (bus);
2. utilizarea unei reţele de interconectare totală (crossbar);
3. utilizarea unei memorii multiport (ca memorie comună, duală).
CMP pot fi centralizate sau distribuite. Sistemele centralizate conţin toate
procesoarele în acelaşi sistem de calcul, spre deosebire de sistemele distribuite, în
care procesoarele pot fi fizic plasate în subsisteme diferite. Pentru sistemele
distribuite este necesară o reţea de comunicaţie rapidă, flexibilă/adaptabilă şi fiabilă.
Tipuri de arhitecturi 49

2.2.2. Mecanisme de prelucrare paralelă

Aceste soluţii de implementare a prelucrării paralele sunt corelate cu


arhitecturile clasificării Flynn în privinţa soluţiilor hardware, soluţiile software
fiind specifice sistemelor de operare care gestionează intervalele de timp alocate
diferitelor aplicaţii şi speculând astfel posibilitatea prelucrărilor paralele.

2.2.2.1. Soluţii hardware de prelucrare paralelă


Multiplicarea şi specializarea unităţilor aritmetico-logice (ALU)
Procesoarele clasice aveau o singură unitate de tip ALU. În acest fel, nu se
efectua decât o singură operaţie la un moment dat. Prin multiplicarea ALU,
majoritatea funcţiilor pot fi distribuite între unităţile specializate pe o anumită
funcţie aritmetică sau logică şi pot funcţiona în paralel. În unele procesoare există
două ALU care pot lucra în paralel (o unitate pentru aritmetica în virgulă fixă şi
alta pentru aritmetica în virgulă mobilă). Ideea specializării funcţionale şi a
distribuirii şi multiplicării ALU (numite şi unităţi funcţionale) poate fi extinsă atât
la sistemele multiprocesor, cât şi la cele matriceale. Acest mecanism constituie, de
fapt, implementarea paralelismului la sistemele SISD.
Figura 2.24 prezintă un exemplu de schemă pentru figurarea acestei soluţii.

Fig. 2.24. Multiplicarea ALU prin specializarea pe operaţii.


50 ARHITECTURA SISTEMELOR DE CALCUL

Unitatea centrală conţine 5 unităţi ALU specializate pe diferite operaţii, care


pot lucra în paralel. În timp ce o instrucţiune este executată de o anumită unitate
ALU, unitatea de comandă încarcă şi decodifică o altă instrucţiune pe care o
încredinţează unei alte unităţi ALU ş.a.m.d.
Sistemul este eficient dacă timpul de execuţie de către ALU a unei operaţii
este mult mai mare decât timpul de încărcare şi decodificare a unei instrucţiuni.
Această condiţie este, în general, îndeplinită. Exprimarea algebrică a condiţiei de
eficienţă pentru multiplicarea şi specializarea ALU este:

tEX(ALU) >> tIF + tID.

Paralelism şi structură pipeline în CPU


Primele generaţii de microprocesoare utilizau ALU (în special, sumatoare)
care operau cu flux de biţi (serial).
Introducerea unui ALU care operează în paralel, pe flux de 8, 16, 32 sau 64
biţi simultan (cu sumatoare, cu transport anticipat sau multiplicatoare matriceale)
duce la creşterea vitezei de prelucrare.
Arhitectura superscalară
În arhitectura superscalară, şiruri de instrucţiuni diferite (de obicei două,
eventual mai multe), utilizează resurse diferite în aceleaşi stadii de execuţie a
instrucţiunilor de pe fiecare şir.
Un exemplu particular de arhitectură superscalară este prezentat în figura 2.25.

Fig. 2.25. Arhitectura superscalară.

Structura superscalară cu tehnică de burst (citire în rafale) este folosită


începând cu microprocesorul 80486 şi este corelată cu momentul introducerii în
capsula procesorului a memoriei cache de nivel 1.
Tipuri de arhitecturi 51

Tehnica burst foloseşte această memorie pentru a citi blocuri de instrucţiuni


din memoria cache, instrucţiuni care au fost încărcate acolo din memoria principală
(MP) în mod secvenţial (vezi figura 2.26). În acest mod, se citesc dintr-o dată fie
două, fie patru cuvinte, în funcţie de dimensiunea instrucţiunii (pe 32 sau 16 biţi).
S-a folosit iniţial o magistrală internă între cache şi decodificatorul de instrucţiuni
de 64 biţi, ajungându-se în prezent la 128 de biţi.

Fig. 2.26. Arhitectura superscalară cu tehnică de burst (citire în rafale).

Exemplu. Schema din figura 2.27 reprezintă o arhitectură superscalară cu


trei şiruri de instrucţiuni diferite. Se execută în acelaşi timp o operaţie cu numere
reale şi două operaţii cu numere întregi. Fiecare unitate este de tip pipeline şi poate
executa câteva operaţii în diferite stagii pipeline.

Fig. 2.27. Exemplu de arhitectură superscalară cu trei unităţi pipeline în paralel [71].
52 ARHITECTURA SISTEMELOR DE CALCUL

Exemplu. Schema din figura 2.28 reprezintă o arhitectură superscalară cu


pipeline dual, având în total 5 stagii, dintre care primul stagiu este comun (unitatea
instruction fetch joacă aici rolul de buffer şi semaforizare a şirurilor de instrucţiuni).

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

Exemplu. Schema din figura 2.29 reprezintă arhitectura unui procesor


superscalar tot cu 5 stagii, dar la care doar cel de-al patrulea stagiu este paralelizat
printr-o structură superscalară a unităţii de calcul (se disting două blocuri ALU de
uz general, un bloc de calcul în virgulă mobilă şi două blocuri specializate pe
operaţiile care fac apel la memoria principală: load & store).
Arhitectura superpipeline
Se bazează pe divizarea stagiului pipeline în substagii şi, deci, pe creşterea
numărul de instrucţiuni care sunt procesate de pipeline la un moment dat.
Divizând fiecare stagiu în două substagii, perioada ciclului de ceas τ va fi
redusă la jumătate: τ/2.
Tipuri de arhitecturi 53

La capacitate maximă, structura pipeline produce un rezultat la fiecare τ/2


secunde. Pentru o arhitectură dată şi setul de instrucţiuni aferent ei, există un număr
optim de stagii pipeline. Dacă numărul de stagii pipeline creşte peste această limită,
se va reduce performanţa globală. O soluţie pentru a creşte viteza fără a face
compromisuri este arhitectura superscalară, prezentată anterior.
În figura 2.30, este prezentat un exemplu de execuţie pipeline (a),
superpipeline (b) şi superscalară (c) a unei instrucţiuni.

Fig. 2.30. Modul de operare al tehnicilor pipeline (a), superpipeline (b) şi superscalară (c).

Suprapunerea operaţiilor CPU cu operaţiile I/O


Utilizarea unor controlere I/O specializate permite efectuarea în paralel a
operaţiilor interne ale CPU cu operaţiile de transfer de date pe canalele I/O.
Exemple de controlere I/O:
 controlere DMA (Direct Memory Access), care permit transferul direct de
date: memorie – memorie sau memorie – canale I/O, bazat pe principiul
cererii de magistrală (aceasta reprezintă una dintre tehnicile evoluate de
transfer de date, vezi paragraful 3.4.4.2);
 procesoare specializate I/O, care lucrează pe canale I/O cu sarcini specifice.
54 ARHITECTURA SISTEMELOR DE CALCUL

Unitate ALU vectorială

Fig. 2.31. Arhitectură SIMD cu unitate ALU vectorială.

Este o soluţie de paralelism pentru sistemele SIMD, prezentată în figura 2.31.


Utilizarea unui sistem ierarhizat de memorie
Memoria unui sistem de calcul trebuie să satisfacă mai multe cerinţe, adesea
contradictorii: capacitate mare, timp de acces mic, cost rezonabil şi dimensiuni
reduse. Aceste cerinţe nu pot fi îndeplinite simultan de un singur tip de memorie.
Cu tehnologia actuală se pot realiza memorii de mare viteză, dar de capacitate mică
(RAM static), memorii de capacitate mare, dar de viteză medie (variante de
memorii DRAM) sau memorii de capacitate foarte mare, dar cu timp de acces
ridicat (memorii externe pe suport magnetic sau optic).
În sistemele de calcul performante, spaţiul de memorare este ierarhizat pe
mai multe nivele, cu scopul de a beneficia de avantajele oferite de diverse tipuri de
memorii. Un sistem de calcul cu memorie organizată ierarhizat poate echilibra
diferenţele de viteză între componentele sistemului (CPU, memorie, discuri) .
Într-o astfel de arhitectură, memoria este organizată pe patru niveluri:
 registrele CPU;
 memoria cache (MC);
 memoria principală sau operativă (MP);
 memoria virtuală (MV).
Registrele CPU sunt direct adresabile de către ALU.
Memoria cache (rapidă) este cea mai apropiată de CPU, ceea ce impune ca
timpul de acces să fie mic, capacitatea fiind limitată. Aici sunt păstrate instrucţiunile
şi datele cu probabilitatea cea mai mare de a fi utilizate într-o proximitate de timp.
Memoria cache reprezintă un tampon între memoria principală şi CPU.
Memoria principală sau operativă păstrează programele şi datele aferente
în curs de execuţie. Ea poate fi adresată în mod aleatoriu de un program utilizator.
Are o capacitate medie-mare şi un timp de acces mediu. Este un tampon între
memoria virtuală şi CPU.
Tipuri de arhitecturi 55

Memoria virtuală este un concept arhitectural prin care memoria operativă


este extinsă peste spaţiul de adresare al memoriei externe (hard disk, bandă
magnetică). Prin tehnicile de implementare, numite segmentare şi paginare (vezi
capitolul 6), se urmăresc două aspecte esenţiale:
 creşterea resurselor de memorare disponibile pentru programele utilizator;
 protejarea zonelor de memorie alocate modulelor de program.
Memoria virtuală este utilă în cazul sistemelor de operare multitasking şi
multiuser (Windows, Unix).
În figura 2.32 este reprezentată structura piramidală a unui sistem ierarhizat
de memorie fizică, având 5 niveluri şi la care distanţa faţă de microprocesor este
direct proporţional cu capacitatea şi invers proporţional cu viteza de lucru.
(capacitatea şi timpul de acces cresc de sus în jos).

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

În general, tehnicile de implementare a MC şi a MV sunt transparente pentru


programele utilizator. Aparent, programele de aplicaţie lucrează numai cu memoria
principală. Transferul de informaţii între diferitele nivele de memorie se realizează
în mod automat, fie de către componente hardware specializate (unitatea de gestiune
a memoriei, MMU), fie de către sistemul de operare. Procesoarele recente oferă
suport hardware pentru implementarea memoriei cache şi a memoriei virtuale.
Eficienţa utilizării unei arhitecturi ierarhizate de memorie se bazează pe
câteva principii legate de modul de utilizare a informaţiilor conţinute în memorie.
Astfel, conform principiului localizării referinţei, adresarea locaţiilor de
memorie se realizează într-o secvenţă repetitivă. Există o probabilitate mare ca o
locaţie adresată de curând să fie adresată şi într-un timp imediat – localizare
temporară – şi, similar, este previzibil ca şi locaţiile adiacente să fie accesate în
curând – localizare spaţială. Principiile localizării temporale şi spaţiale sunt o
consecinţă a modului uzual de execuţie a secvenţelor de program.
56 ARHITECTURA SISTEMELOR DE CALCUL

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.

2.2.2.2. Soluţii software de prelucrare paralelă


Prelucrarea pe loturi
Prelucrarea pe loturi (batch processing) presupune formarea unui fişier cu
extensia .bat şi lansarea lui. Procesele au loc succesiv, iar CPU (care execută
operaţiile de calcul) nu este folosită în mod eficient.
Exemplu. Fie trei procese paralele, P1, P2 şi P3, fiecare fiind văzut în timp
ca o succesiune de trei etape: intrare (i), calcul (c), ieşire (o) (vezi figura 2.33.a).

Fig. 2.33. (a) Prelucrarea pe loturi; (b) Multiprogramarea.


Tipuri de arhitecturi 57

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

Fig. 2.34. Repartizarea în timp a desfăşurării proceselor (time sharing).


58 ARHITECTURA SISTEMELOR DE CALCUL

Dacă nu există proces dominant, atunci etapele de calcul nu se mai împart în


cuante de timp egale. În funcţie de modul de repartizare al cuantelor de timp
variabile, se poate face ca procesele să se termine aproximativ în acelaşi interval de
timp (acelaşi număr de repetări ale ciclurilor pentru cuantele de timp alocate
etapelor de calcul).
Diviziunea în timp este o atribuţie a sistemului de operare (numit, în acest
caz, sistem de operare cu diviziune în timp). Utilizarea diviziunii în timp a
programelor/proceselor în sisteme uniprocesor creează conceptul de procesor virtual.
Exemplu: sisteme de calcul cu un singur procesor şi mai multe terminale.
Pentru subiectul uman, răspunsul unicului procesor este suficient de rapid astfel
încât să se considere că fiecare terminal operează independent, ca şi cum ar poseda
el însuşi procesorul (utilizatorul are impresia că lucrează singur pe calculator).
Similar, conceptul de diviziune în timp poate fi extins la sisteme multiprocesor.
Observaţii.
1. În cazul multiprogramării, procesele îşi termină faza de calcul (în CPU),
apărând suprapunere doar între operaţii CPU şi operaţii I/O.
2. În cazul diviziunii în timp, procesele nu îşi termină faza de calcul înainte
de a se executa alt proces; procesele pot fi intercalate, astfel încât să se
câştige timp de execuţie în raport cu multiprogramarea (suprapuneri între
operaţii CPU şi operaţii I/O, respectiv între diferite operaţii I/O).
Noţiunea de multithreading
Termenul de multithreading reprezintă un aspect important al proiectării
software, care necesită atenţie specială în construcţia sistemelor mari şi, în deosebi,
atunci când se pune problema eficienţei (exprimate în termeni de viteză a
sistemului) şi a performanţei (exprimate în termeni de corectitudine în funcţionare
a sistemului). Folosind adecvat instrucţiunile de multithreading, se pot realiza
aplicaţii optimizate.
Fiecare aplicaţie sau program care rulează pe sistemul de operare este un
proces alcătuit din unul sau mai multe fire (thread-uri). Un thread este un set de
instrucţiuni sau o parte anume a aplicaţiei, care se execută independent în cadrul
programului sau sistemului. Thread-urile sunt entităţi responsabile cu multitasking-ul
în cadrul unei singure aplicaţii. De obicei, sistemul de operare (SO) se ocupă cu
programarea şi executarea thread-urilor.
Multithreading-ul presupune execuţia în paralel a mai multor procese, pentru
a îmbunătăţi eficienţa sistemului. Thread-urile sunt implementate în situaţiile în
care trebuie îndeplinite mai multe sarcini simultan.
Avantajele threading-ului sunt următoarele:
 sarcinile care cer mai mult timp de execuţie pot fi rulate în background;
 interfaţa aplicaţiei poate fi realizată mai atrăgător şi mai simplu de
utilizat (de ex.: după apăsarea unui buton se afişează o bară de progres);
 viteza aplicaţiei poate creşte;
 thread-urile pot fi folositoare în situaţiile în care există decalaje între
anumite evenimente, putându-se astfel elibera anumite resurse care nu
sunt necesare la un moment dat.
Tipuri de arhitecturi 59

Modelele de threading suportate de sistemele win32 sunt:


1. Modelul thread-ului unic (Single Thread Model). Acest tip de thread
presupune rularea unui singur thread la un moment dat. Restul thread-urilor trebuie
să aştepte. Principalul dezavantaj al acestui tip de thread îl reprezintă timpii lungi
de execuţie pentru sarcini mici. Corespunde din punct de vedere conceptual
prelucrării pe loturi (batch processing).
2. Modelul Apartment Thread (Single Thread Apartment Model – STA). În
acest model, pot exista mai multe thread-uri care se execută în cadrul aplicaţiei. În
STA, fiecare thread este izolat într-un „apartament” separat în cadrul procesului.
Fiecare proces poate avea mai multe apartamente, care pot partaja date între ele. În
acest caz, aplicaţia este răspunzătoare pentru stabilirea duratei fiecărui thread din
cadrul fiecărui apartament. Toate cererile sunt ordonate folosind Windows Message
Queue, astfel încât un singur apartament poate fi accesat la un moment dat.
Avantajul acestui model fată de modelul thread-ului unic este că se pot procesa
simultan mai multe cereri ale utilizatorului. Totuşi, nu este atinsă încă eficienţa
maximă, deoarece sarcinile se vor executa una după alta. Corespunde din punct de
vedere conceptual multiprogramării.
3. Modelul Multithread Apartment (Free Thread Apartment Model – FTA).
Modelul Multithread Apartment presupune existenţa unui singur apartament. Nu
este nevoie de ordonare, deoarece toate thread-urile aparţin aceluiaşi apartament şi
pot partaje resursele. Aceste aplicaţii se execută mai rapid decât cele care
implementează modelul unic sau STA, deoarece sistemul este mai puţin solicitat şi
poate fi optimizat să elimine timpii morţi. Corespunde din punct de vedere
conceptual diviziunii în timp (time sharing).Aceste tipuri de aplicaţii sunt foarte
complexe, deoarece trebuie să se asigure că thread-urile nu accesează simultan
aceleaşi resurse (principiul pipeline). Este, astfel, absolut necesar să se furnizeze un
sistem de blocare a resurselor. Acesta trebuie implementat cu atenţie, deoarece
poate conduce la blocarea totală a sistemului.
Prin natura şi arhitectura sa, mediul de programare Microsoft .NET
Framework este un mediu de tip multithreading.
Evaluarea performanţelor. Utilizând de n ori mai multe resurse în paralel,
un algoritm nu va rula de n ori mai repede, din cauza fenomenului de timp
suplimentar (overhead), indus prin aplicarea paralelismului. Acest timp
suplimentar apare din următoarele cauze:
 interacţiunea între procese (transmiterea rezultatelor intermediare sau
parţiale) şi sincronizarea proceselor;
 inactivitatea temporară (idling), care înseamnă că există procese inactive
pe anumite perioade de timp, datorită încărcării inegale şi a aşteptării
sincronizării;
 calculele suplimentare, care nu apar în formularea serială a algoritmului.
Parametrii de intrare care contribuie la calculul performanţelor sunt:
 timpul de execuţie secvenţial sau serial, TS (timpul măsurat de la
începutul şi până la sfârşitul execuţiei algoritmului pe un calculator
secvenţial);
60 ARHITECTURA SISTEMELOR DE CALCUL

 timpul de execuţie paralel, TP (timpul măsurat de la începutul execuţiei


şi până la terminarea ultimului subtask paralel);
 numărul de procesoare, p.
Cu ajutorul acestora, se pot calcula următorii parametri de ieşire:
Suprasarcina, TO (Total Parallel Overhead) = diferenţa dintre timpul total
de lucru însumat al tuturor procesoarelor şi timpul necesar celui mai rapid algoritm
secvenţial (măsurată în secunde sau submultipli):
 dacă procesoarele nu sunt identice (valorile TS diferă), atunci:

TO = Σi Ti – mini Ti, cu i = 1, 2, ..., p

 dacă procesoarele sunt identice, atunci:

TO = (p – 1)TS, cu TS = timpul de lucru serial al unui procesor

Accelerarea, S (Speedup) = raportul dintre timpul necesar rezolvării unei


probleme pe un procesor şi timpul necesar rezolvării aceleiaşi probleme în paralel
pe p procesoare identice (mărime adimensională):
 dacă procesoarele nu sunt identice (valorile TS diferă), atunci:

Si = Ti / TP, i = 1, 2, ..., p, de unde S = media aritmetică a valorilor Si

 dacă procesoarele sunt identice, atunci:

S = TS / TP, cu TS = timpul de lucru serial al unui procesor

Eficienţa utilizării calculatorului paralel, E (mărime intensivă, adimensională):

E = S / p = TS / pTP (dacă procesoarele sunt identice)

Costul, C = timpul total de lucru însumat al procesoarelor (mărime tehnico-


economică, măsurată în secunde sau submultipli):

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

Folosind procesoare superscalare, apare şi o a treia soluţie posibilă:


multithreading simultan, văzut ca un rafinament al multithreading-ului de
granulaţie brută, în care unui singur fir de execuţie (thread) i se permite să ruleze
două instrucţiuni pe ciclu, atât timp cât este posibil, dar atunci când apare o pauză,
instrucţiunile sunt imediat preluate din următorul fir din secvenţă, pentru a menţine
procesorul complet ocupat (vezi figura 2.36, a, b, c).
Multithreading-ul simultan poate ajuta, de asemenea, să se păstreze ocupate
toate blocurile hardware. Atunci când o instrucţiune nu poate fi rulată, deoarece un
bloc de care aceasta are nevoie momentan este ocupat, se alege o instrucţiune (un
ciclu) dintr-un alt fir. În figura 2.36 c, se presupune că B8 din ciclul 11 se
blochează şi, ca urmare, în ciclul 12 porneşte C7 (fără pauze).
În figura 2.37 este prezentat un exemplu de hyperthreading (de la Intel), cu
partajarea resurselor între thread-uri în microarhitectura Core i7 (Sandy Bridge).
62 ARHITECTURA SISTEMELOR DE CALCUL

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. Categorii de calculatoare mari

Calculatoarele mari pot fi grupate în 6 categorii, în funcţie de structură,


dimensiuni, viteză, putere de calcul şi domenii de utilizare:
 mainframe-uri;
 supercalculatoare;
 servere;
 cluster-e;
 centre de date;
 cloud computing.

2.3.1. Mainframe-uri

Un mainframe este un computer mare, folosit de instituţii guvernamentale şi


companii pentru procesarea datelor importante în statistică, recensăminte, cercetare
şi dezvoltare, proiectare, prognoză, planificarea producţiei, tranzacţii financiare etc.
Ca aspect exterior, primele mainframe-uri arătau ca nişte dulapuri uriaşe de metal.
Cu trecerea anilor, tehnologiile de fabricaţie s-au dezvoltat, mărimea fizică a
mainframe-urilor a scăzut, iar viteza lor de calcul a crescut foarte mult.
Prin mainframe se înţelege un calculator compatibil cu modelele de tip IBM
System/360 (1965). Actualmente, cel mai modern model de la IBM este System
z14 (2018). Sunt considerate mainframe-uri calculatoarele actuale de tip: Nova
(Fujitsu-Siemens), DPS (Groupe Bull), NonStop (Hewlett-Packard), ClearPath
(Unisys) şi cele compatibile IBM System zn (Hitachi, Platform Solutions).
Un mainframe poate rula sau găzdui mai multe sisteme de operare simultan,
funcţionând ca mai multe maşini virtuale. Un mainframe poate înlocui astfel chiar
şi câteva sute de servere de dimensiuni mici (de exemplu, în aplicaţii Web),
reducând costurile de întreţinere, dar menţinând un nivel ridicat de siguranţă.
Tipuri de arhitecturi 63

Î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

Un supercalculator este un calculator complex cu destinaţie specială,


compus din mai multe procesoare care accesează aceeaşi memorie centrală şi care
funcţionează concomitent şi coordonat, în cooperare strânsă, astfel încât poate
atinge o performanţă totală de calcul foarte ridicată. Modul de operare al
supercalculatoarelor este calculul paralel. Numărul de procesoare interconectate ale
unui supercalculator depăşeşte la anumite modele chiar şi 300.000.
Până recent, supercalculatoarele erau mai puternice decât mainframe-urile,
având CPU-uri extrem de rapide, mulţi gigaocteţi de memorie principală, discuri şi
reţele foarte rapide. Au fost folosite pentru calculele ştiinţifice şi inginereşti foarte
masive, cum ar fi simularea ciocnirii galaxiilor, sintetizarea de noi medicamente
sau modelarea fluxului de aer în jurul unei aripi de avion.
Cu toate acestea, în ultimii ani, centrele de date (data centers) construite din
componente comerciale de bază, au oferit tot mai multă putere de calcul la preţuri
mult mai mici, iar adevăratele supercomputere de odinioară sunt acum o specie pe
cale de dispariţie.
64 ARHITECTURA SISTEMELOR DE CALCUL

Pentru a menţine costul unui asemenea supercalculator la un nivel rezonabil,


există arhitecturi care fac uz de procesoare mai ieftine şi mai lente, dar foarte
numeroase, grupate în aşa-numite cluster-e.
Printre primele firme care au produs supercalculatoare pe piaţă s-a numărat
firma Cray (modelul Cray-1 din 1976 a atins viteza de calcul de 130 Mflops). În
acest domeniu, există o listă (actualizată de două ori de an) a celor mai rapide 500
de supercalculatoare din lume (Top 500), care se bazează pe testul standardizat de
benchmarking numit Linpack. Pe lângă supercalculatoarele comerciale, există şi
linia supercalculatoarelor militare.
Exemplu: arhitectura supercalculatorului bazat pe IBM BlueGene/L/P/Q.
Modelele IBM BlueGene au deţinut în ultimii 20 de ani (2018) poziţii în
primele 10 locuri din Top 500. Această serie de calculatoare se bazează pe un nou
concept, care renunţă la creşterea frecvenţei de ceas în favoarea micşorării
componentelor, creşterii densităţii acestora şi reducerii consumului de putere.
Reducerea frecvenţei de ceas este compensată prin mărirea gradului de paralelism,
folosind un număr mai ridicat de procesoare.
Arhitectura modelului IBM BlueGene/L este reprezentată în figura 2.38.

Fig. 2.38. Arhitectura IBM BlueGene/L.


Tipuri de arhitecturi 65

Procesorul de bază la IBM BlueGene/L este un PowerPC 440 la 700 MHz.


Două astfel de procesoare sunt amplasate pe un cip împreună cu o memorie cache
L3 de 4 MB partajată şi 2 KB memorie cache L2 pentru fiecare procesor. Fiecare
procesor are două porturi de încărcare şi unul de stocare către memoriile cache L2,
funcţionând cu 8 biţi/ciclu. Aceasta este jumătate din banda necesară celor două
unităţi de virgulă mobilă (FPU). Procesoarele au o memorie cache L1 de 32 KB
pentru instrucţiuni şi date, în situaţii favorabile atingând performanţe de 2,8
Gflops/2. Se observă că memoria cache L1 este mai mare decât L2, un lucru
neobişnuit, care permite însă atingerea unor viteze de procesare mai mari.
Sistemul este alcătuit astfel: sunt introduse două cipuri pe o placă cu o
memorie de 512 MB, şaisprezece asemenea plăci sunt plasate pe o altă placă nod,
iar 32 de plăci nod sunt introduse într-un aşa-numit cabinet. Aşadar, un cabinet
conţine 1024 cipuri (2048 CPU). Pentru configuraţia maximă, se folosesc 64 de
cabinete cuplate, care formează un sistem cu 65.356 cipuri şi 130.712 CPU.
În modul normal de operare, o unitate de procesare a unui cip este folosită
pentru calcule, iar cealaltă, pentru sarcinile de comunicare. În acest fel,
performanţa de vârf teoretică a sistemului este de 183,5 Tflops. Dacă necesităţile
de comunicare sunt mici, se pot folosi ambele procesoare pentru calcule, dublând
viteza de vârf, ajungând la 360 Tflops.
Din punct de vedere al interconectării, BlueGene/L posedă mai multe reţele:
două reţele pentru conectarea procesoarelor, o reţea inel 3D şi o reţea arbore.
Reţeaua inel este folosită pentru comunicaţii generale, iar cea arbore pentru
comunicaţii colective: broadcast, operaţii de reducere etc. Lărgimea de bandă a
reţelei arbore este de două ori mai mare decât a reţelei inel, ajungând la 350 MB/s
(faţă de 175 MB/s).
Performanţele globale ale sistemului ajung la 280,6 Tflops pentru testul
Linpack. În urma rulării acestui benchmark, s-a efectuat rezolvarea unui sistem
liniar de N = 1.769.471 ecuaţii. Eficienţa rezultată a fost de 76%.
Supercalculatoarele care au la bază modelul IBM BlueGene/L şi versiunile
sale ulterioare (P, Q) implementează arhitectura masiv paralelă. Aceasta constă
într-un număr de procesoare (de obicei, foarte mare, de ordinul miilor) inter-
conectate şi controlate de un singur computer central. Fiecare CPU are memoria sa
şi spaţiul de date propriu, care conţine şi o copie a sistemului de operare. Toate
CPU-urile comunică între ele cu ajutorul unor interconectări de foarte mare viteză.

2.3.3. Servere

Calculatoarele personale sau staţiile de lucru (workstations) sunt adesea


folosite ca servere de reţea, atât pentru reţelele locale (LAN, de obicei în cadrul
unei singure companii), cât şi pentru reţelele Internet (WAN sau metropolitane).
Acestea vin în configuraţii cu un singur procesor şi cu mai multe procesoare, având
gigaocteţi de memorie, teraocteţi de spaţiu pe hard disk şi reţele de mare viteză
(mii de tranzacţii pe secundă).
66 ARHITECTURA SISTEMELOR DE CALCUL

Cu toate acestea, din punct de vedere arhitectural, un server cu un singur


procesor nu este foarte diferit de la un computer personal (PC) monoprocesor. Este
doar mai rapid, mai mare, are mai mult spaţiu pe disc şi, eventual, o conexiune la
reţea mai rapidă. Serverele au aceleaşi sisteme de operare ca la computerele
personale, de obicei variante de Unix sau Windows.

2.3.4. Cluster-e

Datorită îmbunătăţirilor aproape permanente ale raportului preţ/performanţă


al serverelor, în ultimii ani, proiectanţii de sisteme au început să conecteze laolaltă
un număr mare de servere, pentru a forma cluster-e. Acestea constau în sisteme din
clasa standard a serverelor, conectate prin reţele de ordinul gigabiţilor/secundă şi
rulând un software special, care permite tuturor maşinilor să colaboreze la
rezolvarea aceleiaşi probleme, aceasta fiind adesea din afaceri, ştiinţă sau inginerie.
În mod normal, aceste cluster-e sunt numite computere COTS (Commodity
Off The Shelf), pe care oricine le poate procura de la un furnizor de PC-uri.
Principalul plus este reţeaua de mare viteză, dar uneori aceasta foloseşte, de
asemenea, o placă de reţea standard de pe piaţă.

2.3.5. Centre de date

Cluster-ele mari sunt adăpostite în mod obişnuit în camere sau clădiri cu


destinaţie specială, numite centre de date (data centers). Centrele de date au o
scală destul de largă, de la câteva maşini la 100.000 sau mai multe. De obicei,
suma disponibilă (costul) este factor de limitare. Datorită preţului scăzut al
componentelor, companiile individuale pot acum să deţină astfel de maşini pentru
uz intern.
Mulţi oameni folosesc în mod interschimbabil termenii de cluster şi data
centers, deşi, tehnic vorbind, primul înseamnă o colecţie de servere, iar cel de-al
doilea, încăperea sau clădirea care le găzduieşte.
O utilizare obişnuită pentru un cluster este cea de server Web de Internet.
Atunci când un website aşteaptă mii de cereri pe secundă pentru paginile sale, cea
mai economică soluţie este de a construi un centru de date cu sute sau chiar mii de
servere. Cererile sosite sunt apoi distribuite între servere pentru a le permite să fie
procesate în paralel.
De exemplu, Google dispune de centre de date în întreaga lume, pentru a fi
servi cererile de căutare, cel mai mare dintre acestea aflându-se în The Dalles,
Oregon, şi fiind la fel de mare ca două terenuri de fotbal american. Locaţia a fost
astfel aleasă deoarece centrele de date necesită cantităţi mari de energie electrică,
iar în The Dalles este amplasată o hidrocentrală de 2 GW, la un baraj de pe râul
Columbia. În total, Google este proiectat să aibă mai mult de 1.000.000 de servere
în centrele sale de date.
Tipuri de arhitecturi 67

Industria calculatoarelor este una foarte dinamică, în continuă schimbare. În


anii '60, tehnica de calcul era dominată de computerele gigantice de tip mainframe,
care costau zeci de milioane de dolari şi la care utilizatorii se conectau prin
terminale la distanţă. Acesta a fost un model foarte centralizat, care a fost înlocuit
apoi, în anii 1980, de computerele personale. La apariţia acestora, milioane de
oameni le-au achiziţionat, ceea ce a contribuit esenţial la descentralizarea
sistemelor de calcul.

2.4. Exemple de arhitecturi

2.4.1. Arhitecturi uniprocesor

Se bazează pe cele trei componente majore: CPU, memoria, subsistemul I/O.


VAX 11/780 (superminicalculator)
Sistemul a fost produs de firma DEC. Schema arhitecturii generale este
prezentată în figura 2.39.

Fig. 2.39. Schema arhitecturii generale pentru VAX 11/780.

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

 CVM = coprocesor de virgulă mobilă;


 MP = memoria principală (maxim 232 cuvinte);
 C = consolă;
 F = floppy disk;
 SBI = interfaţa cu magistrala sincronă (Synchronous Bus Interface);
 AU = adaptor unibus, cu (U) = magistrală unibus;
 AMB = adaptor masterbus, cu (M) = magistrală masterbus.
CPU mai conţine un registru de stare, care indică starea curentă a
microprocesorului, a programului care se execută şi a memoriei cache.
IBM 370/168

Fig. 2.40. Schema arhitecturii generale pentru IBM 370/168.

Schema de principiu (vezi figura 2.40) conţine:


 MP = memoria principală;
 LSU = local storage unit (unitate de memorie locală);
 CM = controller memory (legătură multiport CPU – memorie);
 SS I/O = subsisteme de intrare-ieşire (mai multe canale asincrone).
IBM RS/6000 model 250
Arhitectura simplificată este prezentată în figura 2.41.

Fig. 2.41. Schema arhitecturii generale pentru IBM RS/6000-250.


Tipuri de arhitecturi 69

Schema de principiu conţine:


 PPC = PowerPC – Processor Optimized With Enhanced RISC
Performance Chip;
 SIMM = Small In-line Memory Modules (module de memorie);
 CTRL = controler;
 MCA = magistrală de control şi adresă;
 Ethernet = controler de reţea.

2.4.2. Arhitecturi multiprocesor

Arhitecturile multiprocesor sunt cel mai bun exemplu al tentativei de a


paraleliza un sistem de calcul. Acestea sunt de două tipuri: cele care folosesc
procesoare multiple, discrete, pe o placă de bază sau sisteme hardware speciale şi
cele care folosesc mai multe nuclee în interiorul unui singur procesor fizic.

2.4.2.1. Arhitecturi cu procesoare multiple


Arhitecturile cu procesoare multiple pot fi de două feluri:
 cu multiprocesare simetrică;
 cu multiprocesare asimetrică.
Multiprocesarea simetrică utilizează mai multe procesoare fizice legate
printr-o magistrală de memorie partajată şi suportul magnetic aferent (vezi
paragrafele 2.1.1.4 şi 2.2.1.3, referitoare la sisteme cu memorie partajată – shared
memory şi calculatoare multiprocesor).
În cazul sistemelor cu arhitecturi de multiprocesare asimetrică, fiecare
procesor are alt task. Exemple: cipseturile 3D din plăcile grafice moderne şi
cluster-ele de calculatoare personale (Beowulf), în care fiecare procesor are acces
numai la memoria calculatorului din care face parte (vezi paragraful 2.1.1.5,
referitor la sisteme fără memorie partajată – shared nothing).
IBM RS/6000 model F50
Sistemul cuprinde între 1 şi 4 procesoare Power PC cu cache extern şi are o
magistrală de 64 de biţi. Memoria cache se numeşte 8-way (cu 8 căi) pentru că datele
sunt grupate în seturi de câte 8  64 biţi. Memoria foloseşte date de 72 biţi: 64 pentru
date şi 8 pentru codul corector de erori (ECC = Erorr Correction Code). Procesorul
are o arhitectură de tip superscalar şi poate executa până la 4 instrucţiuni pe ciclu.
Caracteristici (vezi figura 2.42):
 frecvenţa de tact: 166–332 MHz, 87 MHz pentru magistrala de memorie;
 32 KB cache de date, 32 KB cache de instrucţiuni;
 magistrală de date de 64 de biţi şi magistrală de adrese de 32 de biţi;
 memorie de până la 4 GB şi memorie virtuală de până la 4 PB (1P = 252).
Arhitectura Intel multiprocesor
Arhitectura multiprocesor propusă de firma Intel este reprezentată prin
schema din figura 2.43.
70 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.42. Schema arhitecturii generale pentru IBM RS/6000-F50.

Fig. 2.43. Schema arhitecturii Intel multiprocesor.

Notaţiile din schemă au următoarele semnificaţii: BSP = Bootstrap Processor,


AP = Application Processor, APIC = Advanced Programmable Integrated Circuit,
ICC Bus = Interrupt Controller Communications Bus.
Tipuri de arhitecturi 71

2.4.2.2. Arhitecturi biprocesor


Un sistem care suportă două procesoare trebuie să aibă o placă de bază
adaptată pentru a servi două CPU. În acest scop, placa de bază este dotată cu o
magistrală specială, a cărei construcţii depinde de la producător la producător, dar
care se conformează unor reguli generale.
Astfel, cele două CPU sunt servite de două interfeţe paralele cu magistrala
principală a sistemului, iar arbitrarea traficului pe aceasta este efectuată de un
controler specializat. Accesul la magistrală este multiplexat, astfel că la un anumit
moment de timp şi pentru o durată bine stabilită (fixă sau adaptată sarcinii curente)
accesul la magistrală îl are doar un singur procesor. Aceste tipuri de scheme pot
cuprinde zone de memorie cache comune (integral sau parţial), iar magistrala poate
fi cu lăţime variabilă sau cu adaptare dinamică la cereri.
Pentium II biprocesor

Fig. 2.44. Arhitectura unui sistem biprocesor cu Pentium II.

Specific arhitecturii biprocesor Pentium II din figura 2.44 este magistrala


privată de date, care permite celor două chip-seturi cu funcţii particulare să
comunice între ele pe o cale directă, scurtă şi rapidă, fără a mai fi necesar ca
transferurile să treacă prin magistrala gazdă a sistemului.
AMD Athlon biprocesor
Este un exemplu de arhitectură biprocesor construită pe baza cipsetului 760
al firmei AMD (vezi figura 2.45). Creşterea performanţelor este realizată prin
utilizarea magistralei punct-la-punct (Point-to-Point) şi a modului snoop.
72 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.45. Arhitectura unui sistem biprocesor cu AMD Athlon.

Modul snoop permite citirea datelor de către un procesor din celălalt


procesor (prin intermediul northbridge-ului), nemaifiind necesară accesarea
memoriei. Acest mod elimină tehnica prin care datele necesare unuia din cele două
procesoare erau înscrise în memorie de către primul procesor şi apoi citite de către
cel de-al doilea.
AMD K7 biprocesor
Microprocesorul AMD K7 lucrează pe magistrala ultrarapidă EV6 la
frecvenţa de 200 MHz. Astfel, K7 poate folosi memorii foarte rapide şi cu lărgime
de bandă mare, cum este Rambus DRAM. Datorită suportului multiprocesor al
protocolului de magistrală EV6, sistemele AMD pot fi folosite în domeniul staţiilor
de lucru şi al serverelor. Arhitectura EV6 permite o flexibilitate ridicată, cu
facilităţi de tipul topologiei punct-la-punct şi clock-forwarding. Magistralele de
date şi de adrese sunt decuplate, procesorul putând să emită cereri în timp ce
primeşte date şi comenzi de la logica de sistem. Tot aici sunt gestionate
transferurile cu sistemul, către memorie sau către magistralele AGP şi PCI.
Schema bloc a acestei arhitecturi este prezentată în figura 2.46.
Sun SPARC IV biprocesor
Arhitectura biprocesor bazată pe microprocesorul Sun SPARC IV este
prezentată în figura 2.47. Notaţiile din schemă au următoarele semnificaţii:
ECC = Error Checking/Correction Code (cod de verificare/corecţie de
erori), DCSS = Dual Chip Data Switch (bloc de alegere a cipului), SIU = System
Interface Unit (unitatea de interfaţă cu sistemul), MCU = Memory Control Unit
(unitate de comandă a memoriei).
Tipuri de arhitecturi 73

Fig. 2.46. Arhitectura unui sistem biprocesor cu AMD K7 pe magistrala EV6.

Fig. 2.47. Arhitectura Sun SPARC IV biprocesor.


74 ARHITECTURA SISTEMELOR DE CALCUL

Se observă că cele două procesoare au atât memorie cache comună, cât şi


individuală. Accesul la memoria comună se realizează prin intermediul unui
multiplexor, care nu permite lucrul simultan celor două CPU cu aceasta, pentru a
preveni blocajele şi erorile ce pot apărea în urma unor accesări simultane. Schema
este capabilă să ruleze două fire de execuţie (thread-uri) cu latenţe foarte mici de
scriere a cache-ului. De asemenea, accesul la magistrala principală este multiplexat,
pentru a preveni congestiile şi erorile de transmisie. Strategia de gestiune a
memoriei cache este de tipul LRU (Least Recently Used – cel mai puţin recent
utilizat), ceea ce duce la mai multe şanse de a găsi în cache informaţia necesară la
următoarea procesare (cache hit). Memoria acestui sistem este de tipul SDRAM.
Există scheme care aduc îmbunătăţiri suplimentare legate de administrarea
eficientă a magistralei (prin repartizarea dinamică a duratelor de acces bazată pe
predicţii şi pe comportări anterioare ale proceselor care se repetă la fiecare CPU etc.).
Intel Xeon biprocesor
Sistemul este echipat cu două procesoare Intel Xeon instalate pe o placă de
bază de tipul Supermicro P4DC6+. Această placă de bază este dotată cu cipsetul
i860, constituit din trei componente principale: Intel 82806AA PCI 64 Hub (Intel
P64H din figura 2.39), Intel 82860 Memory Controller Hub (MCH din figura 2.39)
şi Intel 82801BA I/O Controller Hub (ICH2 din figura 2.48). Aceste blocuri
asigură un transfer foarte rapid de date atât între procesoare, cât şi între acestea şi
memorie sau dispozitive periferice.

Fig. 2.48. Arhitectura sistemului Xeon biprocesor.


Tipuri de arhitecturi 75

Pentru aceasta, arhitectura pune la dispoziţie componentelor sistemului


(controlerul SCSI, sloturile PCI pe 32 sau 64 de biţi) magistrale distincte, care
asigură separarea fluxurilor de date. Acest lucru este vital într-un server în care
schimbul de date dintre componente este realizat în flux continuu. Tot pentru o
sporire a vitezei de lucru, s-a recurs la utilizarea memoriei de tip RDRAM.
AMD Opteron biprocesor
Sistemul cu două procesoare AMD Opteron 250 la 2,4 GHz foloseşte o placă
de bază dotată cu cipsetul NVIDIA nForce Professional 2200. Noutatea acestei
configuraţii este că procesoarele nu împart aceeaşi magistrală pentru a accesa
memoria, ca la sistemele tradiţionale. În acel caz, magistrala reprezenta „gâtul
sticlei” (bottleneck) sistemului, fiind un obstacol în calea procesării la potenţialul
maxim al CPU-urilor. Pentru a evita această limitare, AMD a recurs la o arhitectură
cu memorie cache neuniformă, de tip CC-NUMA (vezi figura 2.49).

Fig. 2.49. Arhitectura sistemului AMD Opteron biprocesor.

Fiecare procesor dispune de un controler de memorie, care poate accesa o


porţiune de memorie rezervată doar lui. Sunt evitate astfel suprapunerile de date şi
alterarea reciprocă a datelor provenite de la procesoare diferite. În plus, cele două
CPU sunt interconectate printr-o magistrală de mare viteză, de tipul HyperTransport
(tehnologie patentată de AMD), care nu are legătură directă cu memoria (spre
deosebire de un sistem clasic) şi care asigură un dialog eficient între componente.
Cele două procesoare pot accesa memoriile proprii cu latenţe foarte mici (mult
mai mici decât la sisteme tradiţionale), precum şi memoria care nu le aparţine direct,
dar cu latenţe mari.
76 ARHITECTURA SISTEMELOR DE CALCUL

Aceasta nu constituie un dezavantaj, deoarece un CPU lucrează în mod normal


doar în zona de memorie care îi este repartizată. Totuşi această tehnologie are şi un
punct slab: organizarea corectă a memoriei este crucială. Astfel, arhitectura NUMA
trebuie suportată atât de sistemul de operare, cât şi de aplicaţii.
Sistemele de operare Windows XP şi Windows server 2003 suportă în
întregime această tehnologie, opţiunea activându-se automat la detectarea unui
sistem de acest tip.
Calculatoarele biprocesor se pretează pentru diverse aplicaţii complexe, care
necesită putere de calcul. Aici intră aplicaţiile grafice de modelare 3D, aplicaţiile
de reţea (mai ales dacă sistemul este unul de tip nod coordonator de trafic sau
server pentru subreţele de diverse dimensiuni) şi aplicaţiile specifice de prelucrare
a semnalelor în timp real. Tot ce au acestea în comun este faptul că sunt create
astfel încât să lucreze cu mai multe fire de execuţie simultan, conform principiilor
de calcul paralel. Aceste tipuri de algoritmi sunt create pentru a minimiza timpul de
execuţie foarte mare pe care îl implică acele aplicaţii în situaţii normale.
În ultima vreme, câştigă popularitate un nou tip de aplicaţii care pot folosi
arhitectura biprocesor, anume sistemele embedded. În esenţă, este vorba despre
conectarea în paralel, pe aceeaşi placă, a două (sau mai multe) procesoare
specializate, cu un scop bine definit, spre deosebire de calculatoarele personale,
care au scopuri multiple. De exemplu: prelucrarea unui semnal audio (codare şi
decodare) şi, eventual, transmiterea lui mai departe. Din această clasă fac parte
procesoarele DSP de la firma Texas Instruments. Premisa acestor aplicaţii este că
procesorul este adaptat să realizeze un număr restrâns de operaţii cu scopuri bine
determinate. În plus, DSP-ul este capabil să ruleze aplicaţii de sine stătătoare, care
să ofere interfaţă cu utilizatorul şi suport pentru memorare şi transmitere către alte
componente conectate la acesta. De exemplu: un subsistem care, conectat la un PC,
să codeze/decodeze fişiere audio în format mp3.

2.4.2.3. Arhitecturi multinucleu


Un procesor multinucleu combină două sau mai multe nuclee într-un singur
cip fizic, care conţine fie un circuit integrat cu toate nucleele, fie mai multe circuite
integrate interconectate. Un procesor cu mai multe nuclee implementează o
arhitectură de multiprocesare într-un singur pachet fizic. Un procesor cu toate
nucleele pe acelaşi circuit integrat se numeşte procesor multinucleu monolitic.
Nucleele pot partaja un singur cache de nivel înalt (de exemplu: cache-ul L2
pentru procesoarele Core 2 de la Intel) sau pot avea câte un cache separat pentru
fiecare nucleu (de exemplu: linia de procesoare dual-core de la AMD). Fiecare
nucleu implementează separat optimizări hardware, cum sunt: sisteme pipeline,
execuţie superscalară, extensii SSE, multithreading etc.
Un sistem cu n nuclee este eficient atunci când pe acesta se rulează n procese
(sau fire de execuţie) concurente şi independente. Cele mai cunoscute procesoare
multinucleu sunt cele de pe piaţa calculatoarelor personale (Intel şi AMD), precum
şi cele folosite în consolele de jocuri pe televizor (de exemplu: procesorul Cell
folosit la PlayStation 3 are 8 nuclee, iar Xenon folosit la Xbox360 are 3 nuclee).
Tipuri de arhitecturi 77

Avantajele sistemelor cu procesoare multinucleu sunt:


 Nucleele sunt apropiate fizic, ceea ce înseamnă că semnalele trebuie să
parcurgă o distanţă mai mică. Acestea permit procesoarelor să
interacţioneze cu o frecvenţă mai mare decât dacă ele ar fi fost separate
(două procesoare pe o placa de bază).
 Procesoarele multinucleu oferă designerilor posibilitatea de a face plăcile
de bază mai mici decât pentru două sau mai multe procesoare.
 Un procesor cu două nuclee consumă mai puţin decât două procesoare
cu câte un singur nucleu, deoarece acestea necesită mai multă putere să
transmită aceleaşi semnale în afara cipului,
 Preţul produsului este mai redus, pachetul fizic fiind de un singur
procesor în loc de mai multe.
Dezavantajele sistemelor cu procesoare multinucleu sunt:
 Deşi, teoretic, două procesoare pot dubla viteza de calcul, software-ul
trebuie optimizat pentru a beneficia de acest lucru, în funcţie de
posibilitatea aplicaţiilor şi a sistemului de operare de a crea fire de
execuţie (thread-uri) paralele şi independente.
 Integrarea a încă unui nucleu în acelaşi circuit integrat pune probleme
deosebite din punct de vedere termic, deoarece, practic, acelaşi pachet
fizic trebuie să disipeze de două ori mai multă putere. Intel a rezolvat
această problemă prin integrarea a două nuclee dual-core şi a unui cache
unificat în locul unui nucleu quad-core cu memorii cache separate. Astfel,
se forţează lucrul numai al unuia dintre cele două nuclee, în loc de toate
patru deodată, micşorând puterea instantanee disipată de întregul procesor.
 Din punct de vedere al arhitecturii, procesoarele cu un singur nucleu
folosesc mai eficient resursele de tranzistoare de pe cip. Astfel, o
companie care produce procesoare trebuie tot timpul să aibă o linie de
procesoare cu un singur nucleu în paralel cu cele multinucleu.
 Există mai mulţi factori care limitează performanţa reală a unui sistem
multinucleu. În primul rând, magistralele de sistem şi de memorie sunt
partajate, astfel încât devin „gâtuiri” (bottlenecks) care limitează fluxul
de date către nucleele multiple ale procesoarelor, în acelaşi mod în care o
şosea cu prea puţine benzi de circulaţie produce uneori blocaje.
Intel Core 2
Procesoarele Intel Core 2 Duo sunt produse folosind tehnologia de fabricare
Intel pe 65 nm. Versiunea pentru desktop-uri a procesoarelor furnizează o creştere
de 40% a performanţei şi este cu peste 40% mai eficientă din punct de vedere al
consumului de energie, în comparaţie cu cel mai bun procesor Intel anterior.
Potrivit analiştilor independenţi, procesoarele câştigă 9 din cele 10 teste majore de
performanţă pentru desktop-uri, servere şi calculatoare destinate jocurilor.
Familia de procesoare Intel Core 2 Duo este formată din 5 procesoare pentru
platforme desktop destinate afacerilor, utilizării individuale şi entuziaştilor pentru
tehnologie, precum şi din 5 procesoare pentru notebook-uri.
78 ARHITECTURA SISTEMELOR DE CALCUL

Familia de procesoare Intel Core 2 Duo este bazată pe micro-arhitectura Intel


Core. Prin intermediul celor două nuclee de execuţie, procesoarele pot executa cu
viteză un număr mai mare de instrucţiuni. De asemenea, procesoarele pot opera
mai rapid la lansarea simultană în execuţie a mai multor aplicaţii, de exemplu,
scrierea unui e-mail în acelaşi timp cu descărcarea de muzică şi scanarea antivirus.
Procesoarele dual-core contribuie la îmbunătăţirea execuţiei programelor, de
exemplu, în cazul vizionării unor clipuri high-definition sau al protejării PC-ului în
timpul tranzacţiilor financiare pe Internet, crescând, de asemenea, autonomia
bateriei în cazul notebook-urilor, care pot deveni astfel mai subţiri şi mai uşoare.
Inovaţiile aduse de Intel prin introducerea arhitecturii Intel Core 2 (Duo şi
Extreme) sunt următoarele:
Intel Wide Dynamic Execution – îmbunătăţeşte performanţa şi eficienţa,
întrucât fiecare nucleu de execuţie poate realiza până la 4 instrucţiuni simultan,
folosind un pipeline eficient în 14 stagii.
Intel Smart Memory Access – îmbunătăţeşte performanţa sistemului,
diminuând latenţa cipurilor de memorie şi optimizând astfel utilizarea lărgimii de
bandă disponibile pentru furnizarea datelor către procesor când şi unde este nevoie.
Intel Advanced Smart Cache – include o memorie cache L2 comună,
proiectată pentru a reduce consumul de energie prin micşorarea traficului de
memorie, şi măreşte performanţa, permiţând unui nucleu de execuţie să utilizeze
întreg cache-ul atunci când celălalt nucleu nu este folosit. Această funcţie este
asigurată pentru toate segmentele de piaţă: server, desktop şi notebook.
Intel Advanced Digital Media Boost – dublează efectiv viteza de execuţie a
instrucţiunilor folosite cu precădere în aplicaţiile grafice şi multimedia.
Intel 64 Technology – această îmbunătăţire adusă arhitecturii Intel pe 32 de
biţi oferă suport pentru procesarea pe 64 de biţi şi permite procesorului să acceseze
o cantitate mai mare de memorie.
Nucleul de execuţie al procesorului Intel Core este reprezentat în figura 2.50.
Caracteristicile funcţionale ale acestei arhitecturi sunt expuse în cele ce
urmează.
Unităţile de execuţie cu numere întregi. Intel Core are trei asemenea
unităţi pe 64 biţi, fiecare dintre ele putând realiza operaţii pe 64 biţi într-un singur
ciclu. Există şi o unitate pe 64 biţi de numere complexe (CIU – Complex Integer
Unit), care realizează în mare parte aceeaşi muncă precum cea din P6, şi două
unităţi simple de numere întregi (SIU – Simple Integer Unit), pentru operaţiile
uzuale, cum ar fi adunarea. Una din unităţile SIU împarte portul 2 cu BEU (Branch
Execution Unit), pe care Intel o numeşte unitatea de salt în execuţie). Pe acest port,
SIU este capabil să lucreze în tandem cu BEU pentru a executa instrucţiuni macro
(comparaţii sau teste +jcc).
Posibilitatea de a realiza calcule pe 64 biţi într-un singur ciclu este o
premieră în arhitectura Intel 86 şi aceasta îl pune înaintea IBM, cu al său Power
PC970, care are o latenţă de două cicluri pentru operaţii cu numere întregi. În plus,
datorită unităţilor ALU pe 64 biţi care sunt pe porturi separate, Intel Core poate
menţine un total de trei operaţii pe 64 biţi per ciclu.
Tipuri de arhitecturi 79

Fig. 2.50. Nucleul de execuţie al procesorului Intel Core.

Unităţile de execuţie în virgulă mobilă. Intel Core are două unităţi de


execuţie în virgulă mobilă, care se ocupă de ambele tipuri de operaţii aritmetice:
scalare şi vectoriale. Unitatea de execuţie de pe portul 1 se ocupă cu adunări sau cu
alte operaţii simple în virgulă mobilă, după cum urmează:
 scalar: simplă precizie (32 biţi) şi dublă precizie (64 biţi);
 vector: simplă precizie (4) şi dublă precizie (2).
Unitatea de execuţie în virgulă mobilă de pe portul 2 se ocupă cu înmulţiri şi
împărţiri cu vectori şi scalari în formatele listate mai sus.
Procesarea vectorială reală pe 128 biţi. Arhitectura Intel Core asigură
latenţa de un ciclu pentru operaţiile vectoriale pe 128 biţi. Intel realizează acest
lucru făcând magistrala pentru virgulă mobilă şi cea internă de date cu lăţimea de
128 biţi, facilitate care înseamnă că este necesară doar o singură micro-operaţie
(care trebuie generată, trimisă, programată şi realizată) pentru fiecare operaţie
vectorială pe 128 biţi. De aceea, noul design nu numai că elimină dezavantajul
generat de latenţă, dar în acelaşi timp îmbunătăţeşte decodarea şi programarea
lărgimii de bandă, pentru că jumătate din micro-operaţii sunt generate pentru
instrucţiuni vectoriale de 128 biţi (vezi figura 2.51).
Pipeline-ul. Intel Core are un pipeline realizat în 14 stagii, la fel de lung ca la
Power PC 970, aproximativ jumătate din cel de la Pentium 4 Prescott (~30 etape) şi
ceva mai lung decât la P6 (12 etape), cea ce înseamnă că Intel Core este proiectat
pentru o creştere lentă a vitezei de ceas şi nu scalează la fel de rapid ca Pentium 4.
80 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.51. Configuraţia de procesare vectorială reală pe 128 biţi.

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

Deoarece lăţimea execuţiei a fost mărită considerabil, vechiul hardware de


decodare al lui P6 ar fi fost inadecvat pentru a ţine restul procesorului ocupat cu
micro-operaţii. Intel a trebuit să mărească rata de decodare, în aşa fel încât mai multe
micro-operaţii/ciclu să ajungă la final. Primul lucru pe care l-a făcut a fost să adauge
încă un decodor simplu şi rapid, ceea ce înseamnă că decodorul hardware poate
trimite până la 7 instrucţiuni pe ciclu în coada de aşteptare ROB (vezi figura 2.52).
AMD Opteron Dual-core
Figura 2.53 prezintă arhitectura simplificată a procesorului Opteron dual-core.

Fig. 2.53. Arhitectura AMD Opteron dual-core.

Tehnologic vorbind, AMD nu a realizat doar o simplă alipire a unei perechi


de nuclee K8 pe o bucată de siliciu, ci a efectuat o integrare la nivelul de bază,
astfel încât cele două nuclee să poată acţiona împreună mai eficient. Fiecare dintre
nucleele K8 are propriul său cache L2, independent, încorporat, dar cele două
nuclee împart o coadă comună a cererilor de sistem, un controler de memorie DDR
de tip dual-channel şi un set de legături HyperTransport cu mediul exterior.
Accesul la resursele I/O este adjudecat printr-o reţea crossbar sau printr-un
switch, astfel încât fiecare CPU poate comunica direct şi eficient cu memoria sau
cu dispozitivele I/O. În unele privinţe, Opteron dual-core se comportă foarte
asemănător unui sistem cu multiprocesare simetrică on-chip, transferând date intern
între cele două nuclee. Cu toate acestea, pentru restul infrastructurii I/O a
sistemului, Opteron dual-core pare asemenea versiunii mononucleu.
Arhitectura de sistem Opteron este foarte diferită de cea a competitorului său
principal, Intel Xeon. Arhitectura AMD Direct Connect a fost supra-dimensionată
pentru procesorul Opteron mononucleu, anticipând viitorul dual-core. Fiecare
procesor (mono/binucleu) are propriul său controler local de memorie DDR dual-
channel, procesoarele comunicând între ele şi cu cipurile I/O prin legături Hyper-
Transport punct-la-punct, la frecvenţa de 1 GHz. Lărgimea totală de bandă posibilă
prin cei 940 de pini ai procesorului Opteron 875 este de 30,4 GB/s. Cu o legătură
HyperTransport mai puţin, Opteron 275 poate atinge, teoretic, viteza de 22,4 GB/s.
82 ARHITECTURA SISTEMELOR DE CALCUL

Prin contrast, procesoarele Xeon actuale au o magistrală front-side (FSB)


partajată, pe care lucrează cipul northbridge (cu controler de memorie) şi ambele
procesoare. La frecvenţa de 800 MHz, lărgimea totală de bandă este de 6,4 GB/s,
ceea ce poate fi un bottleneck în anumite situaţii.
AMD Phenom Triple-core
AMD are în producţie un procesor cu trei motoare de procesare, proiectul
numindu-se AMD Phenom 3 chip (vezi figura 2.54).

Fig. 2.54. Arhitectura AMD Phenom Triple-core.

Noul microprocesor triple-core prezintă propriul design şi nu este un cip


quad-core cu un core dezactivat. Totuşi, cipurile includ 2 MB de cache L3 partajat
şi beneficiază de caracteristicile micro-arhitecturii K10, cum sunt setul de
instrucţiuni SSE4A şi unităţile de prelucrare în virgulă mobilă (FPU) de 128 biţi.
Evident, cipurile dispun de posibilităţi avansate de gestiune a puterii.
Potrivit unor estimări ale laboratoarelor X-bit, fiecare motor al procesoarelor
quad-core AMD Opteron/Phenom ocupă aproximativ 13% din aria fizică a
capsulei. Date fiind întreaga dimensiune de 285 mm² şi numărul de aproximativ
218 cipuri candidate obţinute din fiecare bucată de 300 mm, este neobişnuit faptul
că AMD a decis dezvoltarea unui design triple-core cu aria fizică de 247 mm² şi
250 de cipuri candidate obţinute de pe o bucată de 300 mm. Tehnic, AMD poate
realiza uşor microprocesoare cu un număr impar de motoare de procesare datorită
arhitecturii sale Direct Connect. Cu versiunile sale Phenom şi Athlon 64 2, AMD
are de combătut procesoarele Intel Core 2 (dual-core şi quad-core).
Intel şi AMD Quad-core
Ca replică la lansarea CPU-urilor quad-core de la Intel, AMD a lansat
propria platformă, Quad FX. Această platformă este un sistem de multiprocesare
simetrică, utilizând două CPU-uri Athlon 64 FX dual-core. De aceea, un calculator
personal Quad FX are două procesoare fizice dual-core care lucrează în paralel,
Tipuri de arhitecturi 83

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.55 Arhitectura Intel Quad-core.


84 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.56. Arhitectura AMD Quad FX.

În ultima vreme, câştigă popularitate sistemele de tip embedded. Este vorba


despre conectarea în paralel a mai multor procesoare specializate, pe aceeaşi placă,
cu un scop bine definit. De exemplu, prelucrarea unui semnal audio (codare şi
decodare) în format mp3. Procesorul este adaptat să realizeze un număr restrâns de
operaţii specifice, iar DSP-urile sunt capabile să ruleze aplicaţii de sine stătătoare,
care să ofere interfaţă cu utilizatorul, suport pentru memorare şi transmitere.
Intel Core i7

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)

2.4.2.4. Multiprocesare omogenă şi eterogenă pe cip


Multiprocesare omogenă
Cu progresele înregistrate în tehnologia VLSI, acum este posibilă integrarea
a două sau mai multe CPU-uri puternice pe un singur cip. Deoarece aceste
procesoare au adesea acelaşi cache de nivel 2 şi aceeaşi memorie principală, ele se
încadrează în categoria multiprocesoarelor.
O arie de aplicaţii tipice este un set extins de servere Web. Punând două
CPU-uri în aceeaşi cip, partajând nu doar memoria, ci şi discurile şi interfeţele de
reţea, performanţa serverului poate fi adesea dublată fără a dubla şi costul
(deoarece, chiar şi la preţ dublu, cipul CPU reprezintă doar o fracţiune din costul
total al sistemului).
86 ARHITECTURA SISTEMELOR DE CALCUL

Pentru multiprocesoare la scară redusă, există două modele de lucru. În


primul, se foloseşte un singur cip (CPU) cu două pipeline-uri, care dublează rata de
execuţie a instrucţiunilor (vezi figura 2.6 a). În cel de-al doilea, pe cip există două
nuclee (cores) separate, fiecare conţinând câte un CPU distinct. Un nucleu este un
circuit mare, cum ar fi un procesor, un controler I/O sau o memorie cache, care
poate fi plasat modular pe un cip, de obicei, alături de alte nuclee.
Primul model permite ca resursele, cum ar fi unităţile funcţionale, să fie
partajate între procesoare, permiţând astfel unui procesor să utilizeze resursele de
care celălalt procesor nu are nevoie. Pe de altă parte, al doilea model necesită
reproiectarea cipului şi o face fără să crească mult complexitatea dincolo de două
CPU-uri. În schimb, plasarea două sau mai multe nuclee CPU pe acelaşi cip este
relativ uşor de făcut.
Chiar dacă această discuţie este oarecum concentrată pe multiprocesoare pe
un singur cip CPU, mare parte se aplică şi cipurilor multi-CPU.
Un exemplu de multiprocesare omogenă este oferit de arhitectura
procesorului Core i7, care este un multiprocesor pe un singur cip, fabricat cu patru
sau mai multe nuclee (6, 8, ...) pe o singură matriţă (die) de siliciu. Organizarea la
nivel înalt a unui procesor Core i7 este ilustrată în figura 2.59.

Fig. 2.59. Arhitectura de multiprocesare omogenă pe un singur cip la Intel Core i7 [71].

Fiecare procesor din Core i7 are propriile memorii cache L1 (integrate în


CPU) de instrucţiuni şi de date, plus memoria cache L2 (externă) unificată.
Procesoarele sunt legate la memoriile cache private (L2) prin conexiuni punct-la-
punct dedicate. Următorul nivel al ierarhiei de memorie este cache-ul de date L3
partajat şi unificat.
Memoriile cache L2 se conectează la cache-ul partajat L3 utilizând o reţea de
tip inel (ring network). La primirea unei cereri de comunicaţie în reţea, aceasta este
redirecţionată către următorul nod al reţelei, unde se verifică dacă a ajuns la nodul
de destinaţie. Acest proces continuă în inel, de la nod la nod, până când se găseşte
nodul de destinaţie sau până când cererea ajunge din nou la nodul sursă (în cazul în
care destinaţia nu există).
Tipuri de arhitecturi 87

Avantajul unei reţele inel este că oferă o modalitate ieftină de a obţine


lărgime de bandă ridicată, cu preţul unei latenţe uşor crescute, pe măsură ce această
cerere trece de la un nod la altul. Reţeaua inel de la Core i7 serveşte două scopuri
principale. În primul rând, oferă o modalitate de a deplasa cererile de memorie şi
I/O între memoriile cache şi procesoare. În al doilea rând, aplică verificările
necesare pentru a se asigura că la fiecare procesor se menţine coerenţa memoriei.
Multiprocesare eterogenă
O zonă complet diferită de aplicaţii care solicită multiprocesare pe un singur
cip o reprezintă sistemele încorporate (embedded systems), în special în domeniul
electronicii de consum audiovizuale, cum ar fi televizoarele, DVD player-ele,
camerele video, consolele de jocuri, telefoane mobile etc.
Aceste sisteme au cerinţe de performanţă exigente şi constrângeri stricte.
Deşi aceste dispozitive arată diferit, din ce în ce mai multe dintre acestea sunt pur
şi simplu mici computere, cu unul sau mai multe procesoare, memorii, controlere
I/O şi dispozitive I/O personalizate. Un telefon mobil, de exemplu, este un PC cu
procesor, memorie, ecran tactil, microfon, difuzor şi o conexiune de la o reţea
wireless, totul într-un pachet de dimensiuni reduse.
Fie, de exemplu, un DVD player portabil. Computerul din interior trebuie să
gestioneze următoarele funcţii:
1. Controlul unui servomecanism ieftin, pentru urmărirea capului de lectură;
2. Conversia analog-digitală a semnalului;
3. Corecţia de erori;
4. Decriptarea şi gestionarea drepturilor digitale;
5. Decompresia video MPEG-2;
6. Decompresia audio;
7. Codarea ieşirii pentru televizoare NTSC, PAL sau SECAM.
Această activitate se supune unor constrângeri stricte referitoare la lucrul în
timp real, calitatea serviciilor, consumul de energie, disiparea căldurii, dimensiune,
greutate şi preţ. Este nevoie de un multiprocesor eterogen, care conţine mai multe
nuclee, fiecare fiind specializat pentru o anumită sarcină.
Un exemplu de DVD player este reprezentat în figura 2.60.

Fig. 2.60. Arhitectura unui DVD-player, cu nuclee multiple şi funcţii diverse de


multiprocesare eterogenă [71].
88 ARHITECTURA SISTEMELOR DE CALCUL

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

Aceasta este o arhitectură pentru conectarea pe un singur cip a nucleelor unui


multiprocesor eterogen, în special, la proiectarea modelelor de system-on-a-chip.
modele complete de sistem pe un cip.
Arhitectura CoreConnect conţine trei magistrale:
a) magistrala procesorului: sincronă, rapidă, pipeline pe 32/64/128 linii de date;
b) magistrala I/O: sincronă, de viteză medie, pentru periferice pe 8/16/32 de biţi;
c) magistrala registrelor perifericelor: asincronă, lentă, pentru transferuri reduse.
Există astfel de nuclee pentru numeroase tipuri de CPU (ARM, MIPS,
PowerPC etc.), precum şi pentru decodoare MPEG, procesoare de semnal digital şi
pentru toate tipurile de controlere I/O standard.
Tipuri de arhitecturi 89

2.4.2.5. Arhitecturi de multiprocesoare şi multicalculatoare


În orice sistem cu arhitectură paralelă, blocurile CPU care rulează diferite
părţi ale aceleiaşi sarcini trebuie să comunice pentru a face schimb de informaţii.
Două modele arhitecturale distincte au fost propuse ca soluţii şi implementate:
multiprocesoarele şi multicalculatoarele, diferenţa cheie dintre acestea fiind
prezenţa sau absenţa unei memorii partajate. Această diferenţă influenţează modul
în care ele sunt proiectate, construite şi programate, dar şi dimensiunea sau preţul.
Multiprocesoare (arhitecturi GSM)
Un computer paralel în care toate CPU-urile împart o memorie comună se
numeşte multiprocesor, aşa cum este indicat în figura 2.62 a. Toate procesele care
lucrează împreună pe un multiprocesor pot partaja un singur spaţiu virtual de
adrese mapat pe memoria comună. Orice proces poate citi sau scrie un cuvânt de
memorie doar prin executarea unei instrucţiuni de tip load sau store, singurele care
lucrează cu memoria. Nimic altceva nu este necesar, hardware-ul va face tot restul.

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

Deoarece toate procesoarele dintr-un multiprocesor văd aceeaşi imagine din


memorie, există doar o copie a sistemului de operare, arhitectura fiind cea de
sistem cu memorie globală (GSM). Prin urmare, există o singură hartă a paginii şi
un tabel de proces. Atunci când un proces se blochează, procesorul său îşi salvează
starea în tabelele de proces din sistemul de operare, apoi se uită în acele tabele
pentru a găsi un alt proces pentru a-l rula. Această imagine unică în sistemul de
operare este cea care face diferenţa între un multiprocesor şi un multicalculator, în
care fiecare computer are o copie proprie a sistemului de operare.
Un multiprocesor, la fel ca toate computerele, trebuie să aibă dispozitive I/O,
cum sunt discurile, adaptoarele de reţea şi alte echipamente. În unele sisteme
multiprocesor, doar anumite CPU-uri au acces la dispozitivele I/O, având astfel o
funcţie I/O specială. În altele, fiecare CPU are acces egal la fiecare dispozitiv I/O.
Când fiecare procesor are, în aceeaşi măsură, acces la toate modulele de memorie şi
la toate dispozitivele I/O, fiind considerat de sistemul de operare interschimbabil cu
celelalte procesoare, sistemul este numit multiprocesor simetric sau SMP
(Symmetric MultiProcessor), valabil şi pentru arhitecturile multinucleu.
Multicalculatoare (arhitecturi DSM)
Cea de-a doua soluţie posibilă pentru proiectarea unei arhitecturi paralele
este cea în care fiecare CPU are propria sa memorie privată, accesibilă numai lui
însuşi şi nu altor CPU-uri. Un astfel de design este numit un multicalculator sau,
uneori, sistem cu memorie distribuită (DSM), fiind ilustrat în figura 2.63 a.

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

Aspectul cheie al unui multicalculator, care îl deosebeşte de un


multiprocesor, este că fiecare CPU dintr-un multicomputer are memoria sa privată,
locală, pe care o poate accesa prin execuţia instrucţiunilor de tip load şi store, dar
nici un alt procesor nu poate accesa instrucţiunile load şi store pentru acea
memorie. Astfel, multiprocesoarele au un singur spaţiu fizic de adresă, partajat de
toate procesoarele, în timp ce multicalculatoarele au un spaţiu fizic pentru fiecare
procesor în parte.
Tipuri de arhitecturi 91

Deoarece CPU-urile unui multicomputer nu pot comunica doar prin citire şi


scriere din/în memorie, au nevoie de un mecanism diferit de comunicare. Ceea ce
fac CPU-urile este să transmită bidirecţional mesaje prin reţeaua de interconectare.
Exemple de multicalculatoare: IBM BlueGene/L, Red Storm, Google cluster.
Absenţa unei memorii hardware partajate global pe un multicomputer are
importante implicaţii pentru structura software. Existenţa unui singur spaţiu virtual
de adrese în care procesele să fie capabile să acceseze toată memoria prin
executarea instrucţiunilor load şi store este imposibilă la un multicomputer. De
exemplu, dacă CPU 0 (cel din colţul din stânga sus) din figura 2.62 b descoperă că
o parte a obiectului său se extinde în secţiunea de memorie atribuită lui CPU 1,
poate totuşi să continue citirea memoriei pentru a accesa, de exemplu, coada
avionului, la multiprocesoare fiind vorba de o memorie GSM. Pe de altă parte, dacă
CPU 0 din figura 2.63 b face aceeaşi descoperire, el nu va putea citi memoria lui
CPU 1, fiind vorba aici de o memorie DSM. CPU 0 va trebui să facă ceva cu totul
diferit pentru a obţine datele de care are nevoie. În particular, trebuie să descopere
(cumva) care CPU deţine datele de care are nevoie şi să trimită acelui CPU un
mesaj prin care solicită o copie a datelor. De obicei, se va bloca până când i se va
răspunde la solicitare. Când mesajul ajunge la CPU 1, software-ul trebuie să-l
analizeze şi să trimită datele necesare. Atunci când mesajul de răspuns se întoarce
la CPU 0, software-ul este deblocat şi poate continua execuţia.
Pe un multicomputer, comunicarea dintre procese utilizează adesea mesaje
software primitive, cum ar fi send şi receive. Acest lucru atribuie software-ului o
structură diferită şi mult mai complicată faţă de un multiprocesor. De asemenea,
aceasta înseamnă că împărţirea corectă a datelor şi plasarea lor în locaţiile optime
reprezintă o problemă majoră pentru un multicalculator. Este o problemă mai mică
pe un multiprocesor, deoarece această plasare nu afectează corectitudinea sau
capabilităţile de programare, deşi poate afecta performanţa. Pe scurt, programarea
unui multicomputer este mult mai dificilă decât programarea unui multiprocesor.
În aceste condiţii, se pune întrebarea de ce s-ar construi multicomputere,
atunci când multiprocesoarele sunt mai uşor de programat? Răspunsul este simplu:
multicomputerele mari sunt mult mai simplu şi mai ieftin de construit decât
multiprocesoarele cu acelaşi număr de CPU. Implementarea unei memorii partajate
global (GSM) chiar de câteva sute de CPU-uri este substanţial mai dificilă decât
construirea unui multicomputer cu 10.000 CPU-uri sau mai mult.
Apare, astfel, o dilemă: multiprocesoarele sunt greu de construit, dar uşor de
programat, în timp ce multicomputerele sunt uşor de construit, dar greu de
programat. Această observaţie a condus la un efort mare de a proiecta sisteme
hibride care sunt relativ uşor de construit şi de programat. Acest lucru a dus la
realizarea unei memorii partajate care poate fi implementată în diverse moduri,
fiecare având propriul set de avantaje şi dezavantaje. De fapt, mare parte din
cercetarea actuală în domeniul arhitecturilor paralele se referă la convergenţa
arhitecturilor multiprocesor şi multicomputer în forme hibride, care combină
punctele forte ale fiecăreia. Cheia de boltă este găsirea modelelor scalabile, care
continuă să funcţioneze bine pe măsură ce se adaugă din ce în ce mai multe CPU.
92 ARHITECTURA SISTEMELOR DE CALCUL

2.4.2.6. Arhitecturi de procesoare masiv paralele (MPP)


Procesoarele masiv paralele sau MPP (Massive Parallel Processors) sunt
folosite în ştiinţă, în inginerie şi în industrie pentru calcule de volum uriaş, pentru
manipularea unui număr foarte mare de tranzacţii/secundă sau pentru depozitarea
datelor (stocare şi administrare de baze de date imense). Cele mai multe dintre
procesoarele masiv paralele (MPP) folosesc CPU-uri standard ca procesoare.
Alegerile cele mai populare sunt procesoarele Intel, Sun UltraSPARC şi IBM
PowerPC. Ceea ce le particularizează este utilizarea de reţele-proprietar de
interconectare foarte performante, proiectate pentru a transfera mesaje cu latenţă
redusă şi la lărgime de bandă mare. Ambele aceste aspecte sunt importante,
deoarece marea majoritate a mesajelor este de dimensiuni mici (sub 256 octeţi), dar
cea mai mare parte a traficului total implică mesaje mari (mai mult de 8 KB).
MPP-urile vin, de asemenea, cu software-proprietate extins şi biblioteci.
O altă caracteristică a MPP-urilor este capacitatea imensă a canalelor I/O.
Sarcinile suficient de complexe pentru a solicita utilizarea MPP-urilor presupun
invariabil cantităţi masive de date care urmează să fie procesate, de multe ori de
ordinul teraocteţilor (TB). Aceste date trebuie distribuite între mai multe discuri şi
trebuie manipulate la viteză mare.
În fine, o altă problemă specifică MPP-urilor este atenţia acordată toleranţei
la erori. Cu mii de procesoare, câteva eşecuri pe săptămână sunt inevitabile. Dar o
întrerupere de 18 ore, de exemplu, provocată de un CPU care s-a defectat, este
inacceptabilă, mai ales când un astfel de eroare este de aşteptat în fiecare
săptămână. Astfel, MPP-urile mari dispun întotdeauna de resurse speciale hardware
şi software pentru monitorizarea sistemului, detectarea defecţiunilor şi recuperarea
fără probleme.
Principiile generale ale proiectării MPP nu sunt prea multe. Un MPP este o
colecţie de noduri de calcul mai mult sau mai puţin standard, legate printr-o reţea
de interconectare foarte rapidă. Aceste principii vor fi expuse în două studii de caz:
BlueGene/P şi Red Storm.
BlueGene/P
În 2007, IBM a implementat cea de-a doua generaţie de supercomputere din
seria BlueGene, numită BlueGene/P, succesoare a modelului BlueGene/L (vezi
paragraful 2.3.3). Scopul proiectului BlueGene nu a fost doar acela de a crea cele
mai rapide MPP-uri din lume, dar şi de a produce cea mai eficientă soluţie din
punct de vedere al parametrilor teraflops/$, teraflops/watt şi teraflops/m3. Din acest
motiv, IBM a respins filosofia MPP-urilor anterioare, care urmau principiul
folosirii celor mai rapide componente care le puteau fi achiziţionate. În schimb, s-a
luat decizia de a produce un system-on-a-chip care să ruleze la o viteză modestă şi
la o putere mică de calcul pentru a produce o maşină de dimensiuni foarte mari şi
cu o densitate ridicată de împachetare a mesajelor.
Primul BlueGene/P conţinea 65.536 procesoare şi era capabil de a atinge
viteze de 167 teraflops/sec. La momentul implementării sale în Germania, a fost cel
mai rapid computer din Europa şi al şaselea în topul celor mai rapide computere
din lume. Sistemul a fost de asemenea considerat ca unul dintre cele mai eficiente
Tipuri de arhitecturi 93

supercomputere computaţionale din lume din punct de vedere energetic, capabil să


producă 371 megaflops/watt, ceea ce îl face aproape de două ori mai eficient decât
predecesorul său, BlueGene/L. Prima implementare BlueGene/P a fost modernizată
în 2009, pentru a include 294.912 procesoare, ridicându-l la 1 petaflops/sec, iar
apoi a fost lansat succesorul său, BlueGene/Q, ajungând la 17 petaflops/sec (2018).
Sistemul BlueGene/P are la bază cipul nodului customizat a cărui schemă
este ilustrată în figura 2.64.

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

Cele patru procesoare partajează accesul la câte două module de memorie


cache L3 fiecare. Coerenţa memoriei cache este asigurată între cele patru module
L1 din cele patru CPU-uri. Astfel, atunci când un bloc comun de memorie se află
în mai mult de o memorie cache L1, accesul la acel bloc de către un procesor va fi
imediat vizibil pentru celelalte trei procesoare. O referinţă de memorie care nu va fi
găsită în L1 (cache miss) se va solda cu succes (cache hit) la o căutare în L2 după
aproximativ 11 cicluri de ceas. Similar, o ratare în L2 se va solda cu succes în L3
după aproximativ 28 de cicluri. În fine, o ratare în L3 care implică accesarea
memoriei principale DRAM durează aproximativ 75 de cicluri.
Cele patru CPU-uri sunt conectate printr-o magistrală de mare viteză la o
reţea 3D de tip tor, care necesită şase conexiuni: sus, jos, nord, sud, est şi vest. În
plus, fiecare procesor are un port de conexiune la reţeaua comună (10 Gb Ethernet),
utilizat pentru transmiterea datelor către toate procesoarele. Acest port este utilizat
pentru a accelera operaţiile de sincronizare, dând fiecărui procesor acces rapid la o
reţea de sincronizare specializată.
La nivelul următor, IBM a proiectat o placă dedicată, care deţine un cip
prezentat în figura 2.64, împreună cu 2 GB de memorie DRAM (DDR2). Cipul şi
cardul sunt prezentate în figura 2.65 a şi b.

Fig. 2.65. IBM BlueGene/P: (a) cip; (b) card; (c) placă; (d) cabinet; (e) sistem [71].

Cardurile sunt montate pe plăci plug-in, cu 32 de carduri pe placă, având în


total 32 de cipuri (128 CPU-uri) pe placă. Deoarece fiecare card conţine 2 GB de
DRAM, plăcile deţin 64 GB. O placă este ilustrată în figura 2.65 c. La nivelul
următor, 32 de astfel de plăci sunt conectate într-un cabinet cu 4096 CPU-uri. Un
cabinet este ilustrat în figura 2.65 d. În fine, un sistem complet, este format din 72
de cabinete cu 294.912 procesoare şi 144 TB DRAM, fiind ilustrat în figura 2.65 e.
Tipuri de arhitecturi 95

Un procesor PowerPC 450 poate rula până la 6 instrucţiuni/ciclu, astfel încât


un sistem BlueGene/P complet poate lucra cu până la 1.769.472 instrucţiuni/ciclu.
La 850 MHz, acest lucru oferă sistemului o performanţă posibilă de 1.504
petaflops/sec. Cu toate acestea, hazardurile de date, latenţa memoriei şi lipsa
paralelismului fac ca transferul efectiv al sistemului să fie mult mai mic.
Programele care rulează pe BlueGene/P au demonstrat rate de performanţă de până
la 1 petaflop/sec.
Sistemul este un multicomputer, în sensul că nici un procesor nu are acces
direct la orice memorie, cu excepţia celor 2 GB de pe propria placă. În timp ce
procesoarele (CPU) de pe un cip au memorie partajată, procesoarele de pe plăci,
cabinete şi de la nivelul de sistem nu partajează aceeaşi memorie. În plus, nu există
mecanismul de paginare la cerere (vezi capitolul 6), deoarece nu există discuri
locale pe care să se extindă memoria virtuală. În schimb, sistemul are 1.152 noduri
I/O, care sunt conectate la discuri şi la celelalte dispozitive periferice.
Pe ansamblu, sistemul este extrem de mare, dar este, de asemenea, destul de
simplu, cu puţină tehnologie nouă, cu excepţia zonei împachetare a mesajelor de
înaltă densitate. Decizia de a menţine simplitatea nu a fost întâmplătoare, deoarece
un obiectiv major a fost disponibilitatea şi fiabilitatea ridicată. În consecinţă, au
fost depuse eforturi inginereşti intense pentru proiectarea surselor de putere,
ventilatoarele, răcirea şi cablarea, cu scopul de a obţine un timp mediu de bună
funcţionare de cel puţin 10 zile.
Pentru a conecta toate cipurile, este necesară o interconectare scalabilă şi de
înaltă performanţă. Designul utilizat la topologia de reţea este un tor tridimensional
de dimensiuni 72×32×32. În consecinţă, fiecare procesor are nevoie doar de şase
conexiuni la reţeaua de tip tor, două la CPU-urile de deasupra şi dedesubt, şi patru
la CPU-urile plasate sus, jos, în stânga şi în dreapta acestuia. Aceste şase conexiuni
sunt etichetate în figura 2.64 cu up, down, north, south, west şi east.
Din punct de vedere fizic, fiecare cabinet cu 1024 de noduri este un tor de
dimensiuni 8×8×16. Perechile de cabinete vecine formează un tor de dimensiuni
8×8×32, iar patru perechi de cabinete din acelaşi rând formează un tor de
dimensiuni 8×32×32. În fine, toate cele 9 rânduri formează un tor de dimensiuni
72×32×32.
Astfel, toate conexiunile sunt punct-la-punct şi funcţionează la 3,4 Gbps.
Deoarece fiecare dintre cele 73.728 noduri au trei legături la nodurile de ordin
superior, câte una pentru fiecare dimensiune, lărgimea totală de bandă a sistemului
este de 752 terabiţi/sec. Conţinutul informaţiilor din această carte este de
aproximativ 160 de milioane de biţi, inclusiv formatul PostScript încapsulat, astfel
încât BlueGene/P ar putea trimite în fiecare secundă 1,2 milioane de exemplare din
această carte. Unde ar merge ele şi cine le-ar dori rămâne ca exerciţiu pentru cititor.
Red Storm
Al doilea exemplu de MPP este Red Storm (denumit şi Hammer Thor), de la
Sandia National Laboratory (2006). Procesorul selectat pentru Red Storm este
AMD Opteron dual-core la 2,4 GHz. Procesorul Opteron are câteva caracteristici
cheie, care i-au determinat alegerea pentru acest sistem.
96 ARHITECTURA SISTEMELOR DE CALCUL

Prima caracteristică este că are trei moduri de funcţionare. În modul legacy,


rulează programe Pentium standard binare nemodificate. În modul compatibilitate,
sistemul de operare rulează pe 64 de biţi şi poate adresa 264 de octeţi de memorie,
dar programele de aplicaţii rulează în modul pe 32 de biţi. În fine, în modul pe 64
de biţi, întreaga maşină este de 64 de biţi şi toate programele pot adresa întregul
spaţiu de adrese pe 264 octeţi. În modul pe 64 de biţi, este posibil ca software-ul să
se amestece şi să se combine: pot rula în acelaşi timp atât programele pe 32 de biţi,
cât şi cele pe 64 de biţi, permiţând o soluţie uşoară de upgrade.
Cea de-a doua caracteristică cheie a procesorului Opteron este atenţia
acordată problemei lărgimii de bandă a memoriei. În ultimii ani, procesoarele au
devenit tot mai rapide, iar memoria nu a ţinut pasul, ducând la pierderi masive la
nivelul L2 de memorie cache. AMD a integrat controlerul de memorie în Opteron,
astfel încât acesta poate rula la viteza ceasului procesorului în loc de viteza
magistralei de memorie, ceea ce îmbunătăţeşte performanţa memoriei. Controlerul
poate gestiona opt plăcuţe RAM de 4 GB fiecare, pentru o memorie totală maximă
de 32 GB pentru un Opteron. În sistemul Red Storm, fiecare Opteron are doar 2–4
GB de RAM. Cu toate acestea, deoarece memoria devine tot mai ieftină, în viitor
capacitatea va continua să crească. Prin utilizarea procesoarelor Opteron dual-core,
sistemul a reuşit să dubleze puterea brută de calcul.
Fiecare Opteron are propriul său procesor de reţea customizat, numit
Seastar, fabricat de IBM. Seastar este o componentă critică, deoarece aproape
întregul trafic de date între procesoare trece prin reţeaua Seastar. Fără
interconectarea de mare viteză furnizată de aceste cipuri, sistemul ar produce rapid
ratări masive de date. Deşi Opteron este un procesor disponibil pe piaţă, sistemul
Red Storm este construit customizat. Fiecare placă Red Storm conţine patru
procesoare Opteron, 4 GB de memorie RAM, patru procesoare Seastar, un procesor
RAS = Reliability, Availability, Service (fiabilitate, disponibilitate şi servicii) şi un
cip de reţea Ethernet de 100 Mbps, aşa cum se poate vedea în figura 2.66.

Fig. 2.66. Arhitectura pachetului IBM Red Storm [71].


Tipuri de arhitecturi 97

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.

Fig. 2.67. Sistemul IBM Red Storm (vedere de sus) [71].

Cele 2688 procesoare Opteron clasificate au câte 4 GB de RAM, iar celelalte


au câte 2 GB fiecare, activitatea procesoarelor clasificate fiind consumatoare
intensivă de memorie, iar procesoarele I/O şi de servicii sunt împărţite între cele
două părţi. Totul este găzduit într-un spaţiu personalizat de 2000 m2, clădirea şi
locaţia fiind astfel proiectate încât sistemul să poată fi modernizat în perspectivă
până la 30.000 de procesoare Opteron, dacă este necesar. Nodurile de calcul
consumă 1,6 MW, iar discurile încă 1 MW. Cu ventilatoarele şi aerul condiţionat,
consumul total de putere se ridică la 3,5 MW, la un cost mediu de 60 de milioane $.
98 ARHITECTURA SISTEMELOR DE CALCUL

2.4.2.7. Arhitecturi Cluster Computing

Al alt model de multicomputer este calculatorul cluster (Cluster Computing),


format, de obicei, din sute sau mii de PC-uri ori staţii de lucru (Workstations)
conectate printr-o placă de reţea disponibilă comercial. Diferenţa dintre un MPP şi
cluster este analogă diferenţei dintre un mainframe şi un PC. Ambele au un CPU,
memorie RAM, discuri, sistem de operare etc., cu deosebirea că la mainframe sunt
mai rapide (cu excepţia, uneori, a sistemului de operare). Cu toate acestea, din
punct de vedere calitativ, ele se comportă diferit, fiind altfel utilizate şi gestionate.
Această diferenţă se aplică şi în comparaţia între MPP şi cluster.
Deşi există multe tipuri de cluster-e, predomină două categorii: cluster-e
centralizate şi descentralizate.
Un cluster centralizat este un grup de staţii de lucru sau PC-uri montate într-
un rack mare dintr-o singură încăpere. Uneori ele sunt ambalate într-un mult mai
compact decât de obicei, pentru a reduce dimensiunea fizică şi lungimea cablurilor.
De obicei, sunt maşini omogene şi nu au alte periferice decât plăcile de reţea şi,
eventual, discurile. Gordon Bell, proiectantul modelelor PDP-11 şi VAX, a numit
aceste maşini „staţii de lucru decapitate” (headless workstations), deoarece nu au
proprietari.
Un cluster descentralizat constă din staţii de lucru (workstations) sau PC-uri
răspândite într-o clădire sau într-un campus (cum este şi campusul UPB). Cele mai
multe fiind inactive multe ore pe zi, mai ales, noaptea. De obicei, acestea sunt
conectate printr-o reţea LAN, sunt eterogene şi au un set complet de periferice.
Cluster-ele sunt adesea de dimensiuni mici, de la o duzină la aproximativ
500 de calculatoare. Cu toate acestea, este posibil să se construiască şi de
dimensiuni foarte mari, cu PC-urile de pe piaţă.
Google a făcut acest lucru într-un mod interesant. După cum se ştie, Google
este un motor de căutare foarte popular pentru căutarea de informaţii pe Internet. În
timp ce popularitatea sa se datorează, în parte, interfeţei sale simple şi răspunsului
său rapid, designul său nu este deloc simplu. Din punctul de vedere al Google,
problema să găsească, să indexeze şi să stocheze întregul World Wide Web
(WWW), estimat la peste 50 miliarde de pagini, totul în mai puţin de 0,5 secunde şi
cu de zeci de mii de interogări/secundă, care vin din întreaga lume 24 de ore pe zi.
În plus, Google nu are voie să cadă niciodată, nici măcar la cutremure, pene
de curent, întreruperi de telecomunicaţii, defecţiuni hardware şi erori software. Şi,
desigur, trebuie să facă toate acestea cât mai ieftin posibil. Construirea unei clone
Google nu este cu siguranţă un exerciţiu simplu. În acest context, să examinăm
arhitectura Google. Cele mai multe companii, atunci când se confruntă cu baze de
date uriaşe, rate masive de tranzacţii şi nevoie de fiabilitate ridicată, ar cumpăra
echipamentul cel mai mare, cel mai rapid şi cel mai fiabil din câte există. Google a
procedat exact invers: a cumpărat PC-uri ieftine, cu performanţe modeste, dar
extrem de multe, construind cel mai mare cluster din lume. Principiul care a condus
la această decizie a fost foarte simplu: optimizarea raportului performanţă/preţ.
Structura unui centru de date Google tipic este ilustrată în figura 2.68.
Tipuri de arhitecturi 99

Fig. 2.68. Arhitectura unui cluster Google tipic [71].

Intrarea pe magistrala cu fibră optică OC-48 de lărgime de bandă mare este


direcţionată către fiecare din cele două switch-uri Gigabit Ethernet cu 128 porturi.
În mod similar, magistrala cu fibră optică de rezervă OC-12 este, de asemenea,
direcţionată către fiecare dintre cele două switch-uri. Cele două magistrale de
intrare folosesc plăci I/O speciale şi nu ocupă nici unul din cele 128 porturi Ethernet.
Fiecare rack are patru link-uri Ethernet de ieşire, două către switch-ul din
stânga şi două către switch-ul din dreapta. În această configuraţie, sistemul poate
depăşi defectarea oricărui switch. Deoarece fiecare rack are patru conexiuni la
switch (două de la cele 40 de PC-uri din faţă şi două de la cele 40 de PC-uri din
spate), este nevoie de patru erori de link sau de două erori de link şi o întrerupere
de switch pentru a provoca o cădere de rack. Cu o pereche de switch-uri cu 128 de
porturi şi patru link-uri din fiecare rack, pot fi suportate până la 64 de rack-uri. Cu
80 de PC-uri pe rack, un centru de date poate avea până la 5.120 de PC-uri. Dar,
desigur, rack-urile nu trebuie să deţină exact 80 de PC-uri, iar switch-urile pot avea
mai mult sau mai puţin de 128 de porturi; acestea sunt doar valorile tipice pentru
un cluster Google.
Densitatea de putere este, de asemenea, esenţială. Un PC tipic consumă
aproximativ 120 W sau 10 kW/rack. Un rack ocupă aproximativ 3 m2, astfel încât
personalul de întreţinere să poată cupla şi decupla calculatoarele, iar sistemul de aer
condiţionat să funcţioneze. Aceşti parametri dau o densitate a puterii de peste 3000
W/m2. Majoritatea centrelor de date sunt proiectate la un consum 600–1200 W/m2,
deci sunt necesare măsuri speciale pentru răcirea rack-urilor.
100 ARHITECTURA SISTEMELOR DE CALCUL

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.

2.4.2.8. Arhitecturi Grid Computing


Cea mai simplă modalitate de a îmbunătăţi performanţa MPP este adăugarea
în sistem a mai multor CPU-uri. Totuşi, această adăugire trebuie făcută astfel încât
să se evite crearea de orice blocaje sau fenomene de gâtuire (Neumann bottleneck).
Un sistem în care se pot adăuga mai multe procesoare şi se obţine în mod
corespunzător mai multă putere de calcul este considerată a fi scalabil.
Pentru a vedea unele dintre implicaţiile scalabilităţii, fie patru procesoare
conectate cu ajutorul unei magistrale comune, aşa cum este ilustrat în figura 2.69 a.
Acest sistem poate fi scalat, de exemplu, la 16 procesoare, prin adăugarea a încă
12, aşa cum se arată în figura 2.69 b.

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

Dacă lărgimea de bandă a magistralei este de b MB/s, prin cvadruplarea


numărului de procesoare lărgimea de bandă per procesor disponibilă se reduce de
la b/4 MB/s (a) la b/16 MB/s (b). Un astfel de sistem nu este scalabil.
Acum, fie aceeaşi configuraţie de procesoare într-un sistem bazat pe grid
computing, aşa cum se arată în figura 2.69 c şi d. Cu această topologie, adăugarea
de noi procesoare adaugă şi noi conexiuni, deci scalarea sistemului în sus nu
determină scăderea totală a lărgimii de bandă pe CPU, ca în situaţia cu magistrală
partajată. De fapt, raportul dintre conexiunile între CPU-uri creşte de la 1 în cazul
c, cu 4 CPU-uri (4 conexiuni la 4 procesoare) la 1,5 în cazul cu 16 CPU-uri (24 de
conexiuni la 16 procesoare). Astfel, adăugarea de noi procesoare îmbunătăţeşte
lărgimea totală de bandă per procesor.
Tipuri de arhitecturi 101

Desigur, lărgimea de bandă nu este singurul aspect implicat. Adăugarea de


procesoare la magistrala comună nu determină creşterea diametrului reţelei de
interconexiune sau a latenţei în absenţa traficului, în schimb, adăugarea la grid, da.
Pentru o reţea n × n, diametrul este de 2 (n – 1), astfel încât latenţa creşte, în medie,
cu aproximativ rădăcina pătrată a numărului de procesoare. Pentru 400 CPU-uri,
diametrul este de 38, în timp ce pentru 1600 CPU-uri este de 78, astfel încât
cvadruplarea numărul de procesoare dublează aproximativ diametrul reţelei şi,
implicit, latenţa medie.
Problema creşterii latenţei pe măsură ce sistemul este scalat superior este că
este că latenţa adesea afectează fatal performanţele în aplicaţii cu granulaţie fină şi
medie. Dacă un program are nevoie de date care nu se află în memoria sa locală,
apare adesea o întârziere substanţială în obţinerea acestora, iar cu cât creşte
sistemul, cu atât întârzierea este mai mare. Această problemă este valabilă atât
pentru multiprocesoare cât şi pentru multicalculatoare, deoarece în ambele cazuri
memoria fizică este în mod invariabil partajată în module.
Ca o consecinţă a acestei observaţii, proiectanţii de sisteme depun eforturi
considerabile pentru a diminua sau, cel puţin, a acoperi latenţa, folosind două
tehnici. Prima tehnică este cea de replicarea datelor, iar cea de-a doua este cea de
introducere a unui procedeu de pre-fetching al datelor.
Scopul arhitecturii grid este de a oferi o infrastructură tehnică care să permită
unui grup de organizaţii cu un scop comun formarea unei organizaţii virtuale,
care trebuie să fie flexibilă, cu posibilitatea de majorare şi schimbare a calităţii de
membru, care să permită membrilor săi să colaboreze în zone pe care le consideră
adecvate, permiţându-le în acelaşi timp să-şi menţină controlul asupra resurselor
proprii, indiferent de gradul de control pe care îl doresc. În acest scop, cercetătorii
grid dezvoltă servicii, instrumente şi protocoale pentru a le permite acestor
organizaţii virtuale să funcţioneze.
Arhitectura grid necesită acces la o mare varietate de resurse. Fiecare resursă
are un sistem specific şi o organizaţie care o deţine şi care decide cât de mult din
resurse să pună la dispoziţia gridului, în ce momente şi pentru cine. Într-o accepţie
abstractă, un grid reprezintă accesul la resurse şi la gestionarea acestora.
O modalitate de modelare a arhitecturii grid este ierarhia stratificată din
figura 2.70.

Fig. 2.70. Structura stratificată a arhitecturii grid [71].


102 ARHITECTURA SISTEMELOR DE CALCUL

Stratul fabric de la bază reprezintă setul de componente din care este


construită arhitectura grid, care include procesoarele, discurile, reţelele şi senzorii,
pe partea hardware, şi programele şi datele, pe partea software. Acestea sunt
resursele pe care un grid le oferă într-o manieră controlată.
La nivelul următor se află stratul de resurse, care gestionează resursele
individuale din grid. În multe cazuri, o resursă care participă la grid are un proces
local care o gestionează şi care permite accesul controlat la aceasta de către
utilizatorii la distanţă (remote). Acest strat oferă o interfaţă uniformă cu straturile
superioare pentru interogările despre caracteristicile şi starea resurselor individuale,
monitorizarea acestora şi utilizarea lor într-un mod sigur.
Următorul nivel este stratul colectiv, care gestionează grupurile de resurse.
Una dintre funcţiile lui este descoperirea resurselor, prin care un utilizator poate
localiza ciclurile CPU disponibile, spaţiul de pe disc sau datele specifice. Stratul
colectiv poate păstra directoare sau alte baze de date pentru a furniza aceste
informaţii. De asemenea, poate oferi un serviciu de brokeraj la care se înscriu
furnizorii şi utilizatorii serviciilor, eventual, alocând resurse limitate utilizatorilor
concurenţi. Stratul colectiv este, de asemenea, responsabil cu replicarea datelor,
gestionarea admiterii de noi membri şi resurse către grid, evidenţa şi menţinerea
politicilor aplicate bazelor de date (cine şi ce poate folosi).
La nivelul superior este stratul de aplicaţie, unde se află aplicaţiile utilizatorilor.
Acesta utilizează straturile inferioare pentru a obţine acreditări care dau dreptul
utilizatorilor de a folosi anumite resurse, prezintă solicitări de utilizare, monitorizează
progresul acestor cereri, se ocupă de erori şi informează utilizatorul despre rezultate.
Cheia unui grid de succes este securitatea. Deţinătorii de resurse aproape
întotdeauna insistă privind menţinerea controlului strict al resurselor proprii şi
doresc să determine cine ajunge să le folosească, pentru cât timp şi cât de mult.
Fără o securitate bună, nici o organizaţie nu şi-ar pune resursele la dispoziţia
gridului. Pe de altă parte, dacă un utilizator ar trebui să aibă un cont de conectare şi
o parolă pe fiecare computer pe care doreşte să îl folosească, funcţionarea gridului
ar deveni insuportabil de greoaie. În consecinţă, arhitectura grid a fost obligată să
dezvolte un model de securitate pentru a face faţă acestor preocupări.

2.4.2.9. Legea lui Amdahl pentru arhitecturi paralele


Legea lui Amdahl defineşte limitările fundamentale ale programării paralele,
evaluând performanţele arhitecturilor care folosesc multiprocesoare:
Dacă îmbunătăţirea obţinută prin paralelizarea pe n procesoare (CPU) este
utilizată doar într-o fracţiune de timp f dintr-o operaţie, atunci acea operaţie se
poate accelera cu factorul de accelerare

S = n / [1 + (n – 1)(1 – f)].

Exemplu: Dacă n = 4 şi f = 80%, atunci factorul de accelerare este S = 2,5.


Pentru f = 0, se obţine accelerare liniară, S = n, dar pentru orice valoare 1 > f > 0,
accelerarea liniară perfectă este imposibilă, datorită limitărilor componentelor
secvenţiale (bottlenecks): latenţe, lărgimi de bandă finite, algoritmi ineficienţi etc.
3. STRUCTURA UNUI CALCULATOR

3.1. Unitatea centrală (procesorul)

Unitatea centrală (UC) este creierul calculatorului. Rolul UC este de execuţie


a programelor stocate în memoria principală, execuţie realizată în trei etape:
 extragerea instrucţiunilor;
 decodificarea instrucţiunilor;
 execuţia lor propriu-zisă.

Fig. 3.1. Schema bloc a unui calculator.

Unitatea de comandă şi control urmăreşte ordinea de execuţie a instrucţiunilor


unui program şi controlează întreaga activitate a unităţii centrale, astfel:
 interpretează instrucţiunile programului din memoria internă şi comandă
circuitele să execute instrucţiunile;
 comandă şi controlează transferul de date dintre memoria internă şi
dispozitivele periferice.
Unitatea aritmetică şi logică (ALU) implementează funcţiile logice, şi
execută operaţiile aritmetice elementare: adunare, scădere, înmulţire, împărţire.
Registrele interne pot fi:
 de uz general;
 cu destinaţie specifică.
104 ARHITECTURA SISTEMELOR DE CALCUL

Registrele de uz general stochează valorile intermediare ale calculelor.


Registrele cu destinaţie specifică – contorul de program (program counter, PC)
indică adresa noii instrucţiuni care urmează a fi executată precum şi adresa
instrucţiunii curente care se execută.

3.1.1. Execuţia unei instrucţiuni

Timpul necesar execuţiei unei instrucţiuni se numeşte ciclu instrucţiune.


Etapele în execuţia unei instrucţiuni sunt:
1. încărcarea instrucţiunii din memorie în registrul de instrucţiuni (fetch);
2. actualizarea PC pentru a indica următoarea instrucţiune care va fi executată;
3. decodificarea instrucţiunii din registrul de instrucţiuni;
4. localizarea în memorie a eventualelor date utilizate de instrucţiune;
5. încărcarea datelor (dacă este necesar) în registrele interne ale UC;
6. execuţia efectivă a instrucţiunii;
7. stocarea rezultatelor la destinaţia corespunzătoare;
8. întoarcerea la etapa nr. 1 pentru a executa următoarea instrucţiune.

3.1.2. Tipuri de unităţi centrale

Criteriul după care se clasifică UC este cel al setului de instrucţiuni:


 procesoare CISC (Complex Instruction Set Computer);
 procesoare RISC (Reduced Instruction Set Computer).
În ultimul timp, s-a produs migrarea de la CISC la RISC, ceea ce a făcut ca
în prezent, pentru procesoarele moderne, să dispară vechea concurenţă RISC-CISC.

3.1.2.1. Performanţa unităţii centrale


Performanţa UC se referă întotdeauna la o aplicaţie dată, existând mai multe
moduri de evaluare a performanţei:
 mips (mega instructions per second): milioane de instrucţiuni pe secundă;
 flops (floating point operations per second): operaţii în virgulă mobilă
executate pe secundă (exprimat uzual în Mflops sau Gflops);
 timpul în care un anumit procesor poate să rezolve o anumită secvenţă
de program (o sarcină particulară).
Performanţa este produsul a trei factori:
 numărul de instrucţiuni executate în cazul unei aplicaţii date (Ni);
 numărul mediu de perioade de ceas necesare pentru execuţia unei
instrucţiuni (Np);
 durata unei perioade de ceas (Tc).
Valoarea Np se exprimă în cicluri de ceas/instrucţiune, iar Tc se exprimă în
timp/ciclu de ceas.
Structura unui calculator 105

Rezultă că:

P(t) = Ni  Np  Tc (sec).

Reducerea numărului de instrucţiuni Ni se face optimizând compilatorul şi


utilizând o arhitectură adecvată acestui compilator.
Np se reduce fie optimizând compilatorul, aceasta însemnând utilizarea unor
instrucţiuni de durată mai scurtă, fie utilizând o arhitectură paralelă, deci utilizarea
mai multor instrucţiuni simultan. La optimizarea Np, apar limitări tehnologice legate
de implementarea procesorului.
Durata Tc ţine exclusiv de o tehnologie avansată.

3.1.2.2. Indici de performanţă


Până în 1992, se utiliza următoarea pereche de mărimi: Whetstones şi
Dhrystones, care arătau practic viteza UC. Începând din 1992 (cu actualizări
ulterioare), s-a trecut la alţi indici de măsurare a performanţei unităţii centrale, şi
anume indicii SPEC, cu care s-a înlocuit perechea anterioară.
Standard Performance Evaluation Corporation (SPEC) este o organizaţie
non-profit care a luat naştere în 1988 şi are ca scop asigurarea testelor corecte şi
utile pentru a face diferenţă între sistemele de pe piaţă. Testele SPEC sunt larg
folosite actualmente în evaluarea performanţei calculatoarelor, rezultatele fiind
afişate pe site-ul SPEC. Acestea poartă denumirea de note SPEC (SPECmarks).
Testele sunt concepute pentru a realiza situaţii din viaţa reală. De exemplu,
SPECweb, realizează un test al performanţei serverului Web prin mai multe tipuri
de cereri paralele HTTP. Performanţa microprocesorului este testată prin rularea
câtorva programe (de exemplu, compilatoare gcc) sau printr-un joc de şah. Diverse
cerinţe sunt atribuite în funcţie de importanţa percepută, pentru a rezulta un singur
rezultat final. Testele SPEC au fost actualizate în repetate rânduri.
Aceste teste sunt scrise pe o platformă de limbaj de programare neutră (de
obicei, C sau Fortran), iar părţile interesate pot compila codul folosind metoda
dorită, dar fără a schimba codul. Producătorii au lucrat la îmbunătăţirea
compilatoarelor pentru a realiza o cât mai bună acurateţe a diferitelor teste SPEC.
Cele mai importante teste SPEC actuale sunt:
 SPECint – testează aritmetica numerelor întregi, folosind compilatoare,
interpretoare, procesoare de text, programe de şah;
 SPECfp, testează performanţa în virgulă mobilă, cu simulări fizice,
grafică 3D, procesare de imagine, chimie computaţională.
Nota obţinută de sistemul testat se obţine în modul următor.
Pentru SPECint, se rulează 6 programe care folosesc numere întregi şi se
obţin astfel 6 note, din care nota finală rezultă prin mediere geometrică.
Pentru SPECfp, se rulează 12 programe care folosesc virgulă mobilă (12
programe în Fortran şi două programe în C), din care se obţin 14 note. Nota finală
se obţine tot prin media geometrică.
106 ARHITECTURA SISTEMELOR DE CALCUL

3.1.3. Organizarea unităţii centrale

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.

Fig. 3.2. Schema unităţii centrale.

Principii de proiectare pentru calculatoare moderne (RISC)


1. Toate instrucţiunile sunt executate direct de către hardware;
2. Maximizarea ratei la care sunt generate instrucţiunile;
3. Instrucţiunile trebuie să fie decodate cât mai simplu;
4. Numai instrucţiunile load&store trebuie să facă referinţă la memorie;
5. Trebuie asigurat un număr cât mai mare de registre (cel puţin 32).
Structura unui calculator 107

3.2. Memoria

Memoria reprezintă acea parte a calculatorului în care sunt stocate


programele şi datele. Practic, de aici procesorul preia datele de care are nevoie şi
tot aici scrie rezultatul. Unitatea de memorie este o cifră binară care poate lua
numai două valori: 0 sau 1. Microprocesorul are capacitatea de a memora atât
datele care urmează a fi prelucrate, cât şi rezultatele intermediare. Se observă că
rolul său principal este de a prelucra şi transmite datele. Capacitatea de memorare
este mică, neputând stoca, de exemplu, programe.
Sistemul de memorie al unui calculator reprezintă ansamblul unităţilor de
memorie, împreună cu algoritmii necesari pentru controlul transferurilor şi
memorarea datelor, algoritmi care pot fi implementaţi hardware sau software.
Sistemul de memorie include atât locaţiile de memorie propriu-zise, cât şi circuitele
necesare pentru adresarea locaţiilor şi controlul operaţiilor de citire şi scriere. O
parte din aceste circuite se găsesc în unitatea de memorie respectivă, altele sunt
externe, fiind de obicei integrate în controlerul unităţii de memorie.
Obiectivul principal în proiectarea oricărui sistem de memorie este realizarea
unei capacităţi de memorare adecvate sistemului de calcul, cu un nivel acceptabil
de performanţe, la un cost rezonabil. Trebuie subliniat faptul că nu întotdeauna
obiectivul este acela de a obţine o capacitate de memorare cât mai mare.

3.2.1. Caracteristicile unităţilor de memorie

Capacitatea de memorare reprezintă numărul locaţiilor (celulelor) de


memorie conţinute de o unitate de memorie. Aceasta depinde de tehnologia de
fabricaţie şi se exprimă în număr de cuvinte de informaţie memorată (cuv),
dimensiunea cuvântului fiind diferită de la un calculator la altul.
Timpul de acces la o unitate de memorie (tA) este timpul necesar localizării
unei celule de memorie pentru transferul de date la/de la locaţia de memorie
respectivă. Acesta reprezintă intervalul de timp calculat din momentul în care o
unitate master lansează o comandă către o unitate de memorie şi până în momentul
în care informaţia este transferată în sensul dorit.
Rata de acces (rA) este inversa timpului de acces, exprimată în cuvinte pe secundă:

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

Costul total al unităţii de memorie (CT) include, pe lângă costul celulelor


de memorie propriu-zise, costul circuitelor de acces la aceste celule. Pentru
compararea diverselor unităţi de memorie între ele, se utilizează costul unitar
(CU), care reprezintă costul de memorare a unui cuvânt de informaţie. Costul unitar
se determină prin raportarea costului total (CT) la capacitatea de memorare (CM):

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

3.2.2. Ierarhizarea memoriei

Fig. 3.3. Ierarhizarea memoriei.


Structura unui calculator 109

Pornind de la funcţiile realizate de fiecare tip de memorie, de la rolul şi locul


ocupat în sistemul de calcul, se pot distinge mai multe categorii de memorii,
ilustrate în figura 3.3.

3.2.2.1. Registrele de memorie


Reprezintă dispozitivele de memorie cele mai rapide, dar şi cele mai scumpe.
Sunt utilizate de procesor, fiind de două feluri: cu destinaţie specifică şi de uz general.
Registrele cu destinaţie specifică au un rol precis şi memorează numai
anumite tipuri de informaţie (de exemplu, contorul de program). Din acest motiv,
pentru ca procesorul să realizeze o anumită operaţie, este accesat un anumit
registru, şi anume, acela care memorează tipul de informaţie dorit. În acest fel, nu
este necesar ca registrul să fie accesat prin adresă, fapt care măreşte viteza de acces
la informaţia memorată în registre.
Registrele de uz general sunt registre nespecializate, care pot fi utilizate
explicit prin instrucţiuni-program. Capacitatea registrului depinde de tipul
procesorului şi nu depăşeşte de obicei lungimea cuvântului de memorie. Numărul
de registre de memorie este mic, utilizându-se de regulă 16–20 registre.

3.2.2.2. Memoria internă


Conţine programele şi datele pentru toate procesele în curs de execuţie în
sistemul de calcul. Cât timp funcţionează procesorul, el citeşte şi scrie date din/în
aceasta memorie. Memoria internă este o memorie read-write cu acces direct
(RAM). Ea trebuie să aibă un timp de acces redus, pentru a nu întârzia activitatea
procesorului. Tipurile de memorie din această categorie sunt:
 Memoriile DRAM (Dynamic Random Access Memory) sunt memorii RAM
dinamice, în care, pentru a se păstra informaţia, trebuie restabilită periodic
sarcina electrică cu care a fost încărcat condensatorul circuitului de memorie,
sarcină realizată de un circuit de reîmprospătare a memoriei (refresh).
 Memoriile SRAM (Static Random Access Memory) sunt memorii RAM
statice, realizate cu circuite basculante bistabile de memorie, care
păstrează informaţia atât timp cât sistemul este sub tensiune.
La PC-uri, cipurile de memorie sunt asamblate pe plăci de memorie
organizate în bancuri de memorie. Aceste bancuri se instalează pe placa de bază a
PC-ului, în soclurile rezervate memoriei interne, ceea ce permite modificarea
dimensiunii memoriei interne, prin adăugarea de noi bancuri de memorie în locurile
disponibile sau prin schimbarea bancurilor cu altele de capacitate mai mare.
Memoria principală sau memoria primară reprezintă memoria de lucru a
sistemului de calcul, fiind realizată cu circuite integrate de memorie DRAM şi
având o capacitate de memorare relativ mare (sute de MB). Memoria principală
păstrează datele active, care vor fi apelate de către procesor, dar care nu sunt
imediat necesare acestuia. Datele devin active prin transferarea lor din memoria
secundară în memoria principală, fiind memorate sub formă de blocuri de date, în
zone de memorie, proprii fiecărui program. Viteza de lucru a memoriei principale
este mult mai mică decât cea a registrelor procesorului (cu 2–3 ordine de mărime),
având timpi de acces aleator de zeci până la sute de ns.
110 ARHITECTURA SISTEMELOR DE CALCUL

Memoria nevolatilă cu acces aleatoriu (NVRAM) este cea care stochează


date atunci când calculatorul este închis sau nu mai are energie. Memoria NVRAM
este utilizată pentru a menţine informaţiile privind configuraţia calculatorului, cum
ar fi data, ora şi alte opţiuni de pornire care pot fi setate de utilizator.
Memoria cache este o memorie specializată, utilizată în scopul scăderii
timpului de acces la datele din memoria internă. Are capacitate mică şi viteză mare,
fiind inserată logic între procesor şi memoria principală. Constructiv, este o memorie
mai rapidă decât memoria principală, construită, de regulă, din circuite SRAM.
Memoria cache are timpul de acces de 2–10 ori mai mic (ns) decât cel al
memoriei primare, fiind însă şi de câteva ori mai scumpă. Se urmăreşte ca procesorul
să lucreze cât mai mult timp cu memoria cache, şi nu cu memoria principală.
Pentru o memorie cache bine implementată, procesorul lucrează cu aceasta circa
70–90 % din timpul total de lucru cu memoria. Şi acest tip de memorie poate fi
extins prin adăugarea de cipuri suplimentare. Utilizarea memoriei cache se bazează
pe două caracteristici ale execuţiei programelor în sistemele de calcul clasice:
1. programele tind să utilizeze date şi instrucţiuni situate unele lângă altele
sau în zone apropiate (principiul vecinătăţii);
2. programele folosesc în mod repetat adresarea aceloraşi blocuri de memorie.
Plecând de la aceste constatări, memoria cache conţine la un moment dat
cópii ale unor date din memoria principală. Înainte de orice acces la memoria
principală, se verifică dacă nu cumva informaţia căutată se găseşte în memoria
cache. Dacă aceasta există, se preia de acolo cu o viteză superioară.
Memoria intermediară, numită şi memorie cache pentru suporţi externi sau
memorie cache de disc (Disk-Cached Memory), este plasată între memoria
principală şi memoria secundară, acţionând într-o manieră similară memoriei
cache. Are rol de memorie tampon, care păstrează blocurile de date cel mai recent
accesate de un program, duplicări ale celor din memoria secundară.

3.2.2.3. Memoria externă


Pentru a utiliza datele memorate în memoria externă, acestea trebuie aduse
mai întâi în memoria principală. Prin comparaţie cu memoria internă, memoria
externă se caracterizează prin viteză de acces mai scăzută, cost mai redus,
capacitate mai mare, având rolul de a mări spaţiul de memorare al unui sistem de
calcul. În memoria externă sunt stocate şi programele cu ajutorul cărora se realizează
prelucrarea datelor. Accesul la memoria externă nu se face direct, ci prin intermediul
memoriei interne. În comparaţie cu memoria internă, memoria externă este:
 nevolatilă,
 cu acces poziţional şi timp de acces mai mare,
 cu viteză de transfer mai mică,
 cu cost mai redus,
 cu capacitate mult mai mare,
 de tip read-write,
 cu densitate de memorare variabilă de la un echipament la altul şi de la
un suport la altul (magnetic, optic, semiconductor).
Structura unui calculator 111

Memoria secundară este organizată pe un suport extern de memorie, de


regulă disc magnetic, şi are rolul de a realiza o extindere a memoriei principale,
conform conceptului de memorie virtuală, care se referă la capacitatea procesorului
de a utiliza un spaţiu de memorie externă pentru a simula o capacitate mai mare a
memoriei interne disponibile. Altfel spus, este vorba de capacitatea procesorului de a
accesa un spaţiu de adrese care depăşeşte spaţiul de adrese al memoriei principale.
Acest concept a apărut încă din anul 1960, iar la PC este disponibil începând cu seria 286.
Memoria suplimentară poate fi de mai multe tipuri: memorie expandată,
memorie extinsă şi memorie de arhivare sau terţiară.
Memoria expandată este o memorie suplimentară la calculatoarele de tipul
PC, pe care utilizatorul o accesează prin intermediul mecanismului EMS
(Expanded Memory Specification). Este alcătuită din bancuri de memorie de 64 KB
RAM şi este gestionată de un program-sistem specializat. numit EMM386.EXE (în
sistemul de operare MS-DOS).
Memoria extinsă este memoria suplimentară accesibilă utilizatorului prin
mecanismul XMS (eXtended Memory Specification), care poate fi implementat pe
procesoare având cuvinte de adresă de 32 biţi. Programele trebuie scrise ca
utilizând special aceste mecanisme. Programul-sistem care gestionează acest tip de
memorie în sistemul de operare MS-DOS este HIMEM.SYS.
Memoria de arhivare sau memoria terţiară este acea parte a memoriei
externe care asigură stocarea datelor preluate din mediul extern pe o perioadă de
timp nedeterminată şi în volume semnificative. Este o memorie nevolatilă de
dimensiuni mari, dar şi cu timpi de acces foarte mari (zeci de secunde). Păstrează
date pasive, stocate doar în scop de arhivare, pe o perioadă de timp nedeterminată
şi în volume semnificative. Accesul la aceste date se face foarte rar. Memoria
terţiară este realizată cu unităţi de memorare pe suport detaşabil, optic (CD-ROM,
DVD-ROM), magnetic (bandă sau casetă magnetică) sau semiconductor (stick-uri
şi card-uri de memorie). Trebuie subliniat faptul că memoria terţiară reprezintă
colecţia de discuri şi casete existente, şi nu unităţile de memorie propriu-zise.

3.2.3. Memoria RAM

Circuitele integrate de memorie sunt memorii semiconductoare, realizate în


diverse tehnologii de fabricaţie (bipolare sau MOS). Acestea sunt de mai multe
tipuri, cu diferite raporturi performanţe/cost, având domenii specifice de utilizare:
memoriile cu acces aleator (RAM = Random Access Memory) şi memoriile cu
acces pentru citire (ROM). O memorie RAM este acea memorie la care locaţiile de
memorie pot fi accesate în orice ordine, iar timpul de acces nu depinde de locaţia
accesată. Memoriile RAM sunt de două tipuri: statice (SRAM) şi dinamice (DRAM).

3.2.3.1. Memoria SRAM


Memoria SRAM (Static RAM) este o memorie în care informaţia se
memorează într-un mod stabil, pe ambele niveluri logice, atât timp cât memoria este
alimentată.
112 ARHITECTURA SISTEMELOR DE CALCUL

Este realizată în tehnologii rapide (bipolare sau CHMOS = Complementary


High-density MOS), cu timpi de acces foarte mici (ns). Fiind o memorie care poate fi
şi citită şi scrisă, SRAM are magistrala bidirecţională de date şi două cicluri diferite
de memorie: ciclul de citire şi ciclul de scriere, identificate de semnalul WE , activ
pe 0. Reprezentarea memoriei SRAM se găseşte în figura 3.4.

Fig. 3.4. Reprezentarea memoriei SRAM.

Memoria SRAM poate fi de două tipuri:


 Memoria SRAM asincronă nu necesită semnal de ceas pentru
sincronizarea cu unitatea master. Memoriile asincrone sunt mai lente
decât cele sincrone, dar sunt mai ieftine şi au un consum de energie mic.
Aceste memorii sunt realizate într-o gamă foarte diversă de performanţe,
cu timpi de acces care variază de la 50–70 ns, până la 10–15 ns.
 Memoria SRAM sincronă necesită un semnal de ceas pentru validarea
semnalelor de control. Ceasul primit din exterior permite operarea
memoriei, sincron cu unitatea master. Memoriile sincrone sunt foarte
rapide, cu timp de acces sub 10 ns, pot funcţiona la tensiuni de
alimentare mici, dar sunt scumpe. Ele pot fi de mai multe tipuri: PBS
(Pipelined Burst Synchronous), FTS (Flow Through Synchronous) sau
ZBT (Zero Bus Turnaround) SRAM.
În general, sistemele de calcul simple au memoria RAM de lucru formată
doar din circuite de memorie SRAM asincronă, cu capacităţi mici, de zeci-sute de
KB, şi care memorează cuvinte de 8 biţi. Sistemele performante, care necesită
viteze şi capacităţi de memorare mari, folosesc memorii SRAM rapide pentru
implementarea memoriei cache.
Din punct de vedere constructiv, cele două tipuri de memorii SRAM sunt
similare. Ele diferă doar prin algoritmul de transfer al datelor şi, implicit, prin
performanţe. De aceea, în cele ce urmează vor fi analizate elementele comune,
definitorii pentru SRAM, iar exemplificările vor fi realizate pentru memoria
asincronă.
Schema bloc a memoriei SRAM este ilustrată în figura 3.5, unde se observă
modul de adresare, legătura la magistrale de date şi partea de control a memoriei.
Structura unui calculator 113

Fig. 3.5. Schema bloc a memoriei SRAM.

3.2.3.2. Memoria DRAM


Memoria DRAM (Dynamic RAM) este o memorie volatilă cu acces aleator,
care memorează informaţia în mod dinamic. Este realizată în tehnologie CMOS
(Complementary MOS), cu consum de energie foarte mic. Datorită
particularităţilor constructive ale celulelor de memorie, informaţia 0 este memorată
stabil, dar informaţia 1 se pierde în timp şi necesită împrospătarea periodică a
memoriei, de unde şi denumirea acesteia.
Indiferent de modul de realizare, memoria DRAM este mult mai lentă decât
memoria SRAM, din cauza mecanismului specific de memorare a datelor. Timpul
de acces la DRAM este de 2–10 ori mai mare decât la SRAM, şi variază în funcţie
de tipul accesului la memorie.

Fig. 3.6. Reprezentarea memoriei DRAM.


114 ARHITECTURA SISTEMELOR DE CALCUL

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:

Fig. 3.7. Schema bloc a memoriei DRAM.


Structura unui calculator 115

 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

Memoria DRAM sincronă necesită un semnal de ceas pentru validarea


semnalelor de control. Ceasul primit din exterior permite operarea memoriei
sincron cu unitatea master. Deşi accesul aleator este comparativ cu cel al
memoriilor asincrone, accesul în mod pagină este mult mai rapid.
Memoriile sincrone pot fi de mai multe tipuri: SDRAM (Synchronous
DRAM), DDR SDRAM (Double Data Rate SDRAM), RDRAM (Rambus
DRAM), DRDRAM (Direct Rambus DRAM) etc. Accesul aleator este, de
asemenea, lent, fiind puţin mai rapid decât la memoriile asincrone, datorită
tehnologiei (memoriile sincrone au apărut ulterior). În acces aleator, tRAC este de
40–60 ns, iar tC este de 80–110 ns. Accesul în mod pagină este mult mai rapid decât
la memoriile asincrone şi depinde de frecvenţa semnalului de ceas de sincronizare.

3.2.4. Organizarea locaţiilor de memorie

În sistemele cu microprocesoare, modulele de memorie se conectează pe


magistrala sistemului. Accesul la locaţiile de memorie se realizează prin cicluri de
transfer (cicluri maşină), folosindu-se semnalele magistralei: adresă, date, comenzi.
Modul de desfăşurare a diferitelor tipuri de cicluri de transfer se reprezintă prin
diagrame de timp (evoluţia în timp a semnalelor de pe magistrală implicate în
transfer). Parametrii de timp ai unui ciclu de transfer depind de tipul procesorului,
de regulile de comunicaţie pe magistrală şi de tipul circuitelor de memorie utilizate.
Ciclu de citire din memorie
Semnale de adresă Adresa validă

S. de c-dă MEMR\
(citire memorie) (înaltă impedanţă)
Semnale de date Date valide (citite)
>0
tAR
tMEMR
tC

Ciclu de scriere în memorie


Semnale de adresă Adresa validă

S. de c-dă MEMW\
(scriere memorie) (înaltă impedanţă)
Semnale de date Date valide (scrise)
>0
tAW tMEMW
tC

Fig. 3.8. Diagrame de citire/scriere memorie.


Structura unui calculator 117

În figura 3.8, s-au reprezentat diagramele de transfer pentru un ciclu de citire


din memorie şi un ciclu de scriere în memorie.
La proiectarea unui modul de memorie, trebuie să se ţină cont de următorii
parametri de timp:
 timpul de acces la citire (tAR) – intervalul de timp între momentul apariţiei
adresei valide şi momentul în care data citită este prezentă pe liniile de
date. Uneori, timpul de acces se măsoară în raport cu momentul apariţiei
semnalului de comandă MEMR\. Dacă timpul de acces al circuitului de
memorie folosit este mai mare decât timpul permis pe magistrală, atunci
interfaţa modulului de memorie trebuie să prelungească ciclul de transfer,
prin dezactivarea pe un timp limitat a semnalului READY către procesor.
 timpul de menţinere a semnalului de comandă MEMR\ activ (tMEMR).
 durata unui ciclu complet de citire sau scriere (tC).
 timpul de acces la scriere (tAW) – intervalul de timp între momentul în care
adresa este validă şi momentul de generare a comenzii de scriere; în
acelaşi mod ca la citire, dacă circuitul de memorie folosit are un timp de
acces mai mare, atunci interfaţa modulului trebuie să dezactiveze temporar
semnalul READY pentru prelungirea ciclului de transfer. Momentul
activării semnalului de scriere se măsoară şi în raport cu momentul în care
data este prezentă pe magistrală.
 timpul de menţinere a semnalului de scriere (tMEMW), de obicei < tMEMR.
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 la restricţiile impuse pe magistrală şi să ia în calcul întârzierile
produse de circuitele de amplificare din interfaţă şi de pe magistrală.
Sunt două moduri de organizare a octeţilor în memorie: Big endian şi Little endian.

Fig. 3.9. Modurile de organizare a memoriei: (a) Big endian; (b) Little Endian [71].
118 ARHITECTURA SISTEMELOR DE CALCUL

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.
În figura 3.10 este exemplificată conversia între Big endian şi Little endian,
prin transfer şi swap.

Fig. 3.10. (a) înregistrare Big endian; (b) înregistrare Little endian; (c) transfer Big endian –
Little endian; (d) transfer & swap [71].

Microprocesoarele PowerPC, Motorola 6800 şi HP, folosesc o organizare a


octeţilor în memorie de tip Big endian, iar microprocesoarele DEC şi Intel folosesc
modul Little endian. Cuvintele pot fi pe 16/64 biţi în loc de 32 biţi şi cu doi octeţi în
loc de 4 octeţi etc.

3.2.5. Metodologia de proiectare a memoriilor statice

Proiectarea unui modul de memorie se face pe baza unor parametrilor de


proiectare impuşi:
 capacitatea memoriei;
 modul de organizare (unitatea elementară de acces la memorie: octet,
cuvânt, cuvânt dublu, dualoct etc.);
 tipul de magistrală pe care se conectează (numărul semnalelor de date şi
de adresă, tipurile semnalelor de comandă, parametrii de timp pentru
ciclurile de transfer);
 amplasarea modulului de memorie în spaţiul de adresare al procesorului,
exprimată prin adresa sa de început (trebuie să fie un multiplu al
capacităţii modulului);
 tipul de circuit de memorie disponibil (poate fi un parametru impus sau
unul ales de proiectant);
 alte cerinţe speciale: accesul dual de pe două magistrale, reîmprospătarea
controlată centralizat, implementarea unor mecanisme de detecţie sau
corecţie a erorilor etc.
Structura unui calculator 119

3.2.6. Metodologia de proiectare a memoriilor dinamice

Proiectarea memoriilor dinamice este, în principiu, similară proiectării


memoriilor statice, cu următoarele amendamente:
 trebuie să se adauge un mecanism de reîmprospătare periodică a
memoriei (refresh);
 adresele trebuie multiplexate (generarea secvenţială pe aceleaşi semnale
a adresei de linie şi a adresei de coloană);
 trebuie să se genereze semnalul de validare a adresei de linie (RAS –
Row Address Select) şi semnalul de validare a adresei de coloană (CAS
– Column Address Select);
 selecţia circuitelor se face cu semnalele RAS şi CAS (vezi figura 3.7).
Excepţie fac circuitele tip EDO-DRAM, cu semnal separat pentru
selecţia circuitului.
Pentru circuitele RAM dinamice, multiplexarea în timp a adreselor a fost
necesară pentru a reduce numărul de pini ai circuitului de memorie şi, implicit,
dimensiunea acestuia. De notat că circuitele dinamice au o capacitate relativ mare,
ceea ce impune un număr mare de linii de adresă pentru selecţie. Organizarea
internă a unei memorii dinamice este sub forma unei matrice, cu linii şi coloane, iar
selecţia unei locaţii se face prin specificarea adresei sale de linie şi de coloană.
Reîmprospătarea periodică a memoriei este necesară deoarece informaţia
este păstrată un timp limitat după ultima operaţie de citire sau scriere
(condensatorul care stochează informaţia se descarcă în timp).
În figurile 3.11, 3.12 şi 3.13 s-au reprezentat diagramele de timp pentru
ciclurile de citire din memoria DRAM, scriere în memoria DRAM şi, respectiv,
reîmprospătare a memoriei DRAM prin procedeul RAS Only Refresh (ROR).

Adrese Adresă linie Adresă coloană

RAS\

CAS\

WR\

Date Date citite


tRAS–CAS tCAS

tacces
tciclu

Fig. 3.11. Ciclu de citire din memoria DRAM.


120 ARHITECTURA SISTEMELOR DE CALCUL

Adrese Adresă linie Adresă coloană

RAS\

CAS\

WR\

Date Date de scris


tRAS–CAS tCAS

tacces
tciclu

Fig. 3.12. Ciclu de scriere în memoria DRAM.

Adrese Adresă linie

RAS\

CAS\

WR\

Fig. 3.13. Ciclu de reîmprospătare a memoriei DRAM (ROR).

Controlul procesului de reîmprospătare poate să se facă la nivelul modulului


de memorie sau centralizat la nivelul întregului sistem. Indiferent de metoda aleasă,
proiectantul trebuie să se asigure că ciclurile de reîmprospătare nu se suprapun
peste ciclurile obişnuite de citire sau scriere. Reîmprospătarea se face simultan la
nivelul unei linii întregi din matricea de memorie.

3.2.7. Module de memorie

Modulele de memorie sunt plăcuţe cu circuite integrate care includ conectori


externi, pentru a fi introduse în soclurile disponibile pe placa de bază. Modulele de
memorie sunt prevăzute cu conectori CELP (Card Edge Low Profile), având 30–83
contacte pe fiecare parte a modulului. Conectorii aflaţi la baza modulelor de memorie
permit adăugarea sau scoaterea lor de pe placa de bază fără instrumente speciale.
În ceea ce priveşte necesarul de memorie într-un sistem de calcul, este demn
de reţinut că prin creşterea dimensiunii acesteia sistemul devine mai rapid,
deoarece microprocesorul citeşte datele din RAM foarte repede, neaşteptând citirea
Structura unui calculator 121

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.14. Dispunerea bancurilor pe placa de bază.


122 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 3.15. Două moduri de organizare a unei memorii de 4 Mb: (a) 512K×8; (b) 4096K×1 [71].

În figura 3.15 este reprezentat un exemplu de organizare a unei memorii de 4


Mbiţi în două moduri, iar în figura 3.16 un exemplu de organizare a unei memorii
de 512 Mbiţi în alte două moduri. Se remarcă în ambele figuri că este vorba despre
scheme de cip (de dispunere a pinilor) şi că se lucrează cu două memorii DRAM.

Fig. 3.16. Două moduri de organizare a unei memorii de 512 Mb: (a) 32M×16; (b) 128M×4 [71].

Modulele de memorie pot fi single-sided (pe o singură faţă) sau double-sided


(pe două feţe) şi single-channel (cu canal unic) sau dual-channel (cu canal dual).
Structura unui calculator 123

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.

3.2.8. Formate fizice de memorie

Plăcuţe cu cipuri de memorie există sub următoarele tipuri de încapsulări:


DIP (Dual In-line Package)
Este varianta clasică de încapsulare, în care cipul este prevăzut cu un număr
de pini pe partea sa inferioară, de ambele părţi, care sunt introduşi în socluri speciale
(vezi figura 3.17). Dezavantajul este că, din cauza rezistenţei reduse, pinii se pot
rupe uşor. Acest tip de încapsulare s-a folosit la sisteme (i80286) şi plăci video vechi.

Fig. 3.17. Modulul de memorie DIP.


124 ARHITECTURA SISTEMELOR DE CALCUL

În prezent, modulele de memorie DIP se mai pot întâlni la încapsularea unor


microcontrolere, cum este cipul microcontrolerului Atmel ATmega 168, cu 28 pini
(vezi figura 3.18).

Fig. 3.18. Cipul DIP al microcontrolerului Atmel ATmega 168 (28 pini) [71].

SOJ (Small Outline J Lead)


Este o metodă de încapsulare mai modernă, regăsită la modulele SIMM şi
cipurile BIOS (uneori). Se aseamănă cu DIP-ul, cu diferenţa că, în loc de pini, sunt
folosite nişte terminale în formă de J, care se prind prin îndoire (vezi figura 3.19).

Fig. 3.19. Modulul de memorie SOJ.

TSOP (Thin Small Outline Package)


Este o încapsulare de tip SMD (Surface Mounted Devices), dar care necesită
o suprafaţă foarte redusă şi, de aceea, este folosită pe plăci PCMCIA, notebook-uri
şi unele plăci video (vezi figura 3.20).

Fig. 3.20. Modulul de memorie TSOP.


Structura unui calculator 125

PGA (Pin Grid Array)


PGA are pinii pe partea de jos a încapsulării, care se fixează într-un soclu
(socket) de pe placa de bază. Conectorii PGA utilizează adesea un mecanism cu
forţă de inserţie zero, prin care un PGA poate fi introdus în soclu fără efort,
folosind o pârghie care aplică presiune laterală asupra tuturor pinilor PGA, cu o
prindere fermă în soclul PGA (vezi figura 3.21).

Fig. 3.21. Modulul de memorie PGA [71].

BGA (Ball Grid Array)


Este o metodă mai nouă de încapsulare, în care cipurile sunt ataşate cu
ajutorul unor biluţe din cositor, plasate sub cip. Acestea sunt destul de ieftine şi
prezintă proprietăţi bune de conductivitate electrică şi termică (permit o mai bună
disipare a căldurii, în special în versiunea cu suport ceramic). Există mai multe
variante ale încapsulării BGA (Fine BGA şi Tiny BGA), folosite în majoritatea
modulelor de memorie de azi, inclusiv memoriile Rambus (vezi figura 3.22).

Fig. 3.22. Modulul de memorie BGA [71].

Un exemplu de utilizare al modulului BGA este încapsularea pentru


OMAP4430, un system-on-a-chip reprezentat în figura 3.23.

Fig. 3.23. Cipul BGA pentru OMAP4430 system-on-a-chip [71].


126 ARHITECTURA SISTEMELOR DE CALCUL

LGA (Land Grid Array)


Un modul LGA dispune de mici suporturi plate mici pe partea de jos a
cipului. Soclul LGA are un capac care se potriveşte peste cip şi îi aplică o forţă de
sus în jos, asigurându-se că toate suporturile de pe cipul LGA fac contact cu soclul,
aşa cum se vede în figura 3.24.

Fig. 3.24. Modulul de memorie LGA [71].

Un exemplu de încapsulare LGA o reprezintă cipul microprocesorului Intel


Core i7, prezentat în figura 3.25.

Fig. 3.25. Cipul LGA pentru microprocesorul Intel Core i7 [71].

Deoarece mai multe încapsulări de circuite integrate au formă simetrică,


găsirea orientării corecte este o eternă problemă la montare. Modulele DIP au, de
obicei, o crestătură într-un capăt, care se potriveşte cu un reper corespunzător de pe
soclul DIP. Un modul PGA are, de regulă, un pin lipsă, deci la o încercare de
introducere incorectă în soclu un PGA nu va intra. Deoarece modulele LGA nu au
pini, montarea corectă se face prin plasarea unei crestături pe una sau două din
laturile modulului LGA, care se potriveşte cu crestăturile corespunzătoare din
soclu. Modulul LGA nu intră în soclu decât dacă cele două crestături se potrivesc.
Structura unui calculator 127

SIMM (Single In-line Memory Module)


Este o plăcuţă de memorie cu un singur rând de pini, care se introduce în
sloturi pe placa de bază. Aceasta elimină problemele de compatibilitate, datorită
standardizării ei de către producătorii plăcilor de bază. Memoria SIMM foloseşte o
magistrală de memorie pe 32 de biţi, disponibilă în două variante:
 cu 30 de pini (figura 3.26), pentru capacităţi mici de memorie (< 8 MB);
 cu 72 de pini (figura 3.27), pentru capacităţi mai mari de memorie (> 8 MB).
Memoriile SIMM pot fi atât single-sided (cu cipuri de memorie pe o singură
parte), cât şi double-sided (cipurile sunt dispuse pe ambele feţe). SIMM-urile
double-sided sunt realizate din două SIMM-uri single-sided, conectate împreună pe
acelaşi modul din fibră de sticlă.

Fig. 3.26. Modulul de memorie SIMM cu 30 de pini.

Fig. 3.27. Modulul de memorie SIMM cu 72 de pini.

SODIMM (Small Outline Dual In-line Memory Module)


Modulele SIMM de 72 de pini sunt convenabile pentru calculatoare desktop,
dar sunt prea mari pentru laptopuri. În consecinţă, producătorii de calculatoare
miniaturizate au transformat SIMM-urile cu 72 de pini, astfel încât, în locul
conectării la un loc a pinilor de pe cele două părţi ale modulului, au introdus nişte
spaţii pe fiecare parte, pentru a avea două semnale separate.
Astfel, lungimea modulului s-a redus la jumătate, rezultatul fiind Small
Outline Dual In-line Memory Module (SODIMM), numit astfel datorită
dimensiunilor reduse ale modulului şi a celor două linii de conectori independenţi
de pe fiecare parte a modulului (vezi figura 3.28).
Un SODIMM cu 72 de pini are lungimea la jumătate faţă de SIMM-ul cu 72
de pini (2,35 inci), fiind echivalent unui SIMM cu 72 de pini având conectorii pe
ambele părţi ale modulului.
Prinderea în soclu a unui modul SODIMM este simplă şi sigură: modulul se
introduce într-un slot de extensie de memorie şi apoi se fixează cu ajutorul unei
cheiţe, paşii de montare fiind marcaţi în figura 3. 28 prin (1) şi (2).
128 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 3.28. Modulul de memorie SODIMM.

SIPP (Single In-line Pin Package)


Deşi SIPP-urile sunt identice cu SIMM-urile de 30 de pini din punct de
vedere electric, din punct de vedere fizic sunt mai mici (vezi figura 3.29).
Dimensiunile standard sunt de 3,23 inci lungime şi 1 inci înălţime. Deşi din punct
de vedere funcţional SIMM-urile şi SIPP-urile pot avea aceleaşi cipuri de memorie,
aceeaşi tehnologie şi aceeaşi capacitate, între ele există diferenţe care le fac
incompatibile. Dacă se doreşte instalarea unei noi extensii de memorie sau înlocuirea
uneia existente, trebuie specificat tipul de memorie folosit: SIMM sau SIPP.

Fig. 3.29. Modulul de memorie SIPP.

DIMM (Double In-line Memory Modules)


Sunt module de memorie cu două rânduri de pini, având lăţimea magistralei
de 64 de biţi, folosite la implementarea memoriilor SDRAM şi DDR SDRAM
(vezi figura 3.30).

Fig. 3.30. Modul de memorie DIMM.


Structura unui calculator 129

DIMM-urile SDRAM folosesc 168 de pini, pe când cele DDR SDRAM au


184 de pini. Ele mai diferă şi prin numărul fantelor de pe partea inferioară, cele
SDRAM având două, iar cele DDR, numai una. Din punct de vedere al designului
şi al tensiunii de alimentare, există 4 variante de DIMM-uri: de 3,3V sau 5V şi cu
buffer (buffered) sau fără buffer (unbuffered). Cele mai des întâlnite sunt de tipul
3,3V, fără buffer.
În figura 3.31 este reprezentat un modul DIMM pentru o memorie în format
logic DDR3 (vezi paragraful următor), cu 8 cipuri de câte 256 MB.

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.

Fig. 3.32. Modulul RIMM Rambus cu 184 de pini.

Se prezintă şi în varianta XDIMM (vezi paragraful 3.2.9 – XDR DRAM), tot


pentru memorii de tip Rambus, modul care este reprezentat în figura 3.33.

Fig. 3.33. Modulul de memorie XDIMM.


130 ARHITECTURA SISTEMELOR DE CALCUL

3.2.9. Formate logice de memorie

Dacă formatele logice de memorie din paragraful precedent se referă la


aspecte legate de încapsulare, formă a cipului, caracteristici mecanice şi electrice,
conectare şi montare, formatele logice de memorie tratează modul de organizare
internă, orientarea pe locaţii de memorie, operaţiile de citire şi scriere, protocoalele
de transfer cu magistrala memoriei şi diagramele de timp asociate, semnalele de
comandă, control şi stare, sincronizarea etc. Unui format logic îi poate corespunde
un format fizic (sau mai multe) şi viceversa, dar, în principiu, o pereche de formate
fizic-logic defineşte una şi aceeaşi memorie, iar tipurile de formate logice sunt
prezentate, la fel ca formatele fizice, în evoluţia lor cronologică.
Încărcarea cipurilor de memorie prin adresarea liniilor şi coloanelor consumă
timp de ordinul nanosecundelor, ceea ce provoacă întârzieri la răspunsurile
furnizate microprocesoarelor. Dacă se adaugă şi timpul necesar reîmprospătării, se
obţin limitele performanţei cipului de memorie. Pentru a mări performanţele
memoriei, proiectanţii au dezvoltat o serie de tehnologii care să depăşească aceste
limite, orientându-se asupra modului în care sunt procesate datele intern – moduri
care constituie formatele logice ale memoriilor interne: s-a încercat mai întâi
memoria de tip coloană statică (SCRAM), apoi s-a trecut la formatul de citire
rapidă pe pagini (FPM), care s-a dovedit a fi mai performant prin anii '90, ulterior
tehnologia EDO preluând supremaţia, fiind optimizată pentru memoria cache.
Toate aceste prime formate logice au acelaşi mod de adresare a celulelor şi aceeaşi
tehnologie la bază, diferind prin anumite semnale şi cuante de timp alocate.
Fiind deja scoase din uz, primele patru formate logice sunt tratate sumar:
 SCRAM (Static Column RAM) – accesul se face pe coloane;
 FPM (Fast Page Mode) – operarea se face în mod pagină;
 EDO (Extended Data Out) – variantă rapidă de FPM, în combinaţie cu
o memorie cache;
 BEDO (Burst Extended Data Out) DRAM – variantă EDO compatibilă
cu modul burst/pipeline.
Exemplu. Acolo unde o memorie FPM de 70 ns are starea de aşteptare zero
la o frecvenţă a magistralei de 25 MHz, o memorie EDO poate opera la stare de
aşteptare zero pentru o frecvenţă a magistralei de 33 MHz.
SDRAM (Sychronous DRAM)
Datorită multiplexării, cipurile de memorie nu pot opera simultan cu
microprocesoarele. Adresarea normală cere cicluri alternante, dar, prin
reproiectarea interfeţei de bază, cipurile de memorie pot accesa date la fiecare ciclu
de ceas. Modificările cipurilor de interfaţă au făcut ca cipurile de memorie să poată
opera sincron cu microprocesoarele: acestea se numesc DRAM sincron.
Deşi schimbarea interfeţei cipului poate evita blocările sistemului, ea nu are
nici o contribuţie la creşterea vitezei. Ca şi microprocesoarele superscalare, cipurile
SDRAM sunt realizate cu stagii de operare multiple şi independente, astfel încât cipul
poate să acceseze o a doua adresă înainte de a încheia procesarea primei adrese.
Extinderea pipeline se referă doar la adresarea coloanelor unei anumite pagini.
Structura unui calculator 131

Cipurile SDRAM au rata de transfer foarte ridicată. Interfaţa şi pipeline-ul


determină timpi de transfer de ordinul nanosecundelor, ceea ce le permite utilizarea
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.34 este prezentată structura unei memorii organizate pe 4 blocuri,
care sunt accesibile în mod concurent.

Fig. 3.34. Structura internă a unei memorii SDRAM de 8 MB.

Structura favorizează operaţiile în regim burst. Se poate programa numărul


de locaţii dintr-un burst la valorile de 1, 2, 4, 8 octeţi sau o pagină de memorie.
Accesul începe la o adresă specificată şi continuă cu adresele succesive, până la
numărul de locaţii programate. Circuitul de memorie acceptă mai multe tipuri de
comenzi, fiecare fiind specificată printr-o combinaţie a semnalelor de intrare.
132 ARHITECTURA SISTEMELOR DE CALCUL

Ratele de transfer cerute de diverse tehnologii de memorie pentru starea de


aşteptare zero la o viteză de transfer dată pe magistrală sunt prezentate în tabelul
3.1, în care se remarcă supremaţia SDRAM faţă de formatele logice anterioare.

Tabelul 3.1
Ratele de transfer la o viteză dată a magistralei locale

viteza magistralei de memorie FPM EDO BEDO SDRAM


25 MHz 70 ns 70 ns 70 ns 12 ns
33 MHz 52 ns 70 ns 70 ns 15 ns
50 MHz N/A 52 ns 70 ns 12 ns
66 MHz N/A N/A 52 ns 10 ns

Dintre versiunile rapide de SDRAM dezvoltate ulterior, se pot aminti:


 PC 100 RAM – timp de acces 8 ns, rată de transfer 500–800 MB/s;
 PC 133 RAM – timp de acces 7,5 ns, rată de transfer 800 MB/s;
 PC 2100/2700/3200 – la frecvenţele de 266/333/400 MHz.
EDRAM (Enhanced DRAM)
Memoriile de tip EDRAM sunt mai rapide şi se obţin din DRAM-urile
obişnuite prin adăugarea unor blocuri mici de memorie cache statică pe fiecare cip.
Cache-ul operează la viteză înaltă (în mod obişnuit, 1 ns), astfel încât pot să
acopere cererile de date ale microprocesorului fără a adăuga stările de aşteptare
generate de operaţia de reîmprospătare. Producătorul tehnologiei EDRAM
(Ramtron) descrie patru avantaje ale acestui tip de memorie:
 legarea memoriei cache SRAM cu memoria DRAM pe acelaşi cip
presupune folosirea unei magistrale de lăţime mare pentru conectare
(Ramtron foloseşte o magistrală de 16.384 biţi), care poate determina o
rată de umplere a memoriei cache de aproximativ 60 Gb/s, comparativ
cu 110 Mb/s la cache page mode DRAM. Timpul de umplere este de
aproape şapte ori mai mic (35 ns) la EDRAM faţă de cache page mode
DRAM (250 ns);
 modelul Ramtron foloseşte o structură de control diferită faţă de
formatul DRAM convenţional, ceea ce permite ca memoria să fie
preîncărcată (prefetch) în timp ce sistemul realizează transferul în mod
burst din cache, preîncărcarea determinând reducerea timpului de acces;
 deşi cache-ul EDRAM foloseşte proiectarea write through (vezi
paragraful 3.2.12), scrierea în memoria principală poate fi făcută cu timp
de aşteptare zero. Prima operaţie de scriere necesită 7 ns, iar ciclul de
scriere pentru o pagină normală este de 15 ns;
 proiectarea EDRAM permite accesul separat la bancurile de cache, ceea
ce reduce timpul de acces la sistemele care lucrează în multitasking.
Structura unui calculator 133

CDRAM (Cached DRAM)


Memoria CDRAM, realizată de Mitsubishi, adaugă o memorie cache pe
fiecare cip, utilizând un model de tip asociat. Cipul iniţial de 4 MB are încorporată
o memorie cache de 2 KB, folosind două buffer-e de câte un cuvânt (16 biţi) pentru
transferul dintre cache şi circuitele externe. Spre deosebire de EDRAM, părţile
CDRAM asociază atât cache-ului, cât şi DRAM-ului principal, acelaşi spaţiu de
adrese, astfel încât acestea operează independent una faţă de cealaltă, putând fi
adresate separat. Memoria cache este suficient de rapidă pentru a transfera date în
mod burst, la o frecvenţă de bază de 100 MHz. Cipul permite celor două buffer-e
să funcţioneze independent, deci, pot lucra în flux continuu.
MDRAM (Multibanc DRAM)
Principiul de lucru este următorul: în locul unui bloc de celule, fiecare celulă
este adresată prin numărul liniei şi al coloanei. Memoria DRAM produsă de MoSys
Inc. desparte informaţia stocată într-un număr de bancuri de memorie separate.
În modelul MDRAM iniţial de 4 MB, fiecare din cele 16 bancuri de memorie
păstrează 256 KB, ele fiind legate printr-o magistrală centrală de date, care
accesează fiecare banc individual. Acest model permite unui banc de memorie să
trimită sau să primească o serie de date printr-un singur ciclu de ceas şi să comute
la un alt banc pentru un alt transfer. Deoarece fiecare banc de memorie dispune de
o interfaţă de 32 biţi care lucrează la fel ca SDRAM, cipurile MDRAM operează la
viteze de transfer de bază de până la 1 GB/s.
RDRAM (Rambus DRAM)
Modelul Rambus foloseşte un cache RAM static de 2.048 octeţi, care se
leagă la memoria dinamică printr-o magistrală de lărgime de bandă foarte mare,
permiţând transferul unei pagini de memorie în cache într-un singur ciclu. Cache-ul
este destul de rapid, furnizând date la un timp de acces de 15 ns. Rambus nu este
implementat ca o memorie standard, folosind o magistrală specială de înaltă viteză.
Indiferent de legătura cu microprocesorul, lăţimea magistralei dintre controlerul de
memorie şi cipul Rambus este de 1 octet. Rambus operează la frecvenţe între 250 şi
800 MHz, modelul permiţând transferul a doi octeţi la fiecare ciclu de ceas: unul pe
frontul crescător, iar al doilea pe frontul descrescător al impulsului de ceas.
Accesul la memorie se face în mod inteligent, incluzând funcţia de preîncărcare
a datelor (prefetch), iar citirea se face în pachete mici, la viteze ridicate ale semnalului
de ceas. Viteza Rambus este izolată de microprocesor şi rămâne constantă, indiferent
de viteza acestuia, rata de transfer atingând 1,6 GB/s. Viteza ridicată impune limite
în proiectarea unui sistem de memorie: magistrala trebuie să fie scurtă şi poate
suporta doar 32 de cipuri sau 10 module de memorie, un modul conţinând 32 de
cipuri Rambus. O viteză a magistralei de peste 500 MB/s poate induce interferenţe;
pentru a le minimiza, Rambus funcţionează la 2 V, cu oscilaţii de 300 mV.
Rambus operează ca o mică reţea, trimiţând date în pachete cu o lungime de
până la 256 octeţi. Modelul este schimbat radical şi cere o modificare importantă a
tipului de calculator pe care se instalează, fiind util pentru sisteme care includ
integrare video. O colaborare între firmele Intel şi Rambus s-a materializat în 1999
printr-un DRAM care operează la 100 MHz, pe calculatoare de 64 de biţi.
134 ARHITECTURA SISTEMELOR DE CALCUL

În figura 3.35 este prezentată arhitectura unui cip de memorie RDRAM cu


capacitatea de 32 MB.

Fig. 3.35. Cip de memorie RDRAM de 32 MB.

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

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.

Fig. 3.36. O operaţie de citire şi o operaţie de scriere din/în memoria RDRAM .

Deoarece un număr prea mare de amplificatoare ar mări considerabil


suprafaţa pastilei de memorie, fiecare banc de memorie împarte cele două
amplificatoare adiacente cu bancurile vecine lui. De exemplu, amplificatoarele 0/1
şi 1/2 sunt conectate la bancurile 0, 1 şi 2. În acest fel, se micşorează suprafaţa
cipului, ceea ce duce la o reducere a costului.
Există şi excepţii, iar acestea sunt bancurile 0, 15, 16 şi 31, care sunt conectate
fiecare la câte un singur amplificator dedicat şi, ca atare, trebuie să aştepte ca un
singur banc vecin să îşi termine activitatea pentru a deveni active. Faptul că două
bancuri de memorie ajung să împartă un singur amplificator de semnal (sense amp)
reprezintă motivul pentru care numai jumătate din bancurile unui cip pot fi active
simultan. Chiar şi aşa, numărul bancurilor de memorie active ale unui modul
RDRAM este mult mai mare faţă de cel al unui modul SDRAM. De exemplu, pentru
un singur modul RIMM cu 4 cipuri, există 32 de bancuri pe cip şi, deci, 128 de
bancuri, dintre care 64 active simultan pentru întregul modul. Acest număr ridicat de
bancuri de memorie reprezintă explicaţia pentru lărgimea de bandă şi frecvenţele
foarte mari (400 MHz, 533 MHz) cu care operează memoriile SDRAM.
Referitor la ultima diagramă prezentată, mai trebuie făcute două precizări:
 fiecare amplificator de semnal are şi o capacitate proprie de stocare de
1024 de octeţi, el fiind un buffer între bancul de memorie şi magistrala
sistemului;
 cele două magistrale de 8 octeţi amintite anterior sunt divizate numai
conceptual, în realitate formând o singură magistrală cu lăţimea de 16 octeţi.
136 ARHITECTURA SISTEMELOR DE CALCUL

Schema din figura 3.37 ilustrează diferenţele dintre un sistem de memorie


bazat pe RDRAM şi unul bazat pe SDRAM. Se observă că la RDRAM cipurile
sunt ataşate unor module de memorie RIMM, aşa cum memoria SDRAM este
organizată în module DIMM.

Fig. 3.37. Diferenţele dintre sistemele de memorie RDRAM şi SDRAM.

Diferenţa constă în faptul că RIMM-urile sunt ataşate plăcii de bază în mod


serial, neputând exista sloturi de memorie goale. Dacă nu există suficiente module
de memorie RIMM propriu-zise, sloturile de memorie de pe placa de bază rămase
libere vor trebui completate cu module de continuitate, pentru a permite canalului
Rambus să-şi atingă rezistenţa de sarcină (terminaţia). Din punct de vedere teoretic,
pot exista oricâte canale Rambus independente într-un sistem, fiecare cu o lărgime
de bandă de 1,6 GB/s, dar, în practică, numărul canalelor este limitat din
considerente de design al plăcilor de bază.
Un alt factor care complică designul unui subsistem de memorie Rambus
este dat de faptul că semnalului de ceas provenit de la controlerul de memorie îi
este necesar un timp atât de ridicat pentru a ajunge la cel mai depărtat modul
RIMM din sistem, încât poate fi defazat de mai multe ori, faţă de semnalul ajuns la
primul modul RIMM.
Structura unui calculator 137

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.38. Elementele de bază ale unui sistem de memorie RDRAM.

DDR SDRAM (Double Data Rate Synchronous DRAM)


Acest tip de memorie transferă date pe ambele fronturi (crescător şi
descrescător) al semnalului de ceas. În felul acesta, viteza rezultată în transferul
datelor este dublă (Double Data Rate) faţă de o memorie SDRAM. DDR SDRAM
se montează pe acelaşi tip de socluri, dar are nevoie de un nou cipset.
Faţă de RDRAM, DDR SDRAM prezintă următorul dezavantaj: dacă datele
solicitate nu există în cache, conţinutul curent al acestuia este vărsat în DRAM-ul
integrat pe cip, este accesată o altă pagină şi abia apoi are loc citirea din memorie.
Avantajele DDR SDRAM faţă de RDRAM sunt preţul şi faptul că rata de
transfer RDRAM este aproximativ 60–70% din rata DDR SDRAM (datorită
faptului că lucrează pe 16 biţi, faţă de DDR SDRAM, care lucrează pe 64 de biţi).
Deoarece memoria DDR SDRAM este o variantă evoluată a SDRAM-ului,
felul în care interacţionează cu magistrala de memorie este foarte asemănător celui
al predecesoarei sale, cu excepţia faptului că la DDR SDRAM se transferă două
cuvinte de date pe perioadă de ceas. Figura 3.39 prezintă funcţionarea unui sistem
de memorie format din 3 DIMM-uri, fiecare cu 4 bancuri de memorie pe 64 de biţi.
În figură sunt marcate blocurile de date de 64 de biţi (alcătuite din 4 pachete
de câte 16 biţi), blocuri trimise de bancurile de memorie către procesor în timpul
unei operaţii de citire. Săgeţile indică sensul parcurs de date pe magistrala de
memorie la care sunt conectate DIMM-urile. În cazul unei operaţii de scriere,
sensul ar fi, evident, invers (CPU–memorie). Evaluarea modulelor DDR SDRAM
se face într-un mod diferit de SDRAM, principalul criteriu nemaifiind frecvenţa, ci
lărgimea de bandă maximă oferită teoretic şi care se exprimă în MB/s.
Standardele uzuale sunt PC1600, PC2100 şi PC2400. Primul are o frecvenţă
de 2100 MHz (datorită transmisiei datelor pe ambele fronturi de ceas). Lărgimea
de bandă de 1600 MB/s se obţine înmulţind lăţimea căii de date (64 de biţi) cu
frecvenţa memoriei (200 MHz) şi împărţind la numărul de biţi dintr-un octet (8).
Similar, la PC2100 frecvenţa este 2133 = 266 MHz, iar la PC2700 – 333 MHz.
138 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 3.39. Sistem de memorie DDR SDRAM cu 3 DIMM-uri a câte 4 bancuri pe 64 de biţi.

DDR2 SDRAM (Double Data Rate Two Synchronous DRAM)


Memoriile DDR2 fac parte din familia memoriilor SDRAM, reprezentând o
îmbunătăţire a memoriilor DDR SDRAM. Unul dintre principalele avantaje ale
DDR2-ului este abilitatea acestuia de a opera cu magistrala de date externă de două
ori mai repede decât DDR. Acest lucru este obţinut prin îmbunătăţirea semnalizării
magistralei şi prin operarea celulelor de memorie la jumătate din frecvenţa de ceas
(un sfert din rata de transfer a datelor).
Dacă memoria DDR2 ar opera la aceeaşi frecvenţă de ceas ca DDR, ar
asigura aceeaşi lărgime de bandă, dar ar avea o întârziere semnificativ mai mare.
Ca şi în cazul DDR, datele din memoriile DDR2 sunt transferate atât pe frontul
crescător, cât şi pe frontul descrescător al ceasului. Diferenţa principală dintre DDR
şi DDR2 este aceea că în cazul DDR2 magistrala este sincronizată la de două ori
frecvenţa la care lucrează celulele de memorie, astfel încât pot fi transferaţi 4 biţi de
date într-un ciclu al celulei de memorie, conform diagramei de timp din figura 3.40.
Frecvenţa magistralei DDR2 este crescută prin unele îmbunătăţiri la
interfaţa electrică, folosirea tehnologiei on-die termination sau folosirea unor
buffer-e de preîncărcare. Buffer-ul de preîncărcare în cazul DDR2 are o adâncime
de 4 biţi, spre deosebire de doi biţi în cazul DDR. Din păcate, implementarea
tuturor acestor tehnologii au dus la o creştere a întârzierilor. Dacă în cazul DDR
apare o întârziere între două şi trei cicluri ale magistralei de date, DDR2 poate avea
întârzieri de 4 până la 6 cicluri. Acesta este motivul care a făcut necesar ca
magistrala să lucreze la o frecvenţă de două ori mai mare.
Structura unui calculator 139

Fig. 3.40. Citirea în rafale la DDR2 SDRAM.

Un alt cost cauzat de creşterea vitezei este necesitatea încapsulării cipurilor


în capsule mai scumpe şi mai dificil de asamblat, cum ar fi BGA (Ball Grid Array).
Schimbarea capsulelor a fost necesară pentru a menţine integritatea semnalului la
viteze mai mari.
Din punct de vedere al consumului de energie, DDR2 a mai făcut un pas
înainte, necesitând numai 1,8 V faţă de 2,5 V, cât era necesar pentru DDR.
Consumul de energie poate fi redus chiar şi mai mult, prin reducerea frecvenţei în
situaţiile în care nu este necesară o rată de transfer foarte mare. Tensiunea maximă
recomandată este 1,9 V, fiind chiar interzisă depăşirea acesteia în situaţiile în care
stabilitatea memoriei este un factor cheie. Totuşi, modulele de memorie ar trebui să
reziste până la 2,3 V, înainte ca memoria să fie complet distrusă.
Pentru folosirea în calculatoarele personale, memoriile DDR2 vin sub forma
unor module DIMM cu 240 de pini, identificate, de obicei, după rata maximă de
transfer a datelor.
Cele şase standarde pentru modulele DDR2 sunt prezentate în tabelul 3.2.

Tabelul 3.2
Standardele pentru modulele de memorie DDR2

frecvenţa perioada frecvenţa transferuri numele rata max.


numele
memoriei ceasului magistralei de date pe modu- de transfer
standardului
(MHz) (ns) I/O (MHz) sec. (mil.) lului (MB/s)

DDR-400 100 10 200 400 PC-3200 3200

DDR-533 133 7,5 266 533 PC-4200 4266

DDR-667 166 6 333 667 PC-5300 5333

DDR-800 200 5 400 800 PC-6400 6400

DDR-1066 266 3,75 533 1066 PC-8500 853

DDR-1300 325 3,1 650 1300 PC-10400 10400


140 ARHITECTURA SISTEMELOR DE CALCUL

DIMM-urile DDR2 nu au fost proiectate să fie compatibile cu modulele


DDR. Cheia de siguranţă la DDR2 se află în altă poziţie, iar densitatea pinilor (240
pentru desktop, 200 pentru notebook) este uşor mai mare decât în cazul DDR
(184). Modulele DDR2 mai rapide sunt compatibile cu modulele DDR2 mai lente,
însă magistrala va funcţiona la viteza celui mai lent modul.
DDR3 SDRAM (Double Data Rate Three Synchronous DRAM)
Memoriile DDR3 sunt o îmbunătăţire a modelului precedent de memorii,
DDR2. Principala diferenţă între cele două constă în faptul că magistrala I/O
DDR3 funcţionează la o frecvenţă de patru ori mai mare decât celulele de memorie.
În plus, DDR3 permite cipuri de capacitate de la 512 Mb până la 8 Gb, ceea ce
duce la posibilitatea obţinerii de module de până la 16 GB. Memoriile DDR3
promit o reducere a consumului de energie cu 17%, tehnologia de 90 nm folosită în
fabricarea cipurilor DDR3 având nevoie de o tensiune de 1,5 V (faţă de 1,8V
pentru DDR2 sau 2,5 V pentru DDR). Unii producători propun utilizarea
tranzistoarelor dual-gate, tehnologie care ar permite reducerea şi mai mare a
scurgerilor de curent. Tensiunea maximă recomandată pentru DDR3 este 1,575 V.
În mod normal, memoriile ar trebui să reziste până la 1,975 V, fără a suferi o
distrugere totală, deşi, cel mai probabil, nu vor funcţiona corect la acest nivel.
Principalul avantaj al memoriilor DDR3 este dat de lărgimea de bandă.
Creşterea acesteia a fost posibilă şi datorită buffer-ului de preîncărcare, a cărui
adâncime a fost mărită de la 4 biţi, cât era în cazul DDR2, la 8 biţi. Această dublare
a dimensiunii buffer-ului este spectaculoasă, în comparaţie cu celelalte mici
incrementări ale dimensiunii care au avut loc anterior. Redimensionarea buffer-ului
are un cuvânt greu de spus în ceea ce priveşte întârzierea semnalului CAS.
Teoretic, modulele DDR3 pot transfera date la o frecvenţă de 800–1600 MHz,
folosind ambele fronturi ale tactului I/O, cu frecvenţa de 400–800MHz.
DIMM-urile DDR3 au acelaşi număr de pini ca modulele DDR2 (240),
având şi aceleaşi dimensiuni, dar, cu toate acestea, sunt incompatibile din punct de
vedere electric, iar cheia de securitate este situată în altă poziţie.
Cele patru standarde pentru modulele DDR3 sunt prezentate în tabelul 3.3.

Tabelul 3.3
Standardele pentru modulele de memorie DDR3

frecvenţa perioada frecvenţa transferuri numele rata max. de


numele
memoriei ceasului magistralei de date pe modu- transfer
standardului
(MHz) (ns) I/O (MHz) sec. (mil.) lului (MB/s)

DDR3-800 100 10 400 800 PC-6400 6400


DDR3-1066 133 7,5 533 1066 PC-8500 8533
DDR3-1333 166 6 667 1333 PC-10600 10667
DDR3-1600 200 5 800 1600 PC-12800 12800
Structura unui calculator 141

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

Figura 3.42 este reprezentare sintetică a evoluţiei în timp a memoriilor din


familia DDR.
Memoria DDR4 SDRAM a fost lansată în anul 2014 şi, după cum era de
aşteptat, a dublat încă o dată (faţă de DDR3) frecvenţa de operare, ajungând la
valori între 2133 şi 4266 MHz, reducând în acelaşi timp voltajul la valori cuprinse
între 1,05 şi 1,2 V, ceea ce înseamnă şi reducerea consumului de energie. De
asemenea, viteza memoriei a crescut considerabil, la fel ca densitatea de integrare.
Pentru anul 2019, a fost anunţată lansarea memoriei DDR5 SDRAM, care,
conform previziunilor, va dubla performanţele în viteză ale DDR4 SDRAM.
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ă.
Dispozitivele XDR DRAM folosesc un nucleu DRAM cu 8 bancuri,
implementate în tehnologie CMOS, având o densitate de cel puţin 512 Mb. Spre
deosebire de alte dispozitive DRAM, dispozitivele 16 XDR DRAM
implementează o lărgime programabilă şi suportă magistrale de 8, 4 sau chiar 2
biţi.
Elementele cheie ale arhitecturii XDR care permit performanţe ridicate sunt:
 XDR DRAM este un circuit integrat de memorie de mare viteză, cu o
interfaţă care lucrează la frecvenţa de 4 GHz, asigurând o lărgime de
bandă de până la 8 GB/s;
 Controlerul I/O, numit XIO în cazul XDR DRAM, asigură aceeaşi viteză
ridicată ca la DRAM, aducând şi unele îmbunătăţiri, prin introducerea
tehnologiei FlexPhase;
 Controlerul de memorie XMS este optimizat pentru a profita de
inovaţiile aduse de XDR, cum ar fi tehnologia Dynamic Point-to-Point,
care permite o extindere a capacităţii, păstrând în acelaşi timp şi
integritatea ridicată a semnalului, caracteristică modelului point-to-point;
 Generatorul de tact, XCG, asigură patru ieşiri programabile, care
garantează semnalele de tact pentru controlerul XIO şi alte dispozitive
XDR DRAM.
Celula XIO este un controler I/O performant cu întârzieri reduse, care
foloseşte un sistem de semnalizare pe 8 biţi, la o frecvenţă de până la 4 GHz,
permiţând o lărgime de bandă de până la 8 GB/s de la un singur dispozitiv XDR
DRAM. XIO poate fi configurat să suporte mai multe dispozitive, asigurând astfel
lărgimea de bandă necesară aplicaţiilor grafice sau altor aplicaţii.
144 ARHITECTURA SISTEMELOR DE CALCUL

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

Principala utilizare a memoriilor 1T-SRAM este în cazul embedded systems


(sisteme încorporate, dedicate unor aplicaţii specifice).
MoSys a implementat o celulă de memorare cu un singur tranzistor, ca în
cazul DRAM, dar această celulă este susţinută de o reţea de circuite care fac
funcţionarea memoriei să fie echivalentă celei a memoriilor SRAM (controlerul
ascunde toate operaţiile specifice memoriilor DRAM, cum ar fi preîncărcarea sau
reactualizarea). În consecinţă, memoriile 1T-SRAM au o interfaţă standard SRAM
de un ciclu şi sunt percepute de restul logicii sistemului exact ca orice altă memorie
SRAM.
Datorită celulei de memorare cu un tranzistor, varianta 1T-SRAM este mai
mică decât SRAM-ul clasic, bazat pe celule de 6 tranzistoare, fiind mai apropiată
de eDRAM (embedded DRAM) în ceea ce priveşte dimensiunea şi densitatea (vezi
figura 3.43).

Fig. 3.43. Comparaţie între celula 1T-SRAM şi celula SRAM cu 6 tranzistoare.

În acelaşi timp, 1T-SRAM oferă performanţe comparabile cu SRAM,


consumă mai puţin decât eDRAM şi este realizată în tehnologie CMOS, ca SRAM-
ul clasic.
MoSys prezintă 1T-SRAM ca fiind soluţia ideală pentru aplicaţiile bazate pe
SOC-uri (System-On-a-Chip – se încearcă integrarea tuturor componentelor unui
computer sau a unui sistem electronic într-un singur circuit integrat), cum ar fi
microcontrolere, DSP-uri, blocuri de memorie, timer-e, regulatoare de tensiune etc.
Memoriile 1T-SRAM sunt organizate sub forma unei matrice de mici
bancuri de memorie (în general, 128 linii a câte 256 de biţi fiecare, rezultând un
total de 32 Kb) conectate la o memorie cache de dimensiunea unui banc şi la un
controler de memorie.
146 ARHITECTURA SISTEMELOR DE CALCUL

Chiar dacă, în comparaţie cu DRAM, 1T-SRAM este ineficient în ceea ce


priveşte spaţiul, lungimea mai mică a cuvintelor permite atingerea unor viteze mult
mai mari, reuşindu-se astfel realizarea unui ciclu RAS la fiecare acces. Fiecare
acces se face la câte un banc, permiţând astfel bancurilor nefolosite să fie
reactualizate în acelaşi timp. În plus, fiecare linie citită este copiată şi în memoria
cache. În eventualitatea unor accesări repetate la acelaşi banc, există două variante:
fie sunt accesate linii diferite, caz în care toate liniile vor fi reactualizate automat,
fie aceeaşi linie este accesată de mai multe ori. În cazul celei de-a doua variante,
următoarele citiri se vor face din memoria cache, acordându-se astfel timpul
necesar pentru realizarea reîmprospătării.
Au fost lansate patru generaţii de memorii SRAM cu un tranzistor:
1. 1T-SRAM original, care are o dimensiune de două ori mai mică decât
6T-SRAM şi consumă mai puţin de 50% faţă de acesta.
2. 1T-SRAM-M, care este o variantă cu un consum mult mai mic în modul
stand-by, fiind proiectată pentru uzul în sisteme portabile, de genul
telefoanelor mobile.
3. 1T-SRAM-R, care încorporează un sistem de corecţie a erorilor (ECC).
Celulele de memorie sunt mai mici, ceea ce duce automat la o rată mai
mare de apariţie a erorilor. Totuşi, sistemul ECC rezolvă această
problemă.
4. 1T-SRAM-Q, care este o versiune quad-density, folosind un proces
nestandard de fabricare a condensatoarelor, care permite înjumătăţirea
dimensiunilor memoriei încă o dată faţă de 1T-SRAM-R.
Memoriile 1T-SRAM funcţionează la viteze comparabile cu 6T-SRAM şi
sunt semnificativ mai rapide decât eDRAM, modelul quad-density fiind cu doar
10–15% mai mare. În majoritatea proceselor de fabricare a memoriei eDRAM este
necesară parcurgerea unor paşi suplimentari şi costisitori, depăşind astfel destul de
mult costul de producţie al memoriei 1T-SRAM.
Memoriile 1T-SRAM sunt disponibile şi sub formă de circuite integrate.
Nintendo GameCube a fost prima platformă care a folosit 1T-SRAM ca sistem
principal de stocare a datelor. De asemenea, memoria 1T-SRAM a fost folosită în
urmaşul lui GameCube, consola Nintendo’s Wii.
QDR II SRAM (Quad Data Rate II Static Random Access Memory)
QDR este o memorie SRAM echipată cu un pin pentru intrarea datelor şi un
pin separat pentru ieşirea datelor, spre deosebire de SRAM standard, în care cei doi
pini sunt comuni. QDR permite introducerea şi extragerea datelor pe ambele
fronturi (DDR – Double Data Rate), ducând astfel la obţinerea unor viteze foarte
mari pentru operaţiile de scriere şi de citire, care se pot desfăşura simultan. În felul
acesta, se poate realiza un transfer de până la patru cuvinte la fiecare ciclu de ceas,
cu o latenţă foarte mică. Acest tip de memorie este ideal pentru sistemele de
comunicaţii şi reţelistică, cum ar fi router-e sau switch-uri. Pentru a veni în
întâmpinarea tendinţelor din acest domeniu, QDRII SRAM utilizează porturi I/O la
o viteză foarte ridicată prin tehnologia HSTL (High Speed Transceiver Logic),
suportată de toate sistemele de networking de nouă generaţie (vezi figura 3.44).
Structura unui calculator 147

Din punct de vedere al consumului de energie, memoriile QDR se situează


foarte bine, necesitând doar 1,8 V pentru nucleul memoriei şi 1,4 V pentru pinii de
intrare/ieşire. Acest aspect este extrem de important în domeniul pentru care sunt
concepute să funcţioneze aceste memorii.

Fig. 3.44. Arhitectura QDR II SRAM.

Memoriile QDR II sunt prevăzute cu două generatoare de semnale de ceas,


unul pentru intrare, celălalt pentru ieşire. Astfel, intrarea şi ieşirea pot fi foarte uşor
defazate. Memoriile QDR II vin sub forma unor FPGA-uri de 13  15  1 mm.
O memorie QDR II hotărăşte dacă va efectua o operaţie de scriere sau de
citire, în funcţie de starea în care se află pinii de citire (R#) şi de scriere (W#) la
momentul în care ceasul se află pe front crescător. Pentru a da o comandă de citire,
R# trebuie să fie la nivelul 0 (vezi figura 3.45), iar pentru a da o comandă de
scriere, R# trebuie să fie la nivelul 1 şi W# la nivelul 0 (vezi figura 3.46).

Fig. 3.45. Operaţia de citire la QDR II.


148 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 3.46. Operaţia de scriere la QDR II.

SGRAM (Synchronous Graphics RAM)


Funcţionarea memoriei SGRAM este asemănătoare celei de la memoria
SDRAM. Funcţia principală a memoriei SGRAM este aceea de a stoca şi citi date
simultan în zona de memorie. Deoarece este o memorie de tip DRAM, trebuie să
dispună de o reîmprospătare periodică, pentru a citi şi a scrie date eficient şi rapid.
Astfel, au fost introduse funcţii speciale, care specifică adresele grafice necesare
aplicaţiilor. Aceste funcţii sunt selectate prin folosirea unor registre speciale, dar şi
prin folosirea unor pini speciali.

Fig. 3.47. Formatul ciclic al diagramei de timp pentru memoria SGRAM.

La fel ca în cazul memoriei SDRAM, toate semnalele de intrare sunt


înregistrate pe frontul crescător al semnalului de ceas (vezi figura 3.47). Formatul
SGRAM conceput de IBM poate citi sau scrie un număr de locaţii dintr-un burst de
1, 2, 4, 8 octeţi sau chiar o pagină de memorie. Odată ce un rând este activ, mai
este necesară doar adresa coloanei. Există un contor în structura sa internă, care
numără fiecare locaţie de memorie, după ce au fost introduse datele.
Structura unui calculator 149

Dacă parametrii de citire şi scriere sunt înregistraţi, memoria continuă să


introducă date până când toate spaţiile sunt completate sau până când apar secvenţe
de întrerupere. Pentru a trece pe un nou rând, acesta trebuie pregătit şi astfel devine activ.
VRAM (Video RAM)
Problemele de acces la memorie apar cu precădere în sistemele video la care
memoria este folosită ca un buffer de cadru pentru imaginea de pe ecran, aceasta
fiind înmagazinată sub formă digitală şi alocată pentru fiecare element al imaginii.
Întregul conţinut al buffer-ului este citit de la 60 la 100 de ori pe secundă (valoarea
uzuală a ratei de refresh a monitorului). Între timp, calculatorul poate încerca să
scrie o nouă informaţie în buffer, pentru ca aceasta să apară pe ecran.
Cu memorii DRAM obişnuite, aceste operaţii de citire şi scriere nu pot
apărea simultan, una trebuie să o aştepte pe cealaltă, timpul de aşteptare afectând în
mod negativ performanţele video, viteza sistemului şi răbdarea utilizatorului.
Aşteptarea poate fi evitată prin introducerea unui cip special de memorie,
care să aibă două căi (dual ported) pentru accesul fiecărei locaţii. O astfel de
memorie permite scrierea şi citirea simultană. Cipurile de memorie video VRAM
permit citirea şi scrierea aleatorie la un port, în timp ce la celălalt port se permite
doar citirea secvenţială, care corespunde nevoilor de scanare a unei imagini video.
Dezavantajul principal al tehnologiei VRAM este că aceasta este mai
scumpă. Folosind însă memorii VRAM, se poate mări viteza sistemului video cu
aproximativ 40%. Pentru a trimite şiruri de date către monitor cu o viteză ridicată,
memoria VRAM include o serie de registre numite SAM (Serial Access Memory),
legate la un port serial. Acest port este conectat la un controler de viteză foarte
mare. Memoria VRAM are o interfaţă DRAM complet separată de portul serial. În
timp ce unele date sunt citite cu ajutorul portului serial, altele sunt citite sau stocate
din aria DRAM printr-un port DRAM. Formatul VRAM prezintă câteva
caracteristici realizate special pentru a creşte flexibilitatea în aplicaţiile grafice.
WRAM (Windows RAM)
Un model VRAM cu două porturi este WRAM (elaborat de Samsung), util
în sistemele video proiectate să asiste o interfaţă grafică gen Windows.
Cipul de bază WRAM păstrează 1 MB aranjat în plane de 32 de biţi, fiecare
fiind compus din 512  512 celule. Trei cipuri asigură memoria necesară pentru a
afişa o rezoluţie de 1024  768 sau 1920  1080 şi pentru operare în True Color pe
24 sau 36 de biţi. Intern, o magistrală de date de 256 de biţi leagă fiecare plan de
biţi cu controlerul logic intern al cipului care multiplexează datele pe 32 de biţi,
compatibile cu circuitele din calculator. Pentru a furniza date în scopul scanării
video, cipul conţine două registre serie. Cipul încarcă unul din registre, iar din
celălalt extrage datele, comutând între ele în momentul în care registrul al doilea se
goleşte. Cipul conţine patru registre de 32 de biţi, două pentru înmagazinare şi
pentru culorile de fundal, iar celelalte două pentru control şi măşti.
Cu o rată de transfer de cel puţin 640 MB/s, modelul WRAM poate mări
viteza sistemului cu 50 % în comparaţie cu VRAM.
Observaţie. Formatul Windows RAM nu are legătură cu Microsoft Windows.
150 ARHITECTURA SISTEMELOR DE CALCUL

3.2.10. Verificarea prin controlul parităţii

Revenind la caracteristicile generale ale memoriei, pe majoritatea plăcuţelor


de memorie se află instalate 9 cipuri (pentru memoriile paritare), primele opt având
rol de memorie efectivă de lucru (8 biţi – de la 0 la 7), iar cel de-al 9-lea fiind
numit cip de paritate (parity cip), cu rol de testare a stării de funcţionare a
celorlalte 8 cipuri, prin verificarea parităţii memoriei.
Paritatea memoriei, calculată ca sumă modulo 2, este de două tipuri: pară şi
impară, în funcţie de numărul total al biţilor de 1: par sau impar.
Exemplu. Fie cazul unei memorii impare. Un rând de biţi conţine un număr
impar de 1 (număr reţinut în câmpul 9). Datele sunt cuprinse pe 8 biţi (1 bit/cip).
Când o dată este impară/pară, bitul de paritate este 0/1, astfel încât numărul total de
biţi să rămână impar.
La pornirea sistemului, când se ajunge la etapa de verificare a memoriei, se
verifică şi paritatea rândurilor de biţi (parity check). Memoria fiind, conform
exemplului, impară, trebuie să existe un număr impar de biţi, în caz contrar
sistemul semnalând o eroare de paritate (parity error) şi deci un cip (sau mai
multe) este (sunt) defect(e). În cazul memoriei pare, procesul este identic cu cel
anterior, doar că un rând de biţi conţine un număr par de 1.
Memoriile SIMM se prezintă constructiv cu 8 sau 9 cipuri pe plăcuţă, după
cum sunt cipuri paritare sau nu. Nu toate plăcile SIMM folosesc verificarea
parităţii, dar toate plăcile DIMM sunt prevăzute cu aceasta facilitate.
Exemplu. SIMM-urile paritare pe 8 biţi folosesc un bit de paritate (module
pe 9 biţi), iar cele pe 32 de biţi folosesc 4 biţi de paritate (module pe 36 biţi, 8  4
= 32 biţi + 4  1 = 4 biţi de paritate).
Există şi module de memorie care folosesc cipuri compuse, pe o plăcuţă
fiind prezente doar 2 sau 4 circuite integrate. În acest caz, în aceeaşi capsulă sunt
prezente patru sau două cipuri de memorie. În cazul în care se folosesc module de
memorie neparitare, va trebui dezactivată din CMOS opţiunea de verificare a
parităţii memoriei, în caz contrar apărând erori. În nici un caz nu se pot folosi
combinaţii de module paritare cu module neparitare.
În timpul funcţionării sistemului, la detectarea unei erori de paritate este
emisă o cerere de întrerupere (de către cipul specializat), care va avea ca rezultat
final oprirea procesului aflat în execuţie şi reluarea unei rutine BIOS care va afişa
un mesaj specific. Unele variante de microprocesoare au integrat un modul special
de evaluare şi verificare a parităţii memoriei.
Anumiţi producători ai cipurilor de RAM au abandonat verificarea parităţii,
deoarece creştea preţul memoriei cu 10–15 %, la aceasta adăugându-se şi
posibilitatea unei compactări a cipurilor utilă la calculatoare de tip notebook.
Există însă şi calculatoare care au implementată o paritate falsă (fake
parity), care emite un semnal ce atestă paritatea fără să realizeze o verificare
efectivă. Datorită faptului că cipurile care generează paritate falsă sunt mai ieftine,
acestea sunt utile la calculatoarele care au implementat mecanismul de detectare a
Structura unui calculator 151

parităţii. În general, modulele de memorie cu paritate falsă apar identice modulelor


cu paritate.
Singurul mod de a le identifica este folosind un tester pentru module de
memorie. Deoarece modulele cu paritate falsă lucrează la nivel hard, programele
obişnuite de testare nu pot să le detecteze (conform cu Kingston Technologies,
cipurile cu paritate falsă sunt marcate cu una din următoarele inscripţii: BP, GSM,
MPEC sau VT).
Există însă procedee care pot efectua atât detecţia, cât şi corecţia unor erori.
Un exemplu îl constituie procedeul ECC (Error Correction Code), care necesită
biţi suplimentari pentru fiecare octet memorat. Procedeul poate să localizeze bitul
care este eronat, iar eroarea poate fi remediată (se mai numeşte tehnologie Error
Detection And Correction – EDAC). Firma IBM foloseşte tehnologia ECC pe
calculatoarele proiectate pentru a funcţiona ca servere.
Acest cod poate corecta automat orice eroare de 1 bit care apare într-un
cuvânt de 64 de biţi. În acest scop, memoria foloseşte cuvinte de cod de 72 de biţi
(64 biţi de date + 8 biţi de control). Această schemă are aceeaşi eficienţă cu cea
paritară (8/9 = 64/72), dar oferă corecţie cu o robusteţe mai mică, pentru că poate
corecta o eroare la 64 de biţi, spre deosebire de cealaltă schemă, care poate detecta
o eroare la 8 biţi.
Procedeul ECC nu este mai costisitor de implementat, datorită creşterii
dimensiunilor magistralelor; astfel, pentru microprocesoarele Pentium şi post-
Pentium, care au magistrala de date de 64 biţi, costul unei memorii cu verificare a
parităţii şi corecţie este acelaşi.
La fiecare acces la memorie, hardware-ul verifică dacă cuvântul de cod este
corect; dacă nu, calculează automat cel mai apropiat cuvânt de cod, pe care apoi îl
decodifică. Aceste operaţii sunt destul de complicate, astfel încât un sistem cu
memorii ECC merge cu aproximativ 5% mai lent decât unul cu memorii paritare.

3.2.11. Metode de acces la memorie

Un alt aspect care trebuie luat în considerare este timpul de acces al


memoriei RAM folosite. După cum s-a mai spus, acesta sunt de ordinul zecilor de
nanosecunde (cu excepţia memoriilor SDRAM, care pot ajunge până la câteva
nanosecunde), timp destul de mare, având în vedere vitezele de tact la care lucrează
azi diversele procesoare. Pentru a scădea timpul de acces al memoriei RAM, se
folosesc diverse metode de acces la memorie prin paginarea acesteia sau întreţesere
(Paging Mode sau Interleaving).
Paginarea asigură o citire mai rapidă, datorită faptului că în cazul unei cereri
de date din partea microprocesorului, acesta transmite cipului de memorie nu adresa
datei cerute, ci adresa unei pagini care conţine informaţia dorită şi, în cadrul paginii,
adresa datei solicitate (vezi capitolul 6). Automat, spaţiul de căutare a informaţiei este
micşorat prin paginarea memoriei, iar timpul în care este accesată o informaţie scade.
152 ARHITECTURA SISTEMELOR DE CALCUL

Întreţeserea presupune că procesorul desfăşoară o activitate paralelă de


accesare pentru două bancuri de memorie (memoria este împărţită, după cum s-a
mai spus, în cel puţin două bancuri, bancul 0 şi bancul 1, care nu sunt accesate
simultan). Timpul de citire din bancul 0 este folosit de memoria instalată în bancul
1 pentru operaţia de reîmprospătare, apoi timpul în care procesorul citeşte din
bancul 1 este folosit de bancul 0 pentru aceeaşi operaţie de reîmprospătare.
Acest lucru este posibil datorită faptului că microprocesorul accesează date,
în general, de la adrese apropiate sau învecinate cu adresa citită anterior. Cum
citirea este un proces secvenţial, după citirea de la adresa k din bancul 0 urmează
citirea de la adresa k+1 din bancul 1, citire care se efectuează foarte rapid (practic,
instantaneu), deoarece operaţia de refresh a bancului 1 a fost deja realizată. Se
asigură astfel citirii o fluenţă aproape perfectă.
Această metodă are un dezavantaj: în cazul citirii din locaţii succesive, doar
pare sau doar impare (la citiri succesive din acelaşi banc datele sunt scrise – cele
pare în primul banc, cele impare în cel de-al doilea banc), nu mai este timp de
refresh între două citiri consecutive şi se vor introduce una sau două stări de
aşteptare ale procesorului (wait states), ceea ce determină încetinirea generală a
vitezei sistemului. Plasarea plăcilor de memorie în bancuri separate este foarte utilă
şi uneori obligatorie, existând modele de placă de bază care nici nu funcţionează cu
o singură plăcuţă de memorie.

3.2.12. Memoria cache

Datorită vitezei foarte mari cu care lucrează microprocesoarele, implicit şi


fluxul de date şi informaţii cerute de acestea va fi foarte intens. Dar, deoarece unele
componente din lanţul de transmisie a datelor sunt mai lente, în speţă memoria de
lucru RAM (prin necesitatea de a fi reîmprospătată) şi magistralele calculatorului
(lente din principiu), acest flux de date cerut de procesor este mai puţin rapid decât
ar fi necesar (de exemplu, memoria RAM asigură un timp de acces de 60–120 ns,
ceea ce este foarte mult faţă de nivelul de câteva nanosecunde, timp cu care
lucrează de obicei procesoarele pentru un anumit proces).
Ca atare, între posibilităţile de prelucrare a datelor de către microprocesor şi
capacitatea RAM-ului şi magistralelor de a pune la dispoziţia microprocesorului
aceste date a apărut un decalaj foarte mare, ceea ce a dus în procesul de lucru al
unui microprocesor la introducerea stărilor de pauză (wait states), astfel încât, prin
execuţia a unuia, a două sau chiar a patru cicluri de aşteptare, datele solicitate să
aibă timp să ajungă la procesor. Practic, se întâmplă următorul lucru: procesorul
lucrează fie cu datele necesare calculelor, fie cu comenzi. Cum datele şi
informaţiile necesare sunt cuprinse în memoria de lucru, microprocesorul citeşte
memoria RAM, preluând anumite date, şi realizează calculele şi procesele cerute.
Cum memoria este mult mai lentă în livrarea datelor faţă de viteza cu care le
poate prelucra microprocesorul, în funcţionarea procesorului se introduc ciclurile
de aşteptare despre care s-a vorbit anterior; cât timp aceste cicluri se execută, se
Structura unui calculator 153

permite datelor solicitate de procesor să fie localizate şi „extrase“ din RAM,


depuse pe magistrala de date şi „transportate“ către microprocesor. În final, dacă se
va înmulţi timpul cât durează un ciclu de aşteptare cu milioanele de operaţii pe
secundă ale unui microprocesor, va rezulta o pierdere de timp substanţială.
Deci, era nevoie de o memorie de lucru ceva „mai aproape de
microprocesor“ şi mult mai rapidă (ideal fără să necesite operaţii de
reîmprospătare). De aceea, între microprocesor şi memoria de lucru a mai fost
introdusă o componentă şi anume memoria cache, realizată din celule de tip
SRAM, cu rol de memorie tampon.
La rândul său, memoria cache a fost divizată fizic în două niveluri şi anume:
 memoria cache primară sau internă (primary level cache, L1)
 memoria cache secundară sau externă (secundary level cache, L2/L3).
Sintetizând, caracteristicile sale, se poate afirma că memoria cache este:
 de dimensiune mai mică decât cea a memoriei RAM;
 de tip static (SRAM), pentru a evita operaţia de refresh;
 rapidă, cu timp de acces mic: tA  100/fP; (fP este frecvenţa procesorului);
 apropiată de procesor, plasată între CPU şi memoria principală (RAM);
 organizată pe principiul localizării:
o spaţiale sau pe vecinătăţi (cache nears);
o temporale;
 mapată pe blocuri de dimensiune fixă, adresate pe linii (cache lines);
 divizată în:
o cache primar/intern (L1, L3);
o cache secundar/extern (L2, L3);
 cu performanţa exprimată prin:
o rata de succes (hit rate):
o rata de eşec (miss rate).

Fig. 3.48. Plasarea memoriei cache între CPU şi memoria principală (RAM) [71].

Figura 3.48 arată modul de plasare a memoriei cache în arhitectura


sistemului, în raport cu unitatea centrală de prelucrare (CPU), memoria principală
(RAM) şi magistrala sistemului (Bus).
Memoria cache internă este plasată chiar în capsula microprocesorului, dar
este de dimensiuni mici sau medii, de exemplu, între 8 KB (la Pentium) şi 1 MB (la
Xeon).
154 ARHITECTURA SISTEMELOR DE CALCUL

Memoria cache secundară este exterioară microprocesorului şi se montează


pe placa de bază a sistemului. Se prezintă sub formă de cipuri (DIP) care se
introduc în soclurile aferente, existând şi aici, ca şi la memoria RAM, 8 socluri
pentru memoria cache de lucru şi un al 9-lea soclu pentru cipul de control al
memoriei cache.
Tipurile mai noi de cache sunt oferite sub formă de plachete asemenea
SIMM-urilor. Plăcile de bază actuale au uzual câţiva MB de memorie cache.
Memoria cache este subordonată în activitatea ei unui controler de memorie
cache (de exemplu, controlerul i82385) care va realiza gestiunea adreselor şi
controlul operaţiilor de citire/scriere.
Un exemplu de implementare a unei scheme cu memorie cache internă (L1)
în arhitectură Harvard şi memorie cache externă (L2) este cea de la sistemul
Pentium, din figura 3.49.

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.49. Schema unei memorii cache într-un sistem Pentium.


Memoria cache internă
Primul nivel de memorie cache (L1) se află integrat în microprocesor şi are o
porţiune destinată datelor şi instrucţiunilor (codului) şi o alta destinată comenzilor.
Cele două module de câte sunt complet separate şi lucrează independent.
Dimensiunea memoriei cache interne creşte la procesoarele moderne.
Acest tip de memorie îmbunătăţeşte mult performanţele, deoarece – fiind în
interiorul procesorului – transmisia de date este foarte rapidă, nefolosindu-se în
acest caz magistralele externe, foarte lente. În plus, fiind o memorie de tip SRAM,
nu necesită reîmprospătare şi dispune de un timp de acces extrem de scurt. Mai
mult, la unele microprocesoare, cache-ul de date este împărţit în blocuri, iar
controlerul de cache va găsi foarte rapid datele necesare, folosind o tabelă index,
alegând exact blocul de memorie care le conţine.
Structura unui calculator 155

Memoria cache externă


Datorită dimensiunilor mici ale memoriei cache interne (limitele fiind
impuse din considerente tehnice de construcţie a microprocesoarelor) şi pentru a
mări şi mai mult performanţele sistemelor de calcul, mai ales pentru a creşte
şansele ca procesorul să găsească datele necesare în cache (cache hit) şi nu în RAM
sau, mai rău, pe hard disk (cache miss), a fost introdus încă un nivel de memorie
cache (L2 sau L3), de data aceasta în exteriorul microprocesorului, memorie care
este ca dimensiuni cu mult mai mare decât memoria cache internă, cu o gamă de
valori mult mai largă faţă de L1 (de la ordinul megaocteţilor şi până la ordinul
gigaocteţilor, în funcţie de tipul de arhitectură).
Memoria cache externă este implementată pe placa de bază a sistemului.
Este formată din cipuri de memorie de tip SRAM, foarte rapide, cu timpi de acces
extrem de mici (4–15 ns).
Exemplu. Pentru un procesor cu frecvenţa internă de 166 MHz, va fi nevoie
de o memorie cache cu timp de acces de 100/166 = 6,02 ns.
Principiul de funcţionare al unei memorii cache este sintetizat în figura 3.50.

Fig. 3.50. Principiul memoriei cache, văzută ca dublă interfaţă între procesor şi RAM.

3.2.12.1. Maparea memoriei cache


O caracteristică de bază a memoriei cache este funcţia de mapare (de
translatare), care atribuie locaţii din memoria cache blocurilor din memoria
principală. Se pot utiliza patru tehnici:
 maparea directă;
 maparea asociativă;
 maparea asociativă pe seturi;
 maparea pseudo-asociativă.
156 ARHITECTURA SISTEMELOR DE CALCUL

Fig. 3.51. Diagrama operaţiei de citire a memoriei cache.

Figura 3.51 prezintă diagrama operaţiei de citire a memoriei cache.


Cu ajutorul politicilor de înlocuire se află care locaţie din memorie poate fi
depozitată în cache şi în care locaţie anume. Dacă politicile de înlocuire au
libertatea de a alege orice locaţie din cache pentru a păstra copia, cache-ul se
numeşte (complet) asociativ. La extrema cealaltă, dacă fiecare porţiune din
memoria principală poate merge într-o singură locaţie din cache, procedeul se
numeşte mapare directă. Cele mai multe memorii cache implementează un
compromis între cele două, numit mapare asociativă pe seturi.
Exemplu. Se consideră o memorie cache de 1024 B (1 KB). Datele se
transferă între memoria principală şi cache în blocuri de câte 8 octeţi. Înseamnă că
memoria cache are 128 de linii a câte 8 octeţi fiecare. Memoria principală constă
din 64 KB, fiecare octet fiind direct adresabil printr-o adresă de 16 biţi. Se poate
considera că memoria principală constă din 8 Kblocuri de câte 8 octeţi fiecare.
Deoarece există un număr mai mic de linii ale memoriei cache faţă de numărul
blocurilor memoriei principale, este necesar un algoritm pentru plasarea blocurilor
memoriei principale în liniile memoriei cache. În plus, este necesar un mijloc de a
determina care bloc al memoriei principale ocupă la un moment dat o linie a
memoriei cache.
Structura unui calculator 157

Memoria cache cu mapare directă


În cazul tehnicii celei mai simple, numită mapare directă, fiecare bloc al
memoriei principale poate ocupa o singură linie posibilă a memoriei cache, aşa
cum este reprezentat în figura 3.52.
Maparea este:

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.

Fig. 3.52. Memorie cache cu mapare directă.


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

Fig. 3.53. Memorie cache cu mapare asociativă.


Structura unui calculator 159

În cazul mapării asociative, există o flexibilitate în privinţa înlocuirii unui


bloc atunci când un nou bloc este încărcat în memoria cache. Algoritmii de
înlocuire a blocurilor din memoria cache, prezentaţi în continuare, au rolul de a
creşte eficienţa. Principalul dezavantaj al acestei metode îl reprezintă circuitele
complexe necesare pentru a examina marcajele tuturor liniilor din memoria cache.
Memoria cache cu mapare asociativă pe seturi
Maparea asociativă pe seturi reprezintă un compromis care reţine avantajele
mapării directe şi ale celei asociative. În acest caz, memoria cache este împărţită în
I seturi, iar fiecare din acestea conţine J linii, aşa cum rezultă din figura 3.54.
Dacă se notează cu K numărul setului, rezultă:

L = I  J;

K = A mod I.

Fig. 3.54. Memorie cache cu mapare asociativă pe seturi.

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

Memoria cache cu mapare pseudo-asociativă


Memoria cache asociativă pe seturi testează simultan toate căile posibile,
folosind un mecanism asemănător conţinutului adresabil al memoriei. Memoria
cache pseudo-asociativă testează fiecare cale posibilă o singură dată. În cele mai
multe cazuri, când găseşte un bloc din prima testare (succes), memoria cache
pseudo-asociativă este la fel de rapidă ca în cazul mapării directe, dar are o rată de
eşec mai scăzută decât la maparea directă şi mai aproape de maparea asociativă.
Analize şi comparaţii
Asociativitatea poate fi privită ca un fel de schimb. Dacă sunt zece unităţi,
politica de înlocuire le tratează ca o singură intrare, dar va trebui să caute în toate
pentru un cache hit. A verifica mai multe locaţii consumă mai multă putere, spaţiu
şi timp. Pe de altă parte, depozitarea folosind asociativitatea are câteva minusuri,
de aceea viteza procesorului scade. Regula ,,degetului mare” are rolul de a dubla
asociativitatea de la maparea directă la cea asociativă pe două căi şi de la cea
asociativă pe două căi la cea pe patru căi etc., având acelaşi efect ca în cazul unui
cache hit. Mărirea asociativităţii la peste patru căi are un efect mai slab decât în
cazul unui cache hit şi este realizată, în general, pentru alte motive.
Dacă fiecare locaţie din memoria principală poate fi depozitată în alte două
locaţii din memoria cache, se pune întrebarea care din cele două va fi folosită. Cea
mai simplă şi cea mai folosită schemă utilizează LSB-ul câmpului linie (index) al
locaţiei de memorie ca index pentru memoria cache şi are două intrări pentru
fiecare linie. Avantajul acestei scheme este că etichetele stocate în cache nu trebuie
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 că lasă loc speculaţiilor rapide şi simple. Când o
adresă a fost calculată, i s-a ataşat un index cache unic, care ar putea conţine datele.
Noua intrare în cache poate fi citită, iar procesorul îşi continuă lucrul cu datele pe care
le avea înainte de a încheia verificarea 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.
Structura unui calculator 161

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.

3.2.12.2. Eficienţa şi localizarea datelor în memoria cache


O memorie cache este utilă numai dacă anumite informaţii sunt folosite
frecvent şi mult timp. Atunci, acele informaţii merită să fie păstrate în memoria
cache. Din fericire, s-a constatat experimental că acest lucru este adesea adevărat.
Această observaţie poate fi formulată în mai multe moduri, unul dintre acestea
fiind principiul localizării (locality principle). Există două feluri de localizare:
 localizare spaţială – dacă este nevoie de unele date, în curând va fi
nevoie probabil de date aflate în apropierea lor în memorie;
 localizare temporală – când s-au găsit anumite date, foarte adesea
acestea vor fi folosite de mai multe ori.
Acestea sunt doar observaţii, dar se potrivesc destul de bine programelor, aşa
cum funcţionează acestea în calculatoarele actuale. Validitatea observaţiilor
permite folosirea de memorii cache. Acesta nu înseamnă că nu există programe
care folosesc prost memoriile cache; dimpotrivă, se poate scrie destul de uşor un
astfel de program (este o metodă „eficientă” de a încetini calculatorul). Programele
obişnuite însă nu se comportă astfel.
Eficienţa unei memorii cache se măsoară în procentajul de găsiri ale datelor,
numit rată de succes, H (hit rate). Opusul acestei valori este procentajul de ratări,
numit rată de eşec, M (miss rate). Procentajele acestea se măsoară rulând
numeroase programe şi făcând media.
Relaţia în aceste două valori este:

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

Fig. 3.55. Performanţa memoriei cache.

Eficienţa depinde şi de raportul dintre TH şi TM. În anumite cazuri, TM este de


ordinul a 104TH, deci chiar un parametru H de valoare redusă poate însemna mult.
Exemplu. Procesorul Intel Xeon la frecvenţa de 3,06 GHz are o memorie
cache L3 de 1 MB, cu magistrala de sistem la 533 MHz, şi contribuie la creşterea
nivelului de performanţă cu peste 15%.

3.2.12.3. Reînnoirea conţinutului memoriilor cache


În ceea ce priveşte reînnoirea conţinutului memoriilor cache, pentru
ştergerea datelor curente şi aducerea altora noi, sunt folosite mai multe metode:
 metoda RW (Random Write) sau de rescriere aleatorie: datele conţinute
sunt rescrise aleator, fără a folosi un anumit criteriu sau algoritm care să
determine care bloc de date va fi rescris;
 metoda FIFO (First In – First Out): primul intrat – primul ieşit, adică,
primele blocuri de date scrise în memorie sunt rescrise primele;
 metoda LRU (Least Recently Used): datele folosite cel mai puţin recent;
blocurile de date care, temporal, nu au fost folosite timp de cel mai lung
interval sunt rescrise primele, cele accesate de curând fiind păstrate;
 metoda LFU (Least Frequently Used): datele folosite cel mai puţin
frecvent; blocurile de date care, statistic, au fost folosite cel mai rar sunt
rescrise primele, cele folosite mai des fiind păstrate.
Alte metode sunt: politica circulară (round robin), politica setului de lucru
(working set), politica optimă (optimal), politica ceasului (clock), politica celei de-a
doua şanse (second chance) etc. Metoda cea mai folosită este LRU; de aceea, cel
de-al 9-lea cip de memorie cache (TAG RAM) joacă şi rol de contor al frecvenţei
de apelare a datelor din cache, determinându-se datele care se vor rescrie.
Modul de lucru general al microprocesoarelor cu memoria cache este
următorul: programul va căuta datele, prin intermediul controlerului de cache, în
cache-ul intern. Dacă datele solicitate nu se află la acest nivel (cache miss), va
merge mai departe cu căutarea în cache-ul extern şi apoi, în cazul negăsirii acestora
nici aici, în memoria principală RAM. Probabilitatea ca procesorul să găsească
datele necesare într-unul din cele două niveluri cache este însă destul de mare.
Totodată, magistrala memoriei care, în lipsa cache-ului, ar fi fost solicitată pentru
operaţii cu RAM-ul, este disponibilizată pentru alte procese.
Structura unui calculator 163

3.2.12.4. Conectarea memoriei cache la microprocesor


Memoria cache este conectată la microprocesor şi RAM fie serial, fie paralel.
Conectarea serială (look through) – vezi figura 3.56 – presupune ca
dialogul microprocesor–RAM să se desfăşoare prin intermediul cache-ului. Acest
sistem are dezavantajul că cererile procesorului sunt întârziate de intermediarul
cache, dar are avantajul că magistrala memoriei nu este ocupată la fiecare cerere a
procesorului. Dacă datele solicitate se află în cache (cache hit), interogarea
memoriei RAM nu se mai efectuează, iar magistrala memoriei rămâne liberă.

Fig. 3.56. Diagrama conectării seriale (look through).

Conectarea paralelă (look aside) – vezi figura 3.57 – presupune ca


microprocesorul să se adreseze, în paralel, atât memoriei cache cât şi memoriei RAM.

Fig. 3.57. Diagrama conectării paralele (look aside).


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

3.2.12.5. Depunerea în memorie a rezultatelor


Indiferent de tipul funcţiei de mapare, fiecărui bloc din memoria cache îi
sunt asociaţii doi biţi de comandă, numiţi V şi D.
Bitul V este un bit de validare a blocului, V = 1 fiind o condiţie necesară a
obţinerii unui cache hit. Bitul V este util îndeosebi în sistemele multiprocesor, în
vederea menţinerii coerenţei memoriilor cache locale, datorită redundanţei
informaţionale. Mai precis, aici apare necesitatea citirii din cache-ul propriu a
ultimei cópii modificate a datei respective. Când un procesor modifică o copie
locală a unei date, toate blocurile care conţin acea dată din cadrul celorlalte
procesoare trebuie invalidate prin resetarea V = 0.
Necesitatea invalidării blocurilor (V = 0) apare chiar şi în sistemele
uniprocesor. Imediat după resetarea sistemului, uzual, procesorul execută un
program încărcător rezident în memoria EPROM. Cum imediat după iniţializarea
sistemului conţinutul cache-ului este, practic, aleator, pentru a evita falsele situaţii
de cache hit, la citirea programului încărcător din EPROM, se iniţializează biţii V
cu zero. La prima încărcare a unei date (instrucţiuni) în cache, bitul V aferent se va
seta pe 1, validând astfel situaţia de cache hit.
Bitul D (dirty data) este pus pe 0 la încărcarea iniţială a blocului în cache. La
prima scriere a acelui bloc, bitul se pune pe 1. Evacuarea propriu-zisă a blocului se
face doar dacă bitul D = 1. Practic, prin acest bit se minimizează evacuările de
blocuri în memoria principală, pe baza principiului că un bloc trebuie evacuat
numai dacă a fost scris în cache. În acest sens, din punct de vedere al accesărilor de
scriere de către procesor (depunerea în memorie a rezultatelor), există trei
posibilităţi:
 metoda Write Through – vezi figura 3.58 –, în care se utilizează traseul
invers al citirii datelor, blocurile fiind depuse mai întâi în memoria cache
internă, apoi în cache-ul extern şi în final în memoria RAM;

Fig. 3.58. Schema metodei Write Through.


Structura unui calculator 165

 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;

Fig. 3.59. Schema metodei Write Back.

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

3.2.12.6. Cache hit şi cache miss


Într-o memorie cache, apar posibile patru procese distincte, ca în tabelul 3.4.

Tabelul 3.4
Tipuri de acces în memoria cache

tip
situaţie în cache acţiune în cache
acces

citire miss evacuarea blocului şi încărcarea unui bloc nou


citire hit compararea marcajelor/etichetelor (tag)
evacuarea blocului, încărcarea unui bloc nou şi
scriere miss
scrierea datei în bloc
scriere hit scrierea datei în blocul din cache (Write Back)
166 ARHITECTURA SISTEMELOR DE CALCUL

Aşadar, memoriile cache îmbunătăţesc performanţa, îndeosebi pe citirile cu


cache hit, iar, în cazul utilizării scrierii tip Write Back, şi pe scrierile cu cache hit.
Îmbunătăţirea accesului la memorie pe citirile CPU este normală, având în vedere
că acestea sunt mult mai frecvente decât scrierile (orice instrucţiune implică cel
puţin o citire din memorie pentru încărcarea sa; statistic, cca. 75 % din accesările la
memorie sunt citiri, unii autori susţinând că raportul real citiri/scrieri este de 9/1).
Cache miss se referă la încercarea nereuşită de a citi sau scrie o parte din
date în memoria cache, ceea ce rezultă în scrierea/citirea în memoria principală cu
latenţe mai mari. Explicaţiile pentru cauzele situaţiilor de cache miss, conform
literaturii de specialitate, sunt de trei tipuri:
 la citirea instrucţiunilor;
 la citirea datelor;
 la scrierea datelor.
Un cache miss la citirea instrucţiunilor cauzează, în general, întârzieri,
deoarece procesorul sau ultimul fir de execuţie trebuie să aştepte până când
instrucţiunile sunt aduse din memorie.
Un cache miss la citirea datelor cauzează întârzieri mai mici, deoarece
instrucţiunile nu depind de citirea cache-ului, putând fi evitate, până când datele
sunt preluate din memoria principală şi instrucţiunile care depind de acestea îşi
continuă execuţia.
Un cache miss la scrierea datelor cauzează întârzieri mici, deoarece scrierea
poate fi pusă într-o coadă de aşteptare şi sunt câteva limitări în execuţia
instrucţiunilor. Procesul poate continua până când coada este plină.
Secvenţe de referinţe din memorie trecute prin benchmark-uri sunt salvate ca
urme de adrese. Ulterior, analizele simulate au arătat posibile diferenţe între
lungimile urmelor de adrese, în funcţie de designul memoriei cache. Cercetătorul
Mark Hill a separat situaţiile de cache miss în trei categorii:
 Ratări obligatorii (compulsory misses) – sunt acele pierderi cauzate de
primele referiri la date. Mărimea şi asociativitatea memoriei cache nu fac
nici o diferenţă între numărul de ratări obligatorii. Aducerea timpurile a
operanzilor din memorie nu este utilă în acest caz.
 Ratări de capacitate (capacity misses) – sunt acele pierderi care privesc
asociativitatea sau mărimea blocurilor, făcute numai de blocurile finite
din cache. Curba ratei pentru ratările de capacitate în funcţie de
capacitatea memoriei cache dă măsura localizării temporale a unui şir
temporar de referinţe. Informaţiile care indică dacă memoria cache este
plină, goală sau aproape plină nu sunt utile în acest caz.
Observaţie. Cache-ul procesorului are aproape mereu fiecare linie
umplută cu o copie a unei linii din memoria principală şi de fiecare dată
alocarea unei noi linii necesită ştergerea uneia vechi.
 Ratările de conflict (conflict misses) – sunt acele pierderi care ar putea
fi evitate dacă cache-ul ar elimina o intrare mai târziu. Ratările de
conflict pot fi puse într-o hartă de ratări (miss map), care este inevitabilă
şi care oferă un detaliu particular asociativităţii şi politicii de înlocuire.
Structura unui calculator 167

Fig. 3.60. Rata de pierderi (miss rate) în funcţie de capacitatea memoriei cache. [71]

Graficul din figura 3.60 ilustrează performanţele memoriei cache, obţinute


pe un benchmark pentru întregi din SPEC2000. Aceste benchmark-uri reprezintă
gradul de încărcare al unei staţii de lucru.
Rata de pierderi în cazul asociativităţii este sensibil superioară celei pentru
mapare directă. Diferenţele obţinute se explică prin utilizarea algoritmului de
înlocuire LRU. Se observă, de asemenea, că pentru memorii cache de dimensiune
foarte mare, decalajele devin nesemnificative.

3.2.12.7. Tipuri de celule cache

În funcţie de modul de citire a cuvintelor, celulele memoriei cache pot fi:


 asincrone, la care operaţia de citire a unui cuvânt se face în două etape:
se depune adresa, apoi se transferă datele, pentru fiecare cuvânt fiind
necesar acelaşi ritual. Aceste cipuri se livrează sub formă DIP.
 sincrone, pentru care accesul se face în mod burst (se depune o singură
adresă, iar transferul se face pentru patru cuvinte simultan, primul cuvânt
cu adresa indicată de controlerul de cache şi următoarele trei). Timpul de
acces scade destul de mult, ajungând până la 9 ns. Cipurile sincrone sunt
implementate direct prin lipire pe placa de bază a sistemului.
 pipeline burst cache, care este prevăzut la ieşire cu registre speciale, în
care datele citite sunt stocate temporar. Astfel, este posibilă o nouă
adresare, practic, în acelaşi timp cu preluarea datelor de către
microprocesor din registrele de stocare (latch). Timpul de acces scade
foarte mult (chiar la 4 ns), fapt care duce la performanţe deosebite pentru
sistemele dotate cu astfel de celule de memorie cache.
168 ARHITECTURA SISTEMELOR DE CALCUL

3.2.12.8. Memorii cache specializate


Accesul la memoriile din procesor cu tehnica pipeline, cu stagii multiple ale
pipeline-ului, presupune:
 aducerea instrucţiunilor din memorie (instruction fetch);
 translatarea adresei virtuale în adresă fizică, realizată de controlerul TLB
(Translation Lookaside Buffer);
 aducerea datelor din memorie (data fetch).
Designul natural tinde să utilizeze diferite adrese fizice din cache pentru
fiecare dintre aceste stagii, astfel încât nici o resursă fizică nu trebuie programată să
servească simultan două stagii diferite din pipeline.
Astfel de pipeline-uri se termină cu cel puţin trei memorii cache separate
(pentru instrucţiuni, TLB şi date), fiecare fiind specializată pe un anumit rol. Dacă
pipeline-urile au instrucţiunile şi datele separate în memoria cache, se poate spune
că este emulată o arhitectură de tip Harvard. Iniţial, această fază s-a regăsit la
maşinile cu instrucţiuni şi date separate în memorie. Dar cele mai multe dintre
calculatoarele moderne sunt concepute în arhitectură von Neumann.
Cache victimă (victim cache)
Cache-ul victimă este o memorie cache folosită pentru a reţine blocurile
şterse din cache-ul procesorului datorită unui conflict sau unei ratări. Cache-ul
victimă se află între cache-ul principal şi zona de reumplere, deţinând numai
blocuri care au fost eliminate din cauza unui cache miss. Această tehnică este
utilizată pentru a reduce penalizările suportate de memoria cache la o ratare.
Exemple. Cache-ul victimă original de pe HP PA 7200 a fost mic şi complet
asociativ. Mai târziu, procesoare precum AMD K7 şi K8 au folosit multă memorie
cache secundară pe post de cache victimă, pentru a evita duplicatele de stocare.
Cache de urmărire (trace cache)
Unul dintre exemplele cele mai extreme de specializare a memoriei cache
este cache-ul de urmărire, găsit în microprocesoarele Intel Pentium 4. Trace cache
este un mecanism destinat creşterii gradului de aducere din memorie a
instrucţiunilor (instruction fetch) şi lărgimii de bandă, precum şi reducerii
consumului de putere (în cazul lui P4), prin stocarea urmelor (traces)
instrucţiunilor care au fost aduse din memorie şi decodate.
Un trace cache stochează instrucţiuni chiar şi după ce acestea au fost
depozitate sau retrase. În general, instrucţiunile sunt adăugate în trace cache în
grupuri care reprezintă blocuri individuale de bază sau urme dinamice (dynamic
traces). Un bloc de bază constă dintr-un grup de instrucţiuni neramificate,
terminate cu ramificaţii. O urmă dinamică include numai instrucţiuni ale căror
rezultate sunt utilizate efectiv şi elimină următoarele instrucţiuni luate ca
ramificaţii (atât timp cât acestea nu sunt executate), o urmă dinamică putând fi o
concatenare de mai multe blocuri de bază. Acesta permite unităţii de fetch a unui
procesor să aducă din memorie câteva blocuri de bază fără să se preocupe de
ramificaţiile aflate în execuţie.
Structura unui calculator 169

Liniile de urmărire sunt stocate în cache pe baza unui numărător de program


aflat în prima instrucţiune a urmei. Aceasta permite depozitarea pentru diferite căi a
urmelor care încep de la aceeaşi adresă, fiecare reprezentând rezultate diferite ale
ramificaţiei. În etapa de aducere din memorie (fetch) a unui pipeline, numărătorul
de program curent, împreună cu un set de predicţii ale instrucţiunilor ramificate
(branch prediction), este pus în memoria cache, mai exact, în trace cache, pentru o
situaţie de cache hit. Dacă apare un cache miss, începe construcţia unei noi urme.
Cache-ul de urmărire este folosit în procesorul P4, pentru a stoca micro-
operaţii deja decodate sau translaţii ale instrucţiunilor de pe sisteme 86, astfel
încât, atunci când va fi necesară o instrucţiune, aceasta nu va mai trebui decodată
din nou.
Cache multinivel (multilevel cache)
O altă problemă este schimbul între latenţa memoriei cache şi rata de succes
(cache hit). Memoriile cache mari au o rată de succes mai bună, dar latenţe mari.
Pentru a rezolva această problemă, în majoritatea calculatoarelor se folosesc mai
multe niveluri de cache, cu blocuri de cache mai mici şi rapide, grupate într-unul
mai mare şi lent.
Un cache multinivel operează căutând prima dată în nivelul cel mai de jos
(L1) şi, în cazul unui cache hit, viteza de procesare creşte. Dacă apare cache miss
în module cache mici, atunci se caută în cache-ul cel mare (L2) şi, mai departe, în
memoria principală. Diferenţa de latenţă între memoria principală şi memoria
cache a devenit mai importantă. Unele memorii cache au început să utilizeze mai
mult de 3 niveluri pe un chip.
Exemplu. În 2003, procesorul Itanium 2 a început să fie livrat cu 6 MB de
cache L3 pe cip. Sistemele IBM Power 4 aveau 256 MB de cache L3 pe cip,
partajat între mai multe procesoare. Procesorul AMD Phenom foloseşte 2 MB de
cache L2 în schimbul celui L3.
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 arhitecturii IBM
BlueGene/L)
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.
170 ARHITECTURA SISTEMELOR DE CALCUL

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.
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.61).
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:
Structura unui calculator 171

Fig. 3.61. Structura nucleului K8 al procesorului AMD Athlon 64.

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.
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.
172 ARHITECTURA SISTEMELOR DE CALCUL

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 la memoria cache


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.

3.2.4. Memoria ROM

Un alt tip de memorie folosit în construcţia calculatoarelor şi a unor


echipamente periferice este memoria ROM (Read Only Memory). Spre deosebire
de memoria RAM, această memorie, odată scrisă prin procedee industriale, nu mai
poate fi ştearsă prin metode aflate la îndemâna utilizatorului; în plus, la decuplarea
de sub tensiune a calculatorului, informaţiile din ROM rămân intacte.
Structura unui calculator 173

Ştergerea anumitor memorii ROM, de construcţie specială (PROM,


EPROM, EEPROM) se poate face prin lansarea unui spot de radiaţii ultraviolete
asupra ferestrei de cuarţ cu care este prevăzut cipul de memorie. Scrierea
memoriilor ROM presupune un atac distructiv şi ireversibil asupra diodelor şi
tranzistoarelor, prin „arderea” joncţiunilor interne. Rezultatul acestei acţiuni de
ardere se observă prin modificarea conţinutului informaţiei binare.
În prezent, există plăci de bază dotate cu astfel de circuite care permit
revitalizarea rutinelor BIOS prin copierea în ROM, cu ajutorul unui soft
specializat, a unor versiuni mai noi şi mai performante. Deci, ca o concluzie de
bază, datele scrise în memoria ROM au un caracter permanent şi au o importanţă
vitală în iniţializarea şi funcţionarea oricărui sistem de calcul. Memoria ROM are
aspectul unui circuit integrat cu două rânduri de pini (DIP) şi este montat de placa
de bază a calculatorului prin intermediul unui soclu. Intern, memoriile de acest tip
sunt realizate din reţele rectangulare de microtranzistoare sau microdiode.
Accesarea memoriei ROM se face la fel ca la RAM.
O celulă de memorie este alcătuită dintr-un circuit basculant bistabil (CBB).
Pentru a realiza mai multe celule, se aranjează CBB-urile sub forma unui tablou cu
un număr de coloane şi rânduri. În general numărul rândurilor este egal cu cel al
coloanelor. Fiecare celulă se află la intersecţia unei anumite linii X şi a unei
anumite coloane Y (vezi figura 3.62).

Fig. 3.62. Organizarea memoriei ROM.

Organizarea memoriei sub formă de matrice permite reducerea numărului


intrărilor de adrese la un număr mai mic decât numărul liniilor şi al coloanelor
aferente informaţiei stocate. Numărul terminalelor de adresare poate fi micşorat
prin adresarea în cod binar şi utilizarea decodificatoarele binar-zecimale. Acest
mod de adresare în cod binar este utilizat şi în cazul memoriei RAM.
Exemplu. Fie o memorie ROM care conţine 8 cuvinte de câte 4 biţi (vezi
figura 3.63 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).
174 ARHITECTURA SISTEMELOR DE CALCUL

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.

Structura internă a unui cip de memorie ROM organizat pe 1024 cuvinte a


câte 8 biţi, adică 1 K  8, este prezentat în figura 3.64. Matricea de memorie se
construieşte sub o formă cât mai apropiată de cea a unui pătrat. Liniile matricei
sunt selectate cu ajutorul decodificatorului cu 7 intrări de selecţie, iar coloanele, cu
ajutorul celor 8 multiplexoare a câte 3 intrări de selecţie. Intrarea suplimentară, CS
(Chip Select), activă pe 0 logic, pregăteşte cipul de memorie în vederea unei
operaţii de citire a datelor. Prin dezactivare, acţionează asupra circuitelor din
structură în scopul reducerii consumului. Schema conţine şi aspectul unui element
din matricea de memorie, dacă aceasta este realizată în tehnologia MOS.

Fig. 3.64. Structura internă a unui cip de memorie ROM cu 1024 cuvinte de 8 biţi.

Pentru realizarea memoriei ROM, sunt utilizate tehnologii bipolare (TTL,


TTL-Schottky, ECL), tehnologii metal-oxid-semiconductor (MOS) cu canal N (N-
MOS), cu canal P (P-MOS), cu simetrie complementară (CMOS), cu canal negativ
(NMOS) sau tehnologii cu logică integrată de injecţie (I2L).
Structura unui calculator 175

Ca urmare, performanţele poartă amprenta caracteristicilor tehnologice:


 bipolară – viteză de procesare mare, putere disipată ridicată, densitate de
integrare scăzută;
 MOS – densitate de integrare ridicată, viteză de procesare mai scăzută
decât la bipolară, putere disipată relativ scăzută;
 CMOS – putere disipată foarte scăzută şi viteză de procesare mare.
În alegerea unui circuit integrat de memorie, trebuie să se aibă în vedere:
 tensiunea de alimentare;
 capacitatea;
 modul de organizare (lungimea cuvântului, semnalele de control şi
adresă);
 puterea disipată (în regim de funcţionare sau în regim de rezervă stand-by);
 timpul de acces;
 timpul de ciclu memorie;
 disponibilitatea şi preţul de cost.
Orice sistem de calcul foloseşte o memorie ROM care conţine următoarele
sisteme software (vezi figura 3.65):
1. Sistemul cu program starter sau ROM-ul de start, adică microcodul cu
rol de asistare şi control al pornirii sistemului. Aici se află înscrise mici rutine care
realizează următoarele acţiuni:
 execută testele de funcţionalitate ale tuturor componentelor ataşate
hardware;
 iniţializează toate componentele ataşate calculatorului;
 iniţializează tabela vectorilor de întrerupere;
 verifică alte extensii sau periferice ataşate sistemului de calcul;
 încarcă în memorie, de pe disc, sistemul de operare.
Testele de verificare, care formează aşa-numitul POST (Power On Self
Test), durează foarte puţin pentru verificarea plăcii de bază, a controlerului de disc,
a plăcii video, a unităţilor de disc, şi ceva mai mult pentru memoria RAM, care este
verificată kilooctet cu kilooctet.
Automat, în cazul în care se detectează anumite erori şi disfuncţii pentru
oricare din componentele hardware, se va lansa un mesaj de avertizare. Sistemul de
operare, odată încărcat în RAM, va prelua conducerea şi gestiunea sistemului de
calcul.
2. ROM-BIOS (Basic Input Output System) este o parte a memoriei ROM
care va asigura toate procesele şi serviciile necesare activităţii calculatorului,
precum şi gestiunea perifericelor, prin intermediul rutinelor conţinute. BIOS-ul
conţinut de ROM este elementul de legătură sau interfaţa directă între partea
hardware şi cea software, prin care se realizează hard cererile soft ale programelor,
folosind întreruperile cu serviciile aferente. Practic, orice program accesează partea
hardware prin intermediul BIOS. Rutinele conţinute vor activa canalele de
comunicaţie dintre componentele sistemului şi un sistem de operare sub care
lucrează acesta.
176 ARHITECTURA SISTEMELOR DE CALCUL

3. ROM-Basic este un program opţional, care conţine nucleul limbajului


Basic.
4. Extensiile ROM reprezintă un sistem care conţine anumite rutine
necesare gestiunii dispozitivelor ataşate.

Fig. 3.65. Modul de organizare al memoriei ROM.


Structura unui calculator 177

Întreaga memorie ROM este activă pe tot parcursul lucrului cu calculatorul.


Încă de la pornirea şi iniţializarea calculatorului (la încărcarea sistemului de
operare), în situaţiile apăsării tastei Delete, BIOS-ul va furniza o interfaţă de dialog
cu utilizatorul, prin care va oferi o serie de informaţii privind starea funcţională şi
structura sistemului de calcul. Prin intermediul unor meniuri, se poate modifica o
serie de parametri pentru a se obţine un mod de lucru optim şi rapid.
Ultimii 128 KB rezervaţi din zona de memorie superioară 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), bloc 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.).
178 ARHITECTURA SISTEMELOR DE CALCUL

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.

3.2.5. Memorii nevolatile şi comparaţie cu memoria RAM

Variantele uzuale de memorii nevolatile sunt:


 ROM (Read-Only Memory) – nu poate fi modificată sau ştearsă (este
produsă în fabrică);
 PROM (Programmable ROM) – poate fi programată o singură dată, prin
ardere (foloseşte fuzibili);
 EPROM (Erasable PROM) – poate fi programată şi ştearsă prin radiaţii
ultraviolete (azi se mai produce doar în versiuni ieftine);
 EEPROM (Electrically EPROM) – poate fi programată prin impulsuri
în loc de radiaţii ultraviolete şi reprogramată pe loc (fără a mai fi scoasă
din soclu);
 Memoria flash – variantă de EEPROM, care poate fi ştearsă pe blocuri
şi rescrisă pe loc.
Comparând memoria flash cu discurile mecanice aflate azi în uz şi pe care
aceasta a început să le concureze în ultima vreme, se poate afirma că memoria flash
este foarte rapidă şi cu un consum mic de putere în raport cu discurile mecanice,
dar este mai scumpă, fiind o memorie pe suport semiconductor, produsă prin
tehnologii VLSI, similar circuitelor integrate.
O comparaţie între variantele de memorii nevolatile prezentate mai sus şi
memoriile RAM studiate anterior este sintetizată în figura 3.66.

Fig. 3.66. Comparaţie între diferitele tipuri de memorii RAM şi ROM.


Structura unui calculator 179

FPGA (Field-Programmable Gate Arrays)


Un tip de memorie nevolatilă care nu a fost inclus în comparaţia de mai sus,
dar care este foarte util în aplicaţii de proiectare, de cercetare şi didactice (la scară
redusă) este aşa-numitul FPGA (Field-Programmable Gate Arrays).
Reţelele de porţi programabile prin câmp sau FPGA-urile sunt cipuri care
conţin logică programabilă, astfel încât, cu ajutorul lor, se poate configura rapid un
circuit logic arbitrar, pur şi simplu prin încărcarea unui cip FPGA cu datele de
proiectare corespunzătoare. Principalul avantaj al FPGA este că noile circuite
hardware pot fi construite în ore, şi nu în luni de zile, cât este nevoie pentru a
fabrica un circuit integrat. Circuitele integrate deţin încă un avantaj semnificativ de
cost faţă de FPGA pentru aplicaţii cu volum mare (producţie de serie), care astfel
rulează mai repede şi consumă mult mai puţină putere.
Datorită avantajului oferit de timpul scurt de proiectare, FPGA-urile sunt
adesea folosite pentru prototipuri de proiectare şi aplicaţii cu volum redus, în
laboratoare de cercetare sau didactice.
Cipul FPGA conţine două componente de bază, care sunt replicate de mai
multe ori:
 dicţionarele LUT (Look-Up Tables);
 interconexiunile programabile.

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

Modul de folosire al unui FPGA este următorul.


Un dicţionar LUT, cum este cel prezentat în figura 3.67 a, este o memorie
programabilă de capacitate redusă, care produce o ieşire de semnal. Aceasta intră,
opţional, într-un registru, a cărui ieşire este apoi introdusă în interconexiunea
programabilă. Memoria programabilă este utilizată pentru a crea o funcţie logică
reconfigurabilă de oricâte ori, la alegerea utilizatorului.
180 ARHITECTURA SISTEMELOR DE CALCUL

De exemplu, dicţionarul LUT din figura 3.67 are o memorie de 16 × 4, care


poate emula orice circuit logic cu 4 biţi de intrare şi 4 biţi de ieşire. Programarea
LUT necesită încărcarea memoriei cu ieşirile adecvate ale logicii combinaţionale
emulate. Adică, dacă un circuit logic combinaţional produce la ieşire valoarea Y
când i se aplică valoarea X la intrare, atunci Y va fi înscris în LUT la indexul X.
Exemplul de proiectare din figura 3.67 b arată modul în care ar putea fi
implementat un numărător (contor) de 3 biţi cu resetare printr-un singur LUT cu 4
intrări. Contorul se incrementează continuu, numărând (modulo 4) prin adăugarea
pasului 1 la valoarea curentă a contorului, cu excepţia cazului în care se activează
semnalul de resetare (CLR), situaţie în care contorul îşi aduce valoarea la zero.
Pentru a implementa acest exemplu de contor, cele patru intrări superioare
(MSB) ale LUT (de la 4 la 7) sunt puse toate în zero. Aceste intrări produc valoarea
zero corespunzătoare resetării contorului. Astfel, bitul cel mai semnificativ al
intrării LUT (I3) din FPGA are în corespondenţă intrarea de resetare (CLR) a
contorului, căreia i se atribuie valoarea de 1 logic (I3 = CLR). Pentru intrările LUT
rămase, de la indecşii I0, ..., I2, în LUT se află valorile (I+1) modulo 4. Pentru a
finaliza proiectarea, semnalul de la ieşirile O0, ..., O3 ale LUT trebuie conectat,
folosind interconexiunea programabilă, înapoi la semnalul intern de intrare I0, ..., I3
(O0..3  I0..3) Pentru a înţelege mai bine contorul pe bază de FPGA cu resetare, se
va analiza funcţionarea acestuia. Dacă, de exemplu, starea curentă a contorului este
2 şi semnalul de resetare (CLR) nu este activat, adresa de la intrarea LUT va fi 2,
ceea ce va produce ieşirea 3 la circuitul basculant bistabil (flip-flop). Dacă
semnalul de resetare (CLR) este activat pentru aceeaşi stare, intrarea în LUT ar fi 6,
ceea ce ar produce următoarea stare de 0.
Aparent, aceasta este o modalitate complicată de a construi un contor cu
resetare şi că, de fapt, o proiectare completă, cu circuit de incrementare şi semnal
de resetare către circuitul basculant bistabil, ar putea fi rezolvată mult mai simplu,
mai rapid şi cu un consum mai mic de energie. Principalul avantaj al proiectării
bazate pe FPGA este că acesta poate fi configurat într-o oră, la laborator sau acasă,
în timp ce varianta mai eficientă şi complet customizată ar urma să fie produsă pe
siliciu, prin integrare VLSI, ceea ce ar putea dura o lună sau chiar mai mult.
Pentru a utiliza un FPGA, proiectul dorit trebuie descris cu ajutorul unui
descriptor de circuit sau a unui limbaj de descriere hardware (adică, un limbaj de
programare folosit pentru a descrie structuri hardware). Proiectul este apoi procesat
de un sintetizator, care mapează circuitul într-o arhitectură specifică FPGA. O
provocare în utilizarea FPGA este că proiectul care urmează să fie mapat nu pare să
se potrivească niciodată. Cipurile FPGA sunt fabricate cu un număr variat de LUT,
costul crescând odată cu volumul. În general, dacă proiectarea nu se potriveşte,
trebuie ori să se simplifice designul, ori să se renunţe la o parte din funcţionalităţi,
ori să se achiziţioneze un FPGA mai mare şi mai scump. Proiectele foarte
complexe pot să nu se încadreze nici în cele mai mari FPGA-uri, ceea ce va obliga
proiectantul să-şi modeleze proiectul în mai multe cipuri FPGA. Această sarcină
este cu siguranţă una mai dificilă, dar este totuşi floare la ureche în comparaţie cu
proiectarea unui circuit integrat complet customizat, produs în serie.

S-ar putea să vă placă și