You are on page 1of 73

Arhitectura calculatoarelor 3



ŢIUNI INTRODUCTIVE

1.1. SCHEMA DE BAZĂ A UNUI CALCULATOR

Orice calculator are în componenţă patru mari unităţi fundamentale:


-Unitatea centrală (UC).
-Unitatea de memorie (UM).
-Unitatea de Intrare/Ieşire (U I/E).
-Magistrale de interconectare (BUS-uri).

Periferic 1
Periferic 2

UC UM U I/E
Periferic n

Magistrală (BUS)

   ă   

Rolurile acestor componente sunt:


-Unitatea centrală (UC) controlează toate componentele, executând
instrucţiunile unui program; efectuează calcule aritmetice şi logice.
4 Sorin Adrian Ciureanu
-Memoria (UM) păstrează programele în curs de execuţie şi datele
asociate lor.
-Unitatea de Intrare/Ieşire (U I/E) leagă sistemul cu lumea externă
prin intermediul unităţilor periferice: ecran, tastatură, discuri, benzi
magnetice, reţele etc.
-Magistralele sunt de trei feluri:
magistrale de adresă, care vehiculează adresa memorie sau a unităţii
I/E generată de UC (sau, în unele cazuri de alte unităţi de control);
magistrale de date, care vehiculează informaţia (instrucţiuni, date)
între UC, memorie şi unităţile I/E;
magistrale de control, care vehiculează semnalele utilizate de UC
pentru controlul sistemului (adresă, memorie validă, adresă I/E
validă, citire/scriere, aşteptare, întrerupere etc.).
Principiul de funcţionare a unui calculator este relativ simplu. În
UM există programe, fiecare program având un număr de instrucţiuni.
Ciclurile de executare a unei instrucţiuni sunt următoarele:
-Ciclul extragere instrucţiune (instruction fetch). UC face o citire a
memoriei la adresa la care se află instrucţiunea. Instrucţiunea are un număr
de biţi, în funcţie de arhitectura calculatorului, de obicei multiplu de 8.
Instrucţiunea citită este adusă pe magistrală şi depusă într-un registru al UC-
ului.
-Ciclul de aflare a operanzilor. Oricare instrucţiune lucrează cu
operanzi. Între operanzi se petrece o operaţie dată de un câmp al
instrucţiunii, numit codul instrucţiunii. În această fază trebuie depistaţi
operanzii, mai precis adresele unde se găsesc operanzii. Aceştia se pot găsi
în două tipuri de locaţii:
-în registrele generale ale UC-ului;
-la o adresă de memorie.
Există mai multe tipuri de adresare pentru determinarea adreselor de
operanzi. La sfârşitul acestui ciclu, în UC trebuie să se existe adresele fizice
ale operanzilor participanţi la instrucţiune.
-Ciclul de aducere a operanzilor în UC. În acest ciclu se aduc
operanzii participanţi la instrucţiune de la adresele determinate în ciclul
anterior. Ei sunt aduşi din registrele generale sau de la adresele de memorie
în registrele funcţionale.
-Ciclul de execuţie propriu zisă. În acest ciclu are loc execuţia
propriu zisă a instrucţiunii, dată de codul instrucţiunii.
-Ciclul de depunere a rezultatului. Orice instrucţiune are ca scop
final aflarea unui rezultat care poate fi un operand în cazul instrucţiunilor
aritmetice(de exemplu suma pentru cod de adunare, produsul pentru cod de
Arhitectura calculatoarelor 5
înmulţire) sau poziţionarea unor indicatori în cazul instrucţiunilor logice (de
exemplu, în cazul unui cod de comparaţie între doi operanzi, poziţionarea
indicatorului z=1 pentru identitatea celor doi operanzi).
La sfârşitul acestui ciclu, care înseamnă şi sfârşitul executării
instrucţiunii, se calculează adresa instrucţiunii următoare şi adresa de la care
va fi adusă instrucţiunea următoare.
Execuţia unui program înseamnă execuţia succesivă a instrucţiunilor
din care este alcătuit. Programele care compun sistemul de operare asigură
gestiunea resurselor (procesor, memorie, I/E) şi fac legătura cu programele
de aplicaţie.

1.2. SCHEMA NIVELELOR CONCEPTUALE A UNUI


CALCULATOR

Un calculator virtual actual are şapte nivele conceptuale.

Nivelul 7 Nivelul orientat pe aplicaţie


 


Nivelul 6 Limbaje de nivel înalt


Nivelul 5 Limbaj de asamblare

Nivelul 4  Sistemul de operare

Interpretare
Nivelul 3 Arhitectura setului de instrucţiuni

Microprogram executat
Nivelul 2 Microarhitectură direct de hard

Nivelul 1 Nivelul logic digital


Fig.1.2. Nivelurile conceptuale ale maşinii virtuale corespunzătoare
calculatoarelor actuale.
Maşina virtuală este organizată pe niveluri iar între două niveluri pot
exista două operaţii:
-translatarea şi
-interpretarea.
Limbaj superior(Lsup)

Limbaj inferior (Linf)


6 Sorin Adrian Ciureanu

Translatare Interpretare

Utilizarea limbajului inferior este greoaie şi de aceea s-a creat un


limbaj superior, mult mai aproape de gândirea umană. Se pot scrie
programe atât în Lsup cât şi în Linf dar calculatorul va executa totdeauna setul
de instrucţiuni din Linf pentru care a fost proiectat fizic.
Translatarea înseamnă transformarea programului din Lsup în
întregime într-un program din Linf . Programul din Lsup este abandonat iar
noul program din Linf este încărcat în memorie şi executat. Translatarea
seamănă cu compilarea.
Interpretarea înseamnă execuţia instrucţiunilor din Lsup , pas cu pas,
fiecare instrucţiune fiind executată imediat. Este scrierea unui program în
Linf care preia programe din Lsup ca date de intrare şi le execută examinând
fiecare instrucţiune pe rând şi executând secvenţa echivalentă de instrucţiuni
direct în Linf , dar fără să genereze un nou program în Linf .
Diferenţa fundamentală între cele două tehnici este că în translatare
un program mai întâi este transformat în totalitate în alt program şi apoi
executat programul translat, în timp ce în interpretare se execută fiecare
instrucţiune pas cu pas.
Faţă de interpretare, translatarea are avantajul unei viteze de execuţie
mult mai mari.
Nivelurile au următoarele semnificaţii:
Nivelul 1 este hard pur. Este format din circuite electrice şi
electronice.
Nivelul 2 este nivelul microprogram care interpretează instrucţiunile
nivelului 3 şi le execută în nivelul 1. Fiecare instrucţiune a nivelului 3 este
executată de un microprogram.
Nivelul 3 este nivelul setului de instrucţiuni al maşinii, instrucţiuni
executate pe nivelul hard.
Nivelul 4 . Sistemul de operare este hibrid deoarece cuprinde atât
instrucţiuni interpretate de nivelul patru cât şi instrucţiuni interpretate de
nivelul trei.
Nivelele 1-4 nu sunt utilizate de programatori, ele conţinând
interpretoare şi translatoare construite de către programatorii de sisteme.
Nivelul 5 este nivelul limbajului de asamblare, destinat
programatorilor de aplicaţii. Dacă primele niveluri erau interpretate, acesta
este translatat de către un program numit asamblor.
Arhitectura calculatoarelor 7
Nivelul 6 este nivelul de limbaj înalt. Programele scrise în acest
nivel sunt translatate către nivelele cinci şi şase de către programe
specializate numite compilatoare.
Nivelul 7 conţine limbaje destinate unor domenii foarte speciale cum
ar fi proiectarea asistată, administraţia, grafica etc.

1.3. SCURT ISTORIC AL DEZVOLTĂRII


CALCULATOARELOR

În decursul timpului, de la apariţia primului calculator şi până astăzi,


dezvoltarea în acest domeniu s-a datorat celor doi factori principali:
-progresul tehnologic şi
-introducerea de noi concepţii în arhitectura calculatoarelor.

1.3.1. Influenţa progresului tehnologic asupra dezvoltării


calculatoarelor

De la apariţia primului calculator, tehnologiile au făcut progrese


uriaşe, atât în ceea ce priveşte componentele unui calculator cât şi în
tehnologiile de stocare a informaţiei. Din acest punct de vedere, se pot
distinge cinci generaţii de calculatoare.

1.3.1.1. Generaţia zero ,calculatoare mecanice,(1642-1945)

Primul care a construit o maşină de calcul funcţionabilă a fost Blaise


Pascal (1623-1662) care, la numai 19 ani, a proiectat o maşină mecanică,
folosind roţi dinţate şi fiind acţionată de o manivelă manevrată de om.
Maşina putea să facă numai adunări şi scăderi şi a fost creată de tânărul
Pascal pentru a-l ajuta pe tatăl său care era colector de taxe pentru guvernul
francez.
Gottfried von Leibnitz (1646-1716) a contribuit, teoretic şi practic, la
naşterea informaticii. El a perfecţionat maşina lui Pascal, noua maşină
reuşind să execute, pe lângă adunări şi scăderi, şi înmulţiri şi împărţiri.
Cel care poate fi considerat autorul precursorului calculatorului
actual este Charles Babbage (1792-1871). Acesta a creat două maşini:
maşina de calcul diferenţială şi maşina analitică.
Maşina de calcul al diferenţelor (diferenţială) era o maşină
specializată care, pe baza unui algoritm, calcula tabele de numere utile în
navigaţia maritimă prin metoda diferenţelor finite. Cea mai interesantă
8 Sorin Adrian Ciureanu
caracteristică a acestei maşini era înscrierea rezultatelor pe o tablă de aramă
gravabilă cu o ştanţă de oţel, previzionând mediile periferice de
inscripţionare de azi.
Maşina analitică avea patru componente:
-magazia (memoria);
-moara (unitatea de calcul);
-secţiunea de intrare (cititorul de cartele);
-secţiunea de ieşire (ieşire perforată şi imprimată).
Magazia consta din 100 de cuvinte a câte 50 cifre zecimale, fiecare
fiind folosite pentru a memora variabile şi rezultate. Moara putea accepta
operanzi din magazie, pe care putea aduna , scădea, înmulţi sau împărţi,
pentru ca, în final, să întoarcă rezultatul în magazie. Această maşină
analitică era programabilă, într-un limbaj simplu de asamblare, care necesita
pe cineva care să facă programarea. Acel cineva a fost Ada de Lovelace,
fiica lordului Byron, care este cunoscută ca fiind primul programator din
istoria calculatoarelor. În cinstea ei limbajul de programare a fost denumit
ADA. Din păcate, maşina nu a funcţionat pentru că folosea roţi dinţate care,
în sec. IX, erau realizate cu o precizie redusă. Insă această maşină, care a
fost realizată practic în 1991 la Muzeul Ştiinţei din Londra, stă la baza
calculatoarelor moderne, ideile ei fiind valabile şi astăzi.
Următoarele calculatoare aparţin tehnologiei electromecanice.
În 1930, un student german, Konrad Zuse, a construit o serie de
maşini de calcul folosind relee electromagnetice. Din cauza războiului, însă,
maşinile lui nu au fost cunoscute şi, mai mult, au fost distruse în
bombardamentul Berlinului din 1945.
În SUA, John Atanasoff, de la Colegiul Statului Yowa, a creat,
pornind de la ideea lui Babbage, o maşină asemănătoare din punct de vedere
logic dar utilizând o altă tehnologie. Memoria era formată din capacităţi
care se reîncărcau periodic, idee utilizată astăzi la memoria dinamică RAM
cu refresh.
Ca şi maşina Babbage, maşina lui John Atanasoff era tributară
tehnologiei şi nu a funcţionat. Se pare, însă, că istoria a reţinut prototipul
ABC (Atanasoff-Berry-Computer), Berry fiind un student a lui Atanasoff,
realizat în 1939.
George Stibitz, de la Bell Laboratories, a creat o maşină mai
primitivă ca a lui Atanasoff dar care are marele merit că a funcţionat,
demonstraţia făcându-se, în 1940, la Colegiul Dartmouth.
În 1944, Howard Aiken a construit o maşină pornind de la maşina
Babbage, pe care a studiat-o îndelung, creând o nouă maşină pe bază de
relee electromagnetice. Maşina avea 72 cuvinte, fiecare de câte 23 cifre
Arhitectura calculatoarelor 9
zecimale, şi un timp de instrucţiune de 6 secunde. Intrarea şi ieşirea se
făceau pe bază de hârtie perforată.

1.3.1.2. Generaţia întâi, maşini cu tuburi electronice (1945-


1955)

Circuitele logice din generaţia întâi erau realizate cu tuburi


electronice şi aveau un consum energetic foarte mare. Principalele
caracteristice ale acestor calculatoare au fost:
-memoria realizată cu tambur magnetic;
-utilizarea cititorului/perforator de hârtie;
-existenţa a 10-20 instrucţiuni simple care constituiau baza unui
limbaj cod maşină.
Din punct de vedere logic nu era mare diferenţă faţă de maşina
Babbage dar tehnologic se intra în era electronică.
Principalele calculatoare din această generaţie au fost:
ENIGMA, maşină realizată de Germania în timpul celui de-al doilea
război mondial pentru transmiterea mesajelor codificate.
COLLOSUS, maşini fabricate de Englezi pentru decodificarea
mesajelor ENIGMA. De menţionat că la fabricarea lor a contribuit şi Allan
Turing, cunoscut mai târziu drept creator al maşinii TURING.
ENIAC (Electronic Numerical Integrator And Computer), construit
de către John Mauchley şi John Eckert (Universitatea din Pensilvania), cu
colaborarea lui John von Neumann,. Era destinat rezolvării ecuaţiilor
diferenţiale cu derivate parţiale şi a avut aplicaţii în domeniul militar, la
calcularea traiectoriilor balistice şi chiar la fabricarea bombei atomice în
proiectul Manhatan. Avea următoarele caracteristici:
-19000 tuburi electronice şi 1500 relee;
-30 unităţi separate care procesau datele;
-20 registre de câte 10 cifre zecimale destinate rezultatelor
finale şi parţiale;
-efectua 5000 operaţii pe secundă.
EDVAC (Electronic Discrete Variable Automatic Computer),
calculator cu numai 4000 tuburi electronice. Este important pentru că în
echipa care l-a proiectat s-a aflat şi John von Neumann care în 1947 a
publicat principiile calculatorului modern, valabile şi astăzi. Maşina lui von
Neumann este un model de maşină universală, nespecializată, cu
următoarele elemente:
-o memorie conţinând programe (instrucţiuni) şi date;
-o unitate aritmetică şi logică(UAL);
10 Sorin Adrian Ciureanu
-o unitate care permite schimbul de informaţie cu perifericele (U I/E)
-o unitate de comandă (UC).
Aceste dispozitive realizează funcţiile de bază ale unui calculator:
stocarea de date, tratarea datelor, mişcarea datelor şi controlul lor, funcţii
care sunt aceleaşi şi în ziua de astăzi. Calculatoarele moderne se bazează pe
schema lui von Neumann.
MANIAC , calculatorul de la Los Alamos Laboratory, utilizat la
proiectarea bombei atomice.
UNIAC 1, calculator lansat în 1951 de Eckert şi Mauchley şi utilizat
într-o aplicaţie de predicţie a alegerilor din SUA câştigate de Dwight
Eisenhower.
IBM 701, calculator cu memorie de 2kcuvinte a 36 biţi şi două
instrucţiuni pe cuvânt (primul din seria de calculatoare lansate de celebra
firmă IBM, înfiinţată, de altfel, în 1911) .
IBM 704, cu 4kcuvinte de 36 biţi.

1.3.1.3.Generaţia a doua, calculatoare cu tranzistori (1955-1965)

John Bardeen, Walter Brattain şi Wiliam Shockley au inventat în


1948 tranzistorul bipolar cu joncţiune ceea ce le-a adus în 1956 Premiul
Nobel pentru Fizică. Tranzitorul are aceleaşi funcţiuni ca tuburile
electronice cu vid dar are avantajul de a fi miniaturizabil.
Calculatoarele bazate pe tehnologia cu tranzistori au următoarele
caracteristici:
-utilizarea diodelor şi tranzistorilor pe bază de germaniu şi apoi pe
bază de siliciu ceea ce a condus la o putere disipată mai mică, gabarit redus
şi siguranţă în funcţionare;
-memorii pe inele de ferită, de 1000 de ori mai rapide decât cele din
generaţia anterioară, având timpul de acces de 2-12 µs.;
-apariţia cablajului imprimat;
-apariţia echipamentelor periferice precum discul, banda magnetică,
imprimanta;
-apariţia limbajelor de nivel înalt ca Fortran, Cobol, Algol.
Dintre calculatoarele din această generaţie, cele mai cunoscute sunt:
TX-0 (Tranzistorised eXperimental computer 0) realizat la MIT.
PDP-1 (Programmable Data Procesor) realizat de către DEC (Digital
Equipement Corporation) , având o memorie internă de 4kcuvinte a 18 biţişi
ciclul instrucţiune de 5µs., fiind echipat cu consolă monitor CRT (Cathode
Ray Tube) cu posibilitatea de control al fiecărui punct de pe ecran.
Arhitectura calculatoarelor 11
PDP-8 , cu o magistrală unică şi cu următoarele module: CPU,
memorie, consolă, dispozitive I/E. A fost primul calculator numeric
comercial, de mare serie, vânzându-se 5000 bucăţi.
CDC 6600,produs de DEC şi proiectat de Seymour Cray, viitorul
proiectant al calculatoarelor Cray 1 şi Cray 2.
IBM 7094, cu memorie de 32kcuvinte de 36 biţi şi ciclu instrucţiune
de 2µs.
În această perioadă şi în România au început să se producă primele
computere, care în majoritate au fost prototipuri, DACIC, MECIPT, ANCA,
CETA, ele fiind realizate la Institutul de Fizică Atomică şi la Institutele
Politehnice din Bucureşti şi Timişoara.

1.3.1.4. Generaţia a treia, calculatoare cu circuite integrate (1965-


1980)

În 1958 a fost inventat circuitul integrat de către Robert Noyl sau,


după alte surse, de către Jack Kilby de la Texas Instruments. Este vorba
despre gruparea pe o pastilă de siliciu a mii şi apoi milioane de
componente.. Principalele caracteristici ale calculatoarelor din această
generaţie sunt:
-utilizarea circuitelor integrate e scară redusă, cu 100 tranzistori pe
chip;
-apariţia memoriilor de semiconductoare, cu timp de acces de 0,5-
75µs;
-memorie externă de mare capacitate, discuri de masă şi benzi
magnetice.
Sistemele de calcul din această generaţie au fost create de:
IBM, cel mai reprezentativ fiind IBM 360;
DEC, cu minicalculatoare din seria PDP 11/XX.
Minicalculatorul IBM 360 avea următoarele caracteristici:
-ciclul instrucţiune 250µs.;
-spaţiul de adresare de 216 octeţi (19 Mocteţi);
-registre de lucru pe 32 biţi;
-apariţia multiprogramării.
Minicalculatoarele PDP 11/XX aveau caracteristici asemănătoare cu
ale lui IBM , însă cuvântul era de 16 biţi (şi apoi de 32 biţi la cele din seria
VAX); raportul preţ/performanţă era foarte bun, cel mai bun dina anii 80.
Şi în România , în acea perioadă (anii 80), a fost o emulaţie şi o
efervescenţă în construcţia de calculatoare, România fiind la un moment dat
12 Sorin Adrian Ciureanu
pe locul 1 din vechiul lagăr socialist în ceea ce privea echipamentele de
tehnici de calcul.
În domeniul calculatoarelor numerice, România a produs:
FELIX C 512/1024, serie de calculatoare care avea ca patent un
calculator francez produs de firma CII. Din punct de vedere tehnologic, a
fost construit pe porţi logice şi bistabile iar urmaşul său, FELIX 5000, a avut
în componenţă circuite medii integrate ca registre şi numărătoare. De
remarcat că circuitele pentru FELIX C 512/1024 erau de provenienţă
românească, produse la IPRS Băneasa Microelectronic. Din punct de vedere
al caracteristicilor, FELIX avea cuvâtul de 16 biţi, o memorie de maxim 1
Moctet pe bază de semiconductoare, o unitate de intrare/ieşire numită USM
(Unitate de Schimburi Multiple) care emiea 5 instrucţiuni speciale de
intrare/ieşire. Ca sistem de operare avea un sistem pe laturi, numit SIRIS V,
cu alocare de memorie cu partiţii statice.
CORAL şi INDEPENDENT, minicalculatoare ce emulau
instrucţiunile din PDP 11/44. Amândouă calculatoarele româneşti aveau
caracteristici tehnice asemănătoare cu PDP 11/44, deosebirea dintre ele fiind
aceea că minicalculatorul CORAL avea în componenţă numai cipuri din
Europa de Vest şi din America iar INDEPENDENT avea numai cipuri
româneşti şi ruseşti. INDEPENDENT a fost proiectat de ITC (Institutul de
Tehnică de Calcul) iar Coral de un colectiv de la FCB (Fabrica de
Calculatoare Bucureşti) dar toate erau produse de FCB. Sistemul de operare
era o prelucrare a SO RSX, numită MIX, creată de cei de la FCB.
RCD (Rom Control Data) fabrica echipamente periferice
româneşti. RCD era o societate mixtă, româno-americană, în colaborare cu
CD (Control Data). Se fabricau discuri magnetice de masă MD-40, MD-50
(de 50 Mocteţi), benzi magnetice CDC, imprimante liniare BP (Band
Printer). Crearea RCD ne-adus un mare avantaj deoarece toate
calculatoarele româneşti erau echipate cu periferice Control Data. Datorită
acestui fapt am putut exporta calculatoare româneşti FELIX în China,
INDEPENDENT în China, Cehoslovacia şi R.D.Germană. CORAL, deşi
era cel mai performant şi făcut cu echipament românesc, nu a putut fi
exportat deoarece sistemul de operare MIX era o copie a RSX-ului . În vest
nu s-a putut exporta pe motiv de drept de autor iar în est cei de la FCB nu au
vrut să-l exporte fiind prea bun.
Oricum, în anii 70 eram cei mai buni producători de echipamente de
calcul din est. În anii 80, însă, am pierdut supremaţia în favoarea Bulgariei
care a învestit mai mult ca noi, în special în echipamente periferice şi soft.

1.3.1.5. Generaţia a patra . V.L.S.I. (1980-2005)


Arhitectura calculatoarelor 13

Apariţia acestei generaţii a fost posibilă datorită perfecţionării


tehnologiei integratelor. Circuitele integrate VLSI (Very Large Scale
Integration) ajung la 1 miliard de tranzistoare pe cip..
Calculatoarele din această generaţie se caracterizează prin
următoarele:
-utilizarea circuitelor VLSI;
-apariţia şi dezvoltarea microprocesoarelor;
-dezvoltarea de noi tipuri de memorii (MOS, magnetice, holografice)
şi echipamente periferice orientate pe sesizarea primară a datelor;
-interconectarea calculatoarelor în reţele, însoţită de întrepătrunderea
industriilor de calculatoare şi telecomunicaţii;
-apariţia şi dezvoltarea mediilor de programe complexe cu puternice
facilităţi grafice.
În această generaţie au apărut la început calculatoarele personale de
tip Home Computer iar apoi cunoscutele Personal Computer, pe bază de
microprocesoare; două dintre firmele cele mai importante care produl
microprocesoare sunt INTEL şi MOTOROLA.

1.3.1.6. Generaţia cincia

S-a încercat o definire a generaţiei a cincia, prin formularea


cerinţelor ce stau în faţa calculatoarelor la ora actuală, cerinţe care cuprin
următoarele:
-o interfaţă inteligentă care să permită dialogul pe bază de limbaj
natural )voce, sunete, imagini, informaţie grafică);
-crearea unei maşini care să realizeze raşionament pentru rezolvarea
problemei, fără cunoaşterea prealabilă a algoritmului;
-baze de date imense cu o căutare foarte rapidă.

Tabelul 1.1. Tabel sintetic cu principalele evenimente din istoria


calculatoarelor

An Nume Eveniment
1642 Blaise Pascal Prima maşină de calculat mecanică
1834 Charles Babbage Maşina analitică
1904 J.A.Flemming Inventarea diodei
1906 Lee de Forest Inventarea triodei
1936 Konrad Zuse Primul calculator cu relee-Berlin
1943 Guvernul englez COLOSSUS,primul calculator cu tuburi
1944 H.Aiken Primul calculator………….Mark 1
14 Sorin Adrian Ciureanu
1946 J.Mauchley şi J.P. Eckert ENIAC Pensilvania University
1948 Bardeen, Brattains şi Sockley Inventarea tranzistorului
1948 Norbert Wiener Cibernetica
1949 M.Wilkes EDSAC primul calculator cu program
înregistrat
1951 MIT WHIRLWIND primul calculator în timp real
1951 J.Mauchley şi J.P. Eckert UNIVAC primul calculator comercializat
1952 John von Neumann IAS Princetown
1955 Laboratoarele Lincoln TX-0 primul calculator cu tranzistoare
1955- IBM IBM 704
1960
!960/61 DEC PDP 1
1962 IBM IBM 7094 (32 biţi)
1963 BORROGHS Limbajul ALGOL
1964 IBM IBM 360
1964 CDC CDC 6600 primul calculator paralel
1965 DEC PDP-8
1970 DEC PDP-11
1970/71 INTEL 4004 primul microprocesor pe 4 biţi
1972 INTEL 8008 primul microprocesor pe 8biţi
1974 CRAY CRAY 1 primul supercalculator
1978 INTEL 8080 UC pe un cip
1978 DEC VACS primul minicalculator pe 32 biţi
1979 MOTOROLA 68000
1980 IBM Primul PC
1982 INTEL 286
1983 SUA Reţeaua LAN
1984 MOTOROLA 68020 primul microprocesor pe 32 biţi
1985 INTEL 386
1987 MOTOROLA 68030
1989 INTEL 486
1992 Lab CERN GENEVA WWW(World Wide Web)
1993 INTEL PENTIUM
1995 SUNMYCROSYSTEMS JAVA
1996 CYRYX 686
1997 AMD RISC K5,K6
1998 AMD K6
1999 INTEL PENTIUM III
1999 AMD ATHALON/47
2000 AMD SHARPTOOTH/K6-3

1.3.2. Concepte noi în evoluţia calculatoarelor


Arhitectura calculatoarelor 15

În afara progresului tehnologic, concepţiile noi au condus la o


dezvoltare rapidă a sistemelor de calcul.. . Noile idei sunt legate, în primul
rând, de arhitectura calculatoarelor. Menţionăm doar cele mai importante
dintre ele.

1.3.2.1. Microprogramarea

În 1951, Maurice Wilkes, un cercetător de la Universitatea din


Cambridge, a sugerat construirea unei maşini pe trei niveluri, în loc de două
câte erau până atunci. Noul nivel propus de Wilkes avea rolul ca setul de
instrucţiuni să fie interpretat de microprogram, în loc să fie realizat direct pe
partea electronică. Acest concept, numit microprogramare, a devenit
dominant începând cu anii 70.

1.3.2.2. Inventarea sistemului de operare

A fost proiectat şi introdus cu scopul de a automatiza sarcinile


operatorului de calculator. Un sistem de operare este un program care
acţionează ca un intermediar între utilizator şi partea fizică a sistemului de
calcul şi permite utilizarea eficace a componentelor unui calculator. Primul
sistem de operare a fost realizat, în 1955, de către programatorii de la
General Motors Research Center care au scris un astfel de program
intitulându-l „a monitor program for the IBM 701”
Un pas foarte important în cadrul dezvoltării sistemelor de calcul a
fost crearea sistemelor de operare cu timesharing de către MIT la începutul
anilor 60. La sfârşitul anilor 60, se remarcă o serie de invenţii precum
sistemul de operare UNIX care are deja un sistem de fişiere sofisticat,
gestiunea proceselor, interfaţă cu sistemul şi o serie de instrumente
specializate în tratarea unor sarcini specifice. Aşa cum arată numele, marca
depusă UNIX desemnează începutul sistemelor compatibile.

1.3.2.3. Memoria Cache

Memoria cache a fost o idee simplă dar foarte eficientă care a mărit
de zece ori viteza de calcul a unui sistem.
16 Sorin Adrian Ciureanu
1.4. TIPURI DE ARHITECTURI ALE
CALCULATOARELOR NUMERICE

1.4.1. Arhitectura von Neumann

Într-un articol publicat în 1947, John von Neumann a expus nişte


principii care stau la baza calculatoarelor moderne. Acestea sunt:
-Existenţa unui mediu de intrare prin intermediul căruia să poată fi
introdus un număr practic nelimitat de date şi instrucţiuni.
-Existenţa unei memorii în care să fie depuşi operanzii şi
instrucţiunile şi de unde să fie preluate rezultatele în ordinea dorită.
-Existenţa unei secţiuni de calcul care să fie capabilă să execute
operaţii aritmetice şi logice asupra datelor din memorie.
-Existenţa unui mediu de ieşire prin intermediul căruia să poată fi
comunicat utilizatorului un număr nelimitat de instrucţiuni.
-Existenţa unei unităţi de comandă capabilă să interpreteze
instrucţiunile citite în memorie şi, pe baza informaţiilor citite în memorie şi
a informaţiilor furnizate de secţiunea de calcul, să fie capabilă să decidă
între mai multe variante de desfăşurare a operaţiilor.
-Datele şi instrucţiunile trebuie să fie stocate în memorie sub aceeaşi
formă.

Unitate de
control Memorie

Unitate
Dispozitiv logică Dispozitiv
de intrare şi de ieşire
aritmetică

Fig. 1.3. Modelul funcţional al maşinii John von Neumann


Arhitectura calculatoarelor 17

1.4.2. Maşina Turing

În 1936, matematicianul englez Allan Turing a creat un automat


abstract care să opereze cu numere calculabile. Un număr calculabil este un
număr a cărei parte zecimală poate fi determinată cu un număr finit de
iteraţii.
Automatul a fost sintetizat pe baza următoarelor ipoteze:
a)Automatul are un număr n finit de stări.
b)Automatul se află în orice moment într-o stare i, 1≤i≥n, urmând ca
în momentul imediat următor să se afle în starea j, 1≤j≥n.
c)Fiecare din cele n stări se caracterizează prin:
-valoarea caracteristică ei, care este o valoare curentă a
numărului ce se calculează;
-funcţia fj care aplicată stării ei permite obţinerea următoarei
stări ej .
-deplasamentul dij care va trebui aplicat numărului pentru a
se realiza din starea i în starea j , adică j=i+dij

Modelul funcţional al maşinii construite pe baza acestor ipoteze este


dat în figura 1.4.

Procesor

C S

SR

Fig. 1.4. Modelul funcţional al maşinii Turing; SR-sistem reprezentativ;


C/P-cip citire/scriere.
18 Sorin Adrian Ciureanu
-Sistemul reprezentativ (SR) sau memoria maşinii este construit
dintr-o bandă magnetică de lungime practic infinită, împărţită în segmente
de lungime egală, fiecare segment putând stoca un număr finit de semne.
-Procesorul (P) este un circuit secvenţial cu un număr finit de stări,
care poate executa următoarele instrucţiuni, (setul de instrucţiuni al
maşinii):
-schimbă segmentul de pe bandă de la poziţia curentă;
-poziţionează capul de citire (C ) cu o poziţie la dreapta;
-poziţionează capul de citire cu o poziţie la stânga;
-opreşte sistemul.
Pentru a realiza un calcul cu această maşină, se înscriu datele într-un
mod convenabil şi se descompune algoritmul de calcul, în funcţie de modul
de reprezentare a datelor, într-o secvenţă de instrucţiuni ale maşinii. Ultima
instrucţiune este cea de oprire a maşinii.

1.5. CLASIFICAREA CALCULATOARELOR

Este destul de dificil să se clasifice tipurile de calculatoare din cauza


multitudinii lor. Totuşi, anumite taxonomii s-au impus. Vom prezenta trei
clasificări după arhitectură şi una strict comercială.

1.5.1. Taxonomia Flynn

A fost publicată în 1966 de către Flynn care avea în vedere existenţa


într-un sistem de calcul a două fluxuri:
-fluxul de instrucţiuni, care reprezintă programul;
-fluxul de date, care reprezintă datele de intrare sau rezultatele
parţiale.
Clasificarea lui Flynn ia în consideraţie gradul de multiplicitate ale
celor două fluxuri şi identifică patru tipuri de arhitecturi:

SISD (Single Instruction Single Data)


SIMD (Single Instruction Multiple Data)
MISD (Multiple Instructions Single Data)
MIMD (Multiple Instructions Multiple Data)

SISD realizează o execuţie sequenţială a instrucţiunilor (figura 1.5.).


Principalul neajuns al acestei arhitecturi este viteza de execuţie care , la un
moment dat, este plafonată, situaţie denumită „gâtul sticlei lui Neumann”
Arhitectura calculatoarelor 19
(Neumann Bottleneck). Spargerea acestei limitări este realizată prin
arhitectura paralelă.

UC UP MM

Fig. 1.5. Arhitectura SISD; UC-secţiunea de comandă a Unităţii


centrale; UP-secţiunea de prelucrare a Unităţii centrale; MM-modul de
memorie; FD-flux de date; FI-flux de instrucţiuni.

Arhitectura SIMD se caracterizează prin n unităţi de procesare (UP)


care operează sub controlul unui flux unic de instrucţiuni (FI) lansat de o
singură unitate de comandă (UC).

FD1
UP1 MM!
FD2
UP2 MM2
FI
UC

FDn
UPn MMn

Fig. 1.6. Arhitectura SIMD; UC-secţiunea de comandă a Unităţii


centrale; UP-secţiuni de prelucrare a Unităţii centrale; MM-moduri de
memorie; FD-flux de date; FI-flux de instrucţiuni.

Cele mai cunoscute maşini SIMD sunt calculatoarele vectoriale.


Acestea transformă instrucţiuni care se execută în n paşi într-o maşină
SIMD, în instrucţiuni care se execută într-un singur pas. De exemplu, suma
a doi vectori: c[i]=a[i]+b[i] pentru i=1…n se face într-un pas, fiecare
Unitate de Prelucrare calculând o componentă a vectorului sumă.
MISD nu are nici un sens şi de aceea nu este utilizată.
MIMD cuprinde două feluri de maşini:
-multiprocesoare şi
-multicalculatoare.
Multiprocesoarele se caracterizează prin existenţa memoriei comune
la care au acces n procesoare. Schimbul de informaţie dintre procesoare se
20 Sorin Adrian Ciureanu
face prin variabilele partajate din memoria comună la care au acces toate
procesoarele, însă accesul trebuie făcut prin excludere mutuală pentru a
realiza ceea ce se numeşte consistenţa memoriei.
Multicalculartoarele se caracterizeză prin existenţa unui număr foarte
mare de calculatoare ( de la ordinul sutelor în sus) care sunt legate printr-o
reţea topologică. Fiecare procesor are memoria lui locală, văzută doar de el,
iar comunicarea între procesoare se face prin mesaje.

1.5.2. Taxonomia lui Wang

Această clasificare presupune o organizare matricială a datelor. O


matrice de dimensiunea m x n are m cuvinte, fiecare cuvânt are o lungime
de n biţi. Criteriul de clasificare este gradul de paralelism în procesarea
datelor organizate matricial. Conform acestui criteriu există patru tipuri de
arhitecturi şi anume:
-WSBS (Word Serial-Bit Serial) în care se lucrează pe un singur
cuvânt, fiecare cuvânt fiind prelucrat serial bit cu bit, ns1, ms1….
-WSBP (Word Serial-Bit Paralel) în care se lucrează pe un singur
cuvânt , biţii fiecărui cuvânt fiind prelucraţi simultan, n>1, ms1.
WPBS (Word Paralel-Bit Serial) în care se lucrează pe un singur bit
la toate cuvintele simultan, ns1, m>1.
-WPBP (Word Paralel-Bit Paralel) în care se lucrează simultan pe
toate cuvintele şi pe toţi biţii, n>1, m>1.
WSBS nu are elemente de paralelism.
WSPB şi WPBS sunt parţial paralele, fiind orientate pe prelucrarea
vectorilor.
WPBP este complet paralel.

1.5.3. Taxonomia lui Shore

Spre deosebire de Flynn, Shore şi-a bazat clasificarea pe modul în


care este organizat calculatorul din părţile sale componente. Din acest punct
de vedere, au fost identificate şase tipuri de maşini, fiecăreia atribuindu-se o
cifră romană.
Maşina I are o arhitectură convenţională von Neumann, cu
următoarea structură:
-unitate de comandă (CU)
-unitate de procesare (PU)
-memorie pentru instrucţiuni (IM)
Arhitectura calculatoarelor 21
-memorie pentru date (DM)

IM CU

(orizontal)
PU

DM

Fig. 1.7. Maşina I Shore.

O citire a DM produce toţi biţii unui cuvânt, care sunt prelucraţi în


paralel de PU, PU putând conţine mai multe unităţi funcţionale.
Această clasă include calculatoare vectoriale, de exemplu CRAY 1.
Maşina II este similară maşinii I, cu deosebirea că, în timp ce
maşina I citeşte slice-uri orizontale, maşina II citeşte un slice vertical.

IM

CU

PU DM

(vertical)

Fig. 1.8. Maşina II Shore

Exemple de calculatoare de tip maşina II Shore : ICL, DAP,


STARAN etc.

Maşina III este o combinaţie a maşinilor I şi II. Un exemplu de


astfel de maşină este calculatorul ortogonal Shooman(1970)
22 Sorin Adrian Ciureanu

IM

(orizontal)
CU PU

PU DM

(vertical)

Fig. 1.9. Maşina III Shore

Masina IV se obţine prin multiplicarea unităţilor PU şi DM din


maşina I şi prin trimiterea acestui ansamblu de la o singură unitate de
control UC. Exemplu: PEPE.

CU

PU PU PU

DM DM DM

Fig. 1.10. Maşina IV Shore

Maşina Veste exact maşina IV cu facultatea suplimentară că


unităţile PU sunt aşezate pe o linie şi se asigură conexiuni între vecinii cei
mai apropiaţi; fiecare PU poate adresa informaţii din memoria sa dar şi din
cea a vecinilor săi imediaţi. Este un masiv conectat. Exemplu: ILIA CIV.
Maşina VI este denumită maşina cu logica în memorie. Este o
abordare alternativă a distribuirii comenzii în memorie.
CU

PU + DM

Fig. 1.11. Maşina VI Shore


Exemplu: calculatoare cu memorii asociative.
Arhitectura calculatoarelor 23

1.5.4. Clasificare comercială

Dacă primele trei clasificări erau strict legate de arhitectură,


clasificarea următoare are ca punct de vedere piaţa de calculatoare.
Sistemele de calcul pot fi:
-calculatoare personale;
-servere;
-sisteme dedicate.
Calculatoarele personale sunt cele mai populare. Au cel mai mic
cost şi în ultimii ani s-au produs 150-200 milioane pe an. Preţul lor nu
depăşeşte suma de 10000 dolari.
Serverele sunt destinate să ofere servicii tot mai sofisticate de reţea.
Costul lor este de 10.000 – 10.000.000 dolari. În ultimii ani s-au produs
aproximativ 4 milioane servere pe an.
Sistemele dedicate sunt construite pentru anumite aplicaţii speciale.
Costul lor este de 10.000-100.000 dolari.

1.7. TRENDUL ÎN ARHITECTURA


CALCULATOARELOR

Din punct de vedere tehnologic cele mai importante tendinţe sunt:


-gradul de integrare al tranzistorilor pe cip creşte cu cca. 55% pe an;
tehnologia de integrare a microprocesoarelor a evoluat de la 10 microni
(1971) la 0,18 microni 2001.
-frecvenţa ceasului creşte şi ea cu 50% pe an;
-pentru memoriile DRAM, densitatea de integrare creşte cu cca 40-
50% pe an, iar timpul de acces aferent scade cu 3 % pe an.
-tehnologia şi performanţele reţelelor se îmbunătăţesc semnificativ.
Se poate spune că aceste tendinţe respectă legea lui Gordon Moore,
cofondator împreună cu Obert Noyce a societăţii INTEL. Acesta, în 1965,
enunţă celebra sa lege: „numărul de tranzistori din circuitele integrate se va
dubla la fiecare doi ani” . Aceasta înseamnă că, la fiecare 10 ani se schimbă
prefixul de măsurare, adică totul creşte de 1000 de ori. Într-adevăr, dacă
hard discurile din anii 90 aveau 100 MB, în 2000 ele au 100 GB. Frecvenţa
ceasului era în 1990 de 8 MHz iar în 2000 era de 1 GHz etc.
Ceea ce s-a întâmplat într-adevăr cu procesoarele INTEL în ultimele
trei decenii se poate constata din tabelul de date reale dat în continuare, date
care verifică destul de bine legea lui Gordon.
24 Sorin Adrian Ciureanu

Tabelul 1.2. Evoluţia procesoarelor Intel între 1972 şi 2000


anul numele Frecvenţa Tranzistor
(nr./cip)
1972 8008 200KHz 3500
1974 8080 2MHz 6000
1976 8085 5MHz 6500
1978 8086 10MHz 29000
1982 286 12MHz 134.000
1985 386 16MHz 275.000
1989 486 25MHz 1,2.106
1993 P 60MHz 3,1.106
1997 PII 300MHz 3,3.106
1999 PIII 600MHz 9,5.106
2000 PIV 1,5GHz 42.10.6

Între cele mai evidente tendinţe de evoluţie în arhitectură amintim:


-exploatarea paralelismului la nivelul instrucţiunilor şi firelor de
execuţie, atât prin tehnici statice (soft) cât şi dinamice(hard); există şi
tehnici hibride cum ar fi cazul procesorului Intel Ithamium IA-64;
-structuri tot mai performante de ierarhizare a sistemului de memorie
prin utilizarea arhitecturilor evoluate de memorie cache;
-reducerea latenţei ………critice de program, prin tehnici de
predicţie;
-utilizarea microprocesoarelor Shered memory în special în cadrul
arhitecturii serverelor şi staţiilor grafice.
Arhitectura calculatoarelor 25

Capitolul 2

UNITATEA CENTRALĂ

Unitatea centrală (UC), în engleză CPU=Central Processing Unit,


este partea din calculator care are rolul de a interpreta şi executa
instrucţiunile unui program, de a citi sau salva în memorie rezultatele şi de a
comunica cu unităţile de schimb. Toate aceste activităţi sunt cadenţate de un
ceas la frecvenţă constantă care împarte timpul în fracţiuni de aceeaşi durată
numite cicluri.

2.1. STRUCTURA UNITĂŢII CENTRALE

Unitatea Centrală are în componenţă:


-Unitatea Aritmetică şi Logică (UAL);
-Unitatea de comandă (UCd);
-Registrele generale (RG).

a) Unitatea Aritmetică şi Logică (UAL)

UAL execută operaţii aritmetice (adunare, scădere, înmulţire


împărţire, complement faţă de 1, complement faţă de 2 etc.) , operaţii logice
(negare, şi, sau, suma modulo 2), decalaje şi rotaţii. Are două intrări de date,
pe n biţi, o ieşire corespunzătoare operaţiei efectuate, pe n biţi, eventual o
ieşire corespunzătoare flagurilor poziţionate de operaţie şi o intrare de
comandă care selecţionează operaţia de efectuat.
Toată Unitatea Aritmetică şi Logică este grupată în jurul unui
sumator paralel care poate aduna conţinutul a două registre multiplexate la
cele două intrări ale sumatorului. Operaţiile de înmulţire şi împărţire se
realizează, cu ajutorul diferiţilor algoritmi, prin adunări şi deplasări
stânga/dreapta succesive. Scăderea se realizează ca o adunare cu
complementul scăzătorului.
26 Sorin Adrian Ciureanu
Schema unei UAL este dată în figura 2.1.

Set
de
registre

Registru Registru
acumulator tampon

Σ Sumator

Fig 2.1. Schema bloc UAL

b) Unitatea de Comandă (UCd)

Unitatea de comandă este formată din:


-Generatorul de Faze (GF);
-Generatorul de Tact (GT);
-Blocul Circuitelor de Comandă (BCC).
Blocul circuitelor de comandă (BCC) dirijează toate operaţiile
executate în cadrul unei instrucţiuni. Există microoperaţii, care sunt
operaţiile elementare executate într-o instrucţiune, şi microcomenzi, care
sunt semnalele generate de BCC pentru execuţia microoperaţiilor.
Microcomenzile sunt trimise elementelor de execuţie din structura
calculatorului: registre, UAL, memorie, porturi etc. O instrucţiune este, de
fapt, o succesiune de microoperaţii.
Toate microoperaţiile care se execută în acelaşi timp definesc o stare
în execuţia unei instrucţiuni, stare numită fază.
Generatorul de faze (GF) construieşte succesiunea fazelor necesară
pentru execuţia instrucţiunii.
Generatorul de tact (GT) dă cadenţa schimbărilor de stare pentru
toate circuitele secvenţiale.
Arhitectura calculatoarelor 27
c) Registrele generale (RG)

Registrele generale (RG) sunt considerate o memorie foarte rapidă şi


de foarte mică capacitate. Structural fac parte din UC şi, în marea majoritate
a arhitecturilor, ele sunt adresabile pe magistrală.
Există două moduri de conexiune a registrelor generale:
-RG conectate direct între ele:
-RG conectate la magistrale.

2.2. CARACTERISTICILE UNITĂŢII CENTRALE

Performanţele în funcţionarea unei Unităţi Centrale sunt redate prin


următoarele caracteristici:
-Lungimea cuvântului;
-Frecvenţa ceasului;
-Numărul de instrucţiuni executate în unitatea de timp;
-Gradul de paralelism.

2.2.1. Lungimea cuvântului

Calculatoarele lucrează cu ajutorul cuvintelor de cod a căror cantitate


de informaţie este măsurată în biţi. Numărul de biţi reprezintă lungimea unui
cuvânt şi este multiplu de doi. Un cuvânt poate reprezenta:
-o instrucţiune;
-un segment de date.
Într-un calculator, lungimea cuvântului se identifică cu numărul de
biţi ai instrucţiunii. Cele mai noi calculatoare au instrucţiuni pe 64 biţi.
Aceasta este o caracteristică principală a UC .
Nu este obligatoriu ca lungimea cuvântului să fie aceeaşi cu
dimensiunea magistralei de memorie pe care se aduc instrucţiunile din UM
în UC. Un calculator poate avea, de exemplu, lungimea instrucţiunii de 64
biţi şi lărgimea magistralei de 32 biţi; pentru aducerea unei instrucţiuni din
memorie sunt necesare, în acest caz, două apeluri la memorie.

2.2.2. Frecvenţa ceasului

Orice calculator are un generator de impulsuri, numit ceasul unităţii


centrale.. Acesta este realizat cu un cuarţ care emite impulsuri cu frecvenţă
fixă. Ceasul iniţial suferă două tipuri de operaţii:
28 Sorin Adrian Ciureanu
-operaţia de divizare a ceasului, ceea ce înseamnă că ceasul iniţial,
cu cuarţ, suferă modificarea frecvenţei sale;
-operaţia de amplificare a semnalului de ceas.
Pe acest ceas, care este inima calculatorului, au loc toate
evenimentele hard din UC.

2.2.3. Numărul de instrucţiuni executate


în unitatea de timp

Dacă facem următoarele notaţii:


f = frecvenţa ceasului, în Hz
N = numărul mediu de ceasuri în care se execută o instrucţiune
n = numărul de instrucţiuni executate într-o secundă
atunci
f
n=
N
De exemplu, pentru un calculator care are frecvenţa ceasului de 2
GHz şi care execută două instrucţiuni pe ceas, numărul de instrucţiuni
executate în unitatea de timp este:
f 2 GHz
n= = = 4.10 9 = 4
N 1 miliarde instrucţiuni pe secundă
2
Pentru calculatoarele moderne se adoptă o unitate de măsură numită
MIPS (milioane de instrucţiuni executate într-o secundă). În exemplul
precedent, parametrul n va fi de 4000 MIPS.
Trebuie precizat că acest parametru (n) este mai aproape de adevăr
decât frecvenţa ceasului (f). Există calculatoare cu frecvenţă mai mică dar
care sunt inferioare calculatoarelor cu frecvenţa ceasului mai mare, tocmai
datorită mărimii N. De exemplu Intel 586 cu frecvenţa 100 MHz şi Pentium
I cu frecvenţa 66 MHz. Ar fi mai bine să fie afişat parametrul n în locul
parametrului f, dar partea dificilă este calcularea practică a lui N. Este
dificilă, deoarece, în setul de instrucţiuni, fiecare are N diferit şi chiar
aceeaşi instrucţiune are N diferit în funcţie de contextul rulării.

2.2.4. Gradul de paralelism

Există două feluri de paralelism:


-paralelism la nivel de instrucţiuni (pipeline)
Arhitectura calculatoarelor 29
-paralelism la nivel de procesor.

2.2.4.1. Paralelism la nivel de instrucţiuni (pipeline)

a)Principiul pipeline-ului este acela al liniei de montaj (de


asamblare):
-împărţirea unei sarcini în mai multe subsarcini de durate egale,
numite etaje;
-executarea simultană a diferitelor subsarcini din mai multe sarcini.
În felul acesta se măreşte debitul de sarcini al sistemului. Sistemul va
fi caracterizat prin doi parametri: durata individuală a unui etaj (T) şi
numărul de etaje (l)din pipeline. Latenţa L este durata totală de execuţie a
unei sarcini: L= lT
Debitul, d, al pipeline-ului depinde de numărul n de sarcini de
executat. Timpul necesar pentru execuţia în pipeline a n sarcini este timpul
de execuţie a primei sarcini, L= lT, plus timpul necesar pentru a le termina
pe celelalte n-1 următoare:
n
d=
L + ( n − 1)T
sau, la limită:
lim d =T −1
n →∞

Apare rezultatul esenţial: pentru un mare număr de sarcini, debitul


nu depinde de latenţă ci de durata individuală a fiecărui etaj. Deci, debitul
optimal va fi atins fracţionând cât mai fin posibil sarcina în subsarcini.
Evident, fracţionarea are limite tehnice.
b)Clasicul pipeline pentru execuţia instrucţiunilor
În calculatoare, pipeline-ul constă în fracţionarea execuţiei unei
instrucţiuni în mai multe module, fiecare modul executând hard o parte de
instrucţiune. Conceptul de pipeline înseamnă de fapt o bandă de asamblare
cu segmente, fiecare segment executând o parte de instrucţiune.
De exemplu, o bandă de asamblare cu 5 segmente. Aceste 5
segmente sunt:
S1 – unitate de extragere a instrucţiunii
S2 – unitate de decodificare a instrucţiunii
S3 – unitate de calcul şi extragere a operanzilor
S4 – unitate de execuţie propriu zisă a operaţiei instrucţiunii
S5 – unitate de scriere a rezultatelor
30 Sorin Adrian Ciureanu
S1 S2 S3 S4 S5

(a)

S1 1 2 3 4 5 6 7 8 9 10 11
S2 1 2 3 4 5 6 7 8 9 10
S3 1 2 3 4 5 6 7 8 9
S4 1 2 3 4 5 6 7 8
S5 1 2 3 4 5 6 7
Timpi de t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11
execuţie a
segmentelo
r

(b)
Fig.2.2. Schema unei benzi de asamblare cu 5 segmente; (a) schema de
funcţionare; (b)diagrama temporară a execuţiei segmentelor.

Din figura 2.2. se observă cum funcţionează paralelismul într-o


bandă de asamblare, la un moment de timp fiecare segment executând unul
din cele 5 segmente de instrucţiune diferite. Dacă timpul de execuţie a unui
segment este de 1 secundă, (t1=t2=…….=t10=t11=1s) atunci timpul de
execuţie a 7 instrucţiuni este, aşa cum se vede în figură, de 11 secunde. Pe o
maşină normală, fără pipeline, timpul de execuţie a 7 instrucţiuni, fiecare
necesitând 5 secunde, ar fi de 35 sec. Efectul se vede în creşterea debitului
în executarea instrucţiunilor.
Există şi sisteme cu două benzi de asamblare, ca în figura 2.3.

S2 S3 S4 S5
S1

S2 S3 S4 S5

Fig.2.3. Pipeline cu două benzi de asamblare.

Un astfel de sistem are o singură unitate de extragere a instrucţiunii


(S1) care extrage perechi de instrucţiuni şi le plasează pe cele două benzi.
Condiţia de a lucra în paralel este ca cele două instrucţiuni să nu îşi dispute
aceeaşi resursă şi să nu depindă una de rezultatul celeilalte. Această condiţie
este garantată fie de compilator , fie de un hard suplimentar dotat cu un
sistem de predicţie.
Arhitectura calculatoarelor 31
Calculatoarele Pentium I erau dotate cu două benzi de asamblare:
-bandă de asamblare U (U pipeline), bandă principală, care putea
executa orice instrucţiune;
-bandă de asamblare V (V pipeline), care putea executa doar
instrucţiunile simple în numere întregi şi o singură instrucţiune simplă în
virgulă mobilă.
Existau reguli destul de complicate pentru împerecherea
instrucţiunilor. Erau extrase câte două instrucţiuni şi dacă erau compatibile
erau executate, dacă nu, se executa doar prima pe banda U, a doua fiind
păstrată şi împerecheată cu cea care urma. În acest mod, s-a constatat că
Pentium I era de două ori mai rapid decât un 586 la aceeaşi frecvenţă.
c) Arhitecturi suprascalare
Pornind de la ideea benzilor de asamblare , s-a ajuns la concluzia că
este mai benefic de a avea o singură bandă de asamblare dar cu mai multe
unităţi funcţionale. O astfel de arhitectură se numeşte superscalară, termen
introdus de Agerwals şi Cocke în 1987. În figura 2.4. este dată o astfel de
arhitectură.
S4
UAL

UAL

S1 S2 S3 lLOAD S5

STORE

VIRGULĂ
FLOTANTĂ

Fig. 2.4. Procesor superscalat cu 5 unităţi funcţionale.

Ideea arhitecturii superscalare este că segmentul S3 poate lansa


instrucţiuni mult mai rapid decât le poate executa S4, deci, la o bandă
simplă există o gâtuire de timp între S3 şi S4. La arhitectura superscalară, se
32 Sorin Adrian Ciureanu
împarte unitatea de execuţie S4 în unităţi funcţionale pe tipuri de
instrucţiuni (de încărcare,LOAD, de memorie, STORE, de virgilă mobilă)

2.2.4.2. Paralelism la nivel de procesor

Banda de asamblare sau arhitectura superscalară nu cresc


performanţele în mod simţitor. Mult mai eficientă este mărirea numărului de
procesoare. Acest lucru se întâmplă în :
-maşinile SIMD, calculatoare vectoriale;
-maşinile MIMD, multiprocesoare;
-maşinile MIMD, multicalculatoare.

2.3. MODURI DE ADRESARE

După posibilitatea găsirii operanzilor, există mai multe moduri de


adresare:
-adresare imediată;
-adresare directă;
-adresare indirectă;
-adresare indexată.

a) Adresare imediată

Operandul se află chiar în câmpul instrucţiunii.

OPERAND Instrucţiune
Câmp operand
MOV R 20000
Se transferă valoarea 20000 în registrul R.

b) Adresare directă

Operandul se găseşte la o adresă care există în instrucţiune


Câmp adresă
ADRESĂ

OPERAND
MOV R 100
100 20000
Arhitectura calculatoarelor 33
În câmpul de adresă al instrucţiunii se află o adresă (100) la care
există operandul.

c) Adresare indirectă

În câmpul de adresă al instrucţiunii se află o adresă. La acea adresă


se află operandul. Numărul de indirectări depinde de fiecare calculator în
parte.
Câmp adresă
ADRESĂ
ADRESĂ OPERAND

MOV R 100
100 200
200 20000

La adresa 100 din câmpul instrucţiunii se află altă adresă, 200, iar la
această adresă se află operandul.

c) Adresare indexată

La adresarea indexată participă un registru numit registru INDEX.


Adresa operandului este:
Adresa operand = valoareCÂMP ADRESĂ + valoareREGISTRU INDEX
MOV R 100
RINDEX 600
100 700
Adresa calculată: 600 + 700 = D00
D00 20000

2.4. UNITATE CENTRALĂ CABLATĂ

Într-o UNITATE CENTRALĂ CABLATĂ toate transferurile se fac


în mod hard, de către o unitate de comandă. Părţile componente ale unei
astfel de UC, aleasă ca exemplu (figura 2.5.), sunt:
-registrul A, numit registru acumulator (32 biţi);
-registrul T, numit registrul tampon, cu rol de a păstra rezultatele
parţiale, (32 biţi);
34 Sorin Adrian Ciureanu

Bus local în UC

INDEX
Bus memorie
ADRMEM
U
M M
E
RI M
PC

A T
RG
RG 1

RG 2

Σ
SUMATO
RG 16

IC
Z

Fig. 2.5. Schema bloc a unei unităţi centrale cablate.

-registrul M, care are rolul de a reţine datele scrise sau citite din
unitatea de memorie (32 biţi);
-registrul RI, care are rolul de a stoca instrucţiunea pe toată durata
execuţiei sale;
-registrul PC, care are rolul de a reţine adresa următoarei instrucţiuni
din program;
-registrul ADRMEM, care adresează memoria, atât la scriere cât şi la
citire;
ADRMEM ADRMEM
Arhitectura calculatoarelor 35
M UM M UM
citire scriere
de asemenea, prin ADRMEM se adresează şi cele 16 registre generale (RG),
dar pe bus-ul local nu pe cel al memoriei; adresele de registre generale sunt
primele 16 adrese de memorie, adrese rezervate exclusiv pentru RG,
neputând fi utilizate ca adrese de memorie;
-!6 registre generale (RG) adresate pe bus-ul local al UC-ului;
-registrul INDEX , care participă la calculul adresei în mod indexat;
-4 indicatori de condiţie (ZC) cu următoarele semnificaţii:
Z arată două situaţii
Compararea între registrele A şi T
Z=1 → A=T
Z=0 → A≠T
Conţinutul acumulatorului este zero (Z=1)
S S=1 rezultat negativ (în A)
D D=1 depăşire
C C=1 transport
-BUS-ul local, un bus foarte rapid în interiorul UC-ului;
-BUS-ul de memurie, un bus mai lent care face legătura UC↔UM;
Convenţional, o adresă este o adresă de octet. Un cuvânt este pe 32
biţi, deci pe 4 octeţi.
Adresele din PC vor evolua cu 4, următoarea adresă de instrucţiune
fiind PC+4.
Adresele celor 16 registre generale sunt:
RG 1 0 RG 5 10 RG 9 20 RG 13 30
RG 2 4 RG 6 14 RG 10 24 RG 14 34
RG 3 8 RG 7 18 RG 11 28 RG 15 38
RG 4 C RG 8 1C RG 12 2C RG 16 3C

O instrucţiune are 32 biţi şi are următoarea structură:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

COD MS SURSA MD DESTINAŢIE

COD – 4 biţi – codul instrucţiunii (calculatorul are 16 instrucţiuni)


MS - modul operandului sursă – 2 biţi
00 – mod imediat
01 – mod direct
10 – mod indirect
36 Sorin Adrian Ciureanu
11 – mod indexat
SURSA – câmpul operandului SURSA – 12 biţi
MD – modul destinaţie
00 – mod imediat
01 – mod direct
10 – mod indirect
11 – mod indexat
DESTINAŢIE – câmpul operandului DESTINAŢIE – 12 biţi
Setul de instrucţiuni executate de acest calculator este de numai 16
instrucţiuni.
Tabelul 2.1. Lista de instrucţiuni a calculatorului
COD MNEMONIC ACŢIUNE
0000 ADD SURSĂ+DESTINAŢIE→DESTINAŢIE
0001 MOV SURSA→DESTINAŢIE
0010 CMP SURSA compară cu DESTINAŢIE→poziţionează Z
0011 C1 SURSA→complement……………DESTINAŢIE
0100 DDn SURSA deplasare dreapta cu n poziţii →DESTINAŢIE : n
0101 DSn SURSA deplasare stânga cu n poziţii → DESTINAŢIE : n
0110 SM2 SURSA suma modulo 2 DESTINAŢIE → DESTINAŢIE
0111 SAU SURSA sau DESTINAŢIE → DESTINAŢIE
1000 SI SURSA şi DESTINAŢIE → DESTINAŢIE
1001 INC SURSA + 1 → DESTINAŢIE
1010 DEC SURSA – 1 → DESTINAŢIE
1011 SWAP SURSA1-16 →DESTINAŢIE17-32 SURSA17-32 → DESTINAŢIE1-16
1100 SALTNEC SALT LA ADRESA DATĂ DE SURSĂ
1101 SALTCOND DACĂ Z=1 SALT LA ADRESA DIN SURSĂ, Z=0 PROGR
CONTINUĂ ÎN SECVENŢĂ
1110 DDCn SURSA deplasare circulară dreapta cu n poziţii→DESTINAŢIE n
1111 DSC n SURSA deplasare circulară stânga cu n poziţii→DESTINAŢIE n

Fiecare instrucţiune, pentru a fi executată, are o serie de comenzi


care, la UC cablată, sunt efectuate de către partea hardware a unităţii
centrale.
Orice instrucţiune are o parte comună care se numeşte ifetch
(instructionfetch) şi care este partea de aducere a instrucţiunii din memorie
în UC. Ea are următoarele comenzi:
PC → ADRMEM
ADRMEM
M ← UMEM
CITIRE

M → RI
PC → PC + 4
Arhitectura calculatoarelor 37
În continuare, să vedem care sunt comenzile pentru diferite
instrucţiuni care lucrează în diferite tipuri de adrese.
1)
COD 0001
MNEMONIC ADD
MS 00 - imediat
SURSA 02A
MD 00 - imediat
DESTINAŢIA - 05B
Adresa instrucţiunii 100
Instrucţiunea este
000A805B
Comenzi:
ifetch: PC → ADRMEM 100
ADRMEM
M ← UMEM 000A805B
CITIRE

M → RI 000A805B
PC → PC + 4 104

RI7-18 → A 0000 002A


RI21-32 → T 0000 005B
A+T → A 0000 0085
A → RI 0000 0085

2)
COD 0001
MNEMONIC MOV R5 ABCDEF01
MS 01 - direct
SURSA RG5 10
MD 01 - direct
DESTINAŢIA - RG16 3C
Adresa instrucţiunii 200
Instrucţiunea este 0404103C
Comenzi:
ifetch: PC → ADRMEM 200
ADRMEM
M ← UMEM 0404103C
M → RI 0404103C
38 Sorin Adrian Ciureanu
PC → PC + 4 204
RI7-18 → ADRMEM 10
ADRMEM
M ← RG5 ABCDEF01
RI21-32 → ADRMEM 3C
ADRMEM
M ← RG16 ABCDEF01
3)
COD 0010
MNEMONIC CMP
MS 10 - indirect
SURSA 800 800 F00
MD 10 - indirect 900 E00
DESTINAŢIA - 900 F00 ABCDEF01
Adresa instrucţiunii 200 E00 ABCDEF01
Instrucţiunea este 1A002900
Comenzi:
ifetch: PC → ADRMEM 200
ADRMEM
M ← UMEM 1A002900
M → RI 1A002900
PC → PC + 4 204

RI7-18 → ADRMEM 800


ADRMEM
M ← 800 F00
M → ADRMEM F00
ADRMEM
M ← F00 ABCDEF01
M → A ABCDEF01
RI21-32 → ADRMEM 900
ADRMEM
M ← 900 E00
M → ADRMEM E00
ADRMEM
M ← E00 ABCDEF01
M → T ABCDEF01
A compara cu T → pozit lui Z=1
prm Σ
Arhitectura calculatoarelor 39

2.5. UNITATE CENTRALĂ CU MICROPROCESOR

Microprocesorul este o unitate centrală de prelucrare a datelor


(UCP), realizată într-un singur circuit integrat. Vom exemplifica o
arhitectură de microprocesor pe INTEL 8086, primul microprocesor pe 16
biţi.

2.5.1. Schema generală a unui microprocesor 8086

Microprocesorul 8086 are două componente:


-Unitatea de execuţie (UE);
-Unitatea de interfaţă cu bus-urile(UI)
Structura acestui microprocesor este de tip pipeline, adică este o
structură în bandă de asamblare cu două segmente: UE şi UI.
UE decodifică instrucţiunile numerice, elaborează comenzi interne
pentru efectuarea calculelor şi comenzi externe către cea de-a doua unitate.
UE conţine 8 locaţii de memorie internă numite registre de uz general.
UI calculează adresele de memorie şi de intrare/ieşire, transferă
datele între UE şi memorie, între UE şi I/O şi transferă către UE codurile
numerice ale instrucţiunilor citite în memorie.
Cele două segmente efectuează autonom secvenţe de operaţii proprii,
transferându-şi în acelaşi timp informaţii. Secvenţele de operaţii efectuate
de cele două unităţi ale microprocesorului pentru a executa instrucţiunile se
numesc cicluri de instrucţiune, pentru UE şi cicluri maşină de bus, pentru
UI.
a)Structura UE

UE are componentele:
-Unitatea aritmetică-logică (UAL), în engleză Arithmetic-Logic
Unity (ALU), care execută operaţii aritmetice şi logice, deplasări şi rotaţii.
-Registrele temporare (RT), care preiau operanzii de pe bus-ul intern
şi îi oferă unităţii UAL. Împreună cu UAL formează un automat.
-Registrul de flaguri, F, care conţine indicatorii de stare ALU ai
ultimei operaţii; registrul este actualizat de către ALU.
40 Sorin Adrian Ciureanu
-Blocul de comandă, care decodifică codul instrucţiunii curente,
preluată din coada de aşteptare Q, execută operaţia şi elaborează comenzi
externe pentru UI.
UE este complet separată de exterior, toate sarcinile privind
transferul cu exteriorul revenind UI-ului.
20biţi

16 biţi
8biţi 8biţi
Σ
Ax
AH AL
Bx Registre de offset
BH BL
date
Cx CH CL CS

Dx DH DL DS

DI ES

SJ Registre de SS
adrese
BP IP

SP

Bus intern 4biţi


A16.-19
Inter- AD0-15
faţă BD0-15
RT Bus-uri
BC
Registre temporare

Decodificare
operaţie
ALU Comandă Coadă de aşteptare
Instrucţiuni (Q)
F

Registru
flaguri

UE UI

Fig. 2.6. Arhitectura internă a microprocesorului 8086.

b)Structura UI
Arhitectura calculatoarelor 41

UI conţine componentele date în continuare.


1)Blocul de interfaţă între bus-uri, care face transferurile UE.
Are următoarele cicluri:
-cicluri de scriere memorie sau I/E (UC→MEM , I/E)
-cicluri de citire memorie sau I/E (UC←MEM , I/E)
2)Coada de aşteptare a codurilor de instrucţiuni (Q), care:
-este încărcată de către UI cu coduri de instrucţiune, numai în
momentele de timp când UE nu are transferuri de date;
-este inactivă dacă este plină sau se cer transferuri pe bus;
-este ştearsă complet dacă instrucţiunea este de salt.
3)Blocul de calcul al adreselor fizice, care include:
-registrele de segment ce conţin componenta segment a adresei
locaţiei de memorie accesată;
-registrul indicator al instrucţiunii curente (IP) cu componenta offset
a adresei instrucţiunii curente;
-unitate de deplasare-adunare pentru calculul adresei fizice din
componentele segment şi offset .

2.5.2. Registrele microprocesorului

Registrele microprocesorului 8086 au o capacitate de 16 biţi şi pot fi


clasificate în patru grupe, în funcţie de rolul pe care îl au în execuţia
instrucţiunilor.
-Registre generale.
-Registre segment.
-Registru indicator al adresei instrucţiunii curente IP.
-Registru de flaguri,F, şi registrul IP.

2.5.2.1. Registre generale

Registrele generale se impart în două seturi de registre:


-Registre de date: Ax,Bx,Cx,Dx.
-Registre de adresare: SP, BP, SI, DI.

a)Registre de date

Există patru registre de date de 16 biţi:


Ax-acumulator;
42 Sorin Adrian Ciureanu
Bx-baza în adresarea datelor;
Cx-contor;
Dx-date.
Fiecare din aceste registre pot fi împărţite în două registre de 8 biţi:
16 biţi 8 biţi 8 biţi
Ax AH AL
Bx BH BL
Cx CH CL
Dx DH DL
Registrele de date sunt utilizate în majoritatea instrucţiunilor
aritmetice şi logice. Majoritatea instrucţiunilor aritmetice utilizează în
acelaşi mod toate registrele. Există şi instrucţiuni aritmetice pentru care
anumite registre generale au întrebuinţări speciale. De exemplu:
Ax - operaţii de intrare/ieşire pe 16 biţi, înmulţiri şi împărţiri pe 16
biţi;
AL - operaţii de intrare/ieşire pe 8 biţi, translaţii, aritmetice BCD,
înmulţiri şi împărţiri pe 8 biţi;
AH – înmulţiri şi împărţiri pe 8 biţi;
Bx – operaţii cu memoria, adresare indirectă, translaţii;
Cx – operaţii cu şiruri, bucle program;
CL – operaţii de deplasare sau rotaţie cu mai mult de o poziţie;
Dx – operaţii de intrare/ieşire, adresare indirectă, înmulţiri şi
împărţiri pe 16 biţi.

b)Registre de adresare

Sunt de două tipuri:


1)Registre indicatoare de adresă în stivă (pointer):
-SP (Stack Pointer), care conţine adresa curentă a vârfului stivei;
-BP (Base Pointer), care conţine adresa bază pentru adresarea
indirectă a stivei.
2)Registre indicatoare de adrese pentru şiruri (index):
-DI (Destination Index)–conţine adresa curentă pentru şirul
destinaţie;
-SI (Source Index)–conţine adresa curentă pentru şirul sursei.
Registrele de adresare pot fi utilizate şi pentru anumite instrucţiuni
aritmetico-logice.
Registrele pointer conţin componente offset ale adreselor de stivă
(adresele relative în segmentul de stivă curent) .
Arhitectura calculatoarelor 43
Registrul BP poate fi utilizat şi pentru adresarea în cadrul altor
segmente.
Registrele index conţin componente offset ale adreselor variabilelor
(adrese relative în segmentul de date curent). Ele sunt utilizate ca registre de
adresare şi instrucţiunile de transfer sau prelucrări de şiruri de caractere. În
acest ultim caz registrul SI conţine adresa relativă curentă a şirului destinaţie
în cadrul segmentului de date curent (DS), iar DI conţine adresa relativă
curentă a şirului sursă în cadrul segmentului de date suplimentar (ES).

2.5.2.2. Registrele segment

Spaţiul de memorie pe care poate să-l adreseze un microprocesor


8086 este împărţit în segmente logice de lungime 64KO. Există patru
registre segment:
-CS (Cod Segment), care conţine componenta segment a adreselor
codului (instrucţiunile programului);
-DS (Data Segment), care conţine componenta segment a adreselor
variabilelor (segment date curent);
-ES (Extra Segment), care conţine componenta segment a adreselor
variabilelor (segment suplimentar);
-SS (Stack Segment), care conţine componenta segment a adreselor
datelor din segmentul stivă.
Instrucţiunea care urmează să fie executată se găseşte în segmentul a
cărui adresă se află în registrul CS, la adresa relativă conţinută în IP.
Conţinutul registrului DS defineşte segmentul de date curent. Toate
referirile la datele din memorie, cu excepţia celor prin registrele BP şiSP sau
registrul DI în instrucţiunile pentru şiruri, utilizează în mod implicit
segmentul referit de DS.
Conţinutul registrul ES defineşte segmentul de date suplimentar.
Referirile la date în instrucţiunile pentru şiruri utilizează în mod implicit
segmentul referit de ES.
Conţinutul registrului SS defineşte segmentul curent al stivei. Toate
referirile la datele din memorie prin registrele BP şi SP utilizează în mod
implicit segmentul referit de registrul SS.

2.5.2.3. Registrele IP şi F

Registrul indicator al adresei curente , IP (Instrucţion pointer), este


un registru de 16 biţi care conţine componenta ofset a adresei instrucţiunii în
segmentul de cod curent.
44 Sorin Adrian Ciureanu
Programele nu au acces direct la IP, dar există instrucţiuni care îl
modifică şi îl încarcă sau îl descarcă prin stivă.
Registrul de flaguri F cuprinde biţii indicatori de stare şi control,
numiţi şi flaguri. Aceste flaguri sunt utilizate pentru a memora informaţii
referitoare la rezultatul unor operaţii aritmetice şi logice (OF, SF, ZF, AF,
PF, CF) şi pentru memorarea unor informaţii de control al
microprocesorului (TF, DF, IF). Semnificaţiile acestor flaguri sunt date în
continuare.
-CF (Carry Flag) reflectă transportul în exterior al bitului cel mai
semnificativ al rezultatului operaţiilor aritmetice. CF=1 înseamnă un
transport la operaţia de adunare. CF mai este modificat la operaţiile de
rotaţie şi deplasare.
-PF (Parity Plag) este indicator de paritate, el fiind 1 dacă rezultatul
are paritate pară; de asemenea acest indicator este utilizat şi de instrucţiunile
de aritmetică zecimală.
-AF (Auxiliary Cary Flag) este indicator de transport auxiliar şi este
1 dacă a fost transport de la jumătatea de octet inferioară la jumătatea de
octet superioară; este utilizat la instrucţiunile de aritmetică zecimală;. -ZF
(Zero Flag) este indicatorul de zero, având valoarea 1 dacă rezultatul
operaţiei a fost zero;
-SF (Sign Flag), indicatorul de semn, este 1 dacă cel mai
semnificativ bit al rezultatului este 1, adică, în reprezentarea numerelor în
complement faţă de 2, rezultatul este negativ.
-OF (Overflow Flag), indicatorul de depăşire aritmetică, a gamei de
valori posibil de reprezentat, este 1 dacă dimensiunea rezultatului depăşeşte
capacitatea locaţiei memoriei.
-IF (Interrupt Flag), indicatorul de validare a întreruperilor, este 1
dacă se pot valida întreruperile externe mascabile şi 0 dacă întreruperile
externe sunt invalidate. De remarcat că acest flag nu afectează întreruperile
interne sau pe cele externe nemascabile.
DF (Direction Flag) este utilizat de instrucţiunile pe şiruri de
caractere şi specifică direcţia de parcurgere a lor:
0 – de la adrese mici spre adrese mari;
1 – de la adrese mari spre adrese mici.
-TF (Trace Flag) este utilizat pentru controlul execuţiei
instrucţiunilor în regim pas cu pas în scopul depănării programelor. Dacă
este 1, după execuţia fiecărei instrucţiuni se va genera un semnal de
întreruperi intern.

2.5.3. Adresarea memoriei. Segmentarea memoriei.


Arhitectura calculatoarelor 45

Intel 8086 poate adresa un spaţiu de memorie din memoria


principală (MP) de 1 Moctet. Conform convenţiei INTEL, datele formate
din mai mulţi octeţi sunt memorate cu octetul cel mai semnificativ la locaţia
de adresă cea mai mare, adică octetul cel mai puţin semnificativ este
memorat la adresa cea mai mică.
Intel 8086 vede memoria principală organizată ca un grup de
segmente. Un segment este un bloc de memorie de dimensiune 64 Kocteţi.
Fiecare segment poate fi accesat, în scriere sau în citire, în mod
independent.
Procesoarele pot lucra în două moduri: modul real şi modul protejat.
În modul real procesoarele adresează memoria principală printr-o
adresă fizică directă.
În modul protejat, procesoarele adresează memoria principală ca pe
o memorie virtuală. O adresă virtuală este, de fapt, un nume pentru o locaţie
de memorie pe care procesorul o translatează într-o adresă fizică
corespunzătoare. O adresă virtuală are două componente: o adresă de bază
(segment) şi un deplasament (ofset). Notaţia consacrată pentru adresa logică
este:
Segment : offset
Trecerea de la adresa logică la adresa fizică se face astfel:
Adresa logică → adresă fizică
Adresă fizică = segment x 10(+) + offset
Înmulţirea cu zece a unui număr în …. înseamnă deplasarea spre
stânga cu o poziţie. Exemple:
1) adresa logică ABC4 : EFB8
adresa fizică = ABC40 + EFB8 = BACF8
2) adresa logică AB00 : CD00
adresa fizică = AB000 + CD00 = B7D00
Această adresă fizică este calculată în UI în funcţie de modul de
adresare.
Structura pe segmente a memoriei face posibilă scrierea unor
programe care sunt independente de poziţia lor în memorie, adică sunt
relocabile dinamic. Pentru ca un program să fie relocabil trebuie să fie scris
astfel încât să nu altereze registrele sale segment şi să nu facă transferuri
directe de la o locaţie în afara segmentului de cod. Aceasta permite
programului să fie mutat oriunde în memoria disponibilă, atâta timp cât
registrele segment sunt actualizate cu noua adresă de bază.

2.5.4. Formatul instrucţiunii


46 Sorin Adrian Ciureanu

Instrucţiunile, codificate în binar, pot ocupa în memorie de la 1 la 6


octeţi. Codul instrucţiunii este format din:
-codul operaţiei care ocupă 1 sau 2 octeţi şi care specifică:
-tipul operaţiei;
-tipul operanzilor (8 sau 16 biţi);
-sursa operanzilor (internă sau externă);
-destinaţia rezultatelor operaţiilor ALU;
-modul de calcul al EA;
-operanzii de tip imediat: date şi adrese.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 OFFSET
COD
OPERAŢIE D W MOD REG R/M

Fig.2.7. Formatul instrucţiunii cu cod pe un octet.

Semnificaţiile câmpurilor din figura 2.7. sunt date în continuare.


D – destinaţie. Specifică direcţia rezultatului în combinaţie cu
câmpurile MOD şi R/M.
W – word. Specifică tipul de transfer. W = 0 înseamnă transfer pe un
octet iar W = 1, transfer pe 2 octeţi (1 cuvânt).
MOD este o codificare a modului de calcul al adresei efective sau
lungimea deplasamentului. Este utilizat pentru a determina adresa efectivă
împreună cu câmpul r/m.
MOD = 1 1, câmpul r/m este un câmp de registru cu
următoarele semnificaţii:

registru
r/m (w=0) (w=1)
cuvânt octet
000 Ax AL
001 Cx CL
010 Dx DL
011 Bx BL
100 SP AH
101 BP CH
110 SI DH
111 DI BH
Arhitectura calculatoarelor 47
MOD = 00, câmpul deplasament nu este prezent
MOD = 01, câmpul deplasament are 8 biţi (low)
MOD = 10, câmpul deplasament are 16 biţi.

R/M conţine:
-adresa unui registru (pentru MOD=11)
-o codificare utilizată pentru calculul adresei efective.
R/M Adresa efectivă
000 BX + SI + deplasament
001 BX + DI + deplasament
010 BP + SI + deplasament
011 BP + DI + deplasament
100 SI + deplasament
101 DI + deplasament
110 BP + deplasament
111 BP + deplasament
Unitatea de execuţie (UE) are acces la operanziiimediaţi şi de
registre; când este nevoie de un operand de memorie, se transmite la UI
deplasamentul acestuia şi registrul de segment IC determină adresa fizică a
operandului în funcţie de modul de adresare.

2.5.5. Moduri de adresare

Există, în principal, cinci moduri de adresare.

2.5.5.1. Adresare directă

Adresa efectivă (AE) a operandului este reprezentată de


deplasamentul conţinut în instrucţiune.

deplasament

MEMORIE

AE

+ AF
OPERAND

AS
48 Sorin Adrian Ciureanu

Fig. 2.8 Adresare directă. AE, adresă efectivă. AS, adresă


segment. AF, adresă fizică.

2.5.5.2. Adresare indirectă prin registre

În câmpul calculat nu se află operandul, ca la adresarea directă, ci o


altă adresă de operand.

Cod operaţie Deplasament

BX AE Memorie
BP

SI AF OPERAND
+
DI

AS

Fig. 2.8. Adresare indirectă prin registre.

Sintaxa instrucţiunilor în limbajul de asamblare utilizează pentru


adresarea indirectă operatorul [ ]. De exemplu: mov ax, [bx], se
deplasează la adresa conţinută de bx.

2.5.5.3. Adresare indexată

La calculul adresei participă şi un registru index (SI sau DI în cazul


procesoarelor 8086).
7 07 015

COD OP MOD R/M DEPLASAMENT

SI
AE
DI +
Memorie

AF OPERAND
+

AS
Arhitectura calculatoarelor 49

Fig. 2.9. Adresare indexată


Adresa se obţine din suma registrului index şi deplasamentul din
instrucţiune.
Acest mod de indexare este utilizat, în cele mai multe cazuri, pentru
referirea elementelor unui vector. Deplasamentul marchează începutul
vectorului iar registrul index selectează elementul prin poziţia sa relativă în
cadrul vectorului. Deoarece toate elementele vectorului sunt de aceeaşi
lungime, prin operaţii aritmetice elementare asupra registrului index se va
selecta orice element. De aceea se poate specifica un factor de scală
(1,2,3,4) pentru index, pentru a referi vectori cu componente de lungime
fixă de 1,2,3,4 octeţi.
Memorie

Adresare efectivă V[6 ]

V[5 ]

Deplasament V[4 ]

V[3 ]

V[2 ]
+
V[1 ]

V[0 ]
Registru index

Fig. 2.10. Referirea vectorilor de lungime fixă în adresarea


indexată.

2.5.5.4. Adresare imediată


50 Sorin Adrian Ciureanu
În acest caz operandul se află chiar în instrucţiune.

OPERAND

AE

Fig. 2.11. Adresare imediată.

2.5.5.5. Adresarea porturilor de intrare/ieşire

Porturile de intrare/ieşire se adresează unde aceeaşi adresă se găseşte


în instrucţiune, pe 8 biţi, cu 256 de adrese.

COD OP SI AE sursă

DI AE destinaţie

Fig. 2 11. Adresarea porturilor intrare/ieşire

2.5.6. Procesoare 286

Faţă de procesoarele 8086, procesoarele 286 au o serie de modificări


importante.
a)Se introduc două moduri de lucru:
-modul KERNEL;
-modul USER.
În modul KERNEL, care este un mod protejat, se pot executa toate
instrucţiunile procesorului, inclusiv cele privilegiate. Este un mod specific
sistemului de operare.
În modul USER nu toate instrucţiunile se pot executa. Este un mod
specific aplicaţiilor utilizator.
b) Spectrul de adrese creşte la 16MB , acest lucru realizându-se prin
adăugarea a patru linii de adrese. În acest fel numărul de linii de adrese este
14.
16 MB = 24.210 B = 214 B
nr. linii de adrese = log 2 214 = 14
Arhitectura calculatoarelor 51
c) Se îmbunătăţeşte tehnica pipeline. În varianta 286, procesorul are
patru unităţi funcţionale:
-unitatea de interfaţă cu magistrala;
-unitatea de instrucţiuni;
-unitatea de execuţie;
-unitatea de adresare.
Unitatea de interfaţă cu magistrala realizează toate operaţiile de
transfer pe magistrală, adică extragerea instrucţiunilor şi citirea/scrierea
operanzilor. Instrucţiunile sunt citite în avans şi sunt transferate către
unitatea de instrucţiuni.
Unitatea de instrucţiuni decodifică instrucţiunile şi le plasează într-o
coadă de instrucţiuni decodificate.
Unitatea de execuţie preia aceste instrucţiuni şi le execută, în funcţie
de codul fiecărei instrucţiuni.
Unitatea de adresare calculează adresele de memorie în funcţie de
diferitele moduri de adresare. Adresele de memorie sunt transmise către
unitatea de interfaţă cu magistrala pentru efectuarea transferurilor.

2.5.7. Procesoare 386

La aceste procesoare s-au introdus unele îmbunătăţiri.


a) Arhitectura de bază este extinsă la 32 biţi. Atât magistrala cât şi
registrele interne sunt de 32 biţi.
b) Se poate adresa o memorie de 46 B, utilizându-se în acest scop 32
linii de adresă.
46 B = 22.230 B = 232 B
nr linii de adresă = log 2 232 =32
c) S-a introdus mecanismul de paginare în microprocesor. Cipul
MMU (Memory Management Unity), care la 8086 şi 286 era separat de
procesor, a fost plasat în interiorul microprocesorului.
d) Tehnica pipeline este îmbunătăţită cu două module: unitate de
paginare şi unitatea de preîncărcare a instrucţiunilor.

Unitatea de segmentare Unitatea de paginare

Unitate de execuţie Unitate de interfaţă

Unitate de Unitate de preîncărcare a


decodificare instrucţiunilor
52 Sorin Adrian Ciureanu

Fig. 2.12. Schema pipeline pentru procesorul 386.

2.5.8. Procesoare 486

La procesoarele 486 s-au adus următoarele îmbunătăţiri:


a) S-a înglobat în procesor aşa numitul coprocesor matematic, pentru
calcului în virgulă mobilă.
b) S-a înglobat memorie cache de level 1 de 8kB şi, de asemenea, o
unitate de management a memoriei Cache.
c) Structura pipeline a fost extinsă prin divizarea unităţii de extragere
şi execuţie a instrucţiunilor în cinci nivele. Fiecare nivel poate să prelucreze
o altă instrucţiune, traversarea unui nivel făcându-se într-o perioadă de ceas.
d) Pentru raţionalizarea consumului de energie s-a introdus un
mecanism de management ce permite comutarea procesorului în regim de
consum redus.

Unitate de segmentare Unitate de programare

Unitate
Procesor virgulă
de
fixă Unitate
interfaţă cu
cache
magistrala
Procesor virgulă
mobilă

Decodificare instrucţiuni Preîncărcare instrucţiuni

Fig. 2.13. Schema bloc a procesorului 486.

2.5.9. Procesoare PENTIUM

Familia de procesoare PENTIUM se bazează pe o arhitectură


pipeline superscalară, ceea ce înseamnă că utilizează mai multe linii de
prelucrare pipeline autonome ce lucrează în paralel. La varianta de bază
există două linii de asamblare (liniile U şi V). Versiunile mai noi au trei linii
de asamblare.
Arhitectura calculatoarelor 53
Controlorul de întreruperi APIC (Advanced Programable Interrupt
Controller) a fost inclus în structura microprocesorului.
În ceea ce priveşte lungimea cuvântului şi a magistralelor , intern
procesorul a rămas pe 32 biţi şi magistrala principală externă are 64 biţi.
Anumite magistrale interne, însă, au 128 sau chiar 256 biţi.
S-a introdus un mecanism de protecţie a salturilor care se bazează pe
memorarea ultimelor salturi efectuate în cadrul secvenţei de program.
Citirea în avans a instrucţiunilor şi introducerea lor în linia de prelucrare se
face pe baza probabilităţii de realizare a unor salturi.

2.5.9.1. Microarhitectura familiei de procesoare PENTIUM

UNITATE DE UNITATE DE UNITATE


EXTRAGERE ŞI DISPECERIZARE DE
DECODIFICARE ŞI RETRAGERE
INSTRCŢIUNI EXECUŢIE

REZERVOR
DE
INSTRUCŢIUNI

Fig. 2.14. Schema de principiu a arhitecturii PENTIUM.

Microarhitectura specifică procesoarelor de tip PENTIUM PRO,


PENTIUM II şi PENTIUM III conţine trei unităţi de tip pipeline care
comunică prin intermediul unui REZERVOR DE INSTRUCŢIUNI :
-unitatea de extragere şi decodificare a instrucţiunii care se ocupă de
extragerea în avans a instrucţiunilor şi transformarea lor în secvenţe de
microoperaţii;
-unitatea de dispecerizare şi execuţie care selectează microoperaţiile
ce pot fi executate şi le distribuie pentru execuţie;
-unitate de retragere care asamblează rezultatele parţiale în ordinea
prestabilită de program.
Această arhitectură se bazează pe execuţia instrucţiunilor într-o
ordine dictată de disponibilităţile datelor şi a unităţilor de execuţie. În acest
sens unitatea de extragere şi decodificare ca şi unitatea de retragere sunt
54 Sorin Adrian Ciureanu
unităţi „in order”, adică unităţi care respectă ordinea de prelucrare a
instrucţiunilor prestabilită în program. Unitatea de dispecerizare şi execuţie
este o unitate „aut of order” care nu respectă această ordine. Datorită unită-ii
de retragere, care reordonează rezultatele parţiale pe baza ordinii iniţiale, se
elimină multe din situaţiile de blocare temporară a liniei de prelucrare
pipeline cauzate de aşteptările provocate de transferurile externe de date.
La procesoarele PENTIUM, odată cu apariţia lui PENTIUM PRO, se
introduce conceptul de execuţie dinamică. Aceasta este o combinaţie de trei
tehnici:
-predicţia salturilor;
-execuţie speculativă;
-analiza fluxului de date.
Cele trei tehnici soluţionează majoritatea situaţiilor de blocare a
liniilor de prelucrare şi procesorul poate să lucreze la capacitatea maximă de
3 instrucţiuni într-o perioadă de tact. La aceasta mai contribuie şi existenţa
mai multor unităţi de execuţie care lucrează în paralel.
Această arhitectură elimină în mare parte neajunsurile unei
arhitecturi pipeline clasice prin evitarea situaţiilor de întârziere a liniei
pipeline. Întârzierea poate să survină din diverse cauze:
-linia este golită în urma unei instrucţiuni de salt;
-operanzii solicitaţi nu sunt disponibili;
-nu există o unitate de execuţie.
Prezenţa rezervorului de instrucţiuni oferă unităţii de dispecerizare şi
execuţie o anumită perspectivă ce permite optimizarea ordinii de execuţie a
instrucţiunilor astfel încât să se reducă timpii de aşteptare.

2.5.9.2. Unitatea de extragere şi decodificare a instrucţiunilor


Dela BIU (Basic Interface Unit)

L1 I CACHE NEXT IP

Bloc de memorie a
adresei de salt

Secvenţîator de
microinstrucţiuni
DECODIFICARE

DE
Alocator de registre
alias
INSTRUCŢIUNI
Arhitectura calculatoarelor 55

Spre rezervorul de microinstrucţiuni

Fig. 2.15. Unitatea de extragere şi decodificare a instrucţiunilor.

Instrucţiunile se extrag din Cache-ul de instrucţiuni la nivelul 1(L1).


Adresarea instrucţiunilor se face cu ajutorul modului Next IP care foloseşte
în acest scop informaţiile conţinute în blocul de memorare a ultimelor
adrese de salt. Astfel vor fi extrase secvenţele de instrucţiuni care au
probabilitatea cea mai mare de a fi executate în vectorul apropiat.
Pe fiecare perioadă de tact se extrage câte o linie de memorare cache
de 32 biţi. Se marchează începutul fiecărei instrucţiuni, după care extras este
transmis către cele trei modul de decodificare independente. Există două
module de decodificare simple şi unul pentru instrucţiunile complexe.
În urma procesului de decodificare, o instrucţiune este transformată
într-o secvenţă de microoperaţii triadice. O operaţie triadică este o operaţie
elementară care are maximum trei operanzi: doi operanzi sursă şi unul
rezultat.
Instrucţiunile simple se decodifică în unu până la patru
microoperaţii. Instrucţiunile complexe sunt decodificate în secvenţe
predefinite de microoperaţii păstrate în modulul de secvenţiere a
microoperaţiilor. Decodificatorul poate genera până la 6 microoperaţii pe o
perioadă de tact.
Deoarece sunt utilizate un număr restrâns de registre interne, pot să
apară dependenţe false între variabilele care utilizează temporar acelaşi
registru intern. Aceste dependenţe conduc la întârzieri în linia de prelucrare
pipeline. Pentru a evita astfel de situaţii, unitatea de decodificre alocă
microoperaţiilor un registru alias dintr-un set de registre invizibile pentru
programator. Registrele alias pot fi utilizate în operaţii aritmetice şi logice.
Fiecărei microoperaţii îi sunt ataşaţi biţi de stare, necesari în procesul de
execuţie.
Microoperaţiile sunt plasate în rezervorul de instrucţiuni, rezervor
care face legătura între cele trei unităţi independente de prelucrare din
această arhitectură superscalară.
56 Sorin Adrian Ciureanu
2.5.9.3. Unitate de dispecerizare şi execuţie

În Unitatea de dispecerizare şi execuţie există diferite module:


UEI - unitate de execuţie pentru numere întregi;
UEF – unitate de execuţie pentru numere în virgula flotantă;
UE-MMX – unitate de execuţie a operaţiilor MMX;
UES – unitate de execuţie a salturilor;
UGA – unitate de generare a adreselor pentru citirea operanzilor şi
scrierea rezultatelor.
Staţie de rezervare

Staţie de
rezervare UE-
UEI UEF
MMX
Port 0

UE-
UEI UES
Rezervor MMX
i Port 1
de
instrucţiuni

UGA i Citire operanzi


Port 2

UGA Scriere operanzi


Port 3, 4

Fig.2.16. Unitate de dispecerizare şi execuţie.

Staţia de rezervare extrage din rezervorul de instrucţiuni


microoperaţii ale căror condiţii de execuţie sunt îndeplinite şi le alocă în
funcţie de specificul operaţiei. O microoperaţie este executabilă dacă
operanzii cu care lucrează sunt disponibili şi dacă unitatea de execuţie pe
care o solicită este liberă. Pentru a determina disponibilitatea operanzilor se
foloseşte o metodă de analiză a fluxului de date, în urma căreia se generează
un graf al dependenţelor de ordine existente între mai multe operaţii care
utilizează aceleaşi variabile. Dacă mai multe microoperaţii sunt simultan
disponibile, atunci se foloseşte un algoritm de planificare de tip FIFO care
favorizează execuţia în secvenţă a microoperaţiilor.
Arhitectura calculatoarelor 57
Staţia de rezervare dispune de 5 porturi prin care poate să comunice
cu unităţile de execuţie. Pot fi executate simultan maximum 5 microoperaţii.
Sunt disponibile mai multe unităţi de execuţie care pot să lucreze în paralel:
-două unităţi pentru numere întregi:
- o unitate pentru numere în virgulă mobilă;
-o unitate de execuţie a salturilor;
-două unităţi pentru MMX;
-două unităţi pentru scrierea şi citirea operanzilor.
Microoperaţiile executate, împreună cu rezultatele obţinute, sunt
plasate din nou în rezervorul de instrucţiuni.
Pentru instrucţiunile de salt, se verifică dacă previziunea cu privire la
adresa de salt a fost corectă. În caz contrar, unităţile de execuţie a salturilor
invalidează toate operaţiile care urmează după instrucţiunea de salt, spre a fi
eliminate din rezervor.

2.5.9.4. Unitatea de retragere

D Cache

Staţie de UIM (unitate de interfaţă cu


rezervare memoria)

FER (Fişierul de registre de


retragere)

Rezervor de
instrucţiuni

Fig. 2.17. Unitate de retragere.

Unitatea de retragere are rolul de a restabili ordinea iniţială (aceea a


programului iniţial) între rezultatele parţiale generate în urma executării
microoperaţiilor. În acest scop se extrag din rezervorul de instrucţiuni
microoperaţiile a căror execuţie este terminată şi care urmează în ordinea
secvenţială de execuţie. Rezultatele păstrate în registrele alias sunt
transferate în registrele interne sau în memorie. Unitatea de retragere poate
extrage trei microoperaţii într-o perioadă de tact.
58 Sorin Adrian Ciureanu

2.6. UNITATE CENTRALĂ DE TIP RISC

2.6.1. CISC versus RISC

Din punct de vedere al complexităţii instrucţiunilor, procesoarele pot


fi de două tipuri:
-CISC (Complex Intruction Set Computer);
-RISC (Reduced Instruction Set Computer).
Modelele CISC sunt caracterizate printr-un set foarte mare de
instrucţiuni cod maşină, prin formate de instrucţiuni de lungime variabilă,
şi prin numeroase moduri de adresare foarte sofisticate. Desigur că această
complexitate arhitecturală are repercursiuni negative asupra performanţelor
computerului. Arhitecturile CISC au fost concepute începând cu anii 1960,
pe baza datelor tehnologice din epocă . Atunci compilatoarele nu puteau
utiliza bine registrele, microinstrucţiunile se executau mai rapid decât
instrucţiunile (pentru că se situau în memorii cu semiconductori în timp ce
instrucţiunile se situau in memorii toroidale), memoria centrală era de
dimensiuni limitate etc.
Modelele RISC încearcă să corecteze neajunsurile modelelor CISC
şi, de aceea, sunt caracterizate printr-o simplitate şi eficienţă mărite. Ideea
de bază este utilizarea unui număr redus de instrucţiuni, cu mult mai mic
decât în modelele CISC, instrucţiuni care sunt cele mai frecvent utilizate şi
care conferă o mai mare flexibilitate în funcţionare. Primele
microprocesoare RISC au fost proiectate la Universităţile de Stanford
(coordonator profesorul John Hennessy) şi Berkeley (cooordonator
profesorul John Patterson, cel care a şi propus denumirea de RISC), în 1981.
Caracteristicile de bază ale modelului RISC sunt următoarele:
-timp de proiectare şi erori de construcţie mai reduse decât la CISC;
-unitate de comandă hardware cablată, fără microprogramare, ceea
ce măreşte rata de execuţie a instrucţiunilor;
-utilizarea tehnicilor de procesare pipeline;
-utilizarea instrucţiunilor LOAD/STORE cu referire la memorie,
ceea ce înseamnă că nu mai există instrucţiuni cu operanzi în memorie ci
numai în registrele generale;
-există un format fix al instrucţiunilor, codificate pe un singur cuvânt
de 32 biţi sau, mai recent, pe 64 biţi;
-datorită unor particularităţi ale procesării pipeline şi anume datorită,
mai ales, hazardurilor pe care aceasta le implică, apare necesitatea unor
Arhitectura calculatoarelor 59
compilatoare optimizate (schedulere), cu rolul de a reorganiza programul
sursă pentru a putea fi procesat optimal din punct de vedere al timpului de
execuţie;
-numărul de registre generale este substanţial mai mare decât la
arhitectura CISC, deoarece la arhitectura RISC se lucrează cu „ferestre”
(register WINDOWS); numărul mare de registre generale este util şi pentru
mărimea spaţiului intern de procesare, tratarea optimizată a evenimentelor
de excepţie şi modelul ortogonal de programare.
Microprocesoarele RISC scalare reprezintă modele cu adevărat
evolutive în istoria tehnicii de calcul. Primul articol despre modelele RISC ,
semnat de David Petterson şi Carlo Sequin, a apărut în 1981, şi numai peste
6-7 ani toate marile firme producătoare de hardware realizau
microprocesoare RISC scalare, în scopuri comerciale sau de cercetare.
Performanţa acestor microprocesoare creşte cu 75% în fiecare an.

2.6.2. Setul de instrucţiuni

În proiectarea setului de instrucţiuni aferent unui microprocesor


RISC intervine o multitudine de consideraţii:
-compatibilitatea cu seturile de instrucţiuni ale altor tipuri de
procesoare pe care s-au dezvoltat produse soft consacrate; portabilitatea
acestor produse pe noile procesoare este condiţionată de această cerinţă
care, în general, vine în contradicţie cu cerinţele de performanţă a
sistemului;
-setul de instrucţiuni este în strânsă dependenţă de tehnologia
folosită care, de obicei, limitează sever performanţele (constrângeri legate
de aria de integrare, numărul de ……., cerinţe specifice tehnologiei etc);
-minimizarea complexităţii unităţii de comandă şi a fluxului de
informaţie procesor-memorie;
-în cazul multor procesoare RISC setul de instrucţiuni este ales ca
suport pentru implementarea unor limbaje de nivel înalt.
Setul de instrucţiuni din procesoarelor RISC este caracterizat prin
simplitatea formatului precum şi de un număr limitat de moduri de adresare.
De asemenea se urmăreşte ortogonalalizarea setului de instrucţiuni.
În primul procesor RISC 1 BERKELEY exista un set de 31
instrucţiuni grupate în patru categorii:
-aritmetice/logice;
-acces la memorie;
-salt/apel subrutine
-instrucţiuni speciale.
60 Sorin Adrian Ciureanu
Formatul unei astfel de instrucţiuni este dat în figura 2.18.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
OP S DEST SOURCE 1 I SOURCE 2
CODE C M
C M

Fig.2.18. Formatul instrucţiunii Berkley RISC 1.

IMM = 0 cei mai puţini semnificativi 5 biţi ai câmpului SOURCE 2


codifică al doilea registru operand ;
IMM =1 SOURCE 2 semnifică o constantă pe 13 biţi cu extensie
semn pe 32 biţi;
SCC (Store Condition Code) semnifică validare/invalidare a
activităţilor de condiţie, corespunzător operaţiilor
aritmetice/logice executate.
Cu toate că setul său de instrucţiuni este redus, procesorul Berkley
RISC 1 poate sintetiza o multitudine de instrucţiuni „aparent” inexistente.
Practic nu se pierd instrucţiuni ci doar „opcode-uri”. Dar prin aceasta se
simplifică foarte mult logica de decodificare şi unitatea de comandă.
Iată mai jos câteva exemple de instrucţiuni emulate de RISC 1 în
comparaţie cu un calculator CISC, VAX 11/780:

Instrucţiunea VAX11/780 RISC 1


Incrementare INC Ri ADD Ri, ≠ 1, Ri
Decrementare DEC Ri SUB Ri , ≠1, Ri
Încărcare contor MOVL, #N, Ri ADD R0, #N, Ri
Complement faţă de 1 MCOMPL Ri , Rj XOR Ri , ≠1, Rj

2.6.3. Principiul de procesare pipeline


într-un procesor RISC

Procesarea pipeline a instrucţiunilor reprezintă o tehnică prin


intermediul căreia fazele aferente multiplelor instrucţiuni sunt suprapuse în
timp. Arhitectura RISC este mai bine adaptată la procesarea pipeline decât
cea CISC, datorită lungimii fixe a instrucţiunilor, modurilor de adresare
specifice, structurii interne bazate pe registre generale ş.a. În general, există
4-6 niveluri. Iată un exemplu cu 5 niveluri:
1. Nivelul IF (Instruction fetch)
Arhitectura calculatoarelor 61
Este ciclul de încărcare a instrucţiunii, care constă în calculul adresei
instrucţiunii ce trebuie încărcată din cache sau memorie şi din aducerea
efectivă a instrucţiunii din cache sau memorie în procesor.
2. RD (ID)
Se decodifică instrucţiunea adusă şi se citesc operanzii din setul de
registre generale.
3. Nivelul ALU
Se execută operaţia ALU asupra operanzilor selectaţi, în cazul
instrucţiunilor aritmetice/logice. Se calculează adresa la memoria de date
pentru instrucţiunile LOAD/STORE.
4. Nivelul MEM
Este nivelul în care se face acces la memoria principală sau CACHE,
dar numai pentru instrucţiuni LOAD/STORE.
În cazul citirii, apar probleme datorate neconcordanţei între rata de
procesare şi timpul de acces la memoria principală. Rezultă, teoretic, că într-
un sistem pipeline cu N niveluri, memoria trebuie să fie de N ori mai rapidă
decât într-un sistem clasic. Acest lucru se realizează, de obicei, prin
implementarea de memorii rapide, în special CACHE.
La scriere, această problemă nu apare, datorită procesorului de ieşire
specializat (DWB), ce va fi studiat la memoria CACHE.
5. Nivelul WB (write buffer)
Se scrie rezultatul în registrul destinaţie din setul de registre generale
al microprocesorului.

IF RD ALU MEM WB

IF RD ALU MEM WB

IF RD ALU MEM WB

IF RD ALU MEM WB

Sensul fluxului de date IF RD ALU MEM WB

IF RD ALU MEM WB
Un
ciclu
maşi

Fig 2.19. Principiul procesării pipeline într-un procesor RISC.


62 Sorin Adrian Ciureanu
Prin procesarea pipeline se urmăreşte o rată ideală de o instrucţiune
pe ciclu maşină, ca în figura 2.19., deşi, după cum se observă, timpul de
execuţie pentru o instrucţiune dată nu se reduce.
Se observă necesitatea suprapunerii a două nivele concurenţiale:
nivelul IF şi respectiv MEM, ambele cu referire la memorie. Deseori această
situaţie se rezolvă prin legături (busuri) separate între procesor şi memoria
de date respectiv de instrucţiuni .
O deficienţă importantă a acestor microprocesoare este că nu orice
instrucţiune trece prin cele 5 nivele de procesare. De exemplu prin nivelul
MEM trec doar instrucţiunile LOAD/STORE . Corectarea acestui neajuns se
face, uneori, prin comprimarea a două niveluri.

2.6.4. Structura unui Procesor RISC

Structura hardware a unui procesor RISC, prezentată în continuare, permite


procesarea pipeline a instrucţiunilor. Interconectarea nivelurilor (IF/ID ,
ID/EX, EX/MEM; MEM/WB) sunt implementate sub forma unor registre
de încărcare, actualizaţi sincron cu fiecare ciclu de procesare. Memorarea
anumitor informaţii de la un nivel la altul este absolut necesară, pentru ca
informaţiile conţinute în formatul instrucţiunii curente să nu se piardă prin
suprapunerea fazelor de procesare.
Adresă de salt
mux
2:1

4 IF/ID ID/EX sum EX/MEM MEM/WB


/ 2
32
sum 5 /
mux 2:1

1 / S1 32
/ S2 SET /
5 REG 32 ALU
D

PC . D IN
S1+S2 adr
mux 2:1

/ M
19 Ext. / E
S2 semn 32 M
/ mux D
13 2:1 D
Adr
MEM in
I 5 DEST

CLK
Arhitectura calculatoarelor 63
Adr. Reg, DEST.

Data in reg.

Fig.2,20. Schema de principiu a unui procesor RISC.

Câmpul DEST este memorat succesiv din nivel în nivel şi este


rebuclat la intrarea setului de registre generale. Utilitatea acestui câmp
devine oportună abia în faza WB, când şi data de înscris în setul de registre
generale devine disponibilă (cazul instrucţiunilor aritmetico/logice sau
STORE)
Multiplexorul de la intrarea ALU are rolul de a genera registrul sursă
2, în cazul instrucţiunilor aritmetice/logice, indexul de calcul adresă
(constanta pe 13 biţi cu extensie semn), în cazul instrucţiunilor
LOAD/STORE. Sumatorul sum 2 calculează adresa de salt în cazul
instrucţiunilor salt (branch) după formula
PCnext=PC+Ext.semn(IR18-=0
Multiplexorul 2:1 de la ieşirea nivelului MEM/WB multiplexează
rezultatul de ALU în cazul unei instrucţiuni aritmetice/logice, respectiv data
citită din memoria de date în cazul unei instrucţiuni LOAD. Ieşirea acestui
multiplexor se va înscrie în registrul destinaţie codificat de instrucţiune.
Evident, întreaga structură este comandată de o unitate de control.

2.6.5. Problema hazardurilor în procesoarele RISC

Hazardurile sunt situaţiile care pot apărea în procesarea pipeline şi


care determină blocarea procesării, având o influenţă negativă asupra ratei
de execuţie a instrucţiunilor. Există trei categorii de hazarduri:
-structurale;
-de date;
-de ramificaţie.

2.6.5.1. Hazarduri structurale

Aceste hazarduri sunt determinate de conflictele la resurse comune,


adică atunci când mai multe procese simultane, aferente mai multor
instrucţiuni în curs de procesare, accesează o resursă comună.
Pentru a le elimina prin hardware, este nevoie ca numărul de resurse
să fie mărit. Prin multiplicarea resurselor hardware s-a creat posibilitatea
execuţiei mai multor operaţii, fără a avea conflicte la resurse.
64 Sorin Adrian Ciureanu

2.6.5.2. Hazarduri de date

Aceste hazarduri apar când o instrucţiune depinde de rezultatele


unei instrucţiuni anterioare în banda de asamblare. Există trei categorii de
hazarduri de date, funcţie de ordinea acceselor de citire respectiv scriere, în
cadrul instrucţiunilor:
-hazardul RAW (Read After Write);
-hazardul WAR (Write After Read);
-hazardul WAW (Write After Write).

a) Hazardul RAW
Apare atunci când instrucţiunea 2 încearcă să citească o sursă înainte
ca instrucţiunea 1 să o scrie în sursă. Este foarte frecvent în actualele
procesoare pipeline. De exemplu:
Dată disponibilă

I1 LOAD R1 Memorie IF RD ALU M WB


EMMI

I2 LOAD R1+R2→R2 IF RD MEM ALU WB


.
Dată necesară

În acest caz, R1 fiind sursa, data ce urmează a fi încărcată în R1 este


disponibilă abia la sfârşitul ciclului MEM aferent instrucţiunii I1 , prea
târziu, deoarece pentru procesarea corectă a lui I2 ar fi nevoie ca data să fie
disponibilă cel târziu la începutul nivelului ALU din I2 . Ar fi necesar ca I2
să fie stagnată cu un ciclu maşină. Se cunosc mai multe metode pentru a
preîntâmpina hazardul RAW.
-Prin înscrierea unei instrucţiuni NOP (metodă software) se
stagnează a doua instrucţiune; timpul nu mai este critic. În exemplul ales,
programul devine:
I1
NOP
I2
-Prin tehnica scoreboarding (metodă hardware), se stagnează
hardware a doua instrucţiune, stagnare determinată de detecţia hazardului
RAW de către unitatea de control. Această tehnică de întârziere a fost
propusă de Saymour Cray în 1964. Se impune ca fiecare registru al
procesorului să aibă un bit de scor asociat:
Arhitectura calculatoarelor 65
bit de scor =0 registru disponibil
bit de scor =1 registru ocupat
Dacă pe un anumit nivel al procesării este necesar accesul la un
anumit registru având bitul de scor 1, respectivul nivel va fi întârziat,
permiţându-i-se accesul numai când bitul respectiv a fost şters de către
procesul care l-a setat.
Pentru exemplul anterior, se arată în figura 2.21 cum se testează şi se
setează bitul de scor şi în figura 2.22 cum se face resetarea procesării
instrucţiunilor.
De remarcat că ambele soluţii bazate pe stagnarea fluxului de
instrucţiuni (NOP şi score boarding) scad performanţele.
I1 LOAD R1 Memorie

!F RD ALU MEM WB 1 R1
x
R2
x
R3

x Rn

Fig.2.21. Detecţia hazardului pe baza bitului de scor.


.
resetare

I1 LOAD R1 memorie

R1
!F RD ALU MEM WB 0
R2
x
R3
I2 ADD R1 + R2 → R1 x

!F DELAY RD ALU MEM WB

Rn
x

Restartare procesare

Fig. 2.22. Restartarea procesării instrucţiunilor.

-Prin tehnica forwarding (bypassing), în anumite situaţii, hazardul


RAW se rezolvă fără să se cauzeze stagnări ale fluxului de procesare.
66 Sorin Adrian Ciureanu
Această tehnică se bazează pe „pasarea anticipată” a rezultatului
instrucţiunii. Fie următoarea secvenţă:
ADD R1 R2 R3 R2 + R 3 = R 1
SUB R4 R1 R5 R1 – R5 = R4
ADD !F RD ALU MEM WB pt. R1
R2

R3
SUB pt. R4
!F RD ALU MEM WB

READ WRITE
REGISTRU 2 REGISTRU

SET REGISTRI GENERALI

READ DATA IN
REGISTRU 1

DATA AUT 1 DATA AUT 2

MUX 2:1 R5

A B
ALU DIF

R SUM

TAMPOANE ALU

R2 + R3
Arhitectura calculatoarelor 67

Fig. 2 23. Implementarea forwardingului.

Rezultatul ALU aferent primei instrucţiuni R2 + R3 este memorat în


tampoanele ALU la finele fazei ALU a instrucţiunii ADD. Dacă unitatea de
control va detecta hazardul RAW , va selecta pe parcursul fazei ALU
aferente instrucţiunii SUB, la intrarea A din ALU, tamponul care conţine
R2+R3 ( în urma fazei ALU a instrucţiunii ADD), evitând astfel hazardul
RAW.
Este necesară implementarea proceselor de forwarding nu numai de
la ieşirile ALU spre intrări ci şi din nivelele următoare (de exemplu MEM)
spre intrările ALU. Această situaţie corespunde unor instrucţiuni dependente
RAW dar nesuccesive strict în program. Valoarea „pasată” uneia din intrările
din ALU, în acest caz, reprezintă rezultatul ALU memorat în nivelul
următor (MEM) pentru instrucţiunile aritmetice/logice sau data citită în
memoria CACHE de date pentru unele instrucţiuni LOAD.
În implementarea controlului mecanismului de forwarding, pot
apărea situaţii conflictuale care trebuie rezolvate pe baze de arbitrare-
priorizare.
Se consideră secvenţa de instrucţiuni:

I1 SUB R2 R1 R3
I2 AND R2 R2 R5
I3 ADD R6 R2 R4

În acest exemplu apar necesare două „pasări” anticipate de valori, de


la I1 la I3 (R3) pe intrarea A de la ALU şi respectiv de la I2 la I3 (R2) pe
aceeaşi intrare A de la ALU. Trebuie acordată prioritate nivelului pipeline
mai apropiat de ALU, informaţiei produsă de ieşirile ALU şi nu celei situate
în nivelul următor (aici MEM). Se preia pe intrarea A a unităţii ALU
rezultatul produs de I2 şi nu cel produs de I1 . Rezultă deci că şi astfel de
potenţiale situaţii conflictuale trebuie implementate în logica de control a
mecanismelor forwarding.
b) Hazardul WAR
Apare atunci când o instrucţiune scrie o destinaţie înainte ca aceasta
să fie citită pe post de sursă de către o instrucţiune anterioară. Poate avea loc
dacă într-o structură pipeline există o fază de citire posterioară unei faze de
scriere. De exemplu, modurile de adresare indirectă cu predecrementare pot
introduce acest hazard şi de aceea nici nu sunt implementate în
calculatoarele RISC.
68 Sorin Adrian Ciureanu
Aceste hazarduri de tip WAR mai pot apărea şi datorită execuţiei
instrucţiunilor în afara ordinii lor normale din program, în aşa numita
execuţie Out of Order. Această procesare este impusă de necesitatea
creşterii performanţei şi se poate realiza atât prin mijloace hardware cât şi
software.
c)Hazardul WAW
Apare atunci când o instrucţiune scrie un operand înainte ca acesta să
fie scris de o instrucţiune anterioară, scrierile fiind făcute într-o ordine
eronată.
Hazardul WAW poate apărea în structurile care au mai multe niveluri
de scriere sau care permit unei instrucţiuni să fie procesată chiar dacă o
instrucţiune anterioară este blocată. Modul de adresare indirect cu
postincrementare poate introduce acest hazard, fapt pentru care acest mod
de adresare nu este implementat în maşina RISC. De asemenea, hazardul
WAW poate apărea în cazul execuţiei Aut of Order a instrucţiunilor cu
aceeaşi destinaţie.
Hazardurile WAW, ca şi cele WAR de altfel, nu reprezintă hazarduri
reale, ci mai degrabă conflicte de nume. Ele pot fi eliminate de către
compilator (scheduler) prin redenumirea resurselor utilizate de program. De
aceea se mai numesc autodependente, cele WAW, şi dependente de ieşire
cele WAR.
Exemple:

I1 MULF Ri Rj Rk Rj * Rk → Rj
I2 ADD Rj Rp Rm Rp+Rm → Rj

În acest caz poate să apară hazard WAR deoarece instrucţiunea I1


fiind o instrucţiune de coprocesor (cu virgulă mobilă) se va încheia în
execuţie după I2 care este o instrucţiune de procesor (cu operanzi întregi)
Pentru că numărul de niveluri aferent structurii pipeline a coprocesorului
este mai mare decât numărul de nivele aferentprocesorului, instrucţiunile I1
şi I2 se termină „Out of Order” (I2 înaintea lui I1). Secvenţa care elimină
hazardul WAR, reorganizată prin software este:

MULF Ri Rj Rk
ADD Rx Rp Rm
MOV Rj Rx

c) Graful dependenelor de date


Arhitectura calculatoarelor 69
Mai jos este dat un exemplu de reorganizare a unui program în
vederea eliminării hazardurilor de date şi a procesării optimale, folosind
graful dependenţelor de date.

I0 ADD R3 R1 R2
I1 LD R9 A(R7)
I2 ADD R4 R3 R2
I3 ADD R5 R4 R6
I4 LD R4 A(R6)
I5 LD R2 A(R4)

I I I
0 1 4

R3 R4

R4
I I
R
2 4 5

I
3

Fig. 2. 24. Graful dependenţelor de date


aferent secvenţei de instrucţiuni din exemplul ales

O primă secvenţă de reorganizare a programului ar fi

I0 ADD R3 R1 R2
I1 LD R9 A(R7)
I4 LD R4 A(R6)
I2 ADD R4 R3 R2
I3 ADD R5 R4 R6

Se observă că în această reorganizare execuţia aut of order a


instrucţiunilor I4 şi I2 determină o procesare eronată a programului prin
hazardul de tip WAW prin R4 .De asemenea, între I3 şi I4 exestă hazard WAR
prin acelaşi registru. Aşadar detecţia hazardului WAW între instrucţiunile I2
70 Sorin Adrian Ciureanu
şi I4 determină impunerea unei relaţii de precedenţă intre aceste instrucţiuni,
adică procesarea lor trebuie să se realizeze în ordinea din program (order).
Exte necesar ca I3 , dependent RAW de I2 , să se execute înaintea
instrucţiunii I4 . Aceste restricţii au fost evidenţiate prin linii punctate în
graful dependenţelor de date.. În aceste condiţii secvenţa reorganizată corect
este:

I0 ADD R3 R1 R2
I1 LD R9 A(R7)
I2 ADD R4 R3 R2
I3 ADD R5 R4 R6
I4 LD R4 A(R6)
NOP
I5 LD R2 A(R4)
Hazardul WAR între I3 şi I4 ar putea fi eliminat prin redenumirea
registrului R4 în instrucţiunea I4 . deoarece hazardurile WAR şi WAW nu
reprezintă conflicte reale ci doar conflicte de nume. Considerând un
procesor cu mai multe registre fizice decât logice, precedenţele impuse de
aceste hazarduri pot fi eliminate uşor prin redenumirea registrelor logici cu
cei fizici (Register Reaming). Principiul constă în existenţa unei liste a
registrelor active, adică folosite momentan, şi o altă listă cu registrele libere.
Fiecare schimbare a conţinutului unui registru logic prin program se va
face asupra unui registru fizic disponibil în lista registrelor libere registru
care va fi trecut în lista registrelor active. In acest caz secvenţa se va rescrie
astfel:
I0 ADD R3a R1a R2a
I1 LD R9a A(R7a)
I2 ADD R4a R3a R2a
I3 ADD R5a R4a R6a
I4 LD R4b A(R6a)
I5 LD R2b A(R4b)

În acest caz în optimizare nu ar mai avea importanţădecât


dependenţele RAW, celelalte fiind eliminate. În baza grafului dependenţelor
de date, procesarea optimă ar însemna, în exemplul ales, secvenţa:

I0 I1 I4 I2 I3 I5

2.6.5.3. Hazarduri de ramificaţie


Arhitectura calculatoarelor 71
Sunt generate de către instrucţiunile de salt (ramificaţie). Cauzează
pierderi de performanţă mult mai importante decât hazardul de date.
Diverse statistici arată că instrucţiunile de salt necondiţionat au o
frecvenţă de 2-8% din instrucţiunile unui program, iar cele de salt
condiţionat 11-17%. De asemenea salturile condiţionate simple au o
probabilitate de apariţie de 50% iar buclele de 90%.
În principiu, efectele defavorabile ale instrucţiunilor de ramificaţie
(Branch) pot fi reduse prin:
.metode soft, care reorganizează programul sursă;
-metode hard, în care se determină în avans dacă saltul se va face
sau nu şi se calculează în avans noul Program Counter,
O primă soluţie pentru o procesare corectă ar fi aceea de a dezvolta
unitatea de control hardware în vederea detectării prezenţei saltului şi de a
întârzia procesarea instrucţiunilor următoare cu un număr de cicluri egal cu
latenţa BSD-ului, până când adresa ar fi disponibilă. Soluţia implică, însă,
reducerea performanţelor. Acelaşi efect l-ar avea şi „umplerea” BSD-ului de
către scheduler cu instrucţiuni NOP
Efectul defavorabil al unei instrucţiuni de salt este sugerat în
fig.2.24. pentru o structură pipeline cu 5 nivele în care la finele nivelului RD
adresa se salt este disponibilă. Evident că în alte structuri Branch Delay Slot
(BDS) poate fi mai mare decât un ciclu.

BRANCH: IF RD ALU MEM WB

IF RD ALU MEM WB
I1

I2 IF RD ALU MEM WB

Branch delay slot (BDS)= 1


1 ciclu

Dacă saltul se va face, I1 se va executa în mod nedorit

Fig. 2.25. Hazardul de ramificaţie pe un procesor scalar.

În principiu, efectele defavorabile ale instrucţiunilor de ramificaţie


(branch) pot fi reduse prin:
-metode soft, care reorganizează programul sursă;
72 Sorin Adrian Ciureanu
-metode hard, în care se determină în avans dacă saltul se va face sau
nu şi calculează în avans noul Program Counter.
a) Metode soft. Metoda Gross Hennesy (1982).
Se defineşte o instrucţiune de salt situată la adresa b spre o
instrucţiune aflată la adresa a ca un „salt întârziat de ordinul n” dacă, atunci
când se face saltul, sunt executate instrucţiunile situate la adresele b, b+1,
b+2,………b+n şi a .
O primă soluţie de optimizare ar fi mutarea instrucţiunii de salt cu „n
instrucţiuni mai sus”. Acest lucru este posibil doar când nici una dintre
precedentele instrucţiuni nu afectează condiţiile de salt. Atunci se poate
muta instrucţiunea de salt cu k instrucţiuni mai „în sus”, unde k reprezintă
numărul maxim de instrucţiuni anterioare care nu afectează condiţiile de
salt. Se duplică primele (n-k) instrucţiuni, plasate începând de la adresa de
destinaţie a saltului, imediat după instrucţiunea de salt. Se modifică
corespunzător adresa de salt, la acea adresă care urmează imediat după cele
(n-k) instrucţiuni originale (figura 2.25)
În cazul în care saltul necondiţionat nu se execută, este necesar ca
nici una dintre cele (n-k) instrucţiuni adiţionale să nu afecteze execuţia
următoarelor (1+n-k) instrucţiuni.

BRANCH (cond), ADR BRANCH (cond), ADR M

k[ I instr.
(n-k) instr.
adiţionale
ADR 1

ADR
(n-k) instr. k[ I instr.

ADR 2

(n-k) instr.
„originale”
ADR M

ADR M=ADR+
1+2(n-k)

Fig. 2.25. Soluţionarea unui hazard de ramificaţie prin duplicarea


instrucţiunilor.

b)Metode hardware. Predicţii prin hardware


Cele mai performante strategii actuale de gestionare a ramificaţiilor
de program sunt predicţiile hardware. Au la bază un proces de predicţie
Arhitectura calculatoarelor 73
„run-time” a ramurii de salt condiţionat precum şi determinarea în avans a
noului Program Counter (PC).
Notând cu BP (Branch Penalty) numărul mediu de cicluri de
aşteptare pentru fiecare instrucţiune din program, introduşi de salturile fals
predicţionate, se poate scrie relaţia:
BP=C(1-Ap)b IR
unde:
C = numărul de cicluri de penalizare introduşi de un salt prost predicţionat
Ap = acurateţea predicţiei
p= procentele de instrucţiuni de salt instrucţiunile procesate în program
IR = rata medie de lansare în execuţie a instrucţiunilor.
Se observă că BP(Ap=0)=CbIR iar BP(Ap=1)=0, predicţia ideală. Impunând
BP=0.1 şi considerând valorile tipice C=5, IR=4, b=22,5 %=0,225 rezultă
Ap =0,977=97,7%. Este necesară o predicţie aproape perfectă pentru a nu se
simţi efectul defavorabil al ramificaţiilor de program asupra performanţelor
procesoarelor.
O metodă consacrată în acest sens este metoda „Branch Prediction
Buffer” (BPB). BPB reprezintă o mică memorie adresată cu cei mai puţin
semnificativ biţi ai PC-ului aferent unei instrucţiuni de salt condiţionat.
Cuvântul BPB este constituit în principiu dintr-un singur bit. Dacă acesta
este 1 logic, se prezice că saltul se va face iar dacă este 0 logic, e prezice că
saltul nu se va face. Evident că nu se poate şti în avans dacă predicţia este
corectă. Oricum structura va considera predicţia corectă şi va declanşa
aducerea instrucţiunii următoare pe ramura prezisă. Dacă predicţia se
dovedeşte a fi fost falsă, structura pipeline se evacuează şi se iniţiază
procesarea celeilalte ramuri de program. Totodată valoarea bitului de
predicţie din BPB se inversează.

C N

START:

C (C-1)

NU DA
C=
0
74 Sorin Adrian Ciureanu

Fig. 2.25. O buclă tipică.

BPB cu un singur bit are un dezavantaj care se manifestă cu


precădere în cazul buclelor de program ca cea din figura 2.25., în care saltul
se va face de (N-1) ori; o dată, la ieşirea din buclă nu se va face. În acest
caz, vom avea două predicţii false: una la intrarea în buclă (prima
parcurgere) şi alta la ieşirea din buclă (ultima parcurgere a buclei).
Acurateţea predicţiei va fi de (N-2).100/N% iar saltul se va face în proporţie
de (N-1).100/N%. Pentru a elimina acest dezavantaj se utilizează 2 biţi de
predicţie modificabili conform graficului de tranziţie de mai jos (numărător
saturat). În acest caz acurateţea predicţiei unei bucle care se face de (N-1)
ori va fi (N-1).100/N%.
Prin urmare, în cazul în care se prezice că branch-ul va avea loc,
aducerea noii instrucţiuni se face de îndată ce conţinutul noului PC este
cunoscut. În cazul unei predicţii incorecte, se evacuează structura pipeline şi
se atacă cealaltă ramură a instrucţiunii de salt. Totodată biţii de predicţie se
modifică în conformitate cu graful din figura 2.26.

DA

NU
Prezice DA
00 Prezice DA
01
DA

DA NU

Prezice NU NU Prezice NU NU
11 10

DA

Fig. 2.26. Automat de predicţie de tip numărător saturat pe 2 biţi.


Arhitectura calculatoarelor 75

You might also like