You are on page 1of 177

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
unităţii centrale.
-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ă trebuiesc 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ă 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, î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 îi 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.XIX, 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);
-o unitate care permite schimbul de informaţie cu perifericele (U I/E)
10 Sorin Adrian Ciureanu
-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 2k cuvinte 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ă. Tranzistorul 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 32 kcuvinte 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 Noyle 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 pe 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
Ccuvântul era, însă,de 16 biţi (şi apoi de 32 biţi la cele din seria
VAX) iar 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 Microelectronica. Din punct de
vedere al caracteristicilor, FELIX avea cuvântul 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 emitea 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.
Arhitectura calculatoarelor 13
1.3.1.5. Generaţia a patra . V.L.S.I. (1980-2005)

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 produc
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 cuprind
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
1946 J.Mauchley şi J.P. Eckert ENIAC, Pensilvania
14 Sorin Adrian Ciureanu
University
1948 Bardeen, Brattains şi Inventarea tranzistorului
Sockley
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.

1.4. TIPURI DE ARHITECTURI ALE


CALCULATOARELOR NUMERICE
16 Sorin Adrian Ciureanu

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 Memorie
control

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

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

1.4.2. Maşina Turing


Arhitectura calculatoarelor 17
Î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.

-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.
18 Sorin Adrian Ciureanu
-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 secvenţ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”
(Neumann Bottleneck). Spargerea acestei limitări este realizată prin
arhitectura paralelă.

UC UP MM
C C C
Arhitectura calculatoarelor 19

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
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.
20 Sorin Adrian Ciureanu
Multicalculatoarele se caracterizează 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 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 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)
-memorie pentru date (DM)

IM CU

PU

DM
Arhitectura calculatoarelor 21

(orizontal)

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

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)

IM

CU PU

PU DM
22 Sorin Adrian Ciureanu

(orizontal)

(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 V este 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.
CU

PU + DM

Fig. 1.11. Maşina VI Shore


Maşina VI este denumită maşina cu logica în memorie. Este o
abordare alternativă a distribuirii comenzii în memorie. 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.6. 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 Robert 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 200 KHz 3500
1974 8080 2 MHz 6000
1976 8085 5 MHz 6500
1978 8086 10 MHz 29000
1982 286 12 MHz 134.000
1985 386 16 MHz 275.000
1989 486 25 MHz 1,2.106
1993 P 60 MHz 3,1.106
1997 PII 300 MHz 3,3.106
1999 PIII 600 MHz 9,5.106
2000 PIV 1,5 GHz 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. Set
Schema unei UAL este dată în figura 2.1. de
registre

Registru Registru
acumulator tampon

Σ Sumator
26 Sorin Adrian Ciureanu

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.
c) Registrele generale (RG)
Arhitectura calculatoarelor 27
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 mare dar
care sunt inferioare calculatoarelor cu frecvenţa ceasului mai mică, 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)
-paralelism la nivel de procesor.
Arhitectura calculatoarelor 29

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 (etaje), 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
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
30 Sorin Adrian Ciureanu
segment este de 1 secundă, (t1 = t2=…….= t10 = t11 = 1 s) 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.

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.

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.
Calculatoarele Pentium I erau dotate cu două benzi de asamblare:
Arhitectura calculatoarelor 31
-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 superscalar 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
împarte unitatea de execuţie S4 în unităţi funcţionale pe tipuri de
instrucţiuni de încărcare ( LOAD), de memorie (STORE),de virgulă mobilă.
32 Sorin Adrian Ciureanu

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. SETUL DE INSTRUCŢIUNI

Operaţiile unităţii centrale sunt determinate de instrucţiunile pe care


ea le execută. Ansamblul de instrucţiuni pe care o anumită UC le poate
executa constituie setul de instrucţiuni caracteristic acelei unităţi. A
concepe o Unitate Centrală înseamnă, în cea mai mare parte, a concepe un
anumit set de instrucţiuni. Setul de instrucţiuni trebuie să fie suficient de
expresiv pentru a codifica orice instrucţiune dintr-un limbaj de nivel înalt.
Astfel, o instrucţiune dintr-un limbaj de nivel înalt corespunde de fapt mai
multor instrucţiuni din limbajul maşină.
Pentru a concepe un set de instrucţiuni, care influenţează în mare
parte proiectarea unei UC, trebuie să se aleagă:
- operaţiile de executat, numărul şi complexitatea lor;
- tipurile de date suportate de operaţii;
- registrele, numărul şi utilizarea lor;
- adresarea datelor;
- formatul adică lungimea instrucţiunii, fixă sau variabilă, numărul
şi mărimea câmpurilor.
Toate aceste aspecte sunt foarte legate între ele şi trebuie considerate
un ansamblu.
O instrucţiune trebuie să conţină diferite informaţii cerute de UC:
-codul operaţiei (opcode), un cod binar ce identifică operaţia de
executat;
-referinţe despre operanzii sursă, adică una sau mai multe adrese ce
fac referire la operanzii parametri ai operaţiei (care pot proveni din
memorie, dintr-un registru al UC sau dintr-un periferic);
-referinţe despre operandul rezultat ( operaţia poate produce un
rezultat şi poate să-l dea explicit);
Arhitectura calculatoarelor 33
-referinţă despre instrucţiunea următoare, (indicaţie pentru UC unde
să găsească instrucţiunea următoare celei curente; ea poate să fie implicită,
ca atunci când instrucţiunea următoare este contiguă instrucţiunii curente).

2.3.1. Tipuri de instrucţiuni

Numărul şi natura opcod-urilor diferă de la o maşină la alta. Se pot


cita totuşi unele categorii.
-Transfer de date. Aceste instrucţiuni specifică amplasarea
operanzilor sursă şi destinaţie, dimensiunea datelor de transferat şi modul de
acces la aceste date (modul de adresare).
-Operaţii aritmetice. Toate maşinile includ operaţiile de bază cu
întregi cu semn, cea mai mare parte conţin instrucţiuni pentru operaţii în
virgulă flotantă şi uneori sunt disponibile şi alte operaţii .
-Operaţii logice. Servesc la manipularea datelor bit cu bit, la
decalaje ş.a.
-Conversii. Schimbă formatul unei date (de ex. din zecimal în binar).
-I/E. Transfer de date cu intrări/ieşiri.
-Controlul sistemului. Sunt instrucţiuni rezervate unui mod
privilegiat de execuţie ( de ex. pentru utilizarea sistemului de exploatare).
-Transfer de control. Instrucţiuni care implică un schimb explicit a
contorului ordinal, pentru a executa un salt condiţionat sau o repetiţie.
Datele asupra cărora acţionează instrucţiunile, operanzii, pot fi
clasificaţi în următoarele categorii:
-adresele, care pot fi considerate ca întregi fără semn, şi asupra
cărora se pot executa calcule;
- numerele, întregi, în virgulă fixă sau flotantă, care pot avea roluri
specifice (de ex. contor, mărimea câmpurilor);
-caracterele, sub formă de cod ASCII;
-datele logice , adică secvenţe de biţi având fiecare un sens (ex. un
tabel de booleene).
Anumite maşini folosesc tipuri de date mai evoluate ca liste sau
şiruri de caractere.

2.3.2. Formatul unei instrucţiuni

Fiecare instrucţiune este reprezentată printr-o secvenţă de biţi,


împărţiţi în câmpuri. Există diferite formate de instrucţiuni după numărul de
părţi rezervate operanzilor. În timpul execuţiei unei instrucţiuni aceasta este
34 Sorin Adrian Ciureanu
încărcată în registrul IR din UC care trebuie să extragă din ea diferite
câmpuri.
O operaţie face referinţă la datele sursă şi poate preciza şi o
destinaţie. Aceste referinţe sunt de fapt nişte adrese de date.
Formatul instrucţiunii corespunde numărului de câmpuri din
instrucţiune rezervat acestor adrese.
Teoretic ar fi necesare 4 : doi operanzi, un rezultat şi următoarea
instrucţiune. În practică, însă, există:
-format cu trei adrese, puţin utilizat pentru că instrucţiunile sunt prea
lungi;
-format cu două adrese, una din adrese făcând oficiu de sursă şi
destinaţie;
-format cu o adresă, instrucţiuni folosind sistematic un registru UC,
acumulatorul, pentru a păstra un operand şi rezultatul;
-format fără nici o adresă , instrucţiunile folosind sistematic o pilă
sau o stivă (structuri gestionate în manieră FIFO).
Cu cât instrucţiunile sunt mai scurte, cu atât UC este mai puţin
complexă dar, fiind mai multe instrucţiuni, programele se vor executa mai
lent. Formatul unei instrucţiuni defineşte câmpurile instrucţiunii (opcodul şi
adresele) precum şi modul de adresare utilizat.

2.3.3. Modul 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.

Instrucţiune
OPERAND
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
Arhitectura calculatoarelor 35

Câmp adresă

ADRESĂ
OPERAND
MOV R 100
100 20000
Î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 direcţionări depinde de fiecare calculator în
parte.
Câmp adresă

ADRESĂ

Adesă 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.
a) 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);
36 Sorin Adrian Ciureanu
-registrul T, numit registrul tampon, cu rol de a păstra rezultatele
parţiale, (32 biţi);
Bus local în UC

Bus
INDEX
memorie
ADRMEM
U
M M
E
RI M
PC

A T
RG
RG 1

RG 2

Σ
SUMATO
R 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; de asemenea, prin ADRMEM se adresează şi cele 16 registre generale
(RG), dar pe bus-ul local nu pe cel al memoriei;
Arhitectura calculatoarelor 37
ADRMEM ADRMEM
M UM M UM
citire scriere
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 memorie, 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
38 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 39
Î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
40 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 41

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/E ş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.
-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.
42 Sorin Adrian Ciureanu

20biţi

16 biţi
8biţi 8biţi

Ax AH AL
Σ
Bx BH BL Registre de offset
date
CH CL CS
Cx
DH DL DS
Dx
DI ES

SJ SS
Registre de
BP adrese IP

SP

Bus intern 4biţi


Inter- A16.-19
faţă AD0-15
Bus-uri BD0-15
RT
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
UI conţine componentele date în continuare.
1)Blocul de interfaţă între bus-uri, care face transferurile UE.
Are următoarele cicluri:
Arhitectura calculatoarelor 43
-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 împart î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;
Bx-baza în adresarea datelor;
Cx-contor;
Dx-date.
44 Sorin Adrian Ciureanu
Fiecare din aceste registre pot fi împărţite în două registre de 8 biţi.
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:

16 biţi 8 biţi 8 biţi


Ax AH AL
Bx BH BL
Cx CH CL
Dx DH DL

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) .
Registrul BP poate fi utilizat şi pentru adresarea în cadrul altor
segmente.
Arhitectura calculatoarelor 45
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 şi SP
sau registrul DI în instrucţiunile pentru şiruri, utilizează în mod implicit
segmentul referit de DS.
Conţinutul registrului 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 (Instruction pointer), este


un registru de 16 biţi care conţine componenta ofset a adresei instrucţiunii în
segmentul de cod curent.
Programele nu au acces direct la IP, dar există instrucţiuni care îl
modifică şi îl încarcă sau îl descarcă prin stivă.
46 Sorin Adrian Ciureanu
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 Flag) este indicator de paritate;
PF = 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.
AF = 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.
ZF = 1, dacă rezultatul operaţiei a fost zero.
-SF (Sign Flag), indicatorul de semn:
SF = 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;
OF = 1, dacă dimensiunea rezultatului depăşeşte capacitatea
locaţiei memoriei.
-IF (Interrupt Flag), indicatorul de validare a întreruperilor.
IF = 1, dacă se pot valida întreruperile externe mascabile
IF = 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:
DF = 0 , parcurgere de la adrese mici spre adrese mari.
DF = 1 , parcurgere 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; este1
Arhitectura calculatoarelor 47
după ce execuţia fiecărei instrucţiuni se va genera un semnal de întreruperi
intern.

2.5.3. Adresarea memoriei. Segmentarea memoriei.

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
realocabile dinamic. Pentru ca un program să fie realocabil trebuie să fie
48 Sorin Adrian Ciureanu
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

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
Arhitectura calculatoarelor 49
110 SI DH
111 DI BH
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 operanzii imediaţ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
50 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). Adresa se obţine din suma registrului index şi
deplasamentul din instrucţiune.
7 07 015

COD OP MOD R/M DEPLASAMENT

SI
AE
DI +
Memorie

AF OPERAND
+

AS
Arhitectura calculatoarelor 51

Fig. 2.9. Adresare indexată


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ă

În acest caz operandul se află chiar în instrucţiune.


OPERAND

AE

Fig. 2.11. Adresare imediată.


52 Sorin Adrian Ciureanu

2.5.5.5. Adresarea porturilor de intrare/ieşire

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


î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
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
Arhitectura calculatoarelor 53
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

Unitatea de segmentare Unitatea de paginare

Unitate de execuţie Unitate de interfaţă

Unitate de Unitate de preîncărcare a


decodificare instrucţiunilor

Fig. 2.12. Schema pipeline pentru procesorul 386.

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.

2.5.8. Procesoare 486


54 Sorin Adrian Ciureanu

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 nivel 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 interfaţă
fixă cu
Unitate magistrala
cache

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.
Controlorul de întreruperi APIC (Advanced Programable Interrupt
Controller) a fost inclus în structura microprocesorului.
Arhitectura calculatoarelor 55
Î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

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 :

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.

-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
unităţi „in order”, adică unităţi care respectă ordinea de prelucrare a
instrucţiunilor prestabilită în program. Unitatea de dispecerizare şi execuţie
56 Sorin Adrian Ciureanu
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

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 extrasul
este transmis către cele trei module 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.
Arhitectura calculatoarelor 57
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 decodificare 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ă.

De la BIU
(Basic Interface Unit)

L1 I CACHE NEXT IP

Bloc de memorie a
adresei de salt
DECODIFICARE

DE Secvenţîator de
microinstrucţiuni
INSTRUCŢIUNI

Alocator de registre
alias

Spre rezervorul
de miscroinstrucţiuni
58 Sorin Adrian Ciureanu

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

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
UEI UEF UE-
Port 0 MMX

Port 1 UEI UES UE-


Rezervor MMX
i de
instrucţiuni

Port 2 UGA
i Citire operanzi

UGA
Port 3, 4 Scriere operanzi

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ă
Arhitectura calculatoarelor 59
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.
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
rezervare UIM (unitate de interfaţă cu memoria)

FER (Fişierul de registre de retragere)

Rezervor de
instrucţiuni

Fig. 2.17. Unitate de retragere.


60 Sorin Adrian Ciureanu
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.

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;
Arhitectura calculatoarelor 61
-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
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, cerinţe specifice tehnologiei etc);
-minimizarea complexităţii unităţii de comandă şi a fluxului de
informaţie procesor-memorie;
62 Sorin Adrian Ciureanu
-î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 ortogonalizarea 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.
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
Arhitectura calculatoarelor 63
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)
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=Instruction Decodificatio))
Se decodifică instrucţiunea adusă şi se citesc operanzii din setul de
registre generale.
3. Nivelul ALU (A
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

Un IF RD ALU MEM WB
ciclu
maşi

64 Sorin Adrian Ciureanu

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

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.
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
adr
mux 2:1

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

CLK

Adr. Reg, DEST.

Data in reg.

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

Interconectarea nivelurilor (IF/ID , ID/EX, EX/MEM; MEM/WB)


sunt implementate sub forma unor registre de încărcare, actualizate 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.
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 aritmetice/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. Debitul ideal de o instrucţiune pe ciclu în
pipeline nu poate fi obţinut decât dacă instrucţiunile sunt esenţial
independente; atunci ele se pot executa simultan. Când semantica lor este în
mod real secvenţială, pipeline-ul este penalizat. Există trei categorii de
hazarduri:
-structurale;
-de date;
66 Sorin Adrian Ciureanu
-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.

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 MEM WB


MI

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 R 1 este


disponibilă abia la sfârşitul ciclului MEM aferent instrucţiunii I 1 , prea
târziu, deoarece pentru procesarea corectă a lui I 2 ar fi nevoie ca data să fie
disponibilă cel târziu la începutul nivelului ALU din I 2 . Ar fi necesar ca I 2
să fie stagnată cu un ciclu maşină. Se cunosc mai multe metode pentru a
preîntâmpina hazardul RAW.
Arhitectura calculatoarelor 67
-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:
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 MEM

!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

!F RD ALU MEM WB 0 R1

x R2

x R3
I2 ADD R1 + R2 → R1

!F DELAY RD ALU MEM WB

x Rn

Restartare procesare
68 Sorin Adrian Ciureanu

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.
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 = R 4
ADD !F RD ALU MEM WB pt. R1
R2

R3
SUB pt. R4
!F RD ALU MEM WB

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:
Arhitectura calculatoarelor 69
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 I 2 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.

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

Fig. 2 23. Implementarea forwardingului.


70 Sorin Adrian Ciureanu

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.
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
„Out 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 aferent procesorului, instrucţiunile
I1 şi I2 se termină „Out of Order” (I2 înaintea lui I1). Secvenţa care elimină
hazardul WAR, reorganizată prin software este:
Arhitectura calculatoarelor 71
MULF Ri Rj Rk
ADD Rx Rp Rm
MOV Rj Rx

Graful dependenţelor de date

Mai jos este dat un exemplu de reorganizare a unui program în


vederea eliminării hazardurilor de date şi a realizării 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
R3 1 4
R4

R4

IR4 I
2 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 „Out of Order” a


instrucţiunilor I4 şi I2 determină o procesare eronată a programului; apare
72 Sorin Adrian Ciureanu
hazardul de tip WAW prin R4 .De asemenea, între I3 şi I4 există hazard WAR
prin acelaşi registru. Aşadar detecţia hazardului WAW între instrucţiunile I2
şi I4 determină impunerea unei relaţii de precedenţă intre aceste instrucţiuni,
adică procesarea lor trebuie să se realizeze în ordinea din program („in
order”). Este 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. 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 73

Instrucţiunile care modifică execuţia secvenţială a instrucţiunilor


sunt salturile, ramificaţiile şi apelurile de procedură.
Hazardurile de ramificaţie cauzează pierderi de performanţă mult
mai importante decât hazardurile 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 salt sau
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 BDS - ului, până când adresa ar fi disponibilă. Soluţia implică, însă,
reducerea performanţelor. Acelaşi efect l-ar avea şi „umplerea” BDS-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

I1 IF RD ALU MEM WB

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.


74 Sorin Adrian Ciureanu
Î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 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.26)
Î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 [ (n-k) instr.
I 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.26. Soluţionarea unui hazard de ramificaţie prin duplicarea


instrucţiunilor.

b)Metode hardware. Predicţii prin hardware


Arhitectura calculatoarelor 75
Cele mai performante strategii actuale de gestionare a ramificaţiilor
de program sunt predicţiile hardware. Au la bază un proces de predicţie
„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, introduse 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), Tmpon de Predicţie a Ramificaţiei. 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, se 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
76 Sorin Adrian Ciureanu

Fig. 2.27. 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.27., î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ă
ramificaţia 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.28.
DA

NU
Prezice DA
00 Prezice DA
01
DA

DA NU

Prezice NU NU Prezice NU NU
11 10

DA

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

2.7. PROCESOARE SUPERSCALARE


Arhitectura calculatoarelor 77

2.7.1. Principiul arhitecturii superscalare

O îmbunătăţire mult urmărită în funcţionarea procesoarelor este


aceea de a se atinge o rată medie de procesare a mai multor instrucţiuni pe
tact (ciclu). Principiul pipeline este executarea simultană a diferitelor faze a
unei instrucţiuni. Debitul în instrucţiuni pe ciclu este cel mult 1. Timpul de
ciclu este determinat de durata comună a fiecărui etaj, fixată de timpul de
traversare a celui mai lung circuit combinatoriu. Performanţa arhitecturii
este deci limitată de tehnologia circuitelor. Pentru a obţine un debit superior
unei instrucţiuni pe ciclu trebuie să se modifice arhitectura.
Două soluţii sunt posibile: arhitectură superpipeline şi arhitectură
superscalară.
O arhitectură superpipeline fracţionează fiecare etaj al pipeline-ului,
deci îi măreşte numărul de etaje . Această tehnică, larg utilizată, are limite
tehnologice. Chiar dacă este posibil să se pipelineze UAL, spre exemplu 2
cicluri, evoluţia circuitelor tinde să diminueze proporţional mai mult timpii
de propagare în interiorul UAL decât cei legaţi de registre. Necesitatea
introducerii unei tamponări tinde să anuleze câştigul unei prea fine
superpipeline.
O arhitectură superscalară constă, în principiu, în executarea
simultană a mai multor instrucţiuni prin crearea de pipeline în blocurile de
instrucţiuni (figura 2.27). Debitul unei arhitecturi superscalare de gradul n
(blocuri de n instrucţiuni) este de n instrucţiuni pe ciclu, timpul de ciclu
rămânând limitat de tehnologie. Tipic , în 1999, gradul de superscalar era de
4 sau 8.

ID EX MEM RR
Lect ID EX MEM RR
4 4 ID EX MEM RR
instr. ID EX MEM RR
ID EX MEM RR
Lect ID EX MEM RR
4 4 ID EX MEM RR
instr. ID EX MEM RR

Fig. 2. 29. Execuţie superscalară de gradul 4.


78 Sorin Adrian Ciureanu
Eficacitatea arhitecturii superscalare depinde de hardul necesar
execuţiei simultane a n instrucţiuni şi de softul care trebuie să asigure
independenţa celor n instrucţiuni ce se execută simultan. Această ultimă
proprietate este măsurată prin ILP (Instruction Level Paralelism), adică prin
numărul de instrucţiuni susceptibile a fi executate simultan pentru o
aplicaţie.
Exploatarea eficace a arhitecturii superscalare cere modificarea
ansamblului de tehnici materiale şi logice de tratarea dependenţelor. Global,
arhitectura se va compune din mai multe blocuri funcţionale (unităţi de
execuţie). Ca exemplu de organizare arhitecturală este dat, în figura 2.28.,
schema de principiu a procesorului UltraSparc III.

Unitate de lansare a instrucţiunilor

Cache de instrucţiuni

Coadă de instrucţiuni

Logică de control global

Unitate de calcul flotant Unitate de calcul întregi

Multiplicator flotant Logică de calcul al


dependenţelor
Registre Sumator flotant Registre
virgulă intregi
flotantă Divizor flotant 2 pipeline întregi

Unitate grafică Pipeline LD/ST

Unitate de cache de date

Cache de date

Cache de scriere

Coadă de scriere

Cache preîncărcare

Fig. 2.28. Arhitectura procesorului UltraSparc III

Procesoarele care iniţiază execuţia mai multor operaţii simultan într-


un ciclu se numesc procesoare cu execuţii multiple ale instrucţiunilor. Un
Arhitectura calculatoarelor 79
astfel de procesor aduce din cache - ul de instrucţiuni una sau mai multe
instrucţiuni simultan şi le distribuie spre execuţie în mod dinamic sau static
multiplelor unităţi de execuţie paralele. Dacă decodificarea instrucţiunilor,
detecţia dependenţelor de date, rutarea şi lansarea lor în execuţie din
bufferul de prefetsch înspre unităţile funcţionale se fac prin hardware,
procesoarele se numesc superscalare.
Pot exista mai multe unităţi funcţionale distincte, dedicate diferitelor
tipuri de instrucţiuni, de exemplu de tip întreg sau flotant. Aşadar execuţiile
instrucţiunilor întregi se suprapun instrucţiunilor flotante. Paralelismul
temporal determinat de procesarea pipeline se suprapune peste un paralelism
spaţial determinat de existenţa mai multor unităţi de execuţie.
Este evident că în cazul superscalar complexitatea logicii de control
este mult mai ridicată decât în cazul pipeline , întrucât detecţia şi
sincronizările între structurile pipeline de execuţie cu latenţe diferite şi care
lucrează în paralel devin mult mai dificile.
Majoritatea microprocesoarelor RISC actuale sunt de tip superscalar.
Exemple remarcabile sunt INTEL 960 CA, SUN SuperSparc, MPC 601,
603, 620 (POWER PC) etc. Microprocesoarele Intel Pentium, AMD K6 etc.
Sunt procesoare având model de programare CISC dar execuţie hardware
superscalară.

2.7.2. Hazarduri în arhitectura superscalară

2.7.2.1. Hazarduri structurale. Dependenţa de resurse.

Prima problemă evidentă este necesitatea de a obţine simultan n


instrucţiuni. Ea este rezolvată printr-un cache ce permite lectura simultană a
mai multor cuvinte la fiecare ciclu şi printr-un bus larg între cache şi
unitatea de instrucţiuni. Mărirea dimensiunilor acestor cache-uri tinde
uneori să ceară mai mult decât un ciclu pentru a efectua un acces complet.
Desigur, acest acces poate fi divizat în două etaje de pipeline. Numărul de
sumatoare, UAL, etc. depinde de gradul superscalar şi determină compoziţia
admisibilă a grupului de instrucţiuni de executat în paralel. De exemplu,
UltraSparc III permite:
-4 instrucţiuni întregi ( 2 instrucţiuni UAL, 1 LD sau ST, 1 branch;)
-2 instrucţiuni flotante;
-2 instrucţiuni grafice.

2.7.2.2. Hazarduri de date


80 Sorin Adrian Ciureanu

Ca şi în arhitectura pipeline simplă , dependenţele de date sunt


gestionate în material (hard). Controlul trebuie atunci să urmărească
dependenţele din interiorul unui bloc de instrucţiuni şi dintre instrucţiunile
din blocuri diferite.
Complexitatea controlului creşte deci pătratic în funcţie de gradul de
suprascalar.
Execuţia pipeline în prezenţa unei dependenţe a datelor penalizează
foarte grav arhitectura superscalară pentru că:
-anticipaţia nu este posibilă între instrucţiunile aceluiaşi bloc când
dependenţa are loc în acelaşi etaj;
(de exemplu, ADD R1R2R3 şi apoi ADD R4R1R2 );
-între instrucţiunile din două blocuri consecutive pentru care nici o
anticipaţie nu este posibilă, (LD R1(R2) în blocul i , ADD R3R3R1 în blocul
i+1), eliminarea suspendării prin deplasare de cod cere compilatorului să
insereze un bloc complet de n instrucţiuni independente de cele ale
blocului i între cele două blocuri.
Execuţie în dezordine. Pentru a limita consecinţele dependentelor de
date, instrucţiunile care urmează unei instrucţiuni suspendate, dar care
suferă de dependenţă, sunt autorizate să progreseze. Cu execuţia în
dezordine, ciclul în care rezultatul unei instrucţiuni devine disponibil nu
poate să fie determinat simplu, în material, la decodarea instrucţiunii.
Algoritmii de control centralizat devin inaplicabili. Decodajul trebuie să fie
descentralizat la fiecare unitate funcţională (figura 2.29). Pentru aceasta,
pipeline-ul se execută în ordine până la o anumită etapă, numită lansarea
instrucţiunii, care poate să fie etajul ID sau un etaj inserat între ID şi EX.
Apoi instrucţiunile sunt trimise fiecare într-un şir de aşteptare asociat
unităţii funcţionale corespunzătoare (FADD către sumatorul flotant, FMUL
către multiplicatorul flotant etc.)..

Unitate funcţională Unitate funcţională

#dest #s1 #s2 #dest #s1 #s2

#dest #s1 #s2 #dest #s1 #s2

#dest #s1 #s2 #dest #s1 #s2

#dest #s1 #s2 #dest #s1 S2

Staţie de rezervare Staţie de rezervare


Arhitectura calculatoarelor 81

Fig. 2.29. Principiul staţiilor de rezervare.

O logică de control asociată şirului de aşteptare examinează bus-ul


de rezultat, pe care transmite rezultatele etichetate cu numărul de registru
destinaţie. Când rezultatul aşteptat trece pe bus, valoarea sa este înregistrată
în câmpul de operanzi al instrucţiunii în aşteptare şi utilizat când
instrucţiunea accede operatorul. Ansamblul format din şirul de aşteptare şi
controlul asociat se numeşte staţie de rezervare
Redenumirea registrelor. O consecinţă a execuţiei în dezordine este
că hazardurile WAW devin mai frecvente: o instrucţiune blocată poate scrie
registrul său destinaţie după o instrucţiune care sintactic o preceda (WAW).
Desigur, este posibil să se introducă suspendări pentru a gestiona aceste
hazarduri: o instrucţiune care trebuie să scrie acelaşi registru ca o
instrucţiune blocată este la rândul său blocată. Recurgerea sistematică la
această soluţie ar anula rapid execuţia în dezordine. Soluţia utilizată în
general este redenumirea registrelor.
Registrele fizice reale sunt mai numeroase decât registrele logice.
Când controlul detectează o dependenţă WAW, scrierea se face în două
registre diferite. Scrierea finală în bancul registrelor care reprezintă bancul
registrelor logice este constrânsă să se efectueze în ordinea sintactică a
programului. Aceasta conduce la introducerea unui etaj suplimentar în
pipeline, corespunzător scrierii finale, numit completare (complete).

2.7.2.3. Hazarduri de control

Instrucţiunile care modifică execuţia secvenţială a instrucţiunilor


sunt salturile, ramificaţiile şi apelurilor de procedură. Semantica
secvenţială impune unei secvenţe sintactice să producă o anumită execuţie,
cu anumite condiţii. Realizarea acestei semantici, pentru o microarhitectură
pipeline nu este deloc simplă. Este vorba în acest caz despre hazarduri de
control.
Hazardurile de control sunt foarte grave în arhitectura superscalară:
este foarte greu să umpli timpul de salt sau de ramificaţie când el este format
nu dintr-o instrucţiune ci din 4 sau 8. În afară de aceasta, pentru ramificaţiile
condiţionate cu anulare, o predicţie rea conduce la anularea a n instrucţiuni
dacă predicţia compilatorului nu este exactă. În sfârşit, compilatorul nu
dispune de suficientă informaţie pentru a prezice eficient comportamentul
ramificaţiilor condiţionate.
82 Sorin Adrian Ciureanu
Principalele tehnici dezvoltate pentru superscalar sunt cache-urile de
adrese de ramificaţie, care suprimă timpul de salt, şi predicţia dinamică de
ramificaţie, care ameliorează performanţele predicţiei.
Cache-urile de adrese de salt. Să considerăm cazul unei ramificaţii
necondiţionate sau al unei ramificaţii condiţionate prezisă „da”. Durata de
ramificaţie este datorată decodării instrucţiunii combinată cu calculul
adresei ţintă, totul efectuându-se pe cât posibil în etajul ID. Tehnica cache-
urilor de adrese constă în memorizarea adreselor ţintă a saltului sau
ramificaţiei corespunzătoare ultimelor salturi sau ramificaţii efectuate.
Pentru fiecare instrucţiune, adresa instrucţiunii de ramificaţie este comparată
cu adresele din cache-ul de ramificaţie, în timpul etajului LI. Dacă adresa
este prezentă, înseamnă că este vorba despre o instrucţiune de ruptură de
secvenţă şi că adresa ţintă a următoarei instrucţiuni de executat este
disponibilă pentru ciclul următor. Se obţine astfel o durată de ramificaţie
nulă. Însă, o instrucţiune de ramificaţie necondiţionată sau prezisă ”da”
conduce la anularea instrucţiunilor următoare în blocul care conţine
instrucţiunea de ramificaţie.
Tampon de predicţie a ramificaţiei. Predicţia dinamică a
ramificaţiei abate comportamentul aşteptat al ramificaţiei de la
comportamentul dintr-o execuţie anterioară instrucţiunilor de ramificaţie. În
cazul cel mai simplu, se utilizează un predictor 1 bit. O tabelă, realizată în
hard, conţine un bit pe intrare. Când se execută o instrucţiune de ramificaţie,
părţile nesemnificative ale adresei de ramificaţie servesc la indexarea tabelei
şi a bitului de prezis rezultatul ramificaţiei. Nu este necesar, deci, să se
aştepte rezultatul calculului condiţiei. O ramificaţie „da” poziţionează
predictorul la „da”, ramificaţia următoare va fi predicţionată „da” şi adresa
ramificaţiei luată din cache-ul de adrese de ramificaţii ; o ramificaţie „nu”
poziţionează predictorul la „nu” , următoarea ramificaţie va fi predicţionată
„nu” şi adresa de bloc de instrucţiuni următoare este luată în secvenţă.
Dacă predicţia este eronată, blocul de instrucţiuni care a început să fie
executat este anulat.
Calitatea predicţiei poate să fie ameliorată în două feluri. Mai întâi,
indexarea prin biţi nesemnificativi nu verifică dacă este vorba de ramificaţie
„bună”; mărind dimensiunile tabelei, probabilitatea acestui eveniment
diminuează. S-a arătat că un rezultat quasi-optimal se obţine cu tabele de
ordinul a 4K intrări.
Pe de altă parte , se poate nuanţa comportamentul predictorului. Se
utilizează un predictor 2 biţi, cu patru stări. (figura 2.26).
Arhitectura calculatoarelor 83
Dezavantajele pot fi de asemenea micşorate utilizând mai multe
cahe-uri de instrucţiuni: unele arhitecturi efectuează simultan lectura
instrucţiunilor ţintă şi a instrucţiunilor în secvenţă.
Instrucţiuni predicţionate. Instrucţiunile de ruptură de secvenţă au
adesea un dezavantaj, mai mult sau mai puţin important. Ele limitează
dimensiunea codului pe care compilatorul poate să-l reordoneze. În practică,
compilatoarele lucrează pe blocuri de bază, adică pe fragmente de cod sursă
cuprinse între două instrucţiuni de ruptură de secvenţă (corpuri de buclă,
fiecare ramură a unui salt condiţionat ). Ori optimizarea compilării este mai
importantă pentru arhitecturile superscalare decât pentru cele de pipeline
simplu: compilatorul va reorganiza codul pentru a prezenta blocuri de
instrucţiuni compatibile şi fără dependenţă.
Instrucţiunile predicţionate introduc condiţia în interiorul
instrucţiunii. De exemplu, în arhitectura Alpha, figurează o instrucţiune
MOVxx. Aici xx este o condiţie booleană standard, care pointează pe
registru. Dacă condiţia este adevărată, instrucţiunea este executată, dacă nu
ea este echivalentă cu un NOP. Penalitatea este atunci de maximum o
instrucţiune şi, mai ales, codul nu mai conţine ramificaţii. De exemplu,
calculul în R3 a minimului dintre două variante conţinute în registrele R1 şi
R2 se va scrie:
MOVA R3,R1
CMP R1,R2
MOVL R3,R2
Arhitectura IA-64 INTEL a realizat ceea ce se urmărea de un deceniu
prin cercetările în arhitectură: un set de instrucţiuni cu toate instrucţiunile
predicţionate.
În concluzie, trebuie remarcat că evoluţia rapidă a circuitelor
integrate modifică foarte repede condiţiile materiale de realizare a unei
ahitecturi logice. În anii 80, esenţial în complexitatea concepţiei unui
microprocesor era concentrată, în afara aspectelor microelectronice proprii,
asupra microprogramării părţii de control, deci asupra optimizărilor fine şi
locale. În prezent, arhitectura trebuie să organizeze într-o structură
eficace un număr considerabil de substructuri, ele insele foarte
complexe.

2.7.3. Arhitectura superscalară Tomasulo

Roberto Tomasulo este considerat a fi pionerul procesării


superscalare, motiv pentru care a fost laureat al premiului Eckert Mauchly
84 Sorin Adrian Ciureanu
Award pe anul 1996, acordat celor mai performanţi constructori şi
proiectanţi de calculatoare.
Arhitectura Tomasulo este de tip superscalar, având deci mai multe
unităţi de execuţie, iar algoritmul de control al acestei structuri stabileşte,
relativ la o instrucţiune adusă, momentul în care aceasta poate fi lansată în
execuţie şi unitatea de execuţie care va procesa instrucţiunea. Arhitectura
permite execuţia multiplă (MEM) şi „Out of Order” a instrucţiunilor şi
constituie modelul de referinţă în reorganizarea dinamică a instrucţiunilor
într-un procesor superscalar. De asemenea algoritmul de gestiune aferent
structurii permite anularea hazardurilor WAR şi WAW, printr-un ingenios
mecanism hardware de redenumire a registrelor, fiind deci posibilă execuţia
„Out of Order” şi în aceste cazuri. Singurele hazarduri care impun execuţia
„In Order” sunt cele de tip RAW.
În cadrul acestei arhitecturi, detecţia hazardurilor şi controlul
execuţiei instrucţiunilor sunt distribuite iar rezultatele instrucţiunilor sunt
”pasate anticipat” direct unităţilor de execuţie prin intermediul unei
magistrale CDB (Common Data Bus).
Principiul arhitecturii Tomasulo este prezentată în figura 2.30. Ea a
fost implementată prima dată în unitatea de virgulă mobilă a calculatorului
IBM 360/91.

Memorie Memorie
date instrucţiuni

LOAD STIVĂ SET


BUFFERS INSTRUCŢIUNI REGISTRE
(LB) FLOTANTE

OPCODE BUS
STORE
BUFFERS

Staţii
3 2
de
2 1 Spre
rezer
1 memorie
vare
(SR)
2 unităţi de
3 unităţi de execuţie
execuţie (MUL)
(ADD)
Arhitectura calculatoarelor 85

CDB

Fig.2.30. Arhitectura Tomasulo

Staţiile de rezervare SR memorează din stiva SIF (Stiva de


Instrucţiuni Flotante, pe post de bufer de prefetch aici) instrucţiunea ce
urmează a fi lansată spre execuţie. Execuţia unei instrucţiuni începe dacă
există o unitate de execuţie neocupată momentan şi dacă operanzii aferenţi
sunt disponibili în SR aferentă.
Fiecare unitate de execuţie (ADD, MUL) are asociată o SR (Staţie de
rezervare ) proprie. Unităţile ADD execută operaţii de adunare/scădere iar
unităţile MUL operaţii de înmulţire/împărţire. Modulele LB(LOAD
BUFFER) şi SB(STORE BUFFER) memorează datele încărcate din
memoria de date respectiv datele care urmează a fi memorate. Toate
rezultatele care vin de la unităţile de execuţie şi de la bufferul LB sunt
trimise pe magistrala CDB.
Există în cadrul procesării superscalare trei stadii de procesare a
instrucţiunilor şi anume:
1) Startare Se aduce o instrucţiune din SIF (bufferul de prefetch)
într-o staţie de rezervare. Aducerea se va face numai dacă există o SR liberă.
Dacă operanzii aferenţi se află în FPR (setul de registre generale), vor fi
aduşi în SR aferentă. Dacă instrucţiunea este de tip LOAD/STORE, va fi
încărcată într-o SR numai dacă există un buffer (LB=Load Buffer sau
SB=Store Buffer) disponibil. Dacă nu există disponibilă o SR sau un buffer,
rezultă că avem un hazard structural şi instrucţiunea va aştepta până când
aceste resurse se eliberează.
2) Execuţie. Dacă un operand nu este disponibil, prin monitorizarea
magistralei CDB de către SR (”snooping” – spionaj), se aşteaptă respectivul
operand. În această fază se testează existenţa hazardurilor de tip RAW între
instrucţiuni. Când ambii operanzi sunt liberi, se execută instrucţiunea în
unitatea de execuţie corespunzătoare.
3) Scriere rezultat (WB). Când rezultatul este disponibil se înscrie pe
CDB şi de aici în FPR sau într-o SR care aşteaptă acest rezultat
(„forwarding”).
Pe parcursul acestor faze nu există testări pentru hazarduri WAR sau
WAW, acestea fiind eliminate prin natura algoritmului de comandă dat mai
jos.
O staţie de rezervare deţine 6 câmpuri cu următoarele semnificaţii:
86 Sorin Adrian Ciureanu
OP – codul operaţiei (opcode) instrucţiunii din SR.
Qj , Qk – codifică pe un număr de biţi unitatea de execuţie (ADD;
MUL) sau numărul buferului LB care urmează să genereze operandul sursă
aferent instrucţiunii din SR. Dacă acest câmp este zero, rezultă că operandul
sursă este deja disponibil într-un câmp Vj sau Vk sau pur şi simplu nu este
necesar. Câmpurile Qj, Qk sunt pe post de TAG, adică adică atunci când o
unitate de execuţie sau un buffer LB „pasează” rezultatul pe CDB, acest
rezultat se înscrie în câmpul Vi sau Vj al acelei SR al cărei TAG coincide cu
numele unităţii de execuţie sau bufferului care a generat rezultatul.
Vj , Vk – conţin valorile operanzilor sursă aferenţi instrucţiunii din
SR. Remarcăm că doar unul din câmpurile Q respectiv V sunt valide pentru
un anumit operand.
BUSY – indică atunci când este setat că SR şi unitatea de execuţie
aferentă sunt ocupate momentan.
Registrele generale FPR şi buferele SB deţin fiecare, de asemenea,
câte un câmp Qi care codifică numărul unităţii de execuţie care va genera
data ce va fi încărcată în respectivul registru general şi va fi stocată în
memoria de date. Aceste registre deţin şi câte un bit de BUSY. Buferele SB
deţin în plus un câmp care conţine adresa de acces şi un câmp care conţine
data de înscris. Buferele LB conţin doar un bit BUSY şi un câmp de adresă.
Spre a exemplifica funcţionarea algoritmului, să considerăm în
continuare o secvenţă simplă de program maşină:

Start Execuţie Scriere rezultat


1 LF F6,27(R1) x x x
2 LF F2,45(R2) x x
3 MULTF F0,F2,F4 x
4 SUBF F8,F6,F2 x
5 DIVF F10,F0,F6 x
6 ADDF F6,F8,F2 x

În continuare prezentăm starea SR şi FPR în momentul definit mai


sus, adică prima instrucţiune încheiată, a doua în faza de execuţie şi celelalte
în faza de startare.
Staţiile de rezervare (SR)
Nume BUSY OP Vj Vk Qj Qk
SR
ADD1 DA SUB [LOAD1] LOAD2
ADD2 DA ADD ADD1 LOAD2
ADD3 NU
Arhitectura calculatoarelor 87
MUL1 DA MUL [F4] LOAD2
MUL2 DA DIV [LOAD1] MUL1

Registrele generale FPR


CÂMP F0 F2 F4 F6 F8 F10
Qi MUL1 LOAD2 ADD2 ADD1 MUL1
BUSY DA DA NU DA DA DA

Din aceste structuri de date implementate în hardware, rezultă, de


exemplu, că SR ADD1 urmează să lanseze în execuţie instrucţiunea SUBF
F8,F6,F2. Valoarea primului operand (F6) se află deja în câmpul Vj unde a
fost memorată de pe magistrala CDB ca urmare a terminării execuţiei primei
instrucţiuni. Evident că rezultatul acestei instrucţiuni a fost preluat de pe
CDB în registrul F6 dar şi în bufferul LB1. Al doilea operand al instrucţiunii
SUBF nu este încă disponibil. Câmpul de TAG Q k arstă că acest operand va
fi generat pe CDB cu „adresa” LOAD2 (LB2) şi deci această SR va prelua
operandul în câmpul Vk de îndată ce acest lucru devine posibil. Preluarea
acestui operand se va face de către toate SR care au câmp de TAG identic cu
LOAD2 (LB2).
Să considerăm, de exemplu, că latenţa unităţilor ADD este 2
impulsuri pe tact, latenţa unităţilor MUL este de 10 impulsuri pe tact pentru
o înmulţire şi 40 impulsuri pe tact pentru o împărţire. Starea secvenţei
anterioare în tactul premergător celui în care instrucţiunea MULTF va intra
în faza WB va fi următoarea:
Start Execuţie Scriere rezultat
1 LF F6,27(R1) x x x
2 LF F2,45(R2) x x x
3 MULTF F0,F2,F4 x x
4 SUBF F8,F6,F2 x x x
5 DIVF F10,F0,F6 x
6 ADDF F6,F8,F2 x x x
În acest moment, starea staţiilor de rezervare şi a setului de registre
generale va fi:

Staţiile de rezervare (SR)


Nume BUSY OP Vj Vk Qj Qk
SR
ADD1 NU
ADD2 NU
ADD3 NU
88 Sorin Adrian Ciureanu
MUL1 DA MUL (LOAD2) [F4]
MUL2 DA DIV [LOAD1] MUL1

Registrele generale FPR


CÂMP F0 F2 F4 F6 F8 F10
Qi MUL1 MUL2
BUSY DA NU NU NU NU DA
De remarcat că algoritmul a eliminat hazardul WAR prin registrul F6
între instrucţiunile DIVF şi ADDF şi a permis execuţia „Out of Order” a
acestor instrucţiuni, în vederea creşterii ratei de procesare. Cum prima
instrucţiune s-a încheiat, câmpul Vk aferent SR MUL2 va conţine valoarea
operandului DIVF, permiţând deci ca instrucţiunea ADDF să se încheie
înaintea instrucţiunii DIVF . Chiar dacă prima instrucţiune nu s-ar fi
încheiat, câmpul Qk aferent SR MUL ar fi poantat la LOAD1 Şi deci
instrucţiunea DIVF ar fi fost independentă de ADDF. Aşadar, algoritmul
evită hazardurile WAR prin „pasarea” rezultatelor în SR de îndată ce acestea
sunt disponibile.
Pentru a pune în evidenţă întreaga forţă a algoritmului în eliminarea
hazardurilor WAR şi WAW prin redenumirea dinamică a resurselor, să
considerăm bucla următoare:
LOOP: LF F0, 0 (R1)
MULTF F4, F0, F4
SD 0 (R1), F4
SUB R1, R1, #4
BNEZ R1, LOOP
Considerând o unitate de predicţie a ramificaţiilor de tip „branch
taken”, 2 iteraţii succesive ale buclei se vor procesa astfel:

Start Execuţie Scriere rezultat


LF F0, 0 (R1) x x
MULTF F4, F0, F4 x
SD 0 (R1), F4 x
LF F0, 0 (R1) x x
MULTF F4, F0, F2 x
SD 0 (R1), F4 x

Se observă o procesare de tip ”loop unrolling” (netezirea buclei) prin


hardware (tabelele imediat următoare) . Instrucţiunea LOAD din a doua
iteraţie se poate executa înaintea instrucţiunii STORE din prima iteraţie
întrucât adresele de acces sunt diferite în câmpurile de buffere. Ulterior şi
Arhitectura calculatoarelor 89
instrucţiunile MULTF se vor putea suprapune în execuţie. De remarcat că
hazardul WAW prin F0 între instrucţiunile LOAD s-a eliminat cu ajutorul
staţiilor de rezervare SR şi a bufferelor SB şi LB .
Staţii de rezervare (SR)
Nume BUSY OP Vj Vk Qj Qk
SR
ADD1 NU
ADD2 NU
ADD3 NU
MUL1 DA MUL [F2 ] LOAD1
MUL2 DA MUL [F2] LOAD2

Bufere SB
CÂMP SB1 SB2 SB3
Qi MUL1 MUL2
BUSY DA DA NU
ADR [R1] [R1]-8
V
Bufere LB
CÂMP LB1 LB2 LB3
ADR [R1] [R1]-8
BUSY DA DA NU
V

Arhitectura Tomasulo are deci avantajele de a avea logica de detecţie


a hazardurilor distribuită şi, prin redenumirea dinamică a resurselor, elimină
hazardurile WAW şi WAR. Acest lucru este posibil pentru că resursele tip
sursă folosite şi aflate în starea BUSY nu se adresează ca nume de registre ci
ca nume de unităţi de execuţie ce vor produce aceste surse. În schimb
arhitectura este complexă, necesitând costuri ridicate. Este necesară o
logică de control complexă, capabilă să execute căutări/memorări asociative
cu viteza ridicată.
Având în vedere progresul tehnologiilor VLSI, variante uşor
îmbunătăţite ale acestei arhitecturi se aplică practic în toate arhitecturile
superscalare actuale . Pentru reducerea conflictelor se folosesc mai multe
busuri de tip CDB.

2.7.4. Arhitectura tipică a unui procesor superscalar


90 Sorin Adrian Ciureanu
Pe baza ideilor de implementare a execuţiilor multiple din arhitectura
Tomasulo, o arhitectură superscalară tipică este alcătuită ca în figura 2.31.
SR sunt staţiile de rezervare aferente unităţilor de execuţie ale procesorului.
Acestea implementează, printre altele, bufferul „instruction Window”
necesar procesoarelor superscalare cu execuţie „Out of Order”. Numărul
optim de locaţii al fiecărei SR se determină prin simulare.
Performanţa maximă a acestei arhitecturi ar fi de 6 instrucţiuni pe
ciclu dar ea este limitată de capacitatea buferului de prefetch. Mărirea
acestei capacităţi complică foarte mult logica de detecţie a hazardurilor
RAW. Modulele componente din schema prezentată în figura 2.31. au
următoarele roluri: Decodificatorul plasează instrucţiunile multiple în SR-
urile corespunzătoare. O unitate funcţională poate starta execuţia unei
instrucţiuni din SR imediat după decodificare, dacă instrucţiunea nu are
dependenţe, are operanzi disponibili şi dacă unitatea de execuţie este liberă.
În caz contrar instrucţiunea aşteaptă în SR până când aceste condiţii vor fi
îndeplinite. Dacă mai multe instrucţiuni dintr-o SR sunt simultan disponibile
spre a fi executate, procesorul o va selecta pe prima din secvenţa de
instrucţiuni.

Cache de
instrucţiuni

Set de Buffer de
registre reordonare

Decodificator

● ● ●

● ● ●

SR 2xSR SR SR SR

branch 2xALU SHIFT LOAD STORE

CDB

ADR DATA

D-CACHE
Arhitectura calculatoarelor 91

Fig.2.31. Arhitectura tipică a unui procesor superscalar

Desigur că este necesar un mecanism de arbitrare în vederea


accesării CDB de către diversele unităţi de execuţie (UE). În vederea
creşterii eficienţei, deseori magistralele interne sunt multiplicate. De
exemplu, într-o structură superscalară puternică, similară cu cea
implementată la microprocesorul Motorola MC 88110, circulaţia informaţiei
beneficiază de multiplicarea magistralelor CDB şi a registrelor generale.
Setul de registre generale este multiplicat fizic; conţinutul acestor seturi
fizice este identic însă în orice moment.

Capitolul 3

UNITATEA DE MEMORIE
3.1. MEMORIA FIZICĂ

Principalele elemente hard care intră într-un sistem de memorie


sunt:
-registrele generale ale procesorului;
-memoria CACHE;
-memoria principală;
-memoria secundară.
În memoria internă a unui computer intră memoria principală şi
memoria CACHE iar memoria externă este formată din memoria
secundară ( hard disk, flopy disk, CD-ROM etc).
Din punct de vedere fizic, memoria internă a unui calculator se
realizează cu circuite integrate semiconductoare iar memoriile externe sunt
magnetice sau optice.

Memorie
principală Memorie
Procesor registre
secundară
generale (RAM)
(hard disc)

Memoria
cache
92 Sorin Adrian Ciureanu

Fig 3.1. Elementele hard ale unui sistem de memorie.

Principalele caracteristici ale unei memorii sunt:


-modul de organizare;
-capacitatea;
-timpul de acces;
-puterea consumată;
-ciclul memoriei;
-tehnologia de realizare.
-Modul de organizare al memoriei este legat de geometria sa şi
înseamnă lungimea unui cuvânt de memorie (8,16,32,64,128 biţi) precum şi
aranjarea şi adresarea cuvintelor. Unitatea minimală de informaţie, care
poate să fie prezentă sau absentă în memoria principală sau memoria
CACHE este blocul. Orice adresă trebuie să aibă două componente:
numărul blocului şi poziţia în bloc. De aici apar o serie de probleme care
trebuiesc luate în considerare: unde se poate plasa un bloc, cum se poate
regăsi un bloc, ce bloc trebuie înlocuit în absenţa blocului referit, cum
funcţionează scrierea etc.
-Capacitatea memoriei înseamnă puterea sa de stocare a informaţiei
şi se exprimă în multipli de baiţi (octeţi).
-Timpul de acces (τa) este o caracteristică de catalog, foarte
importantă, care exprimă viteza unei memorii. De obicei se măsoară la
citire din memorie. Timpul de acces este durata dintre două momente de
timp: momentul când adresa este disponibilă pe liniile de adresă şi
momentul când datele sunt disponibile pe liniile de date. Se exprimă în
unităţi de timp (μs sau ns).

Adresa este disponibilă


Linii adrese
Datele citite sunt disponibile
Linii date

τa
Arhitectura calculatoarelor 93

Fig. 3.2. Reprezentarea timpului de acces al unei memorii.

-Energia consumată de un cap de memorie în unitatea de timp


exprimată, cel mai adesea, în μwatt/bit.
-Ciclul memoriei este timpul necesar pentru scrierea/citirea unei
locaţii de memorie, timp ce se exprimă în μs sau ns.
-Tehnologia de realizare. Există două tehnologii de bază de realizare
a circuitelor integrate şi anume: tehnologia bipolară şi tehnologia MOS.
Tehnologia bipolară are la bază tranzistorul bipolar cu trei joncţiuni
(Baza, Emitor,Colector).

B
E

Ca element de stocare utilizează regimul blocat/saturat al tranzistorului.


Tranzistor blocat: pe BE există o tensiune mai mică de 0,2 V , deci e
ca un întrerupător deschis prin care nu trece curent.
Tranzistor saturat: pe BE există o tensiune mai mare de 0,2 V şi
tranzistorul este deschis, deci e ca un întrerupător închis (ca un scurt circuit)
prin care trece curent. Principalul avantaj al acestei tehnologii este viteza
foarte mare. Principalul dezavantaj este densitatea de integrare destul de
mică. În trecut se făceau microprocesoare de mică capacitate cu tehnologie
bipolară, aşa numitele bit-slice-uri, procesoare pe 4 biţi care erau foarte
rapide. Erau grupate câte 4 sau câte 8 şi alcătuiau procesoare de 16 sau 32
biţi.
Tehnologia MOS (Metal Oxid Semiconductor) are la bază
tranzistorul MOS şi se caracterizează printr-o densitate de integrare foarte
bună dar cu o viteză mult mai mică. Actualele procesoare şi circuite de
memorie se fac cu tehnologia MOS, ajungându-se la o densitate de integrare
de un miliard tranzistori /cip.

3.2. CLASIFICAREA CIRCUITELOR DE MEMORIE

3.2.1. Clasificarea după volatilitate


94 Sorin Adrian Ciureanu
Există memorii :
-volatile;
-nevolatile.
O memorie volatilă este acea memorie în care informaţia se pierde la
decuplarea tensiunii de alimentare iar o memorie nevolatilă nu îşi pierde
informaţia când tensiunea de alimentare este decuplată.
Dintre circuitele de memorie nevolatilă se pot cita : ROM (READ
ONLY MEMORY), EPROM, PROM, FLASHPROM. Primele trei tipuri
utilizează pentru scriere un circuit special de promuri , un dispozitiv care
scrie informaţii în promuri în mod offline. Aceasta se poate realiza o singură
dată. Dacă se doreşte o reînscriere de informaţie în PROM, informaţia veche
trebuie ştearsă. Ştergerea întregii informaţii se făcea cu raze ultraviolete.
Reînscrierea informaţiei în circuitele nevolatile în PROM-uri era anevoioasă
şi, ceea ce era mai deranjant, se făcea offline. Era nevoie de un circuit care
să realizeze acest lucru online. Asemenea circuit a apărut în anii 90 şi se
numeşte FLASHPROM. Iniţial, a fost o comandă a telefoniei mobile dar s-a
extins şi la sistemele de calcul.
Un FLASPHROM este înscris ori de câte ori se doreşte în mod
online, pe busul intern.
Circuitele volatile sunt cele ce nu păstrează informaţia şi sunt de tip
RAM (Random Acces Memory). Ele permit atât scrierea cât şi citirea.

3.2.2. Clasificarea după modul în care sunt păstrate


informaţiile

Din acest punct de vedere există două tipuri de memorie:


-memorie RAM statică;
-memorie RAM dinamică, DRAM (Dynamic Random Acces Memory)

3.2.2.1. Memoria RAM statică

Memoria statică utilizează ca tehnică de memorare funcţionarea


blocat / deschis a unui tranzistor. (0-blocat, 1-deschis). Numărul de
tranzistori aferent stocării unui bit de memorie statică este relativ mare, de
aceea memoria statică este o memorie scumpă. În schimb este o memorie
rapidă. Este utilizată acolo unde este necesară o viteză foarte mare, de
exemplu la memoriile CACHE.

3.2.2.2. Memoria RAM dinamică (DRAM)


Arhitectura calculatoarelor 95
Reducerea numărului de tranzistori pe bit are la bază schimbarea
principiului de stocare a informaţiei. Memoria dinamică utilizează
condensatorul drenă sursă a unui tranzistor MOS. Stocarea informaţiei
foloseşte sarcina acumulată pe condensator. Dacă este descărcat (tensiunea
zero) reprezintă bitul 0 iar dacă este încărcat cu o tensiune oarecare
reprezintă bitul 1.
Deoarece un condensator se descarcă în timp, trebuie să existe o
posibilitate de reîncărcare a tensiunii pe condensator. Acest lucru se numeşte
reîmprospătarea memoriei (refresh memory). Orice memorie dinamică
trebuie să aibă un dispozitiv de refresh care să reîncarce , de obicei la
intervale de timp constante, condensatorul. Dispozitivul este ieftin dar
necesită un timp de refresh ceea ce face ca memoriile dinamice să fie lente.
În concluzie, memoriile statice sunt mai rapide dar mai scumpe iar
cele dinamice sunt mai lente dar mai ieftine.

3.2.3. Structura Unităţii de memorie

În figura 3.1. este reprezentată schema bloc a Unităţii de Memorie


(UM). O schemă mai detaliată este dată în figura 3.3.
Decodificator adresă linie

Col 2(n-2)/2
Col 1

Col 2

n/2

Linia 1

Registru Linia 2
RAS adresă
linie Linia 3

Linia 2(n-2)/2

n/2 n/2

Registru
adrese adresă Multiplexor / Demultiplexor
coloană

CAS
W /R
96 Sorin Adrian Ciureanu

Fig.3.3. Schema bloc a unei memorii RAM dinamice (DRAM).

Schema este constituită din Unitatea de Memorie propriu zisă şi din


trei tipuri de busuri:
-bus de adrese, unidirecţional, pe care utilizatorii memoriei
accesează diferite adrese de UM;
-bus de date, bidirecţional, care constituie suportul de schimb al
informaţiei între UM şi utilizatori, atât în scriere cât şi în citire;
-bus de comenzi şi răspunsuri, bidirecţional, care, în sensul spre
memorie, permite utilizatorului să efectueze diferite comenzi ( de exemplu
bitul W arată o comandă de scriere a memoriei şi bitul R arată o comandă
de citire a memoriei) iar, în sensul dinspre memorie, se arată diferite stări ale
memoriei sau răspunsuri la o operaţie spre memorie.
În această schemă UM este organizată pe linii şi coloane, în mod
matricial. O celulă este de un bit dar în această schemă se poate extinde
celula chiar la dimensiunea unui cuvânt. În acest ultim caz, adresa se
împarte în două părţi: partea superioară şi partea inferioară.
PARTE PARTE
Adresă cuvânt SUPERIOARĂ INFERIOARĂ
ADRESĂ ADRESĂ

RAS
Adresă (Row
rând Address
Strob)

Adresă CAS
coloană (Column
Address
Strob)
Fig.3.4. Decodificarea adresei în memoria RAM dinamică (DRAM) cu
celule de dimensiunea unui cuvânt.

Decodificarea adresei este reprezentată în figura 3.4. Din partea


superioară se va decodifica adresa de linie a matricei iar din partea
inferioară adresa de coloană. Valoarea celor două adrese este făcută de
semnalele CAS (Column Address Strob) şi RAS (Row Address Strob).
Această organizare este avantajoasă pentru accesarea memoriei de la
adresele succesive când nu mai este necesar să se trimită adresele întregi ci
numai adresele de CAS, acest lucru ducând la mărirea vitezei. De remarcat
că un cip de memorie nu este selectat ca alte circuite integrate prin CS (Cip
Arhitectura calculatoarelor 97
Selected) ci numai prin perechea CAS-RAS. În memoria matricială,
regenerarea se realizează, de obicei, în mod simultan, pentru toate celulele
de pe o linie.

3.2.4. Tipuri de circuite de memorie

Principala problemă la crearea unui nou cip de memorie este


reducerea timpului de acces. Dacă propagarea semnalului electric prin toate
componentele unui circuit de memorie are o limită fizică, soluţiile de
îmbunătăţire a timpului de acces se îndreaptă spre două direcţii:
-găsirea unor modalităţi de organizare internă a circuitelor de
memorie care să elimine anumite etape ale ciclului de transfer şi care
favorizează accesul paralel;
-simplificarea protocolului pe bus.
În continuare sunt prezentate câteva din principalele circuite de
memorie utilizate în prezent.

3.2.4.1. Circuite FPM DRAM (Fast Page Mode DRAM)

Este o memorie rapidă, cu acces rapid pe pagină. Viteza sporită se


datorează organizării în linii şi coloane a matricei de memorie. Când
transferul se face la adrese succesive, adresa de linie se dă o singură dată şi
anume la începutul aceluiaşi transfer, generându-se numai adrese de
coloane. Deci se dă un RAS numai la început de ciclu, urmând apoi numai
CAS-uri. În acest fel, timpul mediu de acces, calculat pe o locaţie, scade.

3.4.2.2. Circuite EDO DRAM (Extendet Data Output DRAM)

În cazul memoriilor DRAM clasice, circuitul de memorie este


selectat prin activarea semnalelor RAS-CAS. La transferul de pagină, la
fiecare activare şi dezactivare a semnalului CAS, ieşirile circuitului trec din
starea de înaltă impedanţă în starea selectată şi invers. Aceste treceri măresc
de fapt durata unui ciclu elementar de transfer. La circuitele de tip EDO
DRAM s-a introdus o intrare separată de selecţie care permite validarea
ieşirii circuitului pe toată durata unui transfer de bloc, obţinându-se o
reducere a duratei unui ciclu elementar de transfer. Reducerea timpului de
acces este valabilă numai pentru operaţile de citire a memoriei. Operaţiile de
scriere nu beneficiază de această reducere. Deoarece statistic numărul de
citiri este mai mare de aproximativ 10 ori decât numărul de scrieri, eficienţa
acestui procedeu este destul de ridicată.
98 Sorin Adrian Ciureanu

3.2.4.3. Circuite BEDO DRAM (Burst Extendet Data Output


DRAM)

Este un tip de memorie cu regim de lucru în avalanşă (burst = în flux


continuu). Acest lucru se realizează prin generarea automată a adreselor de
coloană, în interiorul circuitului. După înscrierea unei adrese de coloană, se
generează trei adrese consecutive. În acest mod se poate realiza accesul la
patru locaţii, cu o singură adresă de coloană. Regimul de lucru al acestei
memorii este 4-1-1-1.

3.2.4.4. SDRAM (Synchronous DRAM)

Sunt memorii DRAM sincrone, controlate de un semnal de tact şi


adaptate noului standard de magistrală sincronă introdus de procesoarele
INTEL P6 (Pro, Pentium II şi III). Structura internă a unei memorii SDRAM
de 8MB este dată în figura 3.5. Memoria este organizată pe 4 blocuri,
accesibile în mod concurent. Cele mai importante caracteristici funcţionale
sunt:
-se lucrează în mod sincron, pe un semnal de ceas al procesorului;
-memoria este organizată pe blocuri ce pot funcţiona în paralel;
-adresarea se poate face în regim pipeline;
-este permisă lansarea unui nou acces înainte de terminarea celui
anterior;
BLOC DE CONTROL

REFRESH
CONTOR

CKE
Blocuri de
CLK memorie

CS
Registre 512x8 512x8
WE de
M adresare şi
CAS decodare
Magistrala U 512x8 512x8
RAS
adrese X
intrare / ieşire
Poartă

Magistrala

A
de date

A Control ieşire
adrese blocuri

A
intrare

Controler
REGISTRU REGISRU
COLOANE COLOANE
Arhitectura calculatoarelor 99

Fig. 3.5. Schema unei memorii SDRAM (8MB)

-timpul de acces mediu este de 4 ori mai mic în comparaţie cu o


memorie DRAM clasică.
Structura memoriei favorizează scrierile şi citirile în regim burst. Se
poate preprograma lungimea transferului burst la 1, 2, 4, 8 locaţii sau o
pagină întreagă. Accesul începe la o adresă specificată şi continuă până la
lungimea programată. Lansarea unui transfer se realizează prin înregistrarea
unei comenzi Active, după care se generează o comandă Read ori Write.
Adresa dată pe comanda Active specifică blocul şi adresa de linie iar adresa
dată pe Read / Write specifică coloana de început al transferului de tip burst.
Accesul nu se face numai în mod burst ci şi în mod random (aleator), caz în
care adresa de coloană se poate modifica în fiecare perioadă de tact.

3.2.4.5. Circuite SGRAM (Synchronous Graphics RAM)

Este un SDRAM adaptat echipamentelor de grafică care cer


performanţe deosebite pentru memorie. Permite citirea / scrierea în mod
burst (flux continuu), în blocuri mari. Datele sunt accesibile printr-un singur
port, performanţa sa foarte ridicată datorându-se arhitecturii specifice
organizată pe două bancuri. Aceasta permite accesarea simultană a două
pagini diferite din memoria video.

3.2.4.6. Circuite WRAM (Windows RAM)

Sunt tot circuite utilizate în placa video pentru grafică avansată.


Există două porturi independente care permit operaţii în paralel. De
exemplu, în timp ce pe un port se face refresh-ul imaginii pe ecran, în
celălalt port se pot scrie date în memoria video.

3.2.5. Ierarhii de memorie

Deoarece într-un sistem de calcul cerinţele nu pot fi îndeplinite de un


singur tip de memorie, spaţiul de memorare este ierarhizat pe mai multe
niveluri, cu scopul de a beneficia de diferitele tipuri de memorie. Într-o
astfel de ierarhie se pot identifica următoarele niveluri:
100 Sorin Adrian Ciureanu
-memoria SET-UP;
-memorii BIOS;
-set de registre generale UC;
-memorii CACHE;
-memorii RAM;
-memoria externă;
-memorie virtuală.

3.2.5.1. Memorii SET-UP

Din punct de vedere funcţional, o memorie SET-UP înmagazinează


principalele caracteristici hard ale unui sistem de calcul.
Pentru un calculator tip PC, o memorie SET-UP ar putea avea
următoarea configuraţie:

Main

System Time 21:32:17


System Date 02/21/2006
Legacy Diskette A [None]
Legacy Diskette B [None]
Floppy 3 Mode Suport [Disabled]

►Primary Master [ST380021A]


►Primary Slave [Maxtor 6L200P0]
►Secondary Master [Auto]
►Secondary Slave [ATAPI DVD DD 2x16x4x1]
►Keyboard Features

Language [English]
Supervisor Password [Disabled]
User Password [Disabled]
Halt On [All Errors]
Instaled Memory & 96 MB

Advanced

CPU Speed [1.25/1.3 GHz]


CPU: System Frequency Multiple [12.5x/13.0x]
Arhitectura calculatoarelor 101
System/PCI Frequency (MHz) [100/33]
System SDRAM Frequency Ratio [Auto]
Load Performance Setting [Normal]
CPU VCORE [1.750 V]
CPU Level 1 Cache [Enabled]
CPU Level 2 Cache [Enabled]
CPU Level 3 Cache ECC Check [Disabled]
BIOS Update [Enabled]
PS/2 Mouse Function Control [Auto]
USB Legacy Support [Auto]
USB Legacy Support [Auto]
OS/2 Outboard Memory > 64M [Disabled]
►Chip Configuration
►I/O Device Configuration
►PCI Configuraton

Boot

1 Removable Device [Disabled]


2 IDE Hard Drive [ST 380 02]A]
3 ATAPI CD-ROM [ATAPI DVD DD 2x16x]
4 Other Boot Device [INT18 Device(NetNor)]
Plug & Plax O/S [No]
Reset Configuration Data[No]
Boot Virus Detection [Enabled]
Quick Power On Set/Test [Enabled]
Boot Up Floppy Seck [Enabled]

Power

Power Management [User Define]


Video Off Option [Suspend→Off]
Video Off Method [DPMS Off]
HDD Power Down [Disabled]
Suspend Mode [Disabled]
PWR Button<4Secs [Soft Off]
CPU Thermal Option [Auto]
►Power UP Control
►HARWARE Monitor
102 Sorin Adrian Ciureanu
Exit

Exit Saving Changes


Exit Discarding Changes
Load Setup Defaults
Discard Changes
Save Changes

Se observă că principalele caracteristici hardware ale sistemului se


află în această memorie. Utilizatorul are mai multe posibilităţi:
-cu ENABLED/DISABLED să activeze/dezactiveze o anumită
caracteristică;
-cu AUTO să autoconfigureze un anumit parametru prin citirea sa
automată.
Din punct de vedere constructiv, dezvoltarea memoriei SET UP a
avut două perioade:
-în prima perioadă era implementată cu o memorie RAM dinamică
şi de aceea se mai numea memorie CMOS; deoarece este obligatoriu ca
memoria SET-UP să fie o memorie nevolatilă, era alimentată la o baterie;
-o dată cu apariţia FLASHPROM-ului, memoria SET-UP a fost
implementată cu acest tip de circuit.

3.2.5.2. Memorie BIOS

Memoria BIOS (Basic I/O System) trebuie să conţină o serie de


drivere (programe soft pentru funcţionarea dispozitivelor de intrare/ieşire)
fără de care încărcarea sistemului de operare nu poate să aibă loc. Până ca
SO să preia controlul sistemului, trebuiesc efectuate nişte teste hard şi
trebuie încărcat SO dintr-o memorie externă. În acest scop este necesar ca
sistemul de calcul să folosească tastatura, ecranul, hard discul. Acest lucru
este posibil prin încărcarea driverelor din memoria BIOS.
Până la apariţia PC-ului componenta BIOS era o componentă soft şi
făcea parte din sistemul de operare al maşinii (de exemplu la SO CP/M
exista o componentă numită BIOS). Acest lucru făcea ca maşinile să nu fie
portabile, fiecare maşină trebuind să aibă discul său sistem, cu
caracteristicile tehnice ale maşinii.
Odată cu apariţia PC-ului, componenta BIOS a fost scoasă din SO
şi introdusă în hard.
De remarcat că la ultimele tipuri de calculatoare memoria SET-UP şi
cea BIOS formează o singură componentă numită AWARD BIOS SET-UP.
Arhitectura calculatoarelor 103

3.2.5.3. Set de registre generale

Registrele generale ale UC - ului fac parte din memoria rapidă a


calculatorului. La marea majoritate a procesoarelor ele sunt realizate cu
memorie statică, care este mai rapidă.
Registrele generale sunt adresabile şi sunt la dispoziţia
programatorului în diverse aplicaţii.

3.2.5.4. Memoria cache

Memoria cache este o memorie foarte rapidă, de mică capacitate,


amplasată între procesor şi memoria principală. A fost introdusă cu scopul
de adapta viteza memoriei principale la viteza unităţii centrale (a
procesorului).
Alături de registrele generale memoria cache face parte din categoria
de memorii ultrarapide ale sistemelor de calcul. Deoarece principala
problemă a calculatoarelor actuale rămâne viteza mică a magistralei
unitate centrală ↔ unităţi de memorie, memoria cache reprezintă o
soluţie rapidă ce nu foloseşte această magistrală.
Memoriile cache sunt implementate cu memorie statică, cu un timp
de acces foarte mic , ajungându-se acum la 1-5 ns.
În ceea ce priveşte impulsurile de ceas ale microprocesorului,
consumate pentru a accesa o locaţie de memorie cache, s-a ajuns azi la 1-3
impulsuri de ceas faţă de 15-50 impulsuri de ceas consumate pentru o
operaţie similară în memoria DRAM.
Memoria cache poate fi situată fizic în două locaţii:
-în interiorul microprocesorului, deci în acelaşi cip cu el, pe nivelul
L1, caz în care există performanţe superioare, cu timp de acces foarte mic;
-în exteriorul microprocesorului, integrată în alt cip, pe nivelul L2,
caz în care performanţele sunt mai scăzute.
Principiul de funcţionare a unei astfel de memorii este următorul:
când se doreşte accesarea unei date din memorie, se caută mai întâi în
memoria cache; dacă se găseşte, atunci ciclul se consideră încheiat şi avem
de-a face cu un HIT (succes); dacă data nu se găseşte în cache , atunci ea
trebuie căutată în memoria RAM şi avem de-a face cu un MIS (defect).
De remarcat că accesul la cache se află pe drumul critic al
execuţiilor instrucţiunilor. Orice lectură a unei instrucţiuni accede la cache
pentru a vedea dacă instrucţiunea se găseşte aici. Orice instrucţiune de acces
la memorie accede la cache pentru a încerca să găsească aici data referită.
104 Sorin Adrian Ciureanu
Aceasta defineşte constrângerile temporale ale realizării mecanismului de
căutare.
Principalul parametru care măsoară performanţele unei memorii
cache este RH , rata de HIT:
RT=numărul acceselor cu HIT în cache / numărul total al acceselor UC la memorie
La ora actuală acest parametru este în jur de 90%.
Arhitecturi de memorie cache. Principalele probleme la care
trebuie să răspundă o arhitectură a memoriei cache sunt următoarele:
-dimensiunea optimă a unei memorii cache ;
-locul unde se scrie o nouă informaţie în memoria cache ;
-modul în care se regăseşte informaţia conţinută în memoria
cache;
-care este informaţia din memoria cache care va fi sacrificată
atunci când este plină şi o nouă informaţie trebuie scrisă;
-cum se face scrierea în memoria cache.
În funcţie de rezolvarea acestor probleme există mai multe tipuri de
arhitecturi.
Există două principii de natură statică după care se construiesc
memoriile cache:
-principiu de localitate temporară care arată că există o mare
probabilitate ca o dată sau o instrucţiune adresată la un moment de timp să
fie adresată din nou cât mai curând;
-principiul de localitate spaţială care arată că există o mare
probabilitate ca datele situate la adrese apropiate de o dată accesată de UC
să fie accesată cât mai curând; pe baza acestui principiu, se transferă din
memoria principală RAM în memoria cache nu cuvinte ci blocuri întregi.
Dintre arhitecturile cache existente cităm:
-memoria cache cu mapare directă;
-memorii cache total asociative;
-memorii cache set asociative (semiasociative);
-memorii cache organizate pe sectoare.
a)Memorii cache cu mapare directă
Legătura între cache şi memoria principală se poate face în mai
multe feluri. Corespondenţa între liniile cache - ului şi cele ale memoriei
principale defineşte în ce locaţie se încarcă în cache o linie din memoria
principală. Mecanismul de corespondenţă trebuie să permită să se determine
rapid dacă o adresă memorie corespunde unei linii prezente în cache.
Mapare directă înseamnă că un bloc din memoria principală poate fi
localizat în memoria cache într-un bloc unic, determinat conform regulii de
mapare:
Arhitectura calculatoarelor 105
(Adresa bloc memorie principală)modulo(număr blocuri din cache).
Corespondenţa directă asociază la fiecare linie a memoriei principale
o unică linie de cache: linia i din memoria principală va merge în linia j a
memoriei cache, după regula
j=i modulo N
unde N este numărul liniilor din cache.
Să luăm spre exemplu un cache de 2048 cuvinte şi o memorie
principală de 64 Kcuvinte. Mărimea liniei este de 16 cuvinte. Cache-ul are
deci N=128=27linii şi memoria principală 4K= 212 linii. Linia 0 din cache va
putea conţine liniile 0, 128, 256 din memoria principală; linia 1 din cache va
putea conţine liniile 1, 129, 257 din memoria principală . Metoda este
simplă, uşor de implementat şi permite regăsirea informaţiilor pe bază de
adresă. Dezavantajul acestei metode constă în faptul că, deoarece există mai
multe blocuri din memoria principală care se mapează în acelaşi bloc din
cache, aceste blocuri nu pot coexista în acelaşi timp în cache şi, deci,
accesarea a două blocuri duce la MIS.
b) Memorii cache semiasociative (Set asociative)
În aceste memorii există mai multe seturi , fiecare set având în
componenţă mai multe blocuri. Prin regula de mapare se precizează setul în
care se poate afla blocul dorit:
(adresa bloc memorie principală)modulo(număr seturi memorie cache)
Blocul adresat din memoria principală se poate mapa oriunde în setul
din memoria cache. Atunci când memoria cache este plină şi trebuie încărcat
un boc din memoria principală, este necesar ca să se evacueze un bloc din
cache. Există algoritmi clasici de evacuare, majoritatea inspiraţi din
sistemele de operare, algoritmi ca:
-FIFO (First Input First Output)
-LRU (Least Recently Used) etc.
În ultima vreme se folosesc algoritmi de evacuare predictivă care
anticipează pe baze euristice utilitatea de viitor a blocurilor memorate în
cache, evacuând blocul cel mai puţin valoros.
Dacă un set din cache conţine N blocuri atunci el se numeşte N-way
set asociative. Prin reducerea posibilelor interferenţe ale blocurilor şi prin
creşterea gradului de asociativitate se îmbunătăţeşte rata de HIT şi deci
performanţele globale.
Optimizarea gradului de asociativitate, a capacităţii cache, a lungimii
blocului de cache, nu se pot face decât variind toţi parametrii pentru a
minimiza rata globală de procesare a instrucţiunilor.
c) Memorii cache total asociative
106 Sorin Adrian Ciureanu
În acest caz există un singur set iar încărcarea unei adrese din
memoria principală se poate face oriunde în memoria cache. Ca
implementare nu se utilizează deocamdată un siliciu, datorită timpului mare
de acces.
d) Memorii cache organizate pe sectoare
Memoria principală şi memoria cache sunt divizate în mai multe
sectoare care conţin mai multe blocuri. Adresarea este asociativă, un sector
din memoria principală poate fi plasat în orice sector din cache. Acest tip de
memorie a fost utilizat pentru prima dată la calculatorul IBM360.
e) Tipuri de accese la memoria cache
Accese de scriere:
-strategia Write Through, în care informaţia este scrisă de procesor,
atât în cache cât şi în memoria principală;
-strategia Write Back, în care informaţia este scrisă numai în
memoria cache, în memoria principală fiind scrisă numai la evacuarea din
cache.
Aceste strategii sunt tipice pentru sistemele uniprocesor. În sistemele
multiprocesor mai există două strategii în vederea menţinerii coerenţei
datelor:
-Write Invalidate, în care procesorul care scrie impune ca toate
copiile din celelalte memorii cache să fie invalidate până când el îşi
modifică blocul din memoria cache proprie;
-Write Broadcast, în care procesorul care scrie pune datele pe busul
comun spre a fi actualizate toate copiile din celelalte memorii cache.
Accese de citire:
Accesele de citire sunt date însăşi de definiţia memoriei cache.
Deoarece, statistic, citirea ocupă 75% din accesele la cache, este deosebit de
important să fie atent studiată.
Cauzele de MIS la cache sunt următoarele:
-capacitatea mică;
-interferenţele (conflictele) blocurilor din memoria principală pe un
acelaşi bloc din memoria cache; aceste conflicte pot fi reduse doar prin
mărirea capacităţii sau prin creşterea gradului de asociativitate.
e)Victim Cache
Pentru a se reduce rata de MIS, în special pentru memoriile cache cu
mapare directă, Norman Jouppi de la DEC(Digital Equipement Corporation)
propus conceptul de Victim Cache. Acesta reprezintă o memorie de mică
capacitate, complet asociativă, plasată între primul nivel cache şi memoria
principală.
Arhitectura calculatoarelor 107
Blocurile din cache datorate unui MIS sunt temporar evacuate în
Victim Cache şi la un nou apel al lor pot fi extrase de aici. Decizia de a plasa
un bloc în cache sau Victim Cache este luată cu ajutorul unei informaţii de
stare asociată blocurilor de cache. Biţii de stare conţin informaţii de stare
asociată blocurilor de cache. Aceste informaţii folosesc pentru a exclude
blocurile sigure din cache - ul mapat dorit, reducând înlocuirile ciclice
implicate de acelaşi bloc. Această schemă, numită excludere dinamică,
reduce MIS - urile. O predicţie greşită implică un acces la nivelul următor al
ierarhiei de memorie, contrabalansând eventualele câştiguri în performanţă.
Pentru a reduce numărul de interschimbări între memoria cache,
memoria principală şi Victim Cache, se utilizează SELECTIVE VICTIM
CACHE. Algoritmul pentru SELECTIVE VICTIM CACHE distinge trei
cazuri:
1) HIT IN CACHE, cazul în care nu participă VICTIM CACHE.
2) MIS IN CACHE, HIT In VICTIM CACHE. Cuvântul este extras
din Victim Cache şi trimis spre procesor. Un algoritm de predicţie va acţiona
pentru a determina dacă va avea loc o interschimbare între blocul referit şi
blocul conflictual din memoria cache principală. Dacă algoritmul decide că
blocul din Victim Cache este mai probabil să fie referit din nou decât cel din
cache, se realizează interschimbarea în sensul că blocul din Victim Cache
este transferat în cache.
3) MIS IN CACHE, MIS IN VICTIM CACHE. Dacă data nu este
găsită nici în cache nici în Victim Cache, atunci ea trebuie găsită în nivelul
următor al ierarhiei de memorie. Există două situaţii:
-blocul corespondent din cache este gol; în acest caz noul bloc este
adus în cache iar Victim Cache nu este afectat;
-noul bloc este în conflict cu alt bloc memorat în cache; se aplică
algoritmul de predicţie pentru a vedea care din blocuri are o mai mare
probabilitate de a fi referit pe viitor; dacă blocul care soseşte din memoria
principală are o probabilitate mai mare decât blocul conflictual din cache,
ultimul este mutat în Victim Cache şi noul bloc îi ia locul în cache; blocul
sosit este direcţionat spre Victim Cache şi copiat în blocul tranzitoriu al
cache - ului, mapat direct, de unde poate fi accesat mai repede de către
procesor.
Algoritmul de predicţie. Scopul Algoritmului este de a determina
care dintre cele două blocuri conflictuale are probabilitate mai mare de a fi
referit pe viitor. Blocul considerat cu o probabilitate mai mare de acces în
viitor este plasat în cache, celălalt în Victim Cache.
108 Sorin Adrian Ciureanu
Algoritmul de predicţie se bazează pe algoritmul de excludere
dinamică propus de McFerling. Se utilizează doi biţi de stare, asociaţi
fiecărui bloc, numiţi: HIT bit şi STICKY bit.
HIT bit este:
1 – când a avut loc cel puţin un acces cu HIT la blocul respectiv, de
când el a părăsit CACHE-ul de pe nivelul L1;
0 – blocul corespunzător nu a fost deloc accesat de când a fost
înlocuit în CACHE.
STICKY bit este:
1 – când un bloc este adus în CACHE sau când pentru un anumit
bloc nu a avut loc nici o referire la un alt bloc conflictual cu cel iniţial;
0 – la referirea unui bloc conflictual, dacă algoritmul decide ca
blocul să nu fie înlocuit.
Iată algoritmul de predicţie pentru SELECTIVE VICTIM CACHE:
Cazul 1
Accesarea blocului B.HIT in CACHE
Actualizează HIT bit şi STICKY bit
HIT[B]=1; STICKY[B]=1;
Cazul 2
Accesarea blocului B, HIT in VICTIM CACHE
if STICKY[A]=0 here{interschimbă A cu B;
STICKY[B]=1;
else HIT[B]=1;}
if HIT[B]=0 here { STICKY[A]=0;
copiază B în blocul tranzitoriu;}
else {interschimbă A cuB;
STICKY[B]=1;
HIT[B]=0;}
endif
endif
Cazul 3
Accesarea blocului B, MIS in CACHE şi în VICTIM CACHE
A este blocul conflictual în CACHE
if STICKY[A]=0 here{mută A în VICTIM CACHE;
transferă B în CACHE;
STICKY[B]=1; HIT[B]=1;
else}
if HIT[B]=·0 here {transferă B în VICTIM CACHE;
copiază B în blocul tranzistoriu
STICKY[A]=0;}
Arhitectura calculatoarelor 109
else {mută A în VICTIM CACHE;
transferă B în Cache;
STICKY[B]=1; HIT[B]=0;}
endif
endif

În cazul 2, blocul accesat, notat cu B, este rezident în CACHE.


Acesta implică un conflict între blocul B şi cel din Cache, bloc denumit A.
Algoritmul de predicţie este aplicat pentru a determina dacă va avea loc o
schimbare. Dacă bitul STICKY a lui A este 0, ceea ce înseamnă că blocul nu
a fost accesat de la conflictul anterior la acest bloc, noul bloc B primeşte
prioritate superioară lui A, determinând interschimbare. Dacă bitul STICKY
a lui A este 1 şi bitul HIT al lui B este O, accesul este satisfăcut din VICTIM
CACHE şi nu are loc nici o schimbare, considerându-se că blocul B nu este
suficient de „valoros” pentru a fi aduc în CACHE. Bitul STICKY al blocului
A este resetat astfel încât o secvenţă următoare care implică conflict la acest
bloc va determina mutarea lui A.
În cazul 3 se prezintă situaţia în care au loc accese cu MIS, atât în
CACHE cât şi în VICTIM CACHE. Situaţia este asemănătoare cu cazul 2,
cu excepţia faptului că destinaţia blocului sosit se alege fie CACHE fie
VICTIM CACHE.

3.2.5.5. Memoria RAM

Este memoria principală a unui sistem de calcul. Ea este constituită


din memorie dinamică care necesită refresh. Este o memorie volatilă. Pentru
primele procesoare, memoria RAM avea structura din figura 3.6.
Deoarece memoria este legată de primul microprocesor 8086, are
acces doar 1M. Pentru a se păstra compatibilitatea, restul
microprocesoarelor au trebuit să păstreze aceeaşi schemă de organizare.
Primele microprocesoare, cu sistem de operare MS-DOS, puteau rula
programe numai în memoria de bază (640k). Dacă nu erau acolo puteau fi
aduse din memoria extinsă. De asemenea exista o porţiune de 32k, numită
HIGH MEMORY (memorie înaltă), destinată încărcării celor trei fişiere din
nucleul MS-DOS-ului.
Lucrurile au evoluat, au apărut paginarea şi segmentarea, aşa încât
calculatoarele de azi văd memoria ca un tot unitar, deci memoria de bază +
memoria extinsă; HIGH MEMORY practic nu mai există.

.
Memoria extinsă
1M

640+32k
On
Memorie înaltă

640k

Memorie de bază

Ok
110 Sorin Adrian Ciureanu

Fig. 3.6. Utilizarea memoriei RAM

3.2.5.6. Memoria virtuală

Memoria virtuală este o tehnică de organizare a memoriei prin care


se reuşeşte să se aloce un spaţiu mai mare de memorie decât memoria
internă a unui calculator. Memoria virtuală este alcătuită practic din
memoria internă şi memoria externă (hard discul). Se creează un spaţiu
virtual de adrese, programatorul având iluzia, prin mecanismele memoriei
virtuale, că deţine o memorie de capacitatea hard discului şi nu a memoriei
DRAM. În ceea ce priveşte locul memoriei virtuale în ierarhia de memorii,
putem spune că ea se situează între procesor şi hard disc. Prin mecanismele
de memorie virtuală se măreşte probabilitatea ca informaţia ce se doreşte a fi
accesată de procesor, din spaţiul virtual, să se afle în memoria principală.
Timpul de acces se reduce de la milisecunde la nanosecunde.
Tehnica prin care se realizează memoria virtuală este tehnica
paginării. Spaţiul virtual compus din memoria principală şi memoria externă
(hard discul) este împărţit în pagini numerotate de la 1 la n.

Memoria principală Memoria externă (hard discul)

1 2 3 k k+1 n pagini

Fig.3.7. Paginarea memoriei

Ori de câte ori sistemul de operare are nevoie de o pagină, se vede


dacă aceasta există în memoria principală. Dacă există, este utilizată în mod
normal. Dacă nu, se provoacă o derută de defect de pagină care va apela o
rutină cu rolul de a aduce pagina ce se doreşte a fi accesată din memoria
Arhitectura calculatoarelor 111
externă în memoria principală. Întreg mecanismul este asigurat de către
sistemul de operare, prin gestiunea memoriei. Există, însă, şi un suport
hardware, numit MMU (Management Memory Unit) care asigură
corespondenţa dintre paginile fizice şi paginile logice, practic asigură
maparea paginilor logice pe cele fizice. Este un mecanism asemănător cu cel
de la memoria CACHE. (Paginile fizice sunt pagini ale memoriei principale
iar cele logice ale memoriei virtuale).

Capitolul 4

UNITATEA DE INTRARE/IEŞIRE
Unitatea centrală şi memoria principală comunică cu alte surse şi
destinaţii de informaţie. Unitatea de intrări / ieşiri cuprinde toate aspectele
legate de procesarea acestor interacţiuni. Principalul său rol este de a lega
sistemul de calcul cu lumea externă prin intermediul perifericelor (ecran,
tastatură, discuri, benzi magnetice, reţele etc.). Cea mai mare parte a
interfeţelor cu exteriorul ordinatorului nu sunt pur numerice ci cuprind
dispozitive electromecanice sau electronice analogice.

4.1. SCHEMA UNUI SISTEM DE INTRARE/IEŞIRE

4.1.1. Structura hard a sistemelor de intrare/ieşire

Părţile hard ale unui sistem de intrare/ieşire, a cărui schemă este dată
în figura 4.1., sunt:
-controlerul;
-perifericul propriu-zis.
Controlerul, un ansamblu de circuite numerice de control, este
alcătuit dintr-o serie de registre de comenzi şi de date. Pentru un periferic
112 Sorin Adrian Ciureanu
simplu, ca tastatura sau imprimanta, există un singur registru de comenzi şi
unul de date. Pentru hard disc există mai multe registre de comenzi şi unul
de date. Lungimea registrelor este funcţie de arhitectura calculatorului;
obişnuit este de 16 biţi.
Secvenţa de lucru pentru o operaţie de intrare/ieşire este următoarea:
Când UC detectează o operaţie de intrare/ieşire, transmite principalii
parametri ai operaţiei pe care îi depune, prin intermediul busului, în
registrele de comenzi şi date; în continuare, controlerul, pe baza datelor din
registre, sintetizează comenzi pentru periferic, comenzi pe care le pune în
interfaţa controler/periferic. Dacă este o operaţie de scriere, pune
informaţiile şi pe liniile de date. Perifericul, pe baza acestor comenzi,
execută operaţia şi returnează, pe interfaţa cu controlerul, răspunsurile la
această operaţie şi eventualele erori. Controlerul le preia, le pune în
registrele de comenzi şi date, şi le transmite la UC.

CONTROLER PERIFERIC

UC
Registru comenzi 1

Registru comenzi 2

Dispozitiv
Registru comenzi n de
comandă

UC/Mem
Registru de date

Fig.4.1. Schema bloc a unui sistem de intrare/ieşire.

Cel mai simplu registru de comenzi arată astfel:


1 6 7

GO IE RDY

Bitul 1, de obicei bitul de GO, are rolul de a porni efectiv operaţia.


Bitul 6, IE (Interruption Enable), are rolul de a masca sau nu
întreruperea de intrare/ieşire.
Bitul 7, RDY, este bitul de READY care arată dacă perifericul este în
stare liberă de a primi alte comenzi.
Arhitectura calculatoarelor 113
Perifericul este interfaţa finală cu lumea exterioară (de exemplu
discurile, tastatura mausul etc)

4.1.2. Structura soft a sistemelor de intrare/ieşire

Pe suportul hard prezentat, sistemul de operare furnizează şi


controlează programe care să citească şi să scrie date şi comenzi în registrele
controlerului şi sincronizează aceste operaţii. Sincronizarea se face, de
obicei, cu ajutorul întreruperilor de intrare/ieşire. Pentru a realiza aceste
sarcini, softul sistemului de intrare/ieşire are patru componente:
-rutinele de tratare a întreruperilor;
-driverele asociate dispozitivelor periferice;
-programe independente de dispozitivele periferice;
-primitivele utilizator.

4.1.2.1. Rutine de tratare a întreruperilor

Un proces, care are încorporată o operaţie intrare/ieşire, este blocat


în urma unei operaţii de wait la semafor. Se iniţiază operaţia de
intrare/ieşire iar când operaţia este terminată, procesul este trezit printr-o
operaţie signal, cu ajutorul rutinei de tratare a întreruperilor. În acest fel,
procesul va fi deblocat şi va trece în starea ready.

proces Iniţiere Rutina de Periferic


operaţie tratare a
I/E întreruperilor

ready wait

signal

Fig.4.2. Rutina de tratare a întreruperilor.


114 Sorin Adrian Ciureanu
Se observă că sarcinile principale ale rutinei de tratare a
întreruperilor sunt:
-rutina identifică dispozitivul periferic care a generat o întrerupere;
-rutina reiniţializează linia de întrerupere pe care a utilizat-o
perifericul;
-memorează într-o stivă starea dispozitivului periferic;
-are rolul de a „trezi” procesul care a iniţiat operaţia de I/E printr-o
operaţie signal.
În acest mod procesul va fi deblocat şi trecut în starea ready.
În realitate lucrurile nu sunt aşa de simple, SO având o mare
cantitate de lucru în acest scop. Etapele parcurse în acest proces în care
intervin întreruperile sunt:
- salvarea tuturor registrelor (şi PSW);
- pornirea procedurii de întreruperi;
- iniţializarea stivei;
- pornirea controlorului de întreruperi;
- copierea din registrele unde au fost salvate întreruperile în tabelul
procesului;
- rularea procedurii de întrerupere care va citi informaţia din registre;
- alegerea procesului care urmează; dacă întreruperea a fost cauzată
de un proces de înaltă prioritate, acesta va trebui să ruleze din nou;
-încărcarea registrelor noului proces (inclusiv PSW);
-pornirea rulării noului proces.

periferic Rutina identifică sursa întreruperii.

Linia de Reiniţializează linia de întrerupere.


întrerupere

Memorează starea perifericului.

Trezeşte procesul când operaţia de


Proces signal I/E este gata.
ready

Fig.4.3. Reprezentarea rutinei de întrerupere.


Arhitectura calculatoarelor 115

4.1.2.2. Drivere

Driverul este partea componentă a SO care depinde de dispozitivul


periferic căruia îi este asociat. Rolul său este de a transpune în comenzi la
nivelul registrelor controllerului ceea ce primeşte de la nivelul soft superior.
Din punct de vedere structural, driverul este un fişier care conţine diferite
comenzi specifice unui dispozitiv periferic (figura 4.4.).
C1 C2 Cn-1 Cn Coadă de aşteptare

Desfacerea
parametrilor

DA NU
Parame
tri valizi

Translaţie eroare
Termeni abstracţi→termeni
concreţi

NU DA
Ready
dispoziti
v
periferic

Dispozitiv
Lansarea operaţiei efective
periferic

Blocare
driver
(wait)

Operaţie terminată
Trezire Dispozitiv
driver periferic
(signal)

Citire/scrie
Citire Scriere
re

Date disponibile Zona de memorie disponibilă

Preluarea cererii următoare


116 Sorin Adrian Ciureanu

Fig. 4.4. Schema de funcţionare a unui driver.


Arhitectura calculatoarelor 117

cerere → citirea blocului 1123 de pe hard discul C

adresa hard disc C


număr bloc 1123
operaţie citire date

translaţie
bloc 1123→

poziţionare pe Dispozitiv periferic


cap 2, cilindru 40, sector 2 şi sector 3
citire date Dispozitiv periferic

Blocar
e
driver
(wait)

trezire
driver Citire date de pe sect. 2 şi
(signal 3, cap2, cilindru 40.
)

memorie date disponibile

preluarea cererii următoare

Fig. 4.5. Schema funcţionării unui driver pentru o comandă de citire a


unui bloc logic.
118 Sorin Adrian Ciureanu
O primă problemă care se pune este: unde ar trebui instalate aceste
drivere, în nucleu (kernel) sau în spaţiul utilizator (user) ?
Prezenţa driverelor în user ar avea avantajul unei degrevări a kernelului de
anumite solicitări şi al unei mai bune izolări a driverelor între ele. De
asemenea, la o eroare necontrolată provenită din driver, nu ar mai ceda
sistemul de operare aşa uşor. Totuşi, majoritatea sistemelor de operare
încarcă driverele în kernel şi asta pentru o mai mare flexibilitate şi o mai
bună comunicare, în special pentru driverele nou instalate.
Operaţiile efectuate de un driver, a cărui schemă este dată în figura
4.5, sunt:
- verificarea parametrilor de intrare dacă sunt valizi, în caz contrar
semnalarea erorii;
- translaţia de la termeni abstracţi la termeni concreţi, aceasta
însemnând, de exemplu, la un hard disc:
 cap

număr bloc → adresa cilindru
 sec tor

- verificarea stării dispozitivului ( ready sau nu);
- lansarea operaţiei efective pentru dispozitivul periferic, de
exemplu, o citire a unui sector al hard discului;
- blocarea driverului până când operaţia lansată s-a terminat (printr-
un wait la semafor);
- „trezirea” driverului (prin operaţia signal);
- semnalarea către nivelul soft superior a disponibilităţii datelor (în
cazul unei operaţii de citire de la periferice) sau a posibilităţii de reutilizare
a zonei de memorie implicate în transferul de date (pentru o operaţie de
scriere într-un periferic);
- preluarea unei noi cereri aflate în coada de aşteptare.
Schema de funcţionare a unui driver, pentru o comandă de citire a
unui bloc logic de pe hard discul C, este dată în figura 4.5.

4.1.2.3. Programe-sistem independente


de dispozitive

Sarcinile ce revin acestui nivel soft sunt:


- asigurarea unei interfeţe uniforme pentru toate driverele;
- realizarea corespondenţei dintre numele simbolice ale perifericelor
şi driverele respective; în UNIX, de exemplu, un fişier este asociat unui
dispozitiv periferic;
Arhitectura calculatoarelor 119
- utilizarea unor tampoane sistem, puse la dispoziţie de SO, pentru a
preîntâmpina vitezele diferite ale dispozitivelor periferice;
- raportarea erorilor de intrare/ieşire în conjuncţie cu aceste operaţii
de intrare/ieşire; de obicei erorile sunt reperate şi generate de drivere, rolul
acestui nivel soft fiind acela de a raporta o eroare ce nu a fost raportată.

4.1.2.4. Primitive de nivel utilizator

Cea mai mare parte a sistemului de intrare/ieşire este înglobată în


sistemul de operare dar mai există nişte proceduri, numite primitive de nivel
utilizator, ce sunt incluse în anumite biblioteci. Aceste proceduri au rolul de
a transfera parametrii apelurilor sistem pe care le iniţiază. Aceste primitive
pot lucra în două moduri: sincron şi asincron.
O primitivă sincronă returnează parametrii numai după ce operaţia
de intrare/ieşire a fost realizată efectiv. Se utilizează pentru operaţii de
intrare/ieşire cu o durată ce trebuie estimată sau cu o durată foarte mică.
O primitivă asincronă are rolul numai de iniţiere a operaţiei de
intrare/ieşire, procesul putând continua în paralel cu operaţia. Procesul poate
testa mereu evoluţia operaţiei iar momentul terminării ei este marcat de o
procedură, definită de utilizator, numită notificare. Problemele primitivelor
asincrone sunt legate de utilizarea bufferului de date. Procesul iniţiator
trebuie să evite citirea/scrierea în buffer atât timp cât operaţia nu este
terminată, sarcina aceasta revenindu-i programatorului. Primitivele
asincrone sunt utilizate în cazul operaţiilor cu o durată mare sau greu de
estimat.

4.2. TRANSFERUL DE DATE


ÎNTR-O UNITATE DE I/E

Un transfer de date într-o unitate de I/E poate fi:


-transfer prin program;
-transfer prin întreruperi;
-transfer prin DMA (Direct Memory Acces);
-transfer prin procesor de I/E.

4.2.1. Transfer prin program

Un transfer de date implică existenţa a trei faze:


-iniţializarea transferului;
120 Sorin Adrian Ciureanu
-transferul efectiv de date;
-corecţia erorilor de transfer.
În cazul transferului prin program procesorul este cel care
controlează toate fazele de transfer, prin intermediul unui program care de
fapt este o rutină de intrare/ieşire.
Iniţializarea transferului constă în fixarea portului de intrare/ieşire
prin:
-stabilirea adresei de început a zonei de memorie unde are loc
transferul;
-iniţializarea unui contor cu numărul de cuvinte care se transferă;
-stabilirea sensului de transfer (scriere sau citire).
Transferul efectiv de date constă în schimbul de instrucţiuni dintre
procesor şi periferice, un transfer în care procesorul trebuie să-şi adapteze
viteza de lucru (foarte mare) la aceea a dispozitivului I/E (foarte mică).
Există două feluri de transfer de date:
-transfer programat necondiţionat;
-transfer programat condiţionat.
În cazul transferului necondiţionat, procesorul este acela care
dictează viteza de transfer, neutilizând nici un răspuns din partea
dispozitivului periferic. Există diferite rutine de întârziere prin care se
reglează aceste transferuri. Procesorul trebuie să ştie viteza de lucru a
perifericului şi să utilizeze rutina adecvată acestui scop.
Transferul condiţionat este un transfer mai eficient care se
desfăşoară cu o viteză mai mare. Prin această tehnică procesorul testează un
bit, numit RDY, al perifericului. RDY=1 înseamnă că se poate iniţia un
transfer deoarece perifericul este liber. RDY=0 înseamnă că perifericul este
ocupat cu un transfer în curs şi nu se poate iniţia un transfer.
Transferul prin program are o serie de dezavantaje, cum ar fi:
-procesorul este ocupat cu transferul spre periferic şi nu poate
executa alte operaţii;
-durata minimă a transferului este legată de timpul de execuţie
specific fiecărui periferic.

4.2.2. Transfer prin întreruperi

Dacă transferul prin program este un transfer sincron, transferul prin


întreruperi este unul asincron. Transferul prin întreruperi elimină cele două
dezavantaje ale transferului prin program.
Întrerupere înseamnă oprirea temporară a execuţiei unui program, la
comanda unui semnal extern, şi apelul unei rutine, numită rutină de
Arhitectura calculatoarelor 121
întrerupere, specifică fiecărui eveniment ce a condus la întrerupere. Schema
apariţiei şi tratării unei întreruperi este dată în figura 4.6.

Eveniment ce Program
duce la apariţia Instruct.1
unei întreruperi Instruct.2
Instruct.3
Salvarea stării
curente a
programului

Apelarea Execuţia
rutinei de rutinei de
tratare a întrerupere
întreruperii

Fig. 4.6. Schema de tratare a întreruperii.

De fapt, efectul unei întreruperi este acela al unei instrucţiuni de salt


la o adresă unde se află o rutină care rezolvă fiecare tip de întrerupere în
parte. Sistemul de I/E are o serie rutine, utilizate în special de sistemul de
operare. Un exemplu este dat în figura 4.2.

4.2.3. Transfer direct prin DMA (Direct Memory Acces)

Transferul DMA se desfăşoară între periferic şi unitatea de memorie


internă (UM), fără ca procesorul să intervină. În acest mod se creează un fel
de conductă între periferic şi UM, premiză pentru viteze mult mai mari.
Un transfer DMA are mai multe faze, la fel ca la celelalte tipuri de
transfer:
-iniţializarea transferului;
-transferul efectiv de date;
-verificarea terminării şi corectitudinii transferului.
La iniţializare, procesorul scrie în registrele interne ale controlerului
următoarele date:
-adresa de început a blocului de memorie ce trebuie transferat;
-lungimea blocului, de obicei în octeţi;
122 Sorin Adrian Ciureanu
-sensul de transfer (scriere/citire);
-alte date cu privire la transfer.
În faza de transfer efectiv, blocul de memorie este dus spre sau de la
periferic, în funcţie de sensul transferului.
Transferul prin DMA este utilizat când se doreşte o cantitate mare de
transferat şi este folosit în special de hard disc sau de compact disc.

4.2.4. Transfer prin procesor de intrare/ieşire

La unele sisteme de calcul există procesoare specializate în operaţii


de I/E. La calculatoarele mai vechi un astfel de procesor se numea Canal
Selector (CS) sau Unitate de Schimburi Multiple (USM), la cele mai noi se
numeşte Procesor de I/E.
USM erau procesoare care aveau instrucţiuni de I/E proprii. La
calculatorul Felix-256, prevăzut cu USM, existau 5 astfel de instrucţiuni:
SIO, TIO, TDV, HIO, TSV. Când Unitatea Centrală decodifica o astfel de
instrucţiune, ea era trimisă către UM pentru a fi executată, UC executând în
paralel altă instrucţiune.
Procesorul de I/E actual mai presupune un protocol de comunicaţii
între procesorul central şi procesorul de I/E.
Să considerăm exemplul unei interfeţe care trebuie să primească date
de la un periferic şi să le transmită procesorului octet cu octet. Interfaţa este
conectată direct la busul de adrese şi date al procesorului.. Această
organizare, tipică pentru arhitecturile bazate pe microprocesoare de 8 biţi,
nu mai este de actualitate, dar ilustrează funcţionalităţile elementare cerute.
Interfaţa conţine un registru de date CDATA, de un octet, care culege
date de la periferic. Controlul transferurilor implică faptul ca interfaţa să
poată să indice procesorului momentul în care transferul de la periferic s-a
terminat, deci când un nou octet este disponibil. Când interfaţa primeşte un
octet de la periferic, ea poziţionează bitul CRDY din registrul său de stare
STATUS. Procesorul citeşte registrul de stare şi va citi octetul dacă
CRDY=1.
Din punct de vedere al UC, trebuie să se dispună de un mijloc de a
adresa registrele CDATA şi CRDY. Tehnica cea mai utilizată este de a
rezerva în spaţiul de adresare un anumit număr de adrese. Aceste adrese sunt
asociate registrelor interfeţei, decodând busul de adrese.
În acest exemplu procesorul interoghează interfaţa până când aceasta
este disponibilă. Această tehnică se numeşte polling. Este posibil, însă, să fie
scutit procesorul de această sarcină , autorizând interfaţa să-şi semnaleze
singură disponibilitatea.
Arhitectura calculatoarelor 123
Dacă se complică puţin problema, putem presupune că interfaţa
trebuie să poată de asemenea să primească un octet de la procesor pentru
transmisie la periferic. Registrul STATUS trebuie să conţină atunci şi un alt
bit, pentru a semnala că interfaţa a terminat transmisia precedentă şi este
deci gata să primească un nou octet. Şi sensul transmisiei trebuie precizat,
deci interfaţa trebuie să dispună de un semnal de intrare RD/WR
(READ/WRITE). În sfârşit, procesorul trebuie să semnaleze interfeţei în ce
moment a scris octetul pe busul de date, de unde un alt semnal DS (Data
Strobe). Organizarea temporală a acestor diverse semnale face parte din
protocolul busului, aşa cum se va arăta mai departe.
Procesor de I/E.
Într-o maşină monoprocesor, operaţiile I/E sunt, în ultimă instanţă,
controlate de UC. Prima problemă este de a şti la ce nivel se face acest
control. UC face controlul fin al acestor operaţii sau delegă această sarcină
operatorilor sau procesoarelor specializate? Conexiunea directă dată mai sus
este un exemplu al primei soluţii. Însă tendinţa constantă este de a delega cât
mai multe funcţionalităţi unor procesoare specializate, altele decât cel
principal. Din acest punct de vedere se pot distinge două tipuri de
funcţionalităţi:-.
-procesări specializate foarte legate de I/E, ca postscripturile şi
procesările grafice;
-procesările de transferuri de date pure, ca ,de exemplu, lectura unei
pagini de disc.

4.2.5. Instrucţiuni de I/E

Setul de instrucţiuni la nivel ISA (Instructions Set Architecture) este


complet diferit de setul de instrucţiuni la nivelul microarhitecturii. Atât
operaţiile care pot fi efectuate cât şi formatele instrucţiunilor sunt diferite la
cele două niveluri. Existenţa ocazională a unui mic număr de instrucţiuni
identice pentru cele două niveluri este absolut întâmplătoare.
Dimpotrivă, setul de instrucţiuni la nivel OSM conţine cea mai mare
parte din instrucţiunile nivelului ISA, la care se adaugă câteva noi
instrucţiuni şi din care se elimină câteva instrucţiuni considerate periculoase.
Cele două niveluri diferă considerabil mai ales în zona de instrucţiuni I/E.
Explicaţia este că un utilizator care ar putea să execute direct instrucţiuni de
I/E la nivel ISA ar putea citi date confidenţiale memorate oriunde în sistem.
Pe de altă parte programatorii normali nu doresc să utilizeze instrucţiuni I/E
la nivel ISA deoarece procedeul este greoi şi complex.
124 Sorin Adrian Ciureanu

4.2.5.1. Fişiere

Instrucţiunile virtuale I/E pot fi utilizate folosind o abstracţie numită


fişier care constă dintr-o secvenţă de octeţi scrişi la un dispozitiv de I/E.
Dacă dispozitivul I/E este unul de memorare ( de ex. un disc), fişierul poate
fi citit şi la un moment ulterior; dacă dispozitivul nu este de memorare, (de
ex. o imprimantă), evident fişierul nu mai poate fi citit ulterior.
Un disc poate conţine mai multe fişiere, fiecare cu un tip particular
de date. Fişierele diferite pot avea lungimi diferite, precum şi alte
proprietăţi. Abstractizarea unui fişier permite ca operaţiile I/E virtuale să fie
organizate într-un mod mai simplu.
Pentru sistemul de operare, un fişier este doar o secvenţă de octeţi.
Prin definiţie , fişierul este:
-unitatea logică de stocare a informaţiei;
-o colecţie de informaţii definită de creatorul ei;
-o colecţie de informaţii mapate pe perifericele fizice.
Pentru fişiere, operaţiile de intrare/ieşire sunt realizate prin apeluri
sistem de deschidere, citire, scriere şi închidere a fişierului.
Odată ce fişierul a fost deschis, se poate citi din el. Apelul sistem
read trebuie să conţină cel puţin următorii parametri:
-un indicator către fişierul deschis din care urmează să se citească;
-o referinţă către o memorie tampon în care vor fi puse datele;
-numărul de octeţi care vor fi citiţi.
Apelul read transferă datele cerute în memoria tampon. În mod
normal el întoarce totalul de octeţi citiţi efectiv care poate fi mai mic decât
numărul cerut. Fiecare fişier deschis are asociat un indicator care indică
octetul ce urmează a fi citit. După un apel read acesta este avansat cu
numărul de octeţi citiţi, astfel încât apeluri read consecutive vor citi blocuri
de date consecutive din fişier. Când un program a terminat de citit dintr-un
fişier, îl poate închide, pentru a informa sistemul de operare că nu îl va mai
folosi, permiţând sistemului de operare să dealoce zona din tabela folosită
pentru a păstra informaţii despre fişierul respectiv.
Pentru calculatoarele foarte mari, un fişier poate fi o secvenţă de
înregistrări logice (logical records) , fiecare cu o structură bine definită.
Unele sisteme fac diferenţa între fişiere cu înregistrări cu structură diferită şi
cele cu înregistrări cu aceiaşi structură.
Instrucţiunea virtuală de bază citeşte următoarea înregistrare din
fişierul specificat şi o pune în memoria principală, începând de la adresa
specificată (fig.4.7.). Pentru a realiza această operaţie, instrucţiunea virtuală
Arhitectura calculatoarelor 125
trebuie informată din ce fişier să citească şi unde să pună înregistrarea în
memorie. Adesea există posibilitatea citirii unei anumite înregistrări,
specificate fie prin poziţia sa în fişier, fie prin cheia sa.

Numărul 14
înregistrării
logice 15 Următoarea
înregistrare
16 logică ce
urmează a fi
17 citită

18

19

20 Memoria
principală
21
Înregistrarea Zonă
22 logică 18 tampon
a) 23

24

25

Numărul 15
înregistrării
logice 16 Următoarea
înregistrare
17 logică ce
urmează a fi
18 citită

19

20

21 Memoria
principală
b) 22
Înregistrarea Zonă
23 logică 18 tampon

24

25

Fig. 4.7. Citirea dintr-un fişier organizat pe înregistrări logice.


a)Înainte de citirea înregistrării. b)După citirea înregistrării.
126 Sorin Adrian Ciureanu
Instrucţiunea virtuală de ieşire scrie o înregistrare logică din
memorie într-un fişier. Instrucţiuni write consecutive produc înregistrări
logice consecutive în fişier.

4.2.5.2. Implementarea instrucţiunilor virtuale de I/E

În organizarea şi memorarea fişierelor, o problemă de care trebuie să


ţină seama toate sistemele de fişiere este alocarea de spaţiu. Unitatea de
alocare poate fi un singur sector dar cel mai adesea constă într-un bloc de
sectoare consecutive.

Fig.4.8. Strategii de alocare pentru discuri. (a)Fişier memorat pe


sectoare consecutive. (b)Fişier memorat în sectoare neconsecutive.

În modul de memorare a fişierelor se pot utiliza unităţi de alocare


consecutive sau nu. Figura 4.8. ilustrează un disc simplu, cu o singură faţă,
conţinând cinci piste cu 12 sectoare fiecare. Figura 4.8.a. prezintă o schemă
de alocare în care sectorul este unitatea de alocare şi în care un fişier constă
din sectoare consecutive. Alocarea consecutivă a blocurilor fişierelor este în
mod curent folosită la CD-ROM-uri. Figura 4.8.b. prezintă o schemă de
alocare în care sectorul este unitatea principală de alocare a spaţiului dar în
care un fişier nu trebuie să ocupe obligatoriu sectoare consecutive. Această
schemă este modelul standard pentru hard discuri.
Arhitectura calculatoarelor 127
Există o diferenţă importantă între modurile în care aplicaţia
programatorului şi sistemul de operare văd un fişier. Programatorul vede
fişierul ca o secvenţă liniară de octeţi sau înregistrări logice. Sistemul de
operare vede fişierul ca o colecţie ordonată de unităţi de alocare pe disc, nu
neapărat consecutive.
Pentru ca sistemul de operare să poată transfera la cerere octetul sau
înregistrarea logică n dintr-un fişier, trebuie să existe o metodă de localizare
a datelor. Dacă fişierul este alocat secvenţial, sistemul de operare are nevoie
să ştie doar adresa de început a fişierului pentru a calcula adresa octetului
sau înregistrării logice necesare. Dacă fişierul nu este alocat consecutiv, nu
este posibil să se calculeze adresa într-un fişier oarecare având doar adresa
de start a fişierului. Pentru localizare este necesară o tabelă numită indexul
fişierului (file index) care furnizează lista unităţilor de alocare şi adresele
lor efective pe disc. Indexul fişierului poate fi organizat fie ca o listă a
adreselor blocurilor pe disc (folosită în UNIX), fie ca o listă de înregistrări
logice care furnizează adresa pe disc şi deplasamentul pentru fiecare. Uneori
fiecare înregistrare logică are o cheie (key) şi programele pot adresa o
înregistrare folosind cheia sa, în locul numărului înregistrării logice. În acest
caz, o a doua organizare este necesară, fiecare intrare conţinând pe lângă
poziţia înregistrării şi cheia sa. Această organizare este specifică
calculatoarelor foarte mari.
Modul de alocare consecutiv oferă o administrare mai simplă a
blocurilor dar, atunci când dimensiunea maximă a fişierelor nu este
cunoscută în prealabil, această tehnică poate fi folosită foarte rar. Dacă un
fişier începe în sectorul j şi poate creşte în sectoare consecutive, s-ar putea
ca la sectorul k să e lovească de un alt fişier şi să nu aibă loc unde să se
extindă. Dacă fişierul nu este alocat consecutiv această problemă nu apare,
deoarece blocurile succesive pot fi memorate oriunde pe disc. Dacă discul
conţine câteva fişiere care se extind, fără ca dimensiunea finală a lor să fie
cunoscută, memorarea lor ca fişiere consecutive este imposibilă. Mutarea
unui fişier existent este uneori posibilă dar întotdeauna costisitoare.
Dacă dimensiunea maximă a tuturor fişierelor este cunoscută în
prealabil, ca în cazul înregistrării unui CD-ROM, programul care face
scrierea poate prealoca pentru fiecare fişier un număr de sectoare exact egal
cu dimensiunea fiecărui fişier. Găsirea fiecărui fişier este simplă, când
primul sector al fişierului este cunoscut.
Pentru a aloca spaţiu pe disc unui fişier, sistemul de operare trebuie
să ţină seama de blocurile disponibile, precum şi de cele folosite pentru
memorarea altor fişiere. Pentru un CD-ROM calculul este făcut odată, la
început, dar pentru un hard disc fişierele apar şi dispar frecvent. O metodă
128 Sorin Adrian Ciureanu
constă în menţinerea unei liste a tuturor spaţiilor disponibile, un spaţiu
disponibil fiind orice număr de unităţi de alocare contigue. Figura 4.9 a.
ilustrează lista spaţiilor disponibile (free list) pentru discul din figura
4.8.b. Metoda alternativă este menţinerea unei hărţi de biţi, cu un bit pe
unitate de alocare, ca în figura 4.9.b. Un bit 1 indică o unitate de alocare
alocată iar un bit 0 indică faptul că este disponibilă.

Pistă Sector Număr de


sectoare
din
spaţiul
disponibil Sector
0 0 5 Pistă 0 1 2 3 4 5 6 7 8 9 10 11
0 6 6 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 10 1 0 0 0 0 0 0 0 0 0 0 1 0
1 11 1 2 1 0 1 0 0 0 1 0 0 0 0 0
2 1 1 3 0 0 0 1 1 1 1 1 1 0 0 0
2 3 3 4 1 1 1 0 0 0 0 0 0 0 0 0
2 7 5
3 0 3
3 9 3
4 3 8

(a) (b)

Fig. 4.9 Două moduri pentru menţinerea evidenţei sectoarelor


disponibile.(a)Listă a spaţiilor disponibile. (b)Hartă de biţi.

Prima metodă are avantajul găsirii cu uşurinţă a unui spaţiu


disponibil de lungime dată dar şi dezavantajul unei lungimi variabile. Când
fişierele sunt create şi distruse, lungimea listei variază ceea ce este neplăcut
Harta de biţi are avantajul de a avea o lungime constantă. În plus,
schimbarea statutului unei unităţi de alocare de la disponibil la alocat
necesită modificarea unui singur bit. Totuşi, găsirea unui bloc cu o
dimensiune dată este dificilă. Ambele metode necesită actualizarea listei sau
tabelei de alocare când un fişier de pe disc este alocat sau modificat.
Dimensiunea unei unităţi de alocare este determinată de mai mulţi
factori. În primul rând, timpul de acces şi întârzierea de rotaţie controlează
accesul la disc. Presupunând 10ms timpul de poziţionare la începutul unei
unităţi de alocare, este mult mai bine să citim câte 8KB (aproximativ 1ms)
decât câte 1 KB (aproximativ 0,125ms), ţinând seama de faptul că citirea a
8KB ca opt unităţi de 1KB va necesita opt accese la disc. Această
eficientizare a transferului este un argument pentru unităţi de alocare mari.
Arhitectura calculatoarelor 129
Un alt argument pentru alegerea unităţilor de alocare mari este şi
faptul că folosirea lor conduce la mai puţine unităţi şi astfel sunt necesare
mai mici şi mai puţine fişiere index sau liste înlănţuite în memorie.
Totuşi, dacă unitatea de alocare este mare, se pierde mai mult spaţiu
atunci când nu este ocupată total de un fişier. Cu cât unităţile de alocare sunt
mai mari, cu atât spaţiul mediu pierdut va fi mai mare, ajungându-se uneori
să se piardă jumătate din spaţiul de alocat. Unităţile mici sunt preferabile din
punct de vedere al eficienţei memoriei
În prezent eficienţa transferului tinde să fie factorul cel mai
important astfel că dimensiunea blocurilor tinde să crească.

4.2.5.3.Instrucţiuni pentru gestiunea cataloagelor

Informaţia on-line, adică cea direct accesibilă calculatorului, fără să


fie necesară intervenţia umană, este memorată în fişiere, fiind accesibilă
programelor prin intermediul instrucţiunilor I/E. Informaţia off-line necesită
intervenţie umană înainte de a putea fi accesată de calculator (ex. CD-
ROM).
Sunt însă necesare instrucţiuni suplimentare pentru gestionarea
informaţiei memorate on-line, pentru colectarea ei în unităţi convenabile şi
protecţie împotriva folosirii neautorizate.
Modul obişnuit de organizare a fişierelor on-line este gruparea lor în
cataloage (directories). Figura 4.10 prezintă un exemplu de organizare a
cataloagelor. Sunt disponibile apeluri sistem pentru cel puţin următoarele
funcţii:
-crearea unui fişier şi includerea sa într-un catalog;
-ştergerea unui fişier dintr-un catalog;
-redenumirea unui fişier;
-modificarea atributelor de protecţie (protection status) ale unui
fişier.
Există mai multe scheme de protecţie. O posibilitate este ca
proprietarul să specifice o parolă secretă pentru fiecare fişier. Când încearcă
accesul la un fişier, un program trebuie să furnizeze parola pe care sistemul
de operare o validează înainte de a permite accesul. Altă metodă este ca
proprietarul să ofere o listă cu persoanele ale căror programe pot accesa
fişierul .
Toate sistemele de operare permit utilizatorilor să lucreze cu mai
mult de un catalog de fişiere. Fiecare catalog este în mod normal tot un
fişier, astfel încât poate fi inclus într-un alt catalog, ceea ce duce la apariţia
unui arbore de cataloage. Existenţa mai multor cataloage este utilă în mod
130 Sorin Adrian Ciureanu
special pentru programatorii care lucrează la mai multe proiecte. Ei pot
grupa toate fişierele care aparţin unui proiect într-un catalog. Cataloagele
sunt de asemenea un mod de partajare a fişierelor între membrii unui grup.
Fişier 0 Nume fişier:
Fişier 1 Lungime:
Fişier 2 Tip:
Fişier 3 Data creării:
Fişier 4 Ultimul acces:
Fişier 5 ← Ultima modificare:
Fişier 6 Numărul total de accese:
Fişier 7 Bloc 0 Pista 4 Sector 6
Fişier 8 Bloc 1 Pista 19 Sector 9
Fişier 9 Bloc 2 Pista 11 Sector 2
Fişier 10 Bloc 3 Pista 77 Sector 0
(a) (b)
Fig.4.10.(a)Catalogul unui utilizator. (b)Conţinutul unei intrări într-un
catalog.

4.3. PROCESAREA INTRĂRILOR/IEŞIRILOR

Cele două tehnici fundamentale de control al transferurilor


corespund celor două atitudini posibile ale controlerului:
-interogarea ( polling); controlerul este pasiv şi aşteaptă ca UC să
vină să-l consulte prin lectura cuvântului de stare;
-întreruperea; UC delegă o sarcină controlerului şi continuă execuţia
în curs; când controlerul a terminat operaţia de I/E, cere unităţii centrale
(UC) să intervină, ceea ce întrerupe execuţia în curs.
Alegerea uneia dintre cele două tehnici depinde de procentele de
utilizare a procesorului desemnat pentru gestiunea evenimentelor de I/E. Să
considerăm exemplul unui procesor de 100MHz şi a trei periferice: un
maus, o dischetă şi un disc:
-un maus care este suficient să fie interogat de 30 ori pe secundă;
sunt deci 30 evenimente pe secundă;
-o dischetă care transmite, prin pachete de 16 biţi, cu un debit de
50KO/s; avem deci 50.103/2 = 25.103 evenimente pe secundă;
-un controler de disc, care poate transmite prin 32 biţi, cu un debit de
2MO/s; avem deci 2.106/4 = 5.105 evenimente pe secundă.
Presupunând că procesarea unui eveniment consumă 100 cicluri
procesor, se poate calcula fracţiunea din timpul procesor utilizat pentru
gestiunea directă.
Arhitectura calculatoarelor 131
30.10 2
-maus:  0,003%
100.10 6

25.10 5
-dischetă:  2,5%
100.10 6

5.10 7
-disc:  50%
100.10 6

Deci, gestiunea prin polling a mausului este neglijabilă, în timp ce


aceea a discului nici nu poate fi luată în consideraţie.

4.3.1. Mecanismul întreruperilor

Mecanismele materiale de interfaţă dedicate întreruperilor trebuie să


permită unui controler de I/E să se semnaleze unităţii centrale şi să
furnizeze informaţiile necesare procesării întreruperilor. Informaţiile legate
de întreruperi pleacă de la controlerii de I/E, prin busul de I/E şi busul
sistem şi fac parte din protocolul busului. Prezentarea simplificată ce
urmează se referă la interfaţarea directă dintre periferice şi UC.
Recunoaşterea întreruperilor. Unul sau mai multe fire de cerere
transmit la UC cereri de întrerupere. Sunt posibile două organizări:
-o singură intrare de cerere externă, numită în general INT;
-mai multe intrări care codifică nivelul de prioritate al cererii.
Anumite procesoare dispun de un semnal de primire a cererii de
întrerupere INTA, pentru a semnala interfeţelor de gestiune a întreruperilor
că a luat cunoştinţă de cerere. Alte procesoare confirmă recepţia printr-o
scriere prin intermediul busurilor de adrese şi de date. Pentru procesoarele
care nu au decât o singură intrare pentru cereri externe, se pune problema de
a transmite pe un singur fir cereri potenţial simultane. Pe de altă parte UC
nu are mijlocul direct de a cunoaşte care controler de I/E a emis o cerere de
întrerupere. Ea ştie numai că există o cerere. Această dublă problemă poate
fi rezolvată printr-o interfaţă materială specializată.
Interfaţa materială specializată (figura 4.11) este adresabilă prin UC:
ea poate citi (cuvânt de stare) sau scrie (cuvânt de control) în registrele
acestei interfeţe.
132 Sorin Adrian Ciureanu
Cererile individuale de întrerupere ale perifericelor sunt transmise
controlerului de întreruperi. Acesta va transmite cererea unităţii centrale prin
firul de cerere INT. UC răspunde, când este gata să proceseze cererea,
printr-un semnal de recepţie INTA.
În cazul cererilor multiple, controlerul stabileşte o prioritate după
mai multe protocoale posibile stabilite prin programarea controlerului.
Alegerea unui tip de prioritate ( prioritate fixă, prioritate turnantă când
ultimul servit devine cel mai puţin prioritar etc.). depinde de natura
perifericelor: periferice cu constrângeri de timp foarte diferite sau periferice
de acelaşi tip.

Bus adrese

Cereri de
UC INTA Controler de întrerupere
întreruperi

INT

Bus date

Fig. 4. 11. Controler de prioritate

Controlerul de prioritate permite şi tratarea problemei rămase:


transmiterea, când s-a luat cunoştinţă de cererea prin UC (INTA), a
informaţiei pe perifericul care a emis cererea.
De fapt, UC are nevoie să ştie adresa de debut a procedurii de tratare
a cererii. La recepţia semnalului INTA, controlerul va transmite la UC, prin
busul de date, o informaţie corespunzătoare numărului cererii de întrerupere
care va fi, direct sau printr-o transformare simplă, adresa memorie a
pointerului care conţine adresa de debut a procedurii de tratare. Acest
mecanism se numeşte vectorizarea întreruperilor. Adresele de debut ale
procedurilor de tratare constituie un vector de întrerupere situat într-o zonă
a memoriei,. Controlorul de întrerupere transmite către UC indicele
vectorului, permiţând astfel să se proceseze o anumită întrerupere.

4.3.2. Întreruperi şi excepţii


Arhitectura calculatoarelor 133

Vom considera problema cea mai generală a situaţiilor excepţionale


care se referă la funcţionarea normală a UC când aceasta execută un
program (Tabelul 4.1).

Tabelul 4.1. Situaţii excepţionale (întreruperi) în timpul execuţiei


unei instrucţiuni.
Faza unei instrucţiuni Situaţie excepţională
Citirea instrucţiunii Defect de pagină
Violarea protecţiei memoriei
Acces nealiniat la memorie
Decodajul instrucţiunii Cod de operaţie ilegal sau
nedefinit
Acces la memorie Defect de pagină
Violarea protecţiei memoriei
Acces nealiniat la memorie
Execuţia instrucţiunii Eroare aritmetică

4.3.2.1. Situaţii excepţionale (întreruperi)

Situaţiile excepţionale pot să provină de la un eveniment intern


execuţiei unui program sau de la un eveniment extern, independent de
execuţia programului în curs, tipic unei cereri a unui controler de I/E.
Situaţiile excepţionale au nume diferite, după constructorii de maşini. Se pot
numi excepţii, greşeli sau întreruperi. În continuare se va utiliza termenul
întrerupere pentru toate aceste situaţii şi tratarea lor.
Situaţiile interne pot proveni fie din probleme nerezolvabile , fie
dintr-o cerere a programului. În primul caz, instrucţiunea care provoacă
excepţia se numeşte faulting. Principalele probleme sunt date în tabelul 4.1.
Defect de pagină. Apare când, la un acces al memoriei, adresa
referenţiată nu există într-o pagină fizic prezentă în memoria principală.
Trebuie deci să se iniţializeze un transfer de pagină de pe disc pe memoria
principală. După acest transfer, execuţia instrucţiunii faulting poate
reîncepe.
Violarea protecţiei memoriei. Accesul la memorie cerut nu este
autorizat conform drepturilor de acces indicate în tabela paginilor. În acest
caz, violarea protecţiei memoriei este semnalată şi nu se poate relua execuţia
instrucţiunii.
134 Sorin Adrian Ciureanu
Acces memorie nealiniat. Dacă arhitectura materială impune
aliniamentul, instrucţiunea care efectuează un acces nealiniat nu poate fi
executată. Dacă accesul nealiniat este permis (x86), nu este cazul unei
situaţii de excepţie.
Coduri operaţii ilegale sau nedefinite. Când PC conţine un cod care
nu corespunde unei instrucţiuni, partea de control nu poate decoda
instrucţiunea care este irecuperabilă. Cauza cea mai frecventă, într-un
program compilat, este o eroare de programare care conduce contorul
programului la poantarea pe o zonă de date. O situaţie excepţională de
acelaşi tip este tentativa de execuţie a unei instrucţiuni protejate în mod
normal.
Erori aritmetice. Erorile aritmetice nu constituie în mod necesar o
situaţie excepţională. Ar putea fi considerate ca atare în anumite medii de
programare (opţiuni de compilaţie) sau apeluri de biblioteci sistem.
Generare prin program. Programul utilizator face apel la
mecanismul de gestiune a întreruperilor pentru a efectua sarcini particulare.
Utilizatorul cheamă o procedură a sistemului de operare cu ajutorul unei
instrucţiuni maşină numită instrucţiune logică, de exemplu instrucţiunea SC
(system call) în POWER PC.
Situaţiile externe sunt de asemenea de diverse feluri, de la
imposibilitatea funcţionării, până la cererea de intervenţie plecând de la
organele externe: controlere de periferice, alte procesoare etc.
Imposibilitatea funcţionării. Tăierea alimentării sau o pană materială
a UC sunt cauze de imposibilitate de funcţionare. Dacă pana materială este
fără ieşire, tăierea alimentării este o situaţie excepţională care poate fi
recunoscută şi tratată dacă maşina utilizată posedă memorii cu acces
aleatoriu (RAM) nevolatile. Atunci este posibil ca, în scurta perioadă dintre
detectarea penei şi momentul în care circuitele nu mai sunt operaţionale din
cauza alimentării insuficiente, să se execute cele câteva sute de instrucţiuni
pentru a salva în memoria nevolatilă esenţialul contextului în curs de
execuţie.
Căderea UC este un caz particular de o astfel de situaţie. O comandă
exterioară RAZ forţează reiniţializarea UC. Totuşi această situaţie este
particulară pentru că nu se tratează cauza prin mecanismul general de tratare
a întreruperilor ci prin mecanismul specific de reiniţializare, prin execuţia
unei proceduri de pornire conţinută într-o memorie ROM specifică.
Cererea de intervenţie externă. Este o cerere provenită din exteriorul
UC şi care necesită o anumită procesare; cererile provenite de la controlerii
perifericelor pentru a gestiona intrările/ieşirile sunt un exemplu tipic. Aceste
Arhitectura calculatoarelor 135
cereri, însă, pot proveni şi de la alte UC, în cazul multiprocesoarelor, şi sunt
un mijloc general de dialog între diferiţi masteri.
Caracteristicile situaţiilor excepţionale (întreruperilor). În tabelul
4.2. sunt date principalele caracteristici ale situaţiilor excepţionale.

Tab.4.2. Caracteristicile întreruperilor.


Situaţia Redemarare Sincronă Mascabilă Sesizarea
sau oprire sau prin
asincronă utilizator
Defect de pagină Redemarare S NM În timpul
Violarea memoriei Oprire S NM În timpul
Acces nealineat Oprire S M În timpul
Cod op. ilegal Oprire S NM În timpul
Eroare aritmetică Oprire S M În timpul
Appel sistem Redemarare S NM Între
Alimentare Oprire A NM În timpul
Cerere I/E Redemarare A NM Între

Redemarare sau oprire. Când întreruperea permite rezolvarea


problemei, instrucţiunea care a provocat-o este redemarată. Pentru a
permite redemararea, trebuie să fie salvat contextul programului întrerupt şi
restituit după procesare. În cazul în care situaţia excepţională este
ireparabilă, programul trebuie să fie oprit imediat. Totuşi contextul poate să
fie salvat în acest caz pentru a autoriza scrierea într-un fişier (CORE în
contextul UNIX) a stării procesorului şi a memoriei. Acest fişier poate fi
utilizat de reparator pentru a afla cauza erorii.
Sincron sau asincron. Când întreruperea rezultă din execuţia unei
instrucţiuni a programului, ea intervine în mod sincron cu ceasul
procesorului. Din contra, va fi asincronă când provine dintr-un eveniment
extern, total independent de ceasul procesorului.
Întrerupere mascabilă sau nu de către utilizator. Anumite situaţii
excepţionale trebuiesc neapărat tratate; de exemplu un defect de pagină.
Altele însă pot fi ignorate sau tratate, la alegerea utilizatorului; este cazul
erorilor aritmetice când ele sunt considerate situaţii excepţionale.
Apariţia întreruperii între instrucţiuni sau în timpul unei
instrucţiuni. Întreruperile care intervin în timpul execuţiei unei instrucţiuni
împiedică continuarea execuţiei. Cele care intervin între instrucţiuni
provoacă fie o tratare pe programul în curs, fie o tratare pe o cerere
exterioară care intervine între două instrucţiuni ale programului în curs.
136 Sorin Adrian Ciureanu

4.3.2.2. Gestiunea întreruperilor

Gestiunea întreruperilor comportă trei etape:


a)-sesizarea întreruperii;
b)-salvarea contextului;
c)-tratarea întreruperii.
a)-Sesizarea întreruperilor. Este o problemă foarte delicată deoarece
se pun o serie de probleme. În ce moment sunt testate cazurile posibile de
întreruperi? Cum să se ţină cont de cererile exterioare asincrone în raport cu
funcţionarea procesorului? Ce trebuie făcut în prezenta unor cauze multiple
a întreruperilor? Ce prioritate trebuie definită?
Pentru un procesor fără pipeline, cauzele întreruperilor sunt
examinate la sfârşitul fiecărei instrucţiuni. Procesorul examinează cauzele
posibile în ordinea descrescătoare a priorităţii. Examinând eventualităţile de
întreruperi la un moment precis, la sfârşitul instrucţiunii, procesorul
realizează o sincronizare de fapt a cererilor de I/E care intervin într-o
manieră asincronă.
Pentru un procesor cu pipeline, mai multe instrucţiuni se execută
simultan, deci ordinea întreruperilor nu este în mod necesar aceeaşi ca aceea
a instrucţiunilor. Două opţiuni sunt posibile.
-Sesizarea întreruperilor în ordinea secvenţială a instrucţiunilor:
orice întrerupere a unei instrucţiuni i este tratată înaintea unei întreruperi
produsă de instrucţiunea i+1 . Este suficient să se testeze eventualitatea
unei întreruperi într-o fază dată, ca debut al fazei de aranjare de rezultat care
nu poate provoca întrerupere.
-Cealaltă aproximaţie constă luarea în consideraţie a întreruperilor în
ordinea în care ele apar ceea ce înseamnă că o întrerupere legată de
instrucţiunea i+1 poate să fie tratată înaintea întreruperii produsă de i.
Sistemul de operare trebuie să recunoască instrucţiune care a întrerupt şi,
după tratare, să redemareze instrucţiunea care a produs întreruperea.
Cea mai mare parte a procesoarelor cu pipeline tratează întreruperile
în ordinea secvenţială a instrucţiunilor.
Pe de altă parte, cererile externe asincrone trebuie să fie testate la
fiecare ciclu al ceasului şi nu la sfârşitul fiecărei instrucţiuni.
b)-Salvarea şi restituirea contextului. După sesizarea întreruperii,
procesorul trebuie să salveze contextul programului întrerupt. Problemele
principale sunt: ce trebuie salvat, cum şi unde să fie salvat?
La procesoarele fără pipeline, contextul ce trebuie salvat este simplu:
el cuprinde contorul de program, starea procesorului şi ansamblul de
Arhitectura calculatoarelor 137
registre ce conţin informaţii semnificative ale programului în curs de
execuţie.
La procesoarele cu pipeline, execuţia simultană a mai multor
instrucţiuni face dificilă îngheţarea unei pipeline într-o stare precisă, mai
ales ţinând cont de instrucţiunile aritmetice flotante la care partea execuţie
ţine mai multe cicluri. Dacă procesorul permite ca instrucţiunile să se
termine într-o altă ordine faţă de cea în care au început, problema este şi mai
complicată. Există întreruperi precise, când se poate îngheţa starea
pipeline-ului într-o stare precisă, astfel încât toate instrucţiunile dinaintea
celei care a provocat întreruperea să fie executate până la sfârşit, iar
instrucţiunea care a provocat întreruperea şi cele următoare să fie
redemarate dacă întreruperea o permite. Există şi întreruperi imprecise, când
este imposibil să se îngheţe pipeline-ul într-o stare precisă, dar când există
suficientă informaţie pentru redemararea execuţiei informaţiei.
Întreruperi multiple şi priorităţile lor. Întreruperile semnalate pot
interveni simultan sau într-o manieră amestecată. Problema este relativ
simplă în ceea ce priveşte ordinea tratării întreruperilor ce intervin simultan,
afectând la fiecare tip de întrerupere o prioritate. La fiecare ciclu, procesorul
examinează existenţa sau inexistenţa întreruperilor, în ordinea
descrescătoare a priorităţilor. Întreruperea cu prioritate mai mare este tratată
întâi.
Mai greu este de stabilit ce trebuie făcut în cazul în care o situaţie
excepţională intervine în cursul tratării unei alte întreruperi. Trebuie oprită
sau nu procedura de tratare în curs? Există diferite strategii, la diferitele
procesoare. Cea mai simplă tehnică constă în dotarea procesorului cu
instrucţiuni de autorizarea (STI pentru Set Interrupt) şi inhibarea(CLI
pentru Clear Interrupt) întreruperilor. O tehnică mai elaborată constă în
dotarea procesorului cu un anumit număr de niveluri de prioritate codate pe
un anumit număr de biţi.
c)Tratarea întreruperilor constă în executarea unei proceduri
specifice, permiţându-se apoi redemararea execuţiei instrucţiunii faulting, în
cazurile când se permite redemararea după tratare, sau informarea
utilizatorului, în cazurile de excepţii fatale. Procedurile de tratare a
întreruperilor (figurile 4.2 , 4.3. , 4.6.) sunt în general accesate printr-o
tabelă de pointere, situată într-o zonă definită a memoriei, rezervată
sistemului de operare şi accesibilă prin adresare directă. Este asociat la
fiecare cauză de întrerupere un număr care permite accesul la o intrare a
tabelei de pointeri. Pointerii conţin adresa de debut a procedurilor de tratare
a întreruperilor.
138 Sorin Adrian Ciureanu
4.4. PERIFERICE DE I/E

Clasificăm perifericele în două mari categorii:


-periferice care stochează informaţia (memorii externe);
-periferice care nu stochează informaţia.

4.4.1. Memorii externe

În această categorie intră perifericele care stochează informaţii, cele


mai importante fiind hard discul şi compact discul.

4.4.1.1. Principii fizice de stocare a datelor

În prezent se utilizează două principii de stocare a datelor:


a)-principiul magnetic;
b)-principiul optic.
a)-Principiul magnetic
Înregistrarea magnetică este procesul de magnetizare a unui volum
extrem de mic dintr-un material subţire care capătă proprietăţile unui
magnet permanent. Există două entităţi care interacţionează într-o
înregistrare magnetică:
-capul magnetic de scriere/citire/ştergere;
-mediul magnetic, unde se stochează efectiv informaţia.
Capul magnetic este de fapt o bobină străbătută de curent, sensul
curentului prin bobină determinând biţii 0 şi 1. În mediul magnetic există
dipoli orientaţi, sensul unui dipol corespunzând biţilor 0 şi 1.
↑↑↓↓↓↑↓↓ …….mediul magnetic
11000100……..biţi de informaţie
Procesul de scriere se produce în felul următor: biţii de 0 şi 1 sunt
transmişi către perifericul magnetic; un dispozitiv va induce pentru biţii de 0
un curent de un sens iar pentru biţii de 1 un curent de sens contrar.
Materialul ce trebuie magnetizat se află în contact cu capul magnetic sau în
imediata apropiere. În funcţie de sensul curentului din bobină, se induce
sensul dipolului din mediul de magnetizare.
Pentru procesul de citire, în capul magnetic se induce un curent cu
sensul în funcţie de sensul dipolului, curent care va da biţii 0 şi 1.
După decenii de cercetări, cu rezultate spectaculoase în ceea ce
priveşte materialele feromagnetice utilizate şi structura dispozitivelor,
problemele care se pun la ora actuală pentru înregistrările magnetice sunt
Arhitectura calculatoarelor 139
acelea de a obţine o densitate de înregistrare cât mai mare pe mediile
magnetice şi o frecvenţă de comutare cât mai mare în capetele magnetice.
Hard discurile din prezent funcţionează cu o densitate de
aproximativ 10 GB/inch2 dar se prevede o creştere medie destul de mare. O
problemă apare: până la ce densitate de înregistrare se va putea ajunge,
deoarece la un moment dat se poate trece în paramagnetism, adică la o stare
în care, dipolii magnetici fiind foarte apropiaţi, se pierd complet
caracteristicile feromagnetice. Această limită ar fi în jurul valorii de 40
GB/inch2 dar studii recente arată că, cel puţin teoretic, ar putea fi mai mare.
În ceea ce priveşte capetele magnetice, acestea sunt mai în urmă, în
sensul că nu există încă capete magnetice care să facă faţă actualelor
densităţi obţinute.
b)Principiul optic
Mediul în care se păstrează informaţia constă dintr-un material în
care există cavităţi şi soluri depuse pe un substrat policarbonic de pe un
disc, cavităţile având adâncimi diferite de ale solurilor. Pentru a citi aceste
informaţii, o diodă laser de mică intensitate trimite unde infraroşii care vor
fi reflectate sub unghiuri diferite de către cavităţi şi soluri. Un detector de
unghi va transforma aceste semnale în semnale de 0 şi 1. Tranziţia
cavitate/sol va fi un semnal 1 şi absenţa acestei tranziţii va fi un semnal 0.
Cavităţile şi solurile sunt inscripţionate într-o spirală continuă, pornind din
centrul şi până la marginea discului.

α1 α2

Fig.4.12. Principiul înregistrării optice a informaţiei. Variaţia unghiului


de reflexie la tranziţia cavitate/sol.

Pentru a realiza variaţia de reflexivitate, se utilizează mai multe


tehnici. Una dintre ele utilizează o peliculă transparentă aplicată pe un strat
de aur. În starea iniţială pelicula este transparentă şi lasă raza laser să treacă
şi să se reflecte pe stratul de aur. Pentru a efectua operaţii de înscriere a
140 Sorin Adrian Ciureanu
datelor, se utilizează o diodă laser de mare putere ( 8-16 mW). Când se face
înscrierea, dioda de mare putere va emite un fascicul care loveşte un punct
de peliculă. Aceasta se încinge şi se distruge o legătură chimică ceea ce
determină apariţia unui punct întunecat. La citire, dioda de mică putere (0,5
mW) emite un fascicul care va fi reflectat numai de zona nearsă.
Fotodetectorul va sesiza diferenţa dintre zonele întunecate, în care pelicula a
fost distrusă, şi zonele transparente, în care pelicula este intactă. Această
diferenţă dintre unghiurile de reflexie este interpretată ca şi diferenţa între
cavităţi şi soluri.

4.4.1.2. Hard discuri

Un hard disc (disc dur) foloseşte principiul magnetic de stocare şi


este constituit dintr-un ansamblu de suprafeţe discoidale care se rotesc în
jurul unei axe de rotaţie. Fiecare suprafaţă este divizată în piste concentrice
şi fiecare pistă este împărţită în sectoare.
Unitatea de scriere/citire este sectorul.
Părţile principale ale unui hard disc (figura 4. 13) sunt:
-platanele cu discuri;
-căruciorul cu capete de scriere/citire;
-motorul care roteşte platanul cu discuri;
-motorul pas cu pas pentru căruciorul cu capete.
Trecerea de pe o pistă pe alta se poate face cu capete fixe sau mobile.
În sistemul cu capete fixe, există un cap de citire/scriere deasupra fiecărei
piste; trecerea de la o pistă la alta se face prin comutare electronică.
Orice disc, este împărţit în piste concentrice; pistele k de pe toate
discurile formează un cilindru virtual, cilindrul k. La un moment dat este
activ un singur cap care trebuie să se poziţioneze pe un anumit cilindru şi
aici, pe un anumit sector.
Căruciorul cu capete primeşte comenzi de poziţionare pentru un
anumit cilindru iar un cap selectat va citi/scrie de pe un anumit sector
aparţinând cilindrului k.
Elementele unui hard disc sunt: cap, cilindru, sector.
Elementul informaţional fizic de bază este sectorul. Un sector are în
componenţa sa o zonă de adrese şi una de date (informaţională):
-zona de adrese (adrese se cap, de cilindru , de sector);
-zona de informaţii.

Adresă Adresă Adresă Zonă de informaţie


cap cilindru sector
Arhitectura calculatoarelor 141

Zona de date este de lungime fizică ce depinde de firma


producătoare. Există hard discuri cu 512 octeţi/sector, cu 140 octeţi/sector,
2 KO/sector etc.
Zona de adrese (cap, cilindru sector) se scrie cu formatarea low-
lewel care, la ora actuală, se face în firma producătoare.
Acesta este nivelul fizic al structurii unui hard disc. Structura sa
logică este dependentă de sistemul de operare care vede hard discul format
numai din blocuri. Un bloc are mai multe sectoare.

cap 7

cap 6

cap 5
Motor pas
cu pas
pentru cap 4
căruciorul
cu capete cap 3

cap 2

cap1

cap 0

Cărucior cu
capete Motor de rotaţie a
platanelor

Fig. 4.13. Hard disc cu 4 platane.

Există o serie de caracteristici care indică performanţele uni hard


disc:
-timpul mediu de căutare, adică timpul, calculat statistic pentru piste
alese aleatoriu, de comutare de pe cilindrul i pe cilindrul j; actualii timpi de
căutare au valori în jur de 1ms;
142 Sorin Adrian Ciureanu
-latenţa de rotaţie care este timpul necesar rotirii platanului, astfel
încât sectorul dorit să ajungă sub cap; există viteze de rotaţie de 3600, 5400,
7200, 10800 rotaţii/minut iar latenţa de rotaţie medie este de câteva
milisecunde;
-densitatea biţilor care poate fi densitate liniară şi densitate
radială; densitatea liniară, de-a lungul circumferinţei pistei, este diferită de
cea radială; un bit este aproximativ 50 de ori mai mare în direcţie radială
decât în lungul circumferinţei; discurile actuale au 50000-100000 biţi/cm;
-timpul de transfer care este timpul total necesar ajungerii
informaţiei de la disc la calculator; timpul de transfer depinde de densitatea
liniară şi de viteza de rotaţie.
Din punct de vedere al interfeţelor şi al modului de organizare,
există următoarele feluri de discuri:
a)-discuri IDE /EIDE ;
b)-discuri SCSI;
c)-discuri RAID.
a)-Discurile IDE (Integrated Drive Electronics) sunt caracteristice
pentru primele calculatoare PC şi erau tributare unor anumite tipuri de hard
discuri, cu un anumit număr de cilindri, capete, sectoare.
Discurile EIDE (Extendet IDE) corespundeau unor hard discuri cu
performanţe superioare. Faţă de IDE se aduceau următoarele îmbunătăţiri:
-se utiliza o schemă de adresare şi la nivel logic, de bloc;
-se puteau controla patru discuri pe aceeaşi faţă;
-aveau o rată de transfer crescută;
-aveau posibilitatea de a accesa şi CD-ROM-uri.
b) Discurile SCSI (Small Computer System Interface) se deosebesc
de cele IDE/EIDE prin două lucruri:
-rate de transfer mult mai mari;
-o interfaţă diferită.
Practic SCSI este mai mult decât o interfaţă, este chiar o magistrală.
Pe această magistrală se pot conecta până la 7 dispozitive (hard discuri,
CD.ROM-uri, DVD-uri, streamere, scanere etc.). Fiecare dispozitiv are un
identificator unic, de la 0 la 7, şi 2 conectori, unul pentru intrare şi unul
pentru ieşire. Ieşirea unui dispozitiv este conectată prin cabluri cu intrarea
următorului, în serie. Controlerele şi perifericele SCSI pot lucra fie ca
iniţiatori, fie ca ţinte. Controlerul acţionează drept iniţiator şi trimite
comenzi perifericelor care se comportă ca nişte ţinte. Aceste comenzi se
transmit sub formă de blocuri. Comenzile apar în faze, permiţând tuturor
dispozitivelor să ruleze în acelaşi timp. Acest lucru e posibil datorită
existenţei unui arbitru de magistrală, când mai multe periferice accesează
Arhitectura calculatoarelor 143
magistrala. Între timp SCSI-2 şi , mai recent, SCSI-3 au înlocuit vechiul
standard SCSI-1.
c) Discurile RAID (Redundant Array of Independent Disks =
mulţime redundantă de discuri independente) sunt alcătuite după o idee a lui
Patterson, din 1988, care sugerează o prelucrare paralelă de I/E după
modelul de arhitectură paralelă utilizat la procesoare. Discurile RAID au
următoarele proprietăţi:
-sunt văzute de către soft ca un singur disc virtual;
-datele sunt distribuite pe discuri în aşa fel ca să se permită operarea
lor în paralel;
-sunt organizate pe nivele, dar nu nivel în sensul ierarhic, ci un nivel
semnificând un mod de organizare posibil; există 6 nivele, adică 6 moduri
de organizare posibile.
Nivelul 0
În această formă de organizare, un disc RAID este împărţit în mai
multe benzi, iar o bandă are k sectoare.
Banda 0 este alcătuită din sectoarele 0 – (k-1)
Banda 4 este alcătuită din sectoarele k – (2k-1)
Banda 8 este alcătuită din sectoarele 2k – (3k-1)
Se scriu benzi consecutive pe discuri. Pentru 4 discuri, organizarea
este cea din figura 4.14.

Banda 0 Banda 1 Banda 2 Banda 3

Banda 4 Banda 5 Banda 6 Banda 7

Banda 8 Banda 9 Banda 10 Banda 11


10

Fig. 4.14. RAID de nivelul 0.

Distribuirea datelor pe mai multe discuri în acest mod se numeşte


STRIPING. De exemplu, dacă se doreşte citirea unui bloc format din 4
benzi consecutive, începând de la o margine a benzii, atunci această citire va
fi executată în paralel, de 4 citiri separate, una pentru fiecare din cele 4
discuri. RAID-ul pe nivel 0 funcţionează mai bine dacă numărul de cereri
este foarte mare şi funcţionează foarte prost dacă numărul de cereri este mic.
Dacă se cere citirea unui sector, atunci practic nu mai există paralelism şi
performanţele sunt rele. De asemenea RAID-ul pe nivel 0 prezintă
dezavantajul unei siguranţe în exploatare ceva mai scăzută.
Nivelul 1
144 Sorin Adrian Ciureanu
Pe nivelul 1, toate discurile sunt duplicate, adică fiecare are o copie
de siguranţă.
În figura 4.15. este dat un RAID de nivelul 1 cu 4 discuri normale şi
4 duplicate.
La o scriere, fiecare bandă este scrisă de două ori. La citire se poate
utiliza oricare dintre copii, distribuind încărcarea pe mai multe discuri. Deci,
la scriere, performanţele sunt la fel cu cele de pe nivelul 0. La citire
performanţele, însă, pot fi şi de două ori mai bune. Acest nivel, utilizând
copii de siguranţă, îmbunătăţeşte mult toleranţa la defecte.

Banda 0 Banda 1 Banda 2 Banda 3

Banda 4 Banda 5 Banda 6 Banda 7

Banda 8 Banda 9 Banda 10 Banda 11


10

Banda 0 Banda 1 Banda 2 Banda 3

Banda 4 Banda 5 Banda 6 Banda 7

Banda 8 Banda 9 Banda 10 Banda 11


10

Fig. 4.15. RAID de nivel 1.

Nivelele 2 şi 3
Dacă pe nivelele 0 şi 1 se lucra pe bază de benzi de sectoare, pe
nivelele 2 şi 3 se lucrează pe bază de cuvinte sau octeţi. Un disc pe nivelul
2 poate lucra cu coduri Haning detectoare de erori iar cele de pe nivelul 3 cu
paritate la fiecare grup.

BM1 BM2 BM3 BM4 BM5 BM6 BM7

Fig. 4.16. RAID de nivelul 2.

BM1 BM2 BM3 BM parity


Arhitectura calculatoarelor 145

Fig. 4.17. RAID de nivelul 3.

Nivelele 4 şi 5
Se lucrează cu benzi de sectoare. Pe nivelul 4 se fac scrieri/citiri
independente iar pe nivelul 5 informaţia de paritate este împrăştiată pe toate
discurile.

4.3.1.3. CD-ROM -uri

CD-ROM-urile (Compact Disc - Read Only Memory) utilizează


principiul optic de stocare a informaţiei. Ele au o densitate de înregistrare
mult mai mare decât discurile magnetice dar sunt mai puţin rapide decât
discurile magnetice. Timpul de căutare fiind de câteva sute de milisecunde,
ele nu intră în aceeaşi categorie de performanţă ca discurile magnetice.

Etichetă tipărită

Strat de lac protector Punct


întunecat
Strat reflectorizant de aur ars de
1,2mm laser
Strat de vopsea
Strat de policarbonat

Direcţia de mişcare
Lentile

Fotodetector Prizmă

Diodă cu laser
în infraroşu

Fig. 4.18. Secţiune transversală printr-un disc şi laser.


146 Sorin Adrian Ciureanu
Prima generaţie de discuri optice a fost inventată de firma PHILIPS
care stoca filme. Diferite standarde ce au apărut ulterior au fost încadrate în:
-Cartea Roşie;
-Cartea Galbenă;
-Cartea Verde.
Cartea Roşie reprezintă standardul pentru primele CD-uri produse de
firmele PHILIPS şi SONY. Scopul creării Cărţii Roşii a fost de a oferi un
standard pentru producătorii de Compact Discuri muzicale. Toate CD-urile
aveau diametrul de 120 mm, grosimea de 1,2 mm şi o perforaţie de diametru
15mm la mijloc.
Cartea galbenă a fost publicată în 1984 tot de firmele PHILIPS şi
SONY şi cuprindea un standard al datelor numerice. Formatul de bază
consta în codificarea fiecărui octet cu un simbol de 14 biţi. Această
corespondenţă de 14 la 8 este implementată hard prin căutare într-o tabelă.
La următorul nivel, un grup de 42 simboluri consecutive formează un cadru
de 558 biţi. Fiecare cadru are 192 de biţi, ceilalţi care mai rămân sunt
utilizaţi pentru corecţia erorilor.
Până aici schema este identică atât pentru CD-uri cât şi pentru CD-
ROM-uri.
Cartea galbenă defineşte două moduri:
-Modul 1 are în structură un preambul de 16 octeţi, 2048 octeţi de
date şi 288 octeţi pentru un cod de erori (este un cod Reed –Solomon dublu
intreţesut).
-Modul 2 combină câmpurile de date şi ECC într-un singur câmp,
pentru aplicaţiile audio şi video care nu necesită corecţia erorilor. Sunt
utilizate trei moduri de corecţie a erorilor, în mod separat:
-pentru un simbol;
-pentru un cadru;
-pentru un sector.
În ceea ce priveşte viteza, CD-urile cu o singură viteză lucrează cu
75 sectoare / secundă, CD-urile cu două viteze sunt de două ori mai rapide
ş.a.m.d.
Cartea verde a fost creată în 1986 de concernul PHILIPS şi are ca
noutăţi posibilităţi de a întreţese audio, video şi date în acelaşi sector, deci
un standard foarte bun pentru CD-urile multi medii.
Cartea verde a creat şi un nou sistem de fişiere denumit HICH
SIERRA. Acesta are 3 niveluri:
-nivelul 1 utilizează nume de fişiere de până la 8 caractere, cu o
posibilă extensie de 3 caractere, la fel ca în convenţia MS-DOS; acest nivel
Arhitectura calculatoarelor 147
implementează fişierele în mod contiguu, ceea ce pentru CD-urile
inscripţionate o singură dată nu este o problemă;
-nivelul 2 permite nume de până la 32 caractere;
-nivelul 3 permite nume foarte lungi şi este implementat în mod
discontiguu.
Compact-Discurile pot fi:
a)-inscripţionabile
b)-reiscripţionabile.
a)- Compact Discuri inscripţionabile
Iniţial producerea unui CD-ROM „master” era foarte scumpă. La
începutul anilor 90 CD-ROM-urile au devenit ieftine, dar încă inferioare
discurilor magnetice, deoarece odată scrise nu mai puteau fi şterse. În ciuda
acestei limitări, CD-urile inscripţionabile o singură dată şi-au găsit
aplicaţiile ca mediu pentru copiile de siguranţă a discurilor mari şi s-au
produs pe scară mare pentru diferite înregistrări. Aceste compact discuri se
numesc CD-R (CD-Recordables) sau în româneşte CD-uri
inscripţionabile. CD-R-urile sunt discuri goale de policarbonaţi, de 120
mm şi sunt identice cu CD-ROM-urile cu excepţia faptului că au un şanţ de
0,6 mm pentru a ghida laserul la scriere. Şanţul are un traseu sinusoidal de
0,3 mm la o frecvenţă de exact 22,05 kHz pentru a furniza o reacţie
continuă, astfel încât viteza de rotaţie să fie monitorizată exact şi corectată
dacă este nevoie. CD-R-urile arată la fel ca CD-ROM-urile, doar că sunt
aurii şi nu argintii. Culoarea aurie provine de la faptul că stratul
reflectorizant este de aur adevărat şi nu de aluminiu. Spre deosebire de CD-
urile argintii care au depresiuni fizice pe ele, reflectivitatea diferită a
cavităţilor şi solurilor trebuie simulată. Acest lucru se obţine prin adăugare
unui strat de vopsea între policarbonat şi stratul reflectorizant de aur (Fig.
4.18). Sunt folosite două tipuri de vopsea cianina care este verde şi
ftalocianina care este galben-portocalie. În stare iniţială vopseaua este
transparentă şi lasă să treacă raza laser şi să se reflecte pe stratul de aur.
Pentru scriere laserul este pornit la putere mare (8-16 mW). Când fasciculul
loveşte un punct din vopsea, acesta se distruge, distrugându-se o legătură
chimică. Această schimbare a structurii moleculare determină apariţia unui
punct întunecat. La citire fotodetectorul sesizează diferenţa între zonele
întunecate şi cele transparente. Această diferenţă este interpretată drept
diferenţa între cavităţi şi soluri, chiar la citirea cu un cititor obişnuit de CD-
ROM-uri sau chiar pe un player de CD-uri audio.
În 1989 a apărut cartea portocalie (Orange Book) care defineşte CD-
ROM-ul şi un nou format, CD-ROM XA, care permite CD-R-urilor să fie
scrise incrementat, azi câteva sectoare, mâine câteva şi luna viitoare câteva.
148 Sorin Adrian Ciureanu
Un grup de sectoare consecutive scrise odată se numeşte pistă CD-ROM
(CD-ROM track). Scrierea incrementată ridică o nouă problemă. Înaintea
cărţii portocalii, toate CD-ROM-urile aveau la început o singură tabelă de
conţinut a volumului (VTOC,Volume Table of Contents). Pentru mai
multe piste, Cartea Portocalie cere câte un VTOC pentru fiecare pistă.
Pistele se pot grupa în sesiuni obţinându-se CD-uri multisesiune
(multisesion). Dispozitivele de redare standard pentru audio nu pot reda
astfel de CD-uri deoarece ele aşteaptă o singură VTOC la început. Fiecare
pistă trebuie să fie scrisă într-o singură operaţie continuă, fără oprire. În
consecinţă hard discul de pe care se copiază datele trebuie să fie suficient de
rapid ca să le livreze la timp. Dacă fişierele care trebuie copiate sunt
împrăştiate pe tot hard discul, atunci timpii de căutare pot provoca
întreruperea fluxului de date către CD-R şi eroare de memorie temporară
(memorie tampon); CR-R-ul este distrus. CD-R- urile fac posibilă copierea
uşoară a CD-ROM-urilor (şi CD-urilor audio) ducând adesea la violarea
copyright-ului. Diverse scheme încearcă să îngreuieze astfel de piraterii şi să
facă dificilă citirea unui CD-ROM cu altceva decât software-ul
producătorului. Una din ele constă în înregistrarea tuturor lungimilor
fişierelor de pe CD-ROM ca fiind de mai mulţi gigaocteţi, zăpăcind orice
încercare de copiere de pe hard disc cu programele uzuale de copiere. Alte
posibilităţi sunt folosirea unor distanţe nestandard între piste sau alte
„defecte” fizice.
b)- CD-uri reinscripţionabile.
CD-urile reinscripţionabile (CD-RW, CD-ReWritables) folosesc
acelaşi suport ca şi CD-R cu deosebirea că în loc de vopselele cianină şi
ftalocianină utilizează pentru stratul reflectorizant un aliaj de argint, indium,
antimonium şi telur. Acest aliaj are două stări stabile, cristalină şi amorfă, cu
reflectivităţi diferite. Pentru CD-RW sunt necesare lasere de trei puteri
diferite. La putere înaltă, laserul topeşte aliajul, transformându-l din starea
cristalină, puternic reflectorizantă, în starea amorfă, cu reflectivitate scăzută,
pentru a reprezenta o cavitate. La putere medie, aliajul se topeşte şi trece
din nou în starea lui naturală cristalină, redevenind sol. La putere joasă,
pentru citire, se percepe starea materialului şi nu are loc nici o schimbare de
fază. CD-RW este mult mai scump decât CD-R, de aceea nu l-a înlocuit
complet pe acesta din urmă. Pe de altă parte pentru copiile de siguranţă ale
discurilor dure, faptul că odată scris un CD-R nu mai poate fi şters
accidental reprezintă un mare avantaj.

4.4.1.4. DVD-uri
Arhitectura calculatoarelor 149
Progresul tehnologiei a făcut posibilă crearea de discuri optice de
foarte mare capacitate. Ele s-au numit iniţial Disc Video Digital (Digital
Video Disc), DVD. Denumirea oficială actuală este Disc Versatil Digital
(Digital Versatil Disc), tot DVD. DVD-urile au acelaşi proiect ca şi CD-
urile. Îmbunătăţirile constau în:
-cavităţi mai mici (0,4 microni faţă de 0,8 microni pentru CD-uri);
-spirala mai strânsă (o,76 microni faţă de 1.6 microni pentru CD-uri)
-un laser roşu (la o,65 microni faţă de 0,78 microni pentru CD-uri).
În felul acesta s-a ajuns la o capacitate mărită de şapte ori, la 4,7 GB. De
asemenea un DVD funcţionează la 1,4MB/secundă, faţă de 150KB/secundă
la CD-uri. Un dezavantaj este folosirea laserului roşu. Pentru citirea CD-
urilor şi CD-ROM-urile existente va fi nevoie de un al doilea laser sau o
conversie optică sofisticată. S-ar putea ca acest lucru să nu fie posibil.
Pentru mărirea capacităţii au fost definite patru formate:
1-O singură faţă, un singur strat (4,7 GB).
2-O singură faţă, două straturi (8,5 GB).
3-Două feţe, un singur strat (9,4 GB).
4- Două feţe, două straturi (17 GB).
Cerinţele pieţei vor hotărî care va rezista.

Substrat policarbonic 1
Strat semi-
Disc reflectorizant
1
Strat
reflectorizant
(Al)

Strat adeziv

Strat

reflectorizant
Disc (Al)
2 Strat semi-
reflectorizant
Substrat policarbonic 2

Fig. 4.19. Disc DVD cu două feţe a câte două straturi. Disc 1 de 0,6mm.
Disc 2 de 0,6mm.
Tehnologia cu două straturi depune un strat reflectorizant la bază,
acoperit de un strat semi reflectorizant. În funcţie de focalizarea laserului, se
reflectă dintr-un strat sau din celălalt. Stratul de dedesubt are nevoie de
150 Sorin Adrian Ciureanu
cavităţi şi soluri ceva mai mari, pentru a prezenta siguranţă în funcţionare,
astfel încât capacitatea sa este mai mică decât cea a stratului superior.
Discurile cu două feţe sunt obţinute din lipirea spate în spate a două discuri
de 0,6 mm cu o singură faţă. Pentru a asigura o grosime standard pentru
toate variantele, un disc cu o singură faţă este un disc de grosime 0,6mm
lipit de un substrat neinscripţionat. Structura unui disc cu două feţe a câte
două straturi este dată în figura 4.19.
Dacă DVD-ul va fi un mare succes, DVD-recordable
(inscripţionabil) şi DVD-rewritable (reinscripţionabil) vor fi în scurt timp
produse pe scară largă. Succesul DVD-ului nu este însă garantat, deoarece
companiile de televiziune prin cablu au un plan destul de diferit pentru
distribuirea filmelor-video (la cerere, prin cablu) şi bătălia este abia la
început.

4.4.2. Periferice care nu stochează informaţia

4.4.2.1. Tastatura

Principiul unei tastaturi este simplu: la apăsarea pe o tastă, se creează


un cod care va afişa pe ecran simbolul tastei respective.
La vechile tastaturi această decodificare se făcea hard, cu ajutorul
unei matrici de decodificare, internă tastaturii. Acest sistem nu era unul
flexibil, principalul neajuns fiind incompatibilitatea tastaturilor de la un
calculator la altul.
Odată cu apariţia PC-urilor, s-a creat un nou concept de tastatură în
care decodificarea nu se mai face hard ci soft, în sistemul de operare, mai
precis în driverul de tastatură. Când se apasă o tastă, se generează o
întrerupere şi este activată rutina de tratare a întreruperilor de tastatură.
Această rutină citeşte un registru hard din controlerul de tastatură pentru a
obţine numărul tastei apăsate (sunt aproximativ 103 coduri de taste). Când
tasta este eliberată, se generează o a doua întrerupere. Astfel rămâne în
sarcina driverului să facă echivalenţa între numărul tastei apăsate şi simbolul
efectiv al tastei, care este un simbol al alfabetului ASCII. De obicei există
drivere de tastatură pentru fiecare limbă (engleză, engleză şi franceză,
germană etc.)

4.4.2.2. Sistemul de afişaj

Sistemul de afişaj are două componente:


Arhitectura calculatoarelor 151
-controlerul;
-monitorul de afişaj (ecranul de afişare).
Controlerul (denumit şi placa video) conţine o memorie de ecran,
care constituie de fapt o hartă a ecranului. Există două moduri de afişare:
-alfa numeric;
-grafic.
În sistemul alfa numeric, caracteristic sistemelor de calcul mai vechi,
există un set de caractere predefinite afişate pe ecran.
În sistemul grafic ecranul este împărţit în pixeli , fiecare pixel având
o serie de atribute, cel ai important fiind cel de culoare. Numărul de pixeli
de pe ecran depinde e capacitatea memoriei ecran dar şi de structura şi
rezoluţia monitorului.
Memoria de ecran este de obicei implementată cu o memorie
dinamică iar capacitatea ei a crescut spectaculos în ultimii ani.
De remarcat că, în ultimul timp, placa video a fost înlocuită cu un
procesor grafic, care este de fapt un procesor grafic specializat, şi care are
propriile instrucţiuni grafice. Există numeroase programe specializate care
activează instrucţiunile grafice ale procesorului video. De exemplu cu
DIRECT X din SO WINDOWS se poate lucra cu aceste instrucţiuni grafice.
Pentru cei care lucrează aplicaţii grafice cu instrucţiunile procesorului video,
există un mare avantaj faţă de cei care lucrează cu instrucţiunile grafice ale
procesorului central, în sensul creşterii de viteză în mod real. Datorită
faptului că busul de memorie lucrează bine la viteze mici faţă de cele ale
procesorului central, este important pentru sistemul video să se lucreze cu
instrucţiuni ale procesorului video.
Monitoarele sau dispozitivele de afişaj sunt nişte displayuri a căror
calitate principală trebuie să fie modificarea rapidă a imaginii. Din punct de
vedere constructiv există mai multe tipuri de monitoare:
-monitoare cu tub catodic;
-monitoare cu cristale lichide:
-monitoare cu plasmă.
Monitoarele cu tub catodic, CRT(Cathodic Ray Tube), sunt cele
clasice, arhicunoscute.
Monitoarele cu cristale lichide, LCD (Liquid Crystal Display), au
cristale lichide, materiale organice cu o structură vâscoasă, care curg dar au
şi o structură cristalină în acelaşi timp. Când toate moleculele sunt alineate
în aceeaşi direcţie, proprietăţile optice ale cristalului depind de direcţia şi
polarizarea luminii incidente. Prin aplicarea unui câmp electric se pot obţine
modificări ale alinierii moleculare şi implicit ale proprietăţilor optice. Pentru
construcţia monitoarelor, cea mai importantă proprietate este aceea ca, la
152 Sorin Adrian Ciureanu
luminarea cristalului lichid, intensitatea luminii care iese să poată fi
controlată electric.
Ecranul unui monitor LCD este alcătuit din două plăci paralele de
sticlă aflate într-un volum sigilat care conţine cristal lichid. Fiecare placă are
ataşaţi electrozi transparenţi. O sursă de lumină, plasată în spatele plăcii de
sticlă din partea posterioară, luminează ecranul. Electrozii transparenţi
ataşaţi fiecărei sticle sunt utilizaţi pentru crearea unor câmpuri electrice în
interiorul cristalului lichid. Părţi diferite ale ecranului sunt supuse unor
tensiuni diferite, cu scopul de a controla imaginea afişată.
Această tehnologie utilizează lumină polarizată şi , de aceea, se
introduc în spatele şi în faţa ecranului nişte folii polaroide.
Schema unui display cu 7 nivele este dată în figura 4.19. Acest
model este de tipul TN (Twisted Nematic). Placa posterioară conţine
caneluri orizontale de dimensiuni foarte mici. Placa anterioară conţine
caneluri verticale. În absenţa unui câmp electric, moleculele cristalului
lichid tind să se alinieze după caneluri. Deoarece canelurile posterioare fac
un unghi drept cu cele anterioare, moleculele se rotesc pe măsură ce se
înaintează din spate în faţă. Polaroidul orizontal va permite numai trecerea
luminii polarizată orizontal iar polaroidul vertical numai a celei polarizată
vertical. Dacă nu ar fi lichid între acestea două, lumina ar fi blocată şi
ecranul ar afişa un negru uniform. Datorită structurii cristaline în formă
torsoidală a moleculelor LCD, lumina va fi ghidată de acestea de la intrare
până la ieşire, permiţând astfel trecerea luminii prin rotaţia polarizării ei.
Dacă în absenţa unui câmp electric ecranul va fi uniform luminos, la
aplicarea unui potenţial electric unor părţi selectate din ecran, se poate
obţine distrugere structurii moleculelor, blocând astfel trecerea luminii prin
acele părţi.

Panou 1 – Polaroid posterior


Sursa Panou 2 – Electrod posterior
de Panou 3 – Placă de sticlă posterioară
lumină Panou 4 – Cristal lichid
Panou 5 – Placă de sticlă frontală
Panou 6 – Electrod frontal
Panou 7 – Polaroid frontal
1 2 3 4 5 6 7

Fig. 4. 20. Schema unui monitor cu cristal lichid.

În funcţie de modul de aplicare a tensiunii, există două scheme:


-ecran cu matrice pasivă;
-ecran cu matrice activă.
Arhitectura calculatoarelor 153
Ecranul cu matrice pasivă, care este ieftin, se caracterizează prin
faptul că ambii electrozi conţin conductori filiformi paraleli.
Ecranul cu matrice activă este mult mai scump însă oferă o imagine
mult mai bună. Acest ecran are, în loc de fire metalice perpendiculare,
comutatoare minuscule pentru fiecare pixel. Prin închiderea şi deschiderea
comutatoarelor se poate crea un model arbitrar de potenţiale punctiforme,
permiţând un afişaj cu model binar arbitrar.
Monitoare cu plasmă. Sunt ecrane alcătuite din mici baloane cu
neon. Fiecare balon poate fi activat prin crearea unei diferenţe de potenţial
între firele ce trec prin poziţia balonului respectiv, balonul selectat devenind
strălucitor.
Starea activă se menţine cu o diferenţă de potenţial mai mică decât
cea de la aprindere.

4.4.2.3. Imprimanta

Imprimantele pot fi:


a)-monocrome;
b)-color.
a)-. Imprimante monocrome
Imprimanta matriceală (matrix printer), cea mai ieftină, are un
cap de tipărire, conţinând între 7 şi 24 ace activabile electromagnetic, care
este deplasat în lungul fiecărei linii de tipărire. Imprimantele cu 7 ace,
pentru tipărirea a 80 de caractere pe linie, în matrice de 5x7, imprimă 7 linii
orizontale, fiecare având 5x80 = 400 puncte. Fiecare punct poate fi imprimat
sau nu, în funcţie de forma caracterelor de tipărit.
Calitatea tipăririi se îmbunătăţeşte prin utilizare mai multor ace şi
suprapunerea parţială a puntelor lăsate de fiecare ac. În mod normal pentru
suprapunerea punctelor este necesară trecerea multiplă peste fiecare linie
tipărită, dar calitatea crescută este deci legată de o micşorare a vitezei.
Imprimantele matriciale sunt ieftine, necesită consumabile ieftine dar
sunt lente , zgomotoase şi au o calitate grafică slabă.
Sunt utile pentru tipărirea formelor mari sau a bucăţelelor mici de
hârtie.
Imprimanta cu jet de cerneală (inkjet printer) este bună pentru o
tipărire casnică cu cost redus. Capul mobil de tipărire, ce conţine şi un
cartuş de cerneală, este deplasat orizontal pe hârtie, timp în care cerneala
este pulverizată prin nişte orificii minuscule. În interiorul fiecărui orificiu
este încălzită electric o picătură de cerneală, la punctul de fierbere, până
explodează. Singurul loc prin care cerneala se poate deplasa este prin
154 Sorin Adrian Ciureanu
orificiu, pe hârtie. Orificiul este apoi răcit, vidul rezultat aducând o nouă
picătură.
Viteza imprimantei este limitată de frecvenţa repetării ciclului
fierbere / răcire.
Imprimantele cu jet de cerneală au rezoluţii de 300 – 720 dpi (dots
per inch = puncte pe inci) dar există şi imprimante cu 1440 dpi.
Ele sunt ieftine, silenţioase şi de o calitate grafică bună. Sunt însă
destul de lente şi necesită cartuşe cu cerneală scumpe.
Imprimanta laser (laser printer) dă o imagine de o înaltă calitate,
are o flexibilitate excelentă, o viteză bună şi un cost moderat.
Imprimantele laser se bazează pe o tehnologie asemănătoare cu
echipamentele de fotocopiere.

4.21. Schema unei imprimante laser.

Tehnologia de bază este ilustrată în figura 4.21. Inima imprimantei


este un cilindru rotativ de mare precizie (în anumite sisteme de mare
performanţă, o curea). La începutul fiecărui ciclu de pagină, cilindrul este
Arhitectura calculatoarelor 155
încărcat cu un potenţial se cca. 1000 V şi este acoperit cu material
fotosensibil. În continuare un laser este deplasat de-a lungul cilindrului,
asemănător felului în care este deplasat fascicolul electronic într-un monitor
CRT, însă în locul obţinerii unei deflecţii orizontale prin utilizarea unei
tensiuni, aici se utilizează o oglindă octogonală care se roteşte, pentru a
scana întregul cilindru în lungime. Fascicolul luminos este modulat pentru a
produce un model de puncte luminoase şi întunecate. Locurile unde
fascicolul atinge cilindrul îşi pierd sarcina electrică.
După ce o linie de puncte este imprimată, cilindrul se roteşte o
fracţiune de grad pentru a facilita imprimarea următoarei linii. La un
moment dat prima linie de puncte ajunge la toner, un rezervor ce conţine un
praf negru senzitiv din punct de vedere electrostatic. Praful este atras de
punctele ce sunt încărcate electrostatic, formând astfel o reprezentare
vizuală a liniei respective.
În continuarea traseului, cilindrul acoperit cu toner este presat asupra
hârtiei, având loc transferul prafului negru către hârtie. Hârtia este apoi
trecută printre două role încălzite, pentru a fixa definitiv imaginea.
În continuarea rotaţiei sale, cilindrul este descărcat electric şi curăţat
de orice toner rezidual, preparându-se astfel pentru a fi din nou stropit şi
încărcat electric pentru pagina următoare.
Funcţionarea unei imprimante laser este bazată pe o combinaţie
complicată de fenomene fizice, chimice şi de tehnici mecanice şi optice.
Totuşi firmele produc diverse ansambluri complete numite dispozitive de
imprimare (print engines).
Diverşi producători combină aceste maşini complicate cu propriile
lor circuite electronice şi programe aferente pentru a obţine o imprimantă
completă. Electronica este compusă dintr-o UC rapidă şi un număr de octeţi
de memorie, pentru a putea memora imaginea întreagă a unei pagini,
reprezentată ca o hartă de biţi. Are de asemenea numeroase fonturi, unele
din ele integrate altele putând fi încărcate. Majoritatea imprimantelor
acceptă comenzi de scriere a paginilor de tipărit (spre deosebire de cazul
simplei acceptări a reprezentării unei pagini prin hartă de biţi construite de
UCP –unitatea centrală principală). Aceste comenzi sunt formulate în
limbaje speciale cum ar fi PCL, dezvoltat de firma HP, sau Post script,
dezvoltat de Adobe.
La o rezoluţie de peste 600 dpi, imprimantele laser pot oferi o
calitate acceptabilă pentru tipărirea de fotografii alb-negru.
b)-Imprimante color
Imaginile color pot fi percepute în două moduri: prin lumină
transmisă sau lumină reflectată. Imaginile percepute ca lumină transmisă,
156 Sorin Adrian Ciureanu
cum ar fi cele produse de monitoarele CRT, sunt construite prin
suprapunerea liniară a celor trei culori aditive primare: roşu, verde, albastru
(Red, Green, Blue = RGB). Imaginile percepute ca lumină reflectată, cum
ar fi fotografiile color sau imaginile din reviste, absorb anumite lungimi de
undă luminoasă şi reflectă restul. Acestea sunt construite printr-o
superpoziţie liniară a celor trei culori primare absorbante, cyan (absoarbe tot
spectrul roşu), galben (absoarbe tot spectrul albastru ), şi magenta (absoarbe
tot verdele). În teorie, orice culoare poate fi generată prin amestecarea unor
cerneluri de culoare cyan, galben şi magenta. În practică este dificilă
obţinerea unei cerneli suficient de pură pentru a oferi o absorbţie totală
necesară pentru un negru curat. Din această cauză, majoritate sistemelor de
tipărire color utilizează patru cerneluri: cyan, galben, magenta şi negru.
Aceste sisteme se numesc CYMK (Cian, Yelow, Magenta, blacK). În
schimb, monitoarele utilizează pentru generarea culorilor lumina transmisă
şi sistemul RGB (Red,Green,Blue).
Setul complet de culori ce poate fi generat de un ecran sau o
imprimantă se numeşte gamă (gamut) . Nici un echipament nu are o gamă
care să se potrivească lumii reale. La aceasta se mai adaogă şi
imperfecţiunile tehnologice şi imperfecţiunile de percepţie prin funcţionarea
bastonaşelor şi a conurilor din retina umană.
În consecinţă, procedeul convertirii unei imagini color de pe ecran
într-o imagine identică tipărită este departe de a fi simplu. El pune o serie de
probleme printre care:
-Monitoarele color utilizează lumina transmisă iar imprimantele
color lumina reflectată.
-Monitoarele CRT produc 256 de intensităţi pentru fiecare culoare;
imprimantele color utilizează un model cu semitonuri.
-Monitoarele au fundal negru; hârtia este albă.
-Gamele RGB şi CMYK sunt diferite.
Cinci tehnologii sunt utilizate în tipărirea color, toate bazate pe
sistemul CYMK (Cyan, Yelow, Magenta, Black).
1.-Imprimantele color cu jet de cerneală lucrează la fel cu
imprimantele monocrome cu jet de cerneală, utilizând patru cartuşe cu
cerneală pentru CYMK, în loc de unul sigur. Imprimantele sunt ieftine dar
cartuşele foarte scumpe.
Pentru obţinerea unor rezultate bune este necesară folosirea unor
cerneluri şi unor hârtii speciale. Există Cerneala bazată pe vopsea (dye-
based ink) care este compusă din vopsele colorate dizolvate într-un purtător
fluid. Se obţin culori luminoase dar nu rezistă la lumina ultravioletă.
Cerneala bazată pe pigmenţi (pigment- based ink) conţine particule solide
Arhitectura calculatoarelor 157
suspendate într-un fluid ce se evaporă, lăsând pigmentul pe hârtie. Se obţin
culori mai puţin luminoase dar mai rezistente în timp, însă particulele de
pigment tind să obtureze orificiile capului de tipărire. Pentru fotografii este
necesară o hârtie lucioasă, special concepută pentru a asimila picăturile şi a
nu permite întinderea acestora.
2.- Imprimantele cu cerneală solidă (solid ink printers) constituie
o treaptă superioară în imprimarea color. Conţin patru bucăţi de cerneală
solidă cu o compoziţie vâscoasă ce sunt topite în rezervoare încinse. Timpul
de pornire poate fi chiar şi de 10 minute, timp în care are loc topirea cernelii
care apoi este pulverizată pe hârtie unde are loc solidificarea urmată de
impregnarea acesteia în hârtie prin trecerea printre doi cilindri speciali.
3.-Imprimantele laser color funcţionează ca şi cele laser
monocrome, cu deosebirea că pe cilindru se generează imagini separate
pentru fiecare componentă CYMK, utilizându-se patru tonere diferite. Sunt
extrem de scumpe, dar tipărirea este rapidă, calitatea ridicată iar imaginile
obţinute stabile în timp.
4.-Imprimantele cu ceară ( wax printers) au o bandă largă
compusă din ceară de patru culori, segmentată în benzi de dimensiunea unei
pagini. Mii de elemente de topire acţionează asupra cerii impregnând-o în
hârtie pe măsură ce hârtia se deplasează sub ea. Impregnarea hârtiei se
realizează sub formă de pixeli utilizând sistemul CYMK. Consumabilele
fiind foarte scumpe, există tendinţa de a fi înlocuite.
5.-Imprimantele cu sublimarea vopselii (dye sublimation
printers) au un purtător care conţine vopselele CYMK şi trece deasupra
unui cap de imprimare termic, alcătuit din mii de elemente de încălzire
programabile. Vopselele se evaporă instantaneu şi sunt absorbite de o hârtie
specială aflată în imediata apropiere. Fiecare element de încălzire poate
produce 256 temperaturi diferite. Cu cât temperatura este mai ridicată, cu
atât mai multă vopsea se depune pe hârtie şi se obţine o nuanţă mai intensă.
Spre deosebire de alte imprimante color, în acest caz se poate obţine pentru
fiecare pixel un spectru de tonuri de culori aproape continuu. Mici
imprimante de uz special utilizează deseori procesul de sublimare pentru a
obţine fotografii pe hârtie specială şi foarte scumpă.
158 Sorin Adrian Ciureanu

Capitolul 5

MAGISTRALE
Transferurile de informaţie între procesor, memorie şi diferiţii
controlori de I/E se efectuează prin dispozitive de comunicare numite
magistrale sau busuri. Un bus cuprinde, în general, trei subansambluri:
-liniile de adresă care selecţionează unităţile receptoare;
-liniile de date;
-liniile de control.
Un bus intern, din interiorul procesorului, este un ansamblu de fire
electrice pasive. El nu poate fi comandat decât de un dispozitiv odată.
Pentru un bus extern procesorului se pune problema unei funcţionabilităţi.
În acest capitol va fi vorba de busurile externe şi despre funcţionarea lor.
Busurile externe nu au un control centralizat natural. Fiecare dispozitiv,
(spre exemplu un procesor sau un disc) poate dori să ia un bus. O tranzacţie
la un bus are două etape:
-arbitrajul între mai multe potenţiale cereri;
-transferul de date.
Ansamblul de mecanisme de arbitraj şi transfer se numeşte
protocolul busului. Procesorul este conectat cu lumea exterioară printr-un
bus al cărui protocol este specific procesorului. Busurile de I/E
interconectează dispozitivele de I/E la busul procesor. Aceste sisteme de
busuri pot accepta dispozitive de construcţie variate, cu viteze şi latenţe
diferite. Protocolul lor este definit public prin standarde.

5.1. ARBITRAJ

În literatură există denumirile de stăpân (master, maitre), oficial în


româneşte iniţiator (intiator), pentru orice dispozitiv capabil să acceseze un
bus, adică să preia controlul formulând cereri (de exemplu procesorul sau
unele controloare), şi sclav (slave, esclave) oficial în româneşte ţintă
Arhitectura calculatoarelor 159
(target), pentru dispozitivele care nu au această abilitate (de exemplu
memoria). În cazul primelor dispozitive, la trimiterea unei adrese sau
comenzi, se efectuează acţiunea cerută. Dar existenţa mai multor masteri
potenţiali implică necesitatea unui arbitraj pentru accesul la un bus.
Protocoalele trebuie să satisfacă atât constrângerile de prioritate (urgenţa
cererilor diferitelor dispozitive), cât şi pe cele de echitate (orice dispozitiv,
chiar cel mai puţin prioritar, trebuie să fie servit).
Există mai multe tipuri de arbitraj.
- Arbitraj prin înlănţuire. Arbitrajul prin înlănţuire este ilustrat în
figura 5.1.

Atribuire
i-1 i I+1

Arbitru Cerere

Bus ocupat

Fig. 5.1. Arbitraj prin înlănţuire.

Pentru obţinerea busului se activează firul cerere. La sfârşitul


utilizării se dezactivează semnalul „Bus ocupat”. Arbitrul trimite atunci o
tranziţie pe linia „Atribuire”. Dacă organul de rang i nu cere busul, arbitrul
pasează cererea pe linia de atribuire la i+1. Dacă acesta a cerut busul,
blochează linia şi activează linia „Bus ocupat”.
În versiunea simplă prioritatea este fixată, ea descrescând când i
creşte. O prioritate mai mobilă, în care ultimul servit devine cel mai puţin
prioritar, se poate obţine dacă se impune ca un master care a părăsit busul să
nu-l poată obţine din nou decât atunci când vede linia „Cerere” în stare
inactivă. Deoarece toţi candidaţii la bus menţin linia „Cerere” în stare
activă, un master care tocmai a utilizat busul nu-l va mai putea obţine decât
după ce toţi ceilalţi candidaţi au fost serviţi.
- Arbitraj cu un arbitru centralizat. Toţi potenţialii candidaţi la bus
transmit cererea lor printr-un fir special la un arbitru unic care-i cunoaşte pe
toţi şi ştie priorităţile lor. Liniile de atribuire a busului sunt de asemenea
specifice.
-Arbitraj cu un mecanism descentralizat. Cererile de bus se fac cu
ajutorul a mai multor linii. Ansamblul acestor linii constituie un nivel de
prioritate. De exemplu, cu 4 fire de cerere este posibil să fie 16 niveluri de
160 Sorin Adrian Ciureanu
cerere, de la 0 (absenţa cererii) până la 15 (nivel maxim de prioritate).În
felul acesta, orice candidat la bus poate compara nivelul său de cerere cu
nivelul de cerere prezent pe bus şi ştie dacă poate obţine busul sau nu.

5.2. TRANSFER DE DATE

A doua caracteristică a unui protocol de bus este tipul de referinţă


temporală. Într-un bus sincron, emiţătorul şi receptorul împărtăşesc acelaşi
orologiu. Într-un bus asincron, emiţătorul şi receptorul au fiecare referinţe
de timp diferite şi incomparabile.

5.2.1. Magistrală sincronă

La o lectură, master-ul plasează adresa pe firele de adrese pe un ceas


şi ordinul de citire pe firele de comenzi. Adresele sunt decodificate de toţi
slave-ii şi lectura efectuată. Cuvântul citit este plasat pe firele de date, cu n
cicluri de bus după iniţializarea transferului de către master, n≥1 ( n depinde
de durata ciclului unui bus, de lungimea busului, de timpul de acces la un
slave etc). La fel, la o scriere intr-un slave, master-ul plasează simultan
adrese şi date pe firele corespunzătoare şi ordinul de scriere pe firele de
comandă. În toate cazurile, toate operaţiile în diferite organe, master sau
slave, sunt sincronizate de ceas magistrală.
Figura 5.2. arată exemplu busului POWERPath-2 a SGI. Se
utilizează un bus de date de 256 biţi şi un bus de adresă de 40 biţi¸
cadenţarea este de 47,6 MHz.

Cer. Arb. Adr. Dec. Sfârşit Cer. Arb. Adr. Dec. Sfârşit

Control Sf. Sf.


com

com

Adrese Ad Ad
A B

Date D0 D1 D2 D3 D0
A A A A B

Fig. 5.2. Diagrama temporală a busului POWERPath-2.


Arhitectura calculatoarelor 161

Toate tranzacţiile acestui bus utilizează exact cinci cicluri bus.


Primele două sunt utilizate pentru arbitraj. Cererile diferitelor organe sunt
trimise în timpul primului ciclu şi un arbitraj descentralizat atribuie busul
unui master în timpul celui de-al doilea ciclu. Adresele şi comanda sunt
trimise în al treilea ciclu. Al patrulea ciclu este consacrat decodajului
adreselor de către slave. Al cincilea ciclu semnalează sfârşitul tranzacţiei şi
începe transferul de date. Când nu este semnal de sfârşitul operaţiei, totul
trebuie reluat de la început. Exemplul din figura 5.2. arată posibilitatea de a
citi patru date de adrese succesive la o singură tranzacţie.
În afară de aceasta, busul are o arhitectură pipeline: faza de cerere a
tranzacţiei i+1 începe în timpul fazei de transmisie a datelor din transmisia
i. Astfel busul poate asigura un debit de 1,2 GO/s (32 octeţi x 47,6 MHz).
Magistralele sincrone sunt adaptate pentru componente ce
funcţionează cu ceasuri nu prea diferite, ca unitatea centrală şi memoria.
Inconvenientul este că dispersiile orologiului, care cresc cu lungimea
conexiunilor, impun lungimi relativ mici, limitate la 50 cm., mai ales atunci
când este necesară o funcţionare la frecvenţe ridicate.
În cazurile dispozitivelor în care componentele lente coexistă cu
componente rapide, sunt necesare magistrale asincrone. La fel pentru
conexiuni lungi.

5.2.2. Magistrală asincronă

Pentru o magistrală asincronă, master-ul şi slave-ul trebuie să se


sincronizeze printr-un protocol cerere/achitare al cărui suport este una sau
mai multe linii de control. Să considerăm un exemplu sintetic al unui bus în
care adresa şi datele sunt multiplexate. Controlul are trei linii:
-REQ, cere o lectură; adresa este plasată simultan pe bus;
-Data Disponibilă (DD), semnal că un cuvânt este disponibil pe linia
de date;
-Ac., achitare.
Fig. 5.3. prezintă un protocol pentru o lectură; arbitrajul nu este
descris. Master-ul şi slave-ul împărtăşesc busul de adrese/date şi nu trebuie
deci să-l poziţioneze simultan. Semnalele de control sunt, prin convenţie,
active la starea cea mai înaltă. Principiul protocolului este ca liniile comune
(date, adrese şi achitare) trebuie să fie puse la starea inactivă tot de către
dispozitivul care le-a activat anterior. Corespondentul lui trebuie să-i trimită
un semnal pentru a-i arăta că a văzut semnalul activ şi că nu-i mai este
necesar.
162 Sorin Adrian Ciureanu
1. Master-ul cere lectura; el ridică semnalul REQ şi plasează adresa
pe bus.
2. Slave-ul vede cererea şi o achită activând Ac.
3. Master-ul vede achitarea, coboară REQ şi liberează busul date
/adrese.
4. Slave-ul vede că stăpânul a văzut achitarea (REQ la starea joasă)
şi coboară Ac.
5. Când slave-ul are data gata, o plasează pe busul date/adrese şi
activează DD.
6. Master-ul vede DD; el eliberează busul; când a terminat activează
Ac.
7. Slave-ul vede Ac., liberează DD şi busul date/adrese.
8. Master-ul vede DD la starea joasă şi coboară Ac.

1
REQ

2 3 4

Data Adrese Date

3 7

Ac.

6 7 8

DD

Fig. 5.3. Diagrama temporală a unui bus asincron.

5.3. EXEMPLE DE MAGISTRALE

Există câteva busuri de succes: ISA, PCI şi USB. Magistrala ISA a


fost o uşoară extindere a magistralei IBM PC originale. Din motive de
compatibilitate cu modelele anterioare ea este încă prezentă în PC-urile
bazate pe Intel. Totuşi aceste maşini au totdeauna şi o a doua magistrală mai
Arhitectura calculatoarelor 163
rapidă, magistrala PCI (Peripheral Component Interconnect), în
româneşte Magistrală de conectare cu componentele periferice. USB
(Universal Serial Bus), Magistrala serială Universală, este o magistrală
de I/E, cu o răspândire în creştere, pentru periferice de viteză scăzută, cum
ar fi tastaturile şi mausurile.

5.3.1. Magistrala ISA

Magistrala IBM PC a fost un standard de facto pentru sistemele


bazate pe 8088, deoarece aproape toţi vânzătorii de computere personale au
copiat-o pentru a permite utilizarea în sistemele lor a plăcilor de I/E de la
terţi furnizori. IBM a dezvoltat această magistrală creând PC/AT şi apoi
Microchanel pentru noile maşini PS/2. Această nouă magistrală era protejată
de multe patente şi, de aceea, restul industriei de calculatoare personale a
adoptat propriul standard, magistrala ISA (Industry Standard
Architecture) - arhitectura standard pentru industrie- care este în esenţă
busul PC/AT ce funcţionează la 8.33MHz.
Avantajul acestui standard este că păstrează compatibilitatea cu
maşinile existente. Fiecare PC bazat pe Intel are încă prezentă această
magistrală, deşi mai are încă una sau două magistrale mai noi.
Mai târziu magistrala ISA a fost extinsă la 32 biţi şi, cu alte câteva
facilităţi introduse, a devenit EISA (Extendet ISA).

5.3.2. Magistrala PCI

Magistrala PCI este o specificaţie Intel, a cărei versiune 1.0. a fost


definitivată în 1992 (versiunea 2.1. în 1995). Pentru a încuraja utilizarea ei,
după ce a obţinut patentul pentru PCI, Intel a pus patentul în domeniul
public, astfel încât orice companie a putut să construiască periferice pentru
ea, fără să plătească drept de autor. S-a format un consorţiu (PCI Special
interest Group) pentru a administra viitorul magistralei PCI. Ca rezultat,
busul PCI a devenit extrem de răspândit.
PCI este un bus sincron, pe 33 sau 66 MHz. Liniile de date şi adrese
sunt multiplexate, pe 32 biţi, sau pe 64 biţi. Sunt posibile transferuri
vectorizate (burst): master-ul transmite o adresă şi un număr de octeţi şi
perifericul va plasa succesiv pe bus octeţii ceruţi. Pentru un transfer de
dimensiuni mari, se atinge un debit asimptotic de 4 octeţi pe ciclu la
33MHz. , în configuraţia cea mai joasă 132 MO/s (de înmulţit cu 2 la 66
MHz sau la 64 biţi).
164 Sorin Adrian Ciureanu
Magistrala PCI nu este procesată pipeline: adresele şi datele se
succed pe busul multiplexat. Este un bus destinat transferurilor masive.
Un transfer comportă o fază de adresare, care durează un ciclu,
urmată de o fază de transfer. Să luăm cazul unei lecturi.
- Ciclul 1. Master-ul plasează o adresă pe busul adrese/date; această
adresă identifică perifericul şi adresa de plecare a datelor de transferat.
Masterul defineşte tipul de tranzacţie prin liniile de control C/BE şi coboară
semnalul FRAME# pentru a semnala prezenţa unei tranzacţii.
- Ciclurile următoare. Perifericele decodează adresa. Ţinta se
semnalează coborând semnalul DEVSEL#. Trebuie să notăm că ţinta
trebuie să etaloneze adresa, pentru că ea conţine de asemenea adresa locală.
Ţinta dispune de 6 cicluri pentru a coborî semnalul DEVSEL#, după aceea
semnalul este anulat. Mai precis, toate interfeţele conectate la bus, în afară
de una, trebuie să decodeze efectiv adresele şi să răspundă în ciclul 2,3 sau
4. O interfaţă, de obicei puntea, către un bus de extensie, poate să reclame
adresele nedecodate şi să coboare semnalul DEVSEL în cursul ciclurilor 5,
6 şi 7. (vezi semnificaţia semnalelor la pag. 165)
Sunt posibile transferuri complexe pe liniile C/BE. Începând din
ciclul 2 şi în timpul întregului transfer, masterul identifică prin această linie
octeţii de transferat, de exemplu 0000 pentru patru octeţi începând de la
adresa de plecare, 0001 pentru cei trei mai puternici etc.

5.3.2.1. Ameliorarea performanţelor.

Debitele magistralelor sunt funcţie de natura sincronă sau asincronă


a protocolului şi de durata diferitelor operaţii efectuate Aceşti factori pot fi
amelioraţi prin anumite tehnici.
a)-Mărirea lărgimii unui bus. Este un fenomen tipic în evoluţia
recentă. Cum busurile între cache şi memoria principală trebuie să
transfere adesea blocuri de cache, lărgirea busului de date permite să se
transfere mai multe cuvinte pe ciclu bus, reducând astfel numărul de cicluri
pe bus necesare. Este una din tehnicile utilizate pentru a micşora penalitatea
de MIS în cache.
b)- Transfer de blocuri. Timpul de transfer de blocuri de cache sau
de blocuri de disc poate fi redus dacă busul poate transfera mai multe
cuvinte de adresă succesive într-un şir neîntrerupt de cicluri bus, fără să
trimită o adresă sau să elibereze busul între fiecare ciclu. Această tehnică
este utilizată în busul PowerPath-2 prezentat.
c)- Tranzacţii activate sau înlănţuite. O tranzacţie pe un bus poate
utiliza liniile de control, date sau adrese numai o fracţiune din timpul
Arhitectura calculatoarelor 165
tranzacţiei totale. Este cazul lecturilor în memorie când timpul de acces la
memorie este de mai mulţi cicluri bus. Cu un protocol în care busul este
blocat în timpul întregii durate a tranzacţiei, busul aşteaptă între momentul
în care a transmis adresa şi data memorie este disponibilă. Activând
tranzacţia numai în diferite etape în care busul este efectiv utilizat, se poate
elibera busul când nu este utilizat şi înlănţui mai multe transmisii. Se poate
astfel ameliora debitul efectiv al busului, cu condiţia ca busul şi organele
conectate să poată gestiona mai multe tranzacţii înlănţuite.

5.3.2.2. Adresarea magistralei PCI

PCI utilizează un arbitru centralizat, ca ‚în figura 5.4. conţinut de


obicei într-unu din circuitele de punte. Fiecare dispozitiv din PCI are două
linii dedicate, care merg de la el la arbitru. O linie REQ este utilizată pentru
a cere magistrala şi o linie GNT pentru recepţionarea recunoaşterii alocării.
GNT#

GNT#

GNT#

GNT#
REQ#

REQ#

REQ#

REQ#
Dispozitiv

Dispozitiv

Dispozitiv

Dispozitiv
PCI

PCI

PCI

PCI

Arbitru
PCI

Fig.5.4. Arbitru centralizat pentru magistrala PCI.

Pentru a cere magistrala, un dispozitiv PCI (inclusiv UC) activează


semnalul REQ şi aşteaptă până când vede că linia GNT este activată de către
arbitru. Atunci dispozitivul poate utiliza magistrala pe durata ciclului
următor. PCI nu specifică un anumit algoritm. Se poate utiliza arbitrarea
„round robin”, arbitrarea în funcţie de priorităţi, sau alte scheme.
166 Sorin Adrian Ciureanu
Magistrala se alocă pentru o tranzacţie, cu toate că lungimea acestei
tranzacţii este nelimitată. Dacă un dispozitiv vrea să realizeze o a doua
tranzacţie şi nici un alt dispozitiv nu solicită magistrala, el o poate realiza,
deşi, în mod normal, între tranzacţii trebuie să existe un ciclu inactiv. Totuşi,
în absenţa competiţiei pentru magistrală, un dispozitiv poate realiza
tranzacţii una după alta fără să insereze un ciclu inactiv. Dacă se cere
magistrala, arbitrul poate nega linia GNT.

5.3.2.3. Semnalele magistralei PCI

Tabelul 5.1. Semnale obligatorii ale magistralei PCI.


Semnal Linii Master Slave Descriere
CLK 1 X Ceas (33MHz sau 66 MHz).
AD 32 X Linii de adrese şi date, multiplexate.
PAR 1 X Bit de paritate pentru adrese sau date
C/BE 4 X Configuraţie pe magistrală pentru comandă/biţi
pentru octeţi validaţi.
FRAME# 1 X Arată că AD şi C/BE sunt activate.
IRDY# 1 X La citire: masterul va accepta; la scriere:slave-ul va
accepta..
IDSEL# 1 X Selectare spaţiu de configuraţie, în locul memoriei.
DEVSEL# 1 X Slave-ul a decodificat adresa sa şi aşteaptă
(recepţionează).
TRDY# 1 X La citire: date prezente; la scriere: slave-ul va
accepta.
STOP# 1 X Slave-ul vrea să oprească tranzacţia imediat.
PERR# 1 Eroare de paritate detectată de receptor.
SERR# 1 S-a detectat eroare de paritate, de adresă sau de
sistem.
REQ# 1 Cerere pentru atribuirea magistralei.
GNT# 1 Recunoaşterea atribuirii magistralei.
RST# 1 Iniţializarea sistemului şi a tuturor dispozitivelor.

Tabelul 5.2. Semnale opţionale ale magistralei PCI


Semnal Linii Master Slave Descriere
REQ64# 1 X Cerere pentru a realiza o tranzacţie pe 64 biţi.
ACK# 1 X Se acordă permisiunea pentru o tranzacţie pe 64biţi.
AD 32 X 32 biţi suplimentari pentru adrese sau date.
PAR64 1 X Paritatea pentru ce 32 biţi suplimentari de adresă/date.
C/BE# 4 X 4 biţi suplimentari pentru activare octet.
LOCK ] X Blochează magistrala pentru a permite tranzacţii
multiple.
SBO# ] Găsirea informaţiei pe o memorie intermediară
îndepărtată (pentru un sistem microprocesor).
SDONE ] Actualizarea consistenţei informaţiei (snooping).
INTx 4 Cerere de întrerupere.
JTAG 5 Semnale de test IEEE 1149,1 JTAG.
M66EN 1 Cablat la alimentare sau la masă.
Arhitectura calculatoarelor 167
Busul PCI are un număr de semnale obligatorii (Tabelul 5.1.) şi un
număr de semnale opţionale (Tabelul 5.2).
a)-Semnalele obligatorii. Semnalul CLK(CLOCK) comandă
magistrala. Cele mai multe alte semnale sunt sincrone cu acesta.
Cele 32 semnale AD (ADDRESS), activate de master, sunt pentru
adresă şi date (pentru tranzacţiile pe 32 biţi). În general, pe durata ciclului 1
este activată adresa şi pe durata ciclului 3 sunt activate datele. PAR
(PARITY)) este un bit de paritate pentru AD. C/BE este utilizat pentru două
lucruri diferite. Pe ciclul 1 el conţine comanda magistralei (citeşte un
cuvânt, citeşte bloc etc.). Pe ciclul 2 conţine o configuraţie de 4 biţi care
specifică ce octeţi ai cuvântului de 32 biţi este valid. Utilizând C/BE este
posibil să se citească/scrie 1,2,3, octeţi sau întreg cuvântul.
Semnalul FRAME este activat de masterul magistralei pentru a
începe o tranzacţie pe magistrală. IRDY este activat în acelaşi timp cu
FRAME. El spune că masterul este gata să accepte datele de intrare. La o
scriere, IRDY este activat mai târziu când datele sunt pe magistrală.
IDSEL este legat de faptul că fiecare dispozitiv PCI trebuie să aibă
un spaţiu de configuraţie de 256 biţi pe care să-l poată citi (prin activarea
IDSEL).Acest spaţiu de configuraţie conţine proprietăţile dispozitivului.
Caracteristica de autoconfigurare (Plug’n Play) a unor sisteme de operare
utilizează spaţiul de configuraţie pentru a şti ce dispozitive sunt pe
magistrală.
Dintre semnalele activate de slave, DEVSEL(DEVICE SELECTED)
anunţă că slave-ul a detectat adresa sa pe liniile adresă şi este pregătit să se
angajeze în tranzacţie. Dacă DEVSEL nu este activat pe anumită durată de
timp, master-ul presupune că dispozitivul adresat este fie stricat fie absent.
TRDY este activat de slave la citiri pentru a anunţa că datele sunt pe
liniile de adresă şi la scrieri pentru a anunţa că este pregătit să accepte date.
Următoarele trei semnale sunt pentru raportare de erori. STOP este
activat de slave dacă se întâmplă ceva dezastruos, PERR(PARITY ERROR)
pentru a anunţa o eroare de paritate şi SERR(SYSTEM ERROR) pentru a
anunţa erori de adresă sau de sistem.
REQ şi GNT sunt pentru arbitrarea magistralei şi nu sunt activate de
masterul curent de pe magistrală ci de un dispozitiv care doreşte să devină
master . RST(RE-SET)este utilizat pentru reiniţializarea sistemului, dacă
utilizatorul apasă pe butonul RESET sau dacă un dispozitiv anunţă o eroare
fatală.
b)-Semnalele opţionale. Cele mai multe sunt legate de extinderea de
la 32 la 64 biţi. REQ64 şi ACK64 permit masterului să ceară tranzacţii pe 64
168 Sorin Adrian Ciureanu
biţi şi slave-ului să le accepte. AD, PAR64 şi C/BE sunt extensii pentru 64
biţi.
Următoarele nu sunt legate de diferenţa dintre 32 şi 64 biţi ci de
sistemele multiprocesor. Semnalele INTx(INTERRUPT) sunt pentru cereri
de întrerupere. O placă PCI are până la patru dispozitive logice separate şi
fiecare poate avea propriile sale linii de întrerupere. Semnalele JTAG sunt
pentru procedura de test IEEE 1149.1 JTAG. M66EN este cablat fie la
tensiunea de alimentare fie la masă, pentru a stabili viteza ceasului. El nu
trebuie schimbat pe durata funcţionării sistemului.

5.3.2.4. Tranzacţii pe magistrala PCI

În diagrama de timp din figura 5.5. este dată o tranzacţie de citire,


urmată de un ciclu inactiv şi de o tranzacţie de scriere, pentru acelaşi master
de pe magistrală.

Ciclu magistrală
Citire Inactiv Scriere

T1 T2 T3 T4 T5 T6 T7

Φ
Magistrala este liberă

Adresă Date Adresă Date


AD

comandă validare comandă validare


C/BE

RAME

IRDY

DEVSEL

IRDY

Fig.5.5. Exemplu de tranzacţii pe magistrala PCI.


Arhitectura calculatoarelor 169
Pe frontul descrescător al ceasului, pe durata T 1, master-ul pune
adresa de memorie pe AD şi comanda pentru magistrală pe C/BE .
El activează apoi FRAME pentru a începe tranzacţia.
Pe durata lui T2 master-ul lasă magistrala de adrese liberă (adică în
starea de mare impedanţă), în pregătirea ei pentru slave, care o va controla
pe durata T3 . De asemenea, master-ul modifică C/BE pentru a arăta ce octeţi
din cuvântul adresat vrea să-i valideze (adică să-i citească).
În T3 slave-ul activează DEVSEL, astfel că master-ul ştie că acesta a
luat adresa şi intenţionează să răspundă. De asemenea el pune datele pe
liniile AD şi activează TRDY pentru a anunţa masterul. Dacă slave-ul nu
poate să răspundă aşa repede, el va trebui totuşi să activeze DEVSEL,
pentru a anunţa prezenţa sa, dar menţine TRDY# negat până când poate să
preia datele. Această procedură poate introduce două sau mai multe stări de
aşteptare (WAIT).
În acest exemplu (şi adesea în realitate), următorul ciclu este inactiv.
In T5, acelaşi master iniţiază o scriere. El începe prin plasarea adresei şi a
comenzii pe magistrală, numai că acum el activează datele. Întrucât acelaşi
dispozitiv controlează liniile AD, nu este necesar un ciclu de eliberare a
magistralei. Pe T7 memoria acceptă datele.

5.3.3. Magistrala USB

Magistrala PCI este adecvată pentru ataşarea perifericelor de mare


viteză la calculator. Este însă prea costisitor să se ataşeze câte o interfaţă
PCI pentru fiecare dispozitiv I/E de viteză scăzută. De aceea, în 1990,
reprezentanţi de la şapte companii au proiectat un standard denumit USB
(Universal Serial Bus, în româneşte magistrală serială universală). De
atunci li s-au alăturat şi alte companii şi acum este implementat pe scară
largă în calculatoarele personale.
Companiile iniţiatoare au avut următoarele obiective:
1- Utilizatorii nu trebuie să aibă de poziţionat comutatoare sau
conexiuni (jumpere) pe plăci sau dispozitive.
2- Pentru a instala noi dispozitive, utilizatorii nu trebuie să deschidă
cutia.
3- Trebuie să existe un singur tip de cablu bun pentru conectarea
tuturor dispozitivelor.
4- Dispozitivele de I/E trebuie să se alimenteze singure, prin cablu.
5- Se pot ataşa până la 127 dispozitive la un singur calculator.
6- Sistemul ar trebui să suporte dispozitivul în timp real (de exemplu
sunet, telefon).
170 Sorin Adrian Ciureanu
7- Dispozitivele trebuie să poată fi instalate în timp ce calculatorul
funcţionează.
8- După instalarea unui nou dispozitiv să nu trebuiască repornit
calculatorul.
USB îndeplineşte aceste condiţii şi este proiectată pentru dispozitive
cu viteză redusă: tastaturi, mausuri, camere de luat vederi, scanere, telefoane
digitale şi altele. Banda de trecere totală pentru USB este de 1,5 MO/sec.,
suficientă pentru un număr substanţial de astfel de dispozitive.
USB constă dintr-un hub central (root hub)care se conectează la
magistrala principală. Acest hub are socluri pentru cabluri care se pot
conecta la dispozitive I/E sau la hub-uri de extindere, astfel că topologia
unui USB este un arbore cu rădăcina la hub-ul central, în interiorul
calculatorului. Cablurile au diferiţi conectori la capătul hubului şi la capătul
dispozitivului, pentru a preveni interconectarea accidentală a două socluri cu
huburi.

Timpul (ms)
0 1 2 3
Inactiv

Cadru 0 Cadru 1 Cadru 2 Cadru 3

SOF SOF

SOF IN DATA ACK SOF out DATA ACK

Pachete de Pachete de la
date de la dispozitiv
dispozitiv

SYN PID PAYLOAD CRC SYN PID PAYLOAD CRC

Fig.5.6. Transmiterea de cadre, la fiecare milisecundă, de către hub-ul


central al USB.

Cablul constă din patru fire: două pentru date, unul pentru
alimentare (5volţi) şi unul pentru masă. Sistemul de semnalare transmite un
0 ca tranziţie a tensiunii şi un 1 ca absenţă a unei tranziţii de tensiune, astfel
Arhitectura calculatoarelor 171
că atât timp cât durează 0-urile se generează un flux de pulsuri. Când se
conectează un nou dispozitiv I/E, hub-ul rădăcină detectează acest
eveniment şi întrerupe sistemul de operare. Apoi sistemul de operare
interoghează dispozitivul, ce este şi cât din banda USB necesită. Dacă
sistemul de operare decide că banda de trecere este suficientă pentru
dispozitiv, el asociază noului dispozitiv o adresă unică (1-127) şi încarcă
această adresă şi alte informaţii în registrele de configurare din dispozitiv. În
acest mod, noi dispozitive pot fi adăugate imediat., fără nici o altă
informaţie din partea utilizatorului şi fără să se instaleze noi plăci ISA sau
PCI. Plăcile neiniţializate pornesc de la adresa 0, astfel că ele pot fi adresate.
Pentru a face cablarea mai uşoară, multe dispozitive USB conţin hub-uri
încorporate, pentru a accepta dispozitive suplimentare USB. De exemplu un
monitor poate avea două socluri de hub pentru a amplasa difuzoare stânga şi
dreapta.
Din punct de vedere logic, sistemul USB poate fi văzut ca un set de
canale de biţi, de la hub-ul central la dispozitivele I/E. Fiecare dispozitiv
împarte canalul său în cel mult 16 subcanale, pentru diferite tipuri de date
(audio, video..) . Pe fiecare canal datele merg de la hub-ul central la
dispozitiv sau invers. Nu există trafic între două dispozitive I/E.
La exact fiecare 1,00±0,05 ms, hub-il emite un nou cadru pentru a
menţine toate dispozitivele sincronizate. Un cadru este asociat cu un canal
de biţi şi constă din pachete, primul fiind de la hub-ul rădăcină către
dispozitiv. Următoarele pachete din cadru pot, de asemenea, să fie în această
direcţie sau pot merge înapoi de la dispozitiv la hub.
În figura 5.6. se prezintă o secvenţă de patru cadre.. În cadrele 0 şi 2
nu se efectuează nimic, astfel că este necesar doar un pachet SOF (Start of
Frame), de început de cadru. Acest pachet este trimis totdeauna în toate
dispozitivele. Cadrul 1 este o interogare, de exemplu o cerere ca un
dispozitiv de scanare să returneze biţii pe care i-a găsit în imaginea pe care o
scanează. Cardul 3 constă din datele ce se transmit la un dispozitiv, de
exemplu la o imprimantă.
USB suportă patru tipuri de cadre: control, izocron, transfer de
cantităţi mari de date (bulk) şi întrerupere:
-cadrele de control sunt utilizate pentru a configura dispozitive, a le
transmite comenzi şi a le interoga despre starea lor;
-cadrele izocrone sunt pentru dispozitive în timp real cum ar fi
microfoane, difuzoare şi telefoane care au nevoie să transmită sau să
accepte date la intervale de timp precise; ele au o întârziere predictibilă dar
nu permit retransmisia în cazul unei erori;
172 Sorin Adrian Ciureanu
-cadrele de transfer de cantităţi mari de date sunt pentru transferuri
mari sau de la dispozitive fără cerinţe de timp real, cum ar fi imprimantele;
-cadrele de întrerupere sunt necesare deoarece USB nu suportă
întreruperi; de exemplu, în loc să avem o tastatură care să genereze o
întrerupere ori de câte ori se apasă o tastă, sistemul de operare o poate
interoga la fiecare 50 ms pentru a prelua tastele apăsate până atunci.
Un cadru constă din unul sau mai multe pachete, câteva, posibil, în
fiecare direcţie. Există patru tipuri de pachete:
-pachete de control (token) care sunt de la rădăcină la un dispozitiv
şi au rol de control al sistemului (de exemplu SOF, IN, AUT, SETUP);
-pachete de date (DATA) care sunt utilizate pentru a transmite până
la 64 de octeţi de informaţie în orice direcţie; ele constau din 8 biţi de
sincronizare (SYN), un tip de pachet de 8 (PYD), sarcina adică datele de
transmis (PAYLOAD) şi CRC-ul(Cyclic Redundancy Code) de 16 biţi
pentru a detecta erori;
-pachete de negociere care sunt de trei tipuri, ACK (pachetul anterior
a fost bine recepţionat), NAK (s-a detectat o eroare CRC şi STALL ( vă rog
aşteptaţi, acum sunt ocupat);
-pachete speciale.
La fiecare 1ms trebuie transmis un cadru de la hub-ul rădăcină, chiar
dacă nu este nimic de făcut. Cadrele 0 şi 2 ( figura 5.6.) constau doar dintr-
un pachet SOF, indicând că nu s-a făcut nimic.
Cadrul 1 este o interogare, astfel că el începe cu transmiterea
pachetelor SOF şi IN de la calculator la dispozitivele I/E, urmate de un
pachet DATA de la dispozitiv la calculator. Pachetul ACK spune
dispozitivului că datele au fost recepţionate. În cazul unei erori către
dispozitiv se va transmite un NAK şi pachetul se va retransmite în cazul
transferurilor de cantităţi mari de date ( dar nu şi în cazul datelor izocrone).
Cadrul 3 este similar ca structură cu cadrul 1, cu excepţia faptului
fluxul de date este de la calculator la dispozitiv.

Interconectarea unităţilor componente ale calculatorului se face pin


una sau mai multe magistrale, o magistrală fiind formată dintr-un grup de
linii destinate transferului paralel de informaţii de la una sau mai multe
surse la una sau mai multe destinaţii. Numărul liniilor magistralei este egal
de obicei cu lungimea cuvântului transferat. În figura 5.7 este dat un
exemplu de interconexiuni în calculatorul Pentium II clasic.
Magistralele utilizate pot fi unidirecţionale sau bidirecţionale. La un
moment dat, nu poate fi selectată decât o sursă şi una sau mai multe
destinaţii. În cazul selecţiei simultane a mai multor surse, rezultatul poate fi
Arhitectura calculatoarelor 173
imprevizibil. Selecţia sursei sau a destinaţiei se realizează cu multiplexoare
şi decodificatoare. Multiplexorul specifică sursa care depune informaţia pe
magistrală iar codificatorul selectează destinaţiile care vor fi cuplate la
magistrală.

Fig. 5.7. Diferite magistrale în arhitectura calculatorului


Pentium II: ISA, PCI, USB, locale. Magistralele mai late au banda de
trecere mai mare decât cele mai înguste.
174 Sorin Adrian Ciureanu

BIBLIOGRAFIE

1. Michel Cruceanu, Architecture des ordinateurs, Miage,


Université de Paris-Sud, 1995.
2. Jaques Guizot, Architecture des ordinateurs, DEUG Poly. Fr.
1996.
3. Andrew Tanenbaum, Organizarea structurată a calculatoarelor,
(traducere din ediţia 4), Computer Press Agora, Tg. Mureş, 1999.
4. Dorian Gorgan, Gh. Sebestyen, Structura calculatoarelor, Ed.
Albastră, Cluj-Napoca, 2000.
5. Baruch-Zoltan Francisc, Arhitectura calculatoarelor, Ed.
TODESCO, Cluj-Napoca, 2000.
6. Patrick Marcel, Architecture des ordinateurs, IUP CEII-
Informatique et télécommunications, Paris, 2001.
7. Vasile Lungu, Procesoare Intel.Programare în limbaj de
asamblare. Ed. Teora, Bucureşti, 2001.
8. Lancelot Pecquet, Architecture des ordinateurs et systèmes
d’exploitation, DEUG MIAS, Université de Paris XII, 2004.
9. Nicolas Delestre, Michel Maingeuenod, Architecture des
ordinateurs. Introduction à l’ informatique. ASI Paris, 2004.
10. Răzvan-Daniel Zota, Elemente de arhitectura sistemelor de
calcul şi operare, Ed. ASE, Bucureşti 2005.
11. PH. Leray, Architecture des ordinateurs et systèmes
d’exploitation, INSA, Rouen, 2005
12. Cécile Germain, Daniel Etiemble, Architecture des Ordinateurs.
Deuxième partie., IUP Miage-FIIFO, 2005.
13. Dominique Present, Architecture des ordinateurs,(Photos), Dep.
SRC, IUT, Marne la Vallé, 2005.
14. David Simplot, Architecture des Ordinateurs, simplot
.fil.univ.lile1.fr. ,2005.
15. Jean-Jacques Schwarz, Architecture des ordinateurs, Eyrolles,
Paris, 2005.
Arhitectura calculatoarelor 175
176 Sorin Adrian Ciureanu

CUPRINS
Pg.
1 NOŢIUNI INTRODUCTIVE………………………………………………... 3
1.1. SCHEMA DE BAZĂ A UNUI CALCULATOR……………………. 3
1.2. SCHEMA NIVELELOR CONCEPTUALE ALE UNUI
CALCULATOR………………………………………………………. 5
1.3. SCURT ISTORIC AL DEZVOLTĂRII CALCULATOARELOR... 7
1.3.1. Influenţa progresului tehnologic asupra dezvoltării
calculatoarelor………………………………………………... 7
1.3.1.1. Generaţia zero. Calculatoare mecanice…………… 7
1.3.1.2. Generaţia întâi. Maşini cu tuburi electronice……. 9
1.3.1.3. Generaţia a doua. Calculatoare cu tranzistori…….. 10
1.3.1.4. Generaţia a treia. Calculatoare cu circuite integrate 11
1.3.1.5. Generaţia a patra. V.L.S.I………………………... 13
1.3.1.6. Generaţia a cincia………………………………… 13
1.3.2. Concepţii noi în evoluţia calculatoarelor……………………. 15
1.3.2.1. Microprogramarea……………………………….. 15
1.3.2.2. Inventarea sistemului de operare………………… 15
1.3.2.3. Memoria Cache…………………………………… 15
1.4. TIPURI DE ARHITECTURI ALE CALCULATOARELOR
NUMERICE…………………………………………………………… 16
1.4.1. Arhitectura von Neumann…………………………………… 16
1.4.2. Maşina Turing………………………………………………. 17
1.5. CLASIFICAREA CALCULATOARELOR…………………………. 18
1.5.1. Taxonomia Flynn……………………………………………. 18
1.5.2. Taxonomia Wang…………………………………………….. 20
1.5.3. Taxonomia Shore…………………………………………….. 20
1.5.4. Clasificare comercială………………………………………... 23
1.6. TRENDUL ACTUAL ÎN ARHITECTURA CALCULATOARELOR 23
2 UNITATEA CENTRALĂ………………………………………………….. 25
2.1. STRUCTURA UNITĂŢII CENTRALE…………………………….. 25
2.2. CARACTERISTICILE UNITĂŢII CENTRALE…………………… 27
2.2.1. Lungimea cuvântului………………………………………… 27
2.2.2. Frecvenţa ceasului…………………………………………… 27
2.2.3. Numărul de instrucţiuni executate în unitatea de timp………. 28
2.2.4. Gradul de paralelism………………………………………… 28
2.2.4.1. Paralelism la nivel de instrucţiuni (pipeline)…….. 29
2.2.4.2. Paralelism la nivel de procesor…………………… 32
2.3. SETUL DE INSTRUCŢIUNI………………………………………... 32
2.3.1. Tipuri de instrucţiuni………………………………………… 33
2.3.2. Formatul unei instrucţiuni…………………………………… 33
2.3.3. Modul de adresare…………………………………………… 34
2.4. UNITATE CENTRALĂ CABLATĂ………………………………… 35
Arhitectura calculatoarelor 177
2.5. UNITATE CENTRALĂ CU MICROPROCESOR…………………. 41
2.5.1. Schema generală a unui procesor…………………………… 41
2.5.2. Registrele microprocesorului………………………………… 43
2.5.2.1 Registre generale…………………………………. 43
2.5.2.2. Registre segment…………………………………. 45
2.5.2.3. Registre IP şi F……………………………………. 46
2.5.3. Adresarea memoriei. Segmentarea………………………….. 47
2.5.4. Formatul instrucţiunii……………………………………….. 48
2.5.5. Moduri de adresare………………………………………….. 49
2.5.5.1 Adresare directă…………………………………… 49
2.5.5.2. Adresare indirectă…………………………………. 50
2.5.5.3 Adresare indexată…………………………………. 50
2.5.5.4. Adresare imediată…………………………………. 51
2.5.5.5. Adresarea porturilor de I/E……………………….. 51
2.5.6. Procesoare 286………………………………………………. 52
2.5.7. Procesoare 386………………………………………………. 53
2.5.8. Procesoare 486………………………………………………..53
2.5.9. Procesoare PENTIUM………………………………………. 54
2.5.9.1. Microarhitectura familiei de procesoare PENTIUM 55
2.5.9.2. Unitatea de extragere şi decodificare a
instrucţiunilor………………………………………56
2.5.9.3. Unitatea de dispecerizare şi execuţie……………… 57
2.5.9.4. Unitatea de retragere……………………………….59
2.6. UNITATE CENTRALĂ DE TIP RISC……………………………... 60
2.6.1. CISC versus RISC……………………………………………. 60
2.6.2. Setul de instrucţiuni…………………………………………... 61
2.6.3. Principiul de procesare pipeline într-un procesor RISC……… 62
2.6.4. Structura unui procesor RISC…………………………………64
2.6.5. Problema hazadurilor în procesoarele RISC…………………. 65
2.6.5.1. Hazarduri structurale……………………………….65
2.6.5.2. Hazarduri de date…………………………………..66
2.6.5.3. Hazarduri de ramificaţie…………………………... 72
2.7 PROCESOARE SUPERSCALARE…………………………………. 76
2.7.1. Principiul arhitecturii superscalare…………………………. 76
2.7.2. Hazarduri în arhitectura superscalară………………………… 79
2.7.2.1. Hazarduri structurale. Dependenţa de resurse……. 79
2.7.2.2. Hazarduri de date…………………………………. 79
2.7.2.3. Hazarduri de control………………………………. 81
2.7.3. Arhitectura superscalară TOMASULO………………………. 83
2.7.4. Arhitectura tipică a unui procesor superscalar………………...89
3 UNITATEA DE MEMORIE……………………………………………….. 91
3.1. MEMORIA FIZICĂ…………………………………………………… 91
3.2 CLASIFICAREA CIRCUITELOR DE MEMORIE………………… 93
3.2.1. Clasificarea după volatilitate…………………………………..93
3.2.2. Clasificarea după modul de păstrare a informaţiilor…………..94
3.2.2.1. Memoria RAM statică…………………………….. 94
3.2.2.2. Memoria RAM dinamică………………………….. 94
3.2.3. Structura unităţii de memorie………………………………….95
178 Sorin Adrian Ciureanu
3.2.4.Tipuri de circuite de memorie…………………………………96
3.2.4.1. Circuite FPM DRAM………………………………97
3.2.4.2 Circuite EDO DRAM……………………………... 97
3.2.4.3. Circuite BEDO DRAM…………………………….97
3.2.4.4. Circuite S DRAM…………………………………. 98
3.2.4.5. Circuite SGRAM………………………………….. 99
3.2.4.6. Circuite WRAM……………………………………99
3.2.5. Ierarhii de memorie…………………………………………..99
3.2.5.1. Memorii SET UP………………………………….. 100
3.2.5.2. Memorii BIOS…………………………………….. 102
3.2.5.3. Set de registre generale……………………………. 102
3.2.5.4. Memoria CACHE…………………………………. 103
3.2.5.5. Memoria RAM……………………………………..109
3.2.5.6. Memoria virtuală…………………………………...110
4 UNITATEA DE INTRARE/IEŞIRE……………………………………… 111
4.1. SCHEMA UNUI SISTEM DE INTRARE/IEŞIRE……………………111
4.1.1. Structura hard a unui sistem de I/E……………………………111
4.1.2. Structura soft a unui sistem de I/E……………………………. 112
4.1.2.1. Rutine de tratare a întreruperilor…………………...113
4.1.2.2. Drivere…………………………………………….. 114
4.1.2.3. Programe sistem independente de dispozitive…… 117
4.1.2.4. Primitive de nivel utilizator……………………….. 118
4.2. TRANSFER DE DATE ÎNTR-O UNITATE DE I/E……………… 118
4.2.1. Transfer prin program………………………………………… 118
4.2.2. Transfer prin întreruperi……………………………………… 119
4.2.3. Transfer direct prin DMA…………………………………….. 120
4.2.4. Transfer prin procesor de I/E…………………………………. 121
4.2.5. Instrucţiuni virtuale de I/E……………………………………. 122
4.2.5.1. Fişiere………………………………………………123
4.2.5.2. Implementarea instrucţiunilor de I/E……………… 125
4.2.5.3. Instrucţiuni pentru gestionarea cataloagelor……… 128
4.3. PROCESAREA INTRĂRILOR/IEŞIRILOR…………………………. 129
4.3.1. Mecanismul întreruperilor……………………………………. 130
4.3.2. Întreruperi şi excepţii…………………………………………. 132
4.3.2.1. Situaţii excepţionale……………………………… 132
4.3.2.2. Gestiunea întreruperilor…………………………… 134
4.4. PERIFERICE DE I/E…………………………………………………..136
4.4.1. Memorii externe……………………………………………….137
4.4.1.1. Principii fizice de stocare a informaţiei…………… 137
4.4.1.2. Hard discuri………………………………………...139
4.4.1.3. CD-ROM-uri……………………………………….144
4.4.1.4. DVD-uri……………………………………………147
4.4.2. Periferice care nu stochează informaţia………………………. 149
4.4.2.1. Tastatura……………………………………………149
4.4.2.2. Sistemul de afişaj…………………………………..149
4.4.2.3. Imprimanta…………………………………………152
5 MAGISTRALE………………………………………………………………. 157
5.1. ARBITRAJ…………………………………………………………….. 157
Arhitectura calculatoarelor 179
5.2. TRANSFER DE DATE………………………………………………... 159
5.2.1. Magistrală sincronă……………………………………………159
5.2.2. Magistrală asincronă………………………………………….. 160
5.3. EXEMPLE DE MAGISTRALE……………………………………….. 161
5.3.1. Magistrala ISA………………………………………………...162
5.3.2. Magistrala PCI………………………………………………... 162
5.3.2.1. Ameliorarea performanţelor…………………….. 163
5.3.2.2. Adresarea magistralei PCI………………………… 164
5.3.2.3. Semnalele magistralei PCI…………………………165
5.3.2.4. Tranzacţii pe magistrala PCI……………………….167
5.3.3. Magistrala USB………………………………………………..168
BIBLIOGRAFIE……………………………………………………………………173

You might also like