Anda di halaman 1dari 101

ARHITECTURA SISTEMELOR DE CALCUL

Note de curs

Dr. Ing. Inf. Marius Gh. ROGOBETE

Bucureti 2017

1
Cuprins
1. Evoluia arhitecturii calculatoarelor ........................................................................................ 5
1.1. Clasificarea arhitecturii sistemelor de calcul ................................................................... 5
1.2. Structura fizic a unui calculator, tipuri de calculatoare, exemple de arhitecturi
uniprocesor si multiprocesor ....................................................................................................... 6
1.2.1 Tipuri de calculatoare .................................................................................................... 7
1.2.2. Arhitecturi de sisteme multiprocesor ...................................................................... 10
1.3. Arhitectura lui Von Neumann. ....................................................................................... 11
1.3.1. Unitatea central (Central Processing Unit CPU) ................................................ 12
1.4. Principiile de funcionare ale mainii Turing. ................................................................ 13
2. Clasificarea semnalelor ......................................................................................................... 15
2.1. Semnalul analogic .......................................................................................................... 16
2.2. Semnalul digital.............................................................................................................. 16
2.3. Transformarea semnalelor .............................................................................................. 17
3. Bazele logice ale calculatoarelor. ......................................................................................... 20
3.1. Funcii logice. Pori logice. Algebra de comutaie. ........................................................ 20
3.1.1. Funcii logice. Tabele de adevr ............................................................................. 20
3.1.2. Pori logice .............................................................................................................. 23
3.2. Algebr de comutaie.Logic i circuite logice combinaionale. Componente digitale. 26
3.2.1. Algebra de comutaie .............................................................................................. 26
3.2.2. Logic i circuite logice combinaionale (CLC) ..................................................... 27
3.2.3. Convertoare de cod ................................................................................................. 28
3.2.4. Codificatoare i decodificatoare ............................................................................. 29
3.2.5. Multiplexoare i demultiplexoare ........................................................................... 30
3.2.6. Comparatoare .......................................................................................................... 31
3.2.7. Sumatoare ............................................................................................................... 32
3.3. Maini cu numr finit de stri ........................................................................................ 33
4. Componentele unui sistem de calcul..................................................................................... 38
4.1. Magistrale ....................................................................................................................... 38
4.2. Unitatea central, procesorul (executia unei instruciuni, tipuri de uniti centrale,
exemple de microprocesoare) ................................................................................................... 40
4.3. Tipuri de memorie (memoria principal, memoria de lucru, memoria cache, memoria
ROM, memoria video, memoriile secundare)........................................................................... 47
4.3.1. Clasificare memoriei ............................................................................................... 49
4.3.2. Memoria principal ................................................................................................. 51

2
4.3.3. Memoria cache ........................................................................................................ 52
4.3.4. Memoria virtual (secundar) ................................................................................. 56
4.3.5. Memoria video ........................................................................................................ 56
4.4. Dispozitive de intrare/ieire (organizare, conectare, interfete). ..................................... 57
5. Nivelul fizic .......................................................................................................................... 60
5.1. Microprocesorul, ntreruperile, magistralele de comunicaie (magistralele sincrone si
asincrone, arbitrajul magistralei) .............................................................................................. 60
5.1.2. Moduri de lucru ntre microprocesor si interfetele I/O ............................................... 62
5.2. Magistrala procesorului, magistrala de date, magistrala de adese, magistrala I/O ........ 66
5.3. Exemple si comparatii. ................................................................................................... 67
6. Compilatoare si asambloare .................................................................................................. 69
6.1. Limbaje de nivel nalt, limbaje de nivel sczut .............................................................. 71
6.1.1. Compilare vs. Interpretare ...................................................................................... 72
6.2. Descrierea componentelor unui compilator ................................................................... 72
6.3. Programarea n limbaj de asamblare .............................................................................. 74
6.3.1. Familia de procesoare Intel x86 .............................................................................. 75
6.4. Directive si instruciuni ASM. ....................................................................................... 78
6.4.1. Sintaxa unei instruciuni n limbaj de asamblare .................................................... 78
Clase de instruciuni .............................................................................................................. 78
6.4.2. Instruciuni de transfer ............................................................................................ 78
6.4.3. Instruciuni aritmetice ............................................................................................. 80
6.4.4. Instruciuni logice ................................................................................................... 82
6.4.5. Instruciuni de deplasare i de rotire ....................................................................... 82
6.4.6. Instruciuni de salt ................................................................................................... 83
6.4.7. Instruciunile de apel i revenire din rutine............................................................. 84
6.4.8. Instruciunile de ramificare i ciclare ...................................................................... 84
6.4.9. Instruciuni de intrare/ieire .................................................................................... 86
6.4.10. Instruciuni pe iruri ............................................................................................ 86
6.4.11. Instruciuni speciale............................................................................................. 87
7. Nivelul sistemului de exploatare ........................................................................................... 88
7.1. Memoria virtual, conceptual de paginare , conceptul de segmentar ............................ 88
7.1.1. Paginarea ................................................................................................................. 90
7.1.2. Segmentarea ............................................................................................................ 91
7.2. Exemple de gestionare a memoriei virtuale. .................................................................. 92
7.2.1. Memoria virtual ..................................................................................................... 93
3
Cererea de pagini .................................................................................................................. 93
8. Arhitecturi evoluate .............................................................................................................. 95
8.1. Masinile RISC (evolutia arhitecturii sistemelor de calcul, principii de proiectare a
masinilor RISC), ....................................................................................................................... 95
8.1.1. RISC ........................................................................................................................ 95
8.1.2. CISC ........................................................................................................................ 95
8.1.3. RISC vs CISC ......................................................................................................... 96
8.2. Arhitecturi paralele, exemple. ........................................................................................ 97
8.2.1. Paralelism - Pipelining ............................................................................................ 97
8.2.2. Hazard ..................................................................................................................... 98
9. Bibliografie ......................................................................................................................... 101

4
1. Evoluia arhitecturii calculatoarelor
Un sistem de calcul poate fi definit (conform The American Heritage Dictionary of the English Language,
Fifth Edition, 2016) ca:
- dispozitiv care lucreaz automat, sub controlul unui program memorat, prelucrnd date n vederea
producerii unor rezultate ca efect al procesrii;
- dispozitiv care efectueaza calcule, n special o main electronic programabil care execut
operaii aritmetice, logice sau care asambleaz, stocheaz, coreleaz sau efectueaz un alt tip de
procesare a informaiei, cu vitez ridicat.

Funciile de baz ale unui sistem de calcul (SC) sunt:


- procesarea de date;
- memorarea de date;
- transferul de informaii;
- controlul tuturor componentelor SC.

1.1. Clasificarea arhitecturii sistemelor de calcul


Sistemele de calcul se pot clasifica uzual din punct de vedere a puterii de calcul i din punct de vedere al
utilizrii.
Clasificarea dup puterea de calcul este una dinamic, fiind n continu schimbare datorit evoluiei
spectaculoase a tehnologiei de procesare:
- Supercalculatoare - sisteme de calcul considerate la momentul apariiei drept cele mai
performante din lume n ceea ce privete viteza de procesare a datelor;
- Mainframe-uri - maini multiprocesor, de asemenea cu putere mare de procesare, neorientate nsa
spre un task precis ci mai degrab aplicaiilor critice, prelucrrilor simple asupra unui volum mare
de date, salvarea i backup-ul acestor date;
- Minicalculatoare - termen folosit n anii 60 i 70 pna la apariia microcalculatoarelor. Sisteme
de calcul de cost relativ redus - tot ce era inferior unui mainframe i unui supercalculator, att ca
putere de procesare ct i ca dimensiune fizica, destinate universitailor, ramuri ale industriei, etc;
- Microcalculatoarele - sisteme de calcul bazate pe folosirea unui microprocesor (de unde i
numele), aparute la sfrsitul anilor 70, nceputul anilor 80, cost redus, destinate n principal
utilizatorului domestic sau companiilor.

Din punctul de vedere al utilizrii:


- Staii de lucru (workstations) - de obicei calculatoare din familia microcalculatoarelor
(calculatoarele personale spre exemplu) cu putere de procesare medie, capabiliti grafice i
multimedia ridicate, de obicei conectate la Internet;
- Server-e - ofer diferite servicii staiilor (clienilor). Din punct de vedere hardware un server
poate rula att pe un microcalculator (calculator personal) cu putere de procesare mai ridicat ct
i pe arhitecturi hardware dedicate acestui scop (mainframe-uri sau supercalculatoare);
- Microdispozitive (embedded devices) - dispozitive cu putere de calcul relativ redus, dotate cu un
procesor i cu o funcionalitate dedicat unui anumit scop. Exemple: telefoane mobile, PDA, MP3
player-e, GPS-uri, DVD player-e, etc. Aproximativ 80% din procesoarele produse n acest
moment sunt dedicate microdispozitivelor.

5
1.2. Structura fizic a unui calculator, tipuri de calculatoare, exemple de
arhitecturi uniprocesor si multiprocesor

Un sistem de calcul (SC) este structural format din:


- hardware - partea de echipamente:
- unitatea centrala de procesare (Central Processing Unit CPU);
- memoria;
- dispozitivele periferice;
- software - partea de programe:
- soft sistem (aplicaii destinate sistemului de calcul si sistemului de operare);
- soft utilizator (restul aplicaiilor);
- firmware - partea de microprograme.

Arhitectura unui sistem de calcul se refera la acele atribute ale sistemului care sunt vizibile
programatorului si care au un impact direct asupra executiei unui program:
- setul de instructiuni masina;
- caracteristicile de reprezentare a datelor;
- modurile de adresare;
- sistemul de intrare / ieire (I/O).

Mulimea instruciunilor main (Instruction Set Arhitecture ISA) este interfaa cheie ntre
nivelele de abstractizare, fiind interfata dintre hard si soft. Aceasta permite unor siteme de calcul
diferite s ruleze soft identic, caz n care vorbim despre calculatoare compatibile, de exemplu
calculatoare compatibile IBM-PC (n prezent bazate pe procesoare AMD sau Intel).
Aceste instrucinui sunt utilizate pentru :
- organizarea SC, modul de stocare a informatiei (registri, memorie);
- tipurile si structurile de date (codificri, reprezentri);
- formatul instruciunilor;
- setul de instruciuni (codurile operatiilor) pe care microprocesorul le poate efectua;
- modurile de adresare si accesare a datelor si instruciunilor;
- definirea condiiilor de excepie.

Componentele minimale ale unui sistem de calcul sunt urmtoarele:


- modulul de control;
- memoria;
- sistemul de intrare / ieire (input/output);
- structuri de interconectare a componentelor de mai sus (magistrale);

6
Figura 1.1 Arhitectura unui sistem de calcul.

1.2.1 Tipuri de calculatoare

Sunt dou clasificrim date de Flinn i Wang a diverselor tipuri de arhitecturi, generate din arhitectura de
baza von Neumann.

1.2.1.1. Clasificarea Flinn


Din punct de vedere conceptual functionarea unui sistem de calcul poate fi vazuta ca actiunea unui flux de
instructiuni (care reprezinta programul ) asupra unui flux de date (care reprezinta datele de intrare sau
rezultate partiale).
Clasificarea Flinn, care are vedere gradul de multiplicitate al celor doua fluxuri, identifica patru tipuri de
arhitecturi si anume:
- SISD (Single Instruction Stream Single Data Stream);
- SIMD (Single Instruction Stream Multiple Data Stream);
- MISD (Multiple Instruction Stream Single Data Stream);
- MIMD (Multiple Instruction Stream Multiple Data Stream).

Pentru aceste arhitecturi trei tipuri de componente de sistem respectiv UC (sectiunea de comanda a
unitatii centrale), UP (sectiunea de prelucrare a unitatii centrale), MM (modulul de memorie), cele doua
fluxuri fiind FD (fluxul de date) respectiv FI (fluxul de instructiuni).
Dei diferite ntre ele cele patru structuri respecta succesiunea evenimentelor specifice arhitecturii von
Neumann. Instructiunile si datele sunt extrase din memorie, instructiunile sunt decodificate de UC care
trimite secvena de instructiuni catre UP pentru executie.

SISD
Arhitectura SISD realizeaza o executie secveniala a instructiunilor. De exemplu o nmultire

7
cu o constanta 3 a 100 de numere implica aducerea pe rnd din memorie a celor 100 de numere si
nmultirea lor cu respectiva constanta, fiecare rezultat fiind trimis n memorie pe masura efectuarii
calculului.
Principalul neajuns al acestei arhitecturi consta n viteza de procesare care la rndul ei este determinata de
fracventa ceasului. Este evident ca nici o realizare tehnologica nu va putea face perioada ceasului nula. n
consecinta modul strict secvenial de tratare a operatiilor impus de
arhitectura von Neumann plafoneaza la un moment dat viteza de procesare. Aceasta situatie este
cunoscuta sub numele gtul sticlei lui Neumann(Neumann Bottleneck).

Figura 1.2. Arhitectura SISD


Aceast limitare este depit prin introducerea arhitecturilor de tip neserial (respectiv arhitecturile
paralele).

SIMD
Arhitectura SIMD, prezinta urmatoarele caracteristici:
- exista mai multe UP, sub forma procesoarelor de date, datorita fluxului de date multiplu, preluat
din memoria partajata MP;
- exista o singura UC, sub forma procesorului de instructiuni, care supervizeaza procesoarele UP;
- toate UP primesc setul unic de instructiuni si proceseaza fiecare un anume flux de date (UPi
proceseaza SDi );
- masinile SIMD pot efectua procesari pe cuvnt (word-slice) sau pe bit (bit slice).

Figura 1.3. Arhitectura SIMD.


Considernd exemplul precedent cele 100 de numere vor fi nmultite simultan cu constanta 3 iar
rezultatele vor fi stocate n partitiile MMi ale memoriei. Aceste tipuri de masini lucreaza foarte bine pe
seturi de date formate din matrice de dimensiuni foarte mari atunci cand asupra fiecarei date este necesar
a se efectua aceiasi operatie. Principala limitare a masinilor SIMD este de natura economica deoarece

8
ariile de procesoare nu sunt componente standard si prin urmare aceste masini sunt unicate i cost foarte
mult.
MISD
Arhitectura MISD, numita macro-pipe-line prezinta urmatoarele caracteristici:
- fiecare UC lucreaza cu sirul propriu de instuctiuni SI1, SI2, SIn;
- fiecare UP primeste instructiuni diferite, nsa opereaza asupra aceluiasi sir de date SD (care
suporta n consecinta mai multe prelucrari).

Figura 1.4. Arhitectura MISD.


Desi aceasta masina este posibil de realizat din punct de vedere teoretic, nu a fost niciodata fabricata n
scop comercial, avnd n prezent doar o valoare teoretica.

MIMD
Arhitectura MIMD realizeaza o prelucrare paralela prin lansarea n executie a mai multor instructiuni n
acelasi timp pe diferite seturi de date. n afara elementelor prezentate n figura sunt necesare elemente
aditionale de control care s repartizeze instructiunea corecta si data respectiv la procesorul ales
(simultan la toate procesoarele).

Figura 1.5. Arhitectura MIMD.

9
Principial exista doua tipuri de arhitecturi MIMD si anume:
- shared memory (intrinseci) daca spatiul de memorie este accesat n comun de toate cele n
procesoare;
- shared nothing (independente) daca fiecare procesor are propria memorie.

1.2.1.2. Clasificarea Wang

Aceasta clsificare presupune o organizare matriceala a datelor. O matrice de dimensiune mxn presupune
existenta a m cuvinte, fiecare cuvnt cu lungimea de n bii.
Criteriul este reprezentat de gradul de paralelism n procesarea datelor organizate matriceal. Conform
acestui criteriu exista patru tipuri de arhitecturi si anume:
- WSBS (Word Serial Bit Serial) se lucreaza pe un singur cuvnt, fiecare cuvnt fiind prelucrat
bit cu bit, respectiv ns1, ms1;
- WSBP (Word Serial Bit Paralel) se lucreaza pe un singur cuvnt, bitii fiecarui cuvnt fiind
prelucrati simultan, respectiv n>1, ms1;
- WPBS (Word Paralel Bit Serial) se lucreaza pe un singur bit la toate cuvintele simultan,
respectiv ns1, m>1;
- WPBP (Word Paralell Bit Paralel) se lucreaza simultan pe toate cuvintele si pe toti bitii
fiecarui cuvnt fi, respectiv n>1,m>1.

Structura WPBP este complet paralela fiind orientata pe prelucrari de matrice mxn, n timp ce structurile
WSBP si WPBS sunt partial paralele fiind orientate pe prelucrari vectoriale (WSBP orizontala 1xn,
WPBS verticala mx1). n ceea ce priveste arhitectura WSBS aceasta nu are
elemente de paralelism.

1.2.2. Arhitecturi de sisteme multiprocesor


Exist dou categorii de sisteme multiprocesor : arhitectura centralizat i cu arhitectur distribuit.

Figura 1.6. Arhitecturi multiprocesor

Soluia centralizateste utilizatpentru sisteme complexe. Este necesar un mecanism de intercomunicare


ntre procesoare (realizat software sau hardware) care limiteazperformanelesistemului.
Pentru soluia distribuit deciziile se iau local de ctre procesoarele periferice. Mecanismulde
intercomunicare (uzual realizat software) este mai simplu. Este necesar divizarea funciilor sistemului n

10
subfuncii bine determinate care snt aribuite procesoarelor locale. n practic se utilizeaz i soluii mixte,
cu un procesor central i mai multe procesoare locale.

Sistem multiprocesor cu 2 procesoare cu memorie comun

Figura 1.7. Sistem mutiprocesor cu memorie comun

1.3. Arhitectura lui Von Neumann.

Calculatoarele digitale convenionale au o baz conceptual comun care i este atribuit lui von
Neumann. Modelul von Neumann const n cinci componente majore:
- unitatea de intrare furnizeaz instruciuni i date sistemului, ce sunt stocate ulterior n
- unitatea de memorie. instruciunile i datele sunt procesate de
- unitatea aritmetic i logic (ULA) sub controlul
- unitii de control , iar rezultatele sunt trimise la
- unitatea de ieire.

ULA i UC poart denumirea generic de CPU (Unitate Central de Procesare).

Programul stocat este cel mai important bloc al modelului von Neumann. Un program este stocat n
memoria calculatorului mpreun cu datele ce sunt procesate. nainte de apariia calculatoarelor cu
program stocat, programele erau stocate pe medii externe cum ar fi cartele perforate. n calculatorul cu
program stocat acesta poate fi manipulat ca i cum ar reprezenta date. Aceasta a dus la apariia
compilatoarelor i sistemelor de operare i face posibil marea versatilitate a calculatoarelor moderne.

Ca urmare, caracterizarea arhitecturii von Neuman se face prin :


- utilizarea memoriei interne pentru a stoca secvene de control pentru ndeplinirea unei anumite
sarcini secvene de programe;
- datele, ct si instructiunile sunt reprezentate ca siruri de biti si sunt stocate ntr-o memorie read-
write;
- coninutul memoriei se poate accesa n funcie de locatie (adresa), indiferent de tipul informatiei
coninute;

11
- execuia unui set de instructiuni se efectueaza secvenial, prin citirea de instruciuni consecutive
din memorie.

1.3.1. Unitatea central (Central Processing Unit CPU)

Funciile unui CPU sunt:


- obtinerea instructiunilor care trebuie executate;
- obtinerea datelor necesare instructiunilor;
- procesarea datelor (executia instructiunilor);
- furnizarea rezultatelor obtinute.

Componentele de baza ale unui CPU sunt :


- Unitatea Aritmetica-Logica (Arithmetic Logic Unit ALU);
- Unitatea de Comanda si Control (Control Unit CU) decodifica instructiunile (FETCH/
DECODE/ READ MEMORY/ EXECUTE/ STORE);
- regitrii acetia sunt dispozitive de stocare temporar a datelor si informatiilor de control
(instructiunile), de capacitate mica si viteza de acces mare;
- magistrale interne CPU dispozitive pentru comunicare ntre componentele CPU si comunicare
cu exteriorul, pentru transferul de informatii.

Ceasul sistem
Fiecare procesor (CPU) conine un ceas intern care produce si trimite semnale electrice pe
magistrala de control pentru a sincroniza operatiile sistemului. Semnalele alterneaza valori 0 si 1
cu o anumita frecvena. Frecvena cu care se alterneaz aceste valori se numete ciclu de ceas sau
perioada ceasului (clock cycle).

Ciclu de ceas este cea mai mica unitate de timp sesizabil de catre un procesor.
Frecventa de ceas este numarul de cicluri de ceas pe secunda.

Exemplu: ceasul unui procesor la 300 de Mhz ticaie de exact 300.000.000 ori pe secunda. Un
ciclu de ceas al unui astfel de procesor are o durata de 1 / 300.000.000 secunde.

Viteza de calcul
Numrul de cicluri pe instruciune (Cycles per Instruction : CPI) determin viteza de procesare.
Fiecare instructiune dureaza un anumit numr de cicluri de ceas (exemplu: instructiunea MOV
dureaza intre 2 si 14 cicluri de ceas n funcie de natura operanzilor).
Un procesor ruland la 1400 Mhz executa o aceeasi instructiune mai repede decat unul rulnd la
800 Mhz durata ciclului de ceas fiind mai scurt.

Benchmarking-ul dintre viteza de calcul a procesoarelor din familia x86 versus celor din familia
RISC (set redus de instruciuni) demonstreaz diferena dintre instructiunile complexe care
dureaza mai multe cicluri vs instructiuni simple, primare care se execut rapid.
n prezent s-a atins o anumita limit n ceea ce privete viteza procesoarelor. Mecanisme noi de
crestere a vitezei pot fi:
- Pipelining - paralelizarea instructiunilor (o instructiune trecuta din faza FETCH n faza
DECODE, permite unui alte instructiuni s treaca n faza FETCH) deci mai multe instructiuni se
executa n paralel per ciclu de ceas - Instructions per Cycle;

12
- Cresterea numarului de nuclee (cores) per procesor (dual core, quad core, octal core, etc).

Viteza unui sistem de calcul este influenat de :


- Frecventa procesorului (singura nu e concludenta, vezi Intel vs AMD);
- Capacitatea maxima de memorie care poate fi adresata;
- Capacitatea de paralelizare (pipelining);
- Dimensiunea registrilor interni si a magistralei de date;
- Dimensiunea memoriei CACHE.

Aceasta se masoar n MIPS milioane de instructiuni (intregi) pe secund sau MFLOPS


milioane de instructiuni n virgul flotant pe secund.

Procesor Frecven MIPS

Intel Pentium Pro 200 Mhz 541

AMD Athlon 1.2 Ghz 3.561

Ultra SPARC Niagara 2 1.4 Ghz 22.400

........ ......... .........

Intel Polaris Prototype 5.6 Ghz 1.800.000


(80 nuclee)

Magistrala de date
Reprezint din punct de vedere hardware mrimea unei locaii de memorie ce poate fi accesat
de magistrala de date (de exemplu Pentium are o magistrala de date pe 64 biti = 64 linii de date,
astfel ca la fiecare memory cycle procesorul poate accesa 8 octeti din memorie).
Din punct de vedere software este dimensiunea unui cuvnt de memorie (dimensiunea registrilor
CPU).
n plus, cu ct dimensiunea cuvantului de memorie este mai mare, operatiile cu numerele intregi
se desfoar mai rapid (incercati s inmultiti un double cu alt double folosind doar registrii pusi
la dispozitie de procesorul 8086).

1.4. Principiile de funcionare ale mainii Turing.


O contribuie importanta la dezvoltarea stiintei calculatoarelor a avut-o matematicianul englez Alan
Turing care n 1936 legat de conceptul de numere calculabile a sintetizat un automat matematic
abstract capabil s opereze cu astfel de numere (numerele calculabile sunt acele numere a
caror parte zecimala se poate determina cu un numr finit de iteratii).
Automatul a fost sintetizat pe baza urmatoarelor ipoteze:
a) automatul are un numr n finit de stari;
b) automatul se afla n orice moment ntr-o stare i , unde l i n, urmnd ca la momentul
imediat urmator s se afle ntr-o stare j, unde l j n,;

13
c) fiecare dintre cele n stari este caracterizata prin urmatoarele informatii:
o valoarea caracteristicii ei , care este o valoare curenta a numarului care se calculeaza;
o funcia fj care aplicata starii ei permite obtinerea urmatoarei stari ej;
o deplasamentul dij care va trebui aplicat numarului pentru a se realiza tranzitia din
swtarea i n starea j, respectiv j = i + dij .

Pentru modelul sau abstract Turing a propus modelul functional din figura 1.2 unde SR este sistemul
reprezentor; P este procesorul iar C/S este capul de citire / scriere.

Figura 1.2. Modelul funcional al mainii Turing

Sistemul reprezentor (sau memoria mainii) este constituit dintr-o banda magnetica de lungime
infinita (fara capete) mpartita n segmente de lungime egala, fiecare segment putnd stoca un numr
finit de semne.
Procesorul este un circuit secvenial cu un numr finit de stari, care poate executa urmatoarele
instructiuni (care practic se constituie n setul de instructiuni al masinii):
- schimba simbolul de pe banda de la pozitia curenta;
- pozitioneaza capul de citire cu o pozitie la dreapta;
- pozitioneaza capul de citire cu o pozitie la stnga;
- opreste sistemul.
Capul de citire/scriere poate citi respectiv nscrie informatie de pe /pe banda magnetica.
Pentru a realiza un calcul cu aceasta masina, se nscriu datele ntr-un mod convenabil si se
descompune algoritmul de calcul n funcie de modul de reprezentare a datelor ntr-o secvena de
instructiuni ale masinii. Ultima instructiune este cea de oprire a masinii, la care banda trebuie s
conin reultatul calculului.

14
2. Clasificarea semnalelor
Noiunea de semnal este o noiune central n electronic i telecomunicaii.
Un semnal este o mrime fizic purttoare de informaie. Cel mai adesea, este o funcie scalar de
variabila timp, ca n exemplele uzuale urmtoare:
- Tensiunea sau curentul furnizate de un traductor de temperatur
- Tensiunea de la intrarea unui amplificator de putere
- Tensiunea de la ieirea modulului tuner radio
- Tensiunea de la bornele microfonului
- Cmpul electromagnetic produs n antena telefonului mobil (la emisie sau la recepie)
- Presiunea aerului n sistemele pneumatice de msurare i comand a proceselor (se folosete n
mediile cu potenial de explozie)
- Poziia deschis-nchis a releului electromagnetic cu care se comand funcionarea centralei
termice
- Succesiunea de valori afiate de ecranul unui voltmetru digital (numeric)
- Poziia pedalei de acceleraie, transmis ctre carburator.

Semnalul n varianta nregistrat (memorat), se folosete n scopul reconstituirii informaiei iniiale sau
n scopul prelucrrii. Exemple:
- nregistrarea vocii pe band de magnetofon
- nregistrarea vocii de pe un CD
- nregistrarea numeric a tensiunii afiate pe ecranul osciloscopului
- nregistrarea numeric a vitezei vntului ntr-un punct
- nregistrarea cursului valutar pe un interval de timp

Exist i alte variante de semnale, cu alte variabile sau alt dimensiune a funciei, cum ar fi:
- Denivelarea unui material aproape plan, msurat n lungul unei axe (funcie scalar de variabil
- spaial)
- Semnalul de temperatur, n grosimea unui perete (funcie scalar de timp i de spaiu)
- Imaginea dat de o camer de luat vederi (funcie scalar de dou variabile spaiale)
- Secvena de imagini date de aceeai camer (funcie scalar, de timp i de dou variabile
- spaiale)
- Semnalul vocal stereo (dou funcii scalare de variabila timp, care formeaz o funcie vectorial
- de variabila timp)
- Semnalele de tensiune de la ieirea unui traductor de nclinare fa de vertical (funcie
- vectorial de variabila timp).

Proprietile pe care trebuie s le ndeplineasc o mrime fizic pentru a purta informaia (implicit: pentru
a fi folosit ca semnal) snt:
- S poat fi prelucrat (adic s poat fi depus informaie, s se poat extrage informaie i s se
poat aduce modificri informaiei purtate de acea mrime)
- S poat fi transmis la distan
- S fie puin afectat de perturbaii

O alt proprietate foarte util: posibilitatea semnalului de a fi memorat (ntregistrat).

15
Mrimile folosite ca semnale snt:
- Tensiunea electric (vezi semnalul de microfon etc.)
- Curentul electric (vezi ieirea unor traductoare)
- Deplasarea mecanic (vezi pedala de acceleraie)
- Presiunea aerului (vezi comanda pneumatic)

Forma sub care se prezint semnalele depinde de natura mrimii i de scopul n care folosim semnalul.
Din punctul de vedere al continuitii n timp i n valori, folosim dou variante:
- Semnal analogic (continuu n timp i n valori)
- Semnal numeric (discontinuu n timp i n valori, se mai numete semnal n timp discret i cu
valori discrete. Semnalul n timp discret se mai numete semnal eantionSemnalul analogic

2.1. Semnalul analogic

Modelul matematic al semnalului analogic este o aplicaie pe mulimea numerelor reale, cu valori n
mulimea numerelor reale (sau un interval de numere reale).
n figura 2.1 apare nregistrarea fotografic a unui semnal de pe ecranul osciloscopului care este un
semnal analogic. Semnalul acustic care sosete la un microfon, semnalul electric pe care l produce
microfonul, poziia acului unui instrument de msur cu ac, semnalul captat de antena unui receptor radio,
semnalul electric produs de o camer video analogic, semnalul afiat de tubul catodic al unui televizor,
timpul indicat de un ceasornic mecanic toate snt semnale analogice, fiind continue n timp i n valori.

Figura 2.1 Semnal analogic pe ecranul osciloscopului

2.2. Semnalul digital

Modelul matematric al unui semnal numeric este un ir de numere, deci o aplicaie pe mulime
numrabil (mulimea numerelor ntregi), cu valori n restricii ale mulimii numerelor raionale sau
mulimii numerelor ntregi.
Numerele reprezint valorile aproximate ale eantioanelor unui semnal analogic. Exemple: numerele
succesive indicate de un voltmetru cu afiaj numeric, indicaia de temperatur a unui termometru digital,
timpul afiat de un ceas digital, semnalul muzical nregistrat pe CD, semnalul produs de o camer video
digital.
Avantajele semnalelor numerice:
- Posibilitate nelimitat de memorare
- Posibiliti mari de prelucrare
- Imunitate sporit la perturbaii

16
- Versatilitatea circuitelor de prelucrare

Dezavantajele semnalelor numerice


- Circuite mai complicate pentru prelucrare (aceast particularitate dispare, odat cu dezvoltarea
tehnicii numerice)
- Prelucrare nc insuficient de rapid, pentru frecvenele mari

2.3. Transformarea semnalelor

Majoritatea semnalelor pe care le folosim provin din lumea analogic. Exist metode de conversie a
semnalelor din analogic n numeric (analog-to-digital conversion) i din numeric n analogic (digital-to-
analog conversion). Scopul conversiei A/N (sau ADC = Analog-to-Digital Conversion) este preluarea
semnalului n form numeric, pentru prelucrare sau pentru memorare (exemple: memorarea concertului
pe CD, prelucrarea numeric a semnalului din imagine). Scopul conversiei N/A (sau DAC = Digital-to-
Analog Conversion) este reconstituirea semnalului analogic, pentru transmisiune, afiare sau pentru
scopuri audio-video.

Etapele conversiei AD i DA:


- Eantionarea i reinerea eantionului (sample and hold)
- Cuantizarea eantionului (reprezentarea printr-un nivel discret)
- Codarea numeric a nivelului cuantizat, prin care este reprezentat eantionul

n figura 2.2 este reprezentat o scurt secven dintr-un semnal analogic, precum i eantioanele obinute
de la acest semnal. Semnalul a fost eantionat la intervale egale (perioada de eantionare). n figura 2.3
snt reprezentate aproximrile eantioanelor, ca urmare a cuantizrii. Se observ c fiecare eantion ia
doar valori discrete, dintr-o mulime finit. n partea inferioar a figurii 2.2 snt scrise codurile numerice
ale nivelurilor rezultate prin cuantizare (numere n baza 2).
Aceasta este forma n care snt prelucrare n calculatorul numeric, sau snt memorate, sau snt transmise
prin sisteme de comunicaii numerice. Circuitele de conversie ADC i DAC, precum i introducerea
datelor n calculator reprezint bazele sistemelor de achiziie a datelor.

Figura 2.2 Semnalul analogic i semnalul eantionat

17
Figura 2.3 Semnalul eantionat, cuantizat i codat numeric

Figura 2.4 Reconstiruirea semnalului analogic (conversie A/N)

n figura 2.4 apare semnalul analogic reconstituit din forma numeric (conversia N/A sau DAC).
Se observ c el este similar cu semnalul original, dar nu este identic. Proprietatea caracteristic este
aceea c el este recontituit din aproximri ale eantioanelor. Aspectul de funcie n scar provine din
aproximarea semnalului doar prin valori discrete. Valorile funciei ntre momentele de eantionare snt
aproximate prin meninerea valorii de la ultimul moment de eantionare.
Primele dou ntrebri care apar, la reconstituirea semnalului analogic, snt:
- ct de fin trebuie s fie cuantizarea (adic ct de dese trebuie s fie nivelurile cu care aproximm
eantionul)?
- ct de frecvent trebuie s fie eantionarea (adic ct de mic s fie perioada de eantionare)?
Rspunsul 1: att de fin pe ct de mic este eroarea pe care sntem dispui s o acceptm (s ne
gndim la rezoluia voltmetrului cu afiare numeric, la care este prezent exact aceast
problem).
Rspunsul 2: este mai complicat, va fi tratat la cursul de Semnale i sisteme. Ca regul general:
dac componenta cu frecvena cea mai mare din semnalul analogic are frecvena f, atunci
eantionarea trebuie s se produc cu o frecven mai mare dect 2f.

18
Din punctul de vedere al coninutului informaional, semnalele se mpart n dou categorii: semnale
deterministe i semnale ntmpltoare (sau aleatoare).
Semnale deterministe: cele la care evoluia semnalului este anterior cunoscut. Ele nu aduc nici o
informaie, snt folosite doar pentru testarea circuitelor i echipamentelor, n laborator sau n exploatare.
Cel mai adesea, semnalele folosite pentru testare snt periodice.
Forme uzuale: sinus, dreptunghi, triunghi, dinte de fierstru, impulsuri etc.
Semnalele ntmpltoare snt cele a cror evoluie nu poate fi prezis, deci poart cu ele informaie (cu ct
snt mai puin predictibile, cu att aduc mai mult informaie). Cel mult cunoatem dinainte proprietile
statistice ale semnalului ntmpltor (domeniul valorilor, frecvena cea mai mare a componentelor sale
etc.), dar nu evoluia particular ntr-un anumit interval de timp.
Exemple de semnale ntmpltoare: semnalul vocal cules de microfon, curentul absorbit de motorul
electric, turaia motorului, temperatura msurat ntr-o ncpere, viteza vntului, semnalul de date transmis
ntre dou calculatoare etc.

19
3. Bazele logice ale calculatoarelor.
Caracteristica comun cea mai important a tuturor generaiilor de calculatoare numerice realizate
pn n prezent i anume natura discret a operaiilor efectuate. Teoretic i practic s-a impus utilizarea
dispozitivelor care codific informaia n dou stri stabile, rezultnd efectuarea calculelor n sistem binar.
Suportul teoretic al acestuia este algebra logic (boolean). Analiza i sinteza circuitelor de comutaie
aferente calculatoarelor numerice utilizeaz algebra boolean ca principal instrument matematic.
Vom prezenta n continuare unele elemente att ale algebrei booleene ct i ale unor circuite logice
fundamentale.

3.1. Funcii logice. Pori logice. Algebra de comutaie.


3.1.1. Funcii logice. Tabele de adevr

Prin definiie, valorile pe care le poate lua o funcie logic f, de una sau mai multe variabile logice,
pot fi 0 sau 1, ca i valorile variabilelor sale.

, ,, : 0,1 0,1 , ,, 0,1 , (3.1)

Funcia logic conine un numr variabil de termeni. Numrul maxim de valori ce vor fi
procesate de funcie este egal cu 2i (unde i este numrul de variabile ale funciei). n aparatura digital
valorile logice 0 i 1 ale variabilelor funciei sunt reprezentate prin dou nivele de tensiune diferite.
Expresiile booleene sau funciile logice pot fi reprezentate n mai multe moduri ce vor fi exemplificate pe
o funcie oarecare f.

a. Reprezentarea cu tabel de adevr


Tabela de adevr este cea mai simpl reprezentare a unei funcii booleene. Aceasta cuprinde toate
combinaiile posibile ale valorilor variabilelor de intrare i afieaz n dreptul fiecreia, valoarea
corespunztoare, procesat la ieire pentru funcia f. Cu alte cuvinte, tabelul de adevr afieaz ieirile
pentru toate combinaiile posibile de valori de intrare.
Exemplu: Tabela de adevr pentru funcie f (A, B, C) oarecare de trei variabile poate fi:

A B C f
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1

b. Forma canonic normal disjunctiv


Dup cum se poate observa din denumire, este vorba despre o form care separ operatorii, fiind
una dintre formele de reprezentare des ntlnite. Expresia const din variabile conectate printr-un operator
AND rezultnd termeni conectai cu operatori OR.

20
Aceast reprezentara poart denumirea de sum de produse sau form canonic normal disjunctiv (
f.c.n.d.).
Fiecare operaie AND poate fi privit ca un produs boolean, termenul obinut din variabile
conectate de operatori AND fiind un termen-produs. Operatorul OR este asimilat ca o nsumare boolean,
iar expresia cu termeni produs conectai de operatori OR fiind o expresie sum-de-produse sau forma
canonic normal disjunctiv.
n exemplul urmtor, expresia funciei este o sum de produse complet pentru o funcie de trei
variabile :

f ( A, B , C ) = A B C + A B C + A BC + A BC + AB C + AB C + AB C + ABC . (3.2)

Notnd A B C cu P0 , A B C cu P1 , etc., forma canonic normal disjunctiv se poate rescrie astfel:

f(A, B, C)= P0 +P1+ P2 +P3 +P4 +P5+P6+P7. (3.3)

c. Forma canonic normal conjunctiv


Forma canonic normal conjuctiv ( f.c.n.c.) este o alt modalitate de exprimare a funciilor.
Aceasta se obine din operatori AND ce conecteaz termeni legai prin operatori OR. Pentru o funcie
logic de trei variabile, forma canonic normal conjunctiv complet se scrie astfel:
f (A , B , C ) = (A + B + C )(A + B + C )(A + B + C )(A + B + C )
(A + B + C )(A + B + C )(A + B + C )(A + B + C ). (3.4)

( )
Notnd ( A + B + C ) = S0 , A + B + C = S1 etc, funcia se poate rescrie:

f(A, B, C)= S0 S1S2S3S4S5S6S7. (3.5)

d. Diagrame Veitch-Karnaugh
O reprezentare grafic a formelor canonice este dat de diagramele Veitch-Karnaugh. Aceasta
const dintr-o matrice, unde fiecrui element i corespunde un termen produs canonic.
Caracteristic pentru diagramele Veitch-Karnaugh este c orice element difer de elementul su
adiacent printr-o singur variabil. Ca exemplu sunt reprezentate dou diagrame Veitch-Karnaugh de trei
i patru variabile, rezultnd astfel opt, respectiv aisprezece combinaii, fiecreia dintre aceste combinaii
fiindui alocat cte un element din diagram.

AB AB AB AB
00 01 11 10
AB AB AB AB
00 01 11 10 CD 00 P0 P4 P12 P8

C 0 P0 P2 P6 P4 CD 01 P1 P5 P13 P9

C 1 P1 P3 P7 P5 CD 11 P3 P7 P15 P11

CD 10 P2 P6 P14 P10

Figura 1 Figura 2
Diagrama V-K Diagrama V-K
pentru 3 variabile de intrare pentru 4 variabile de intrare

21
e. Forma elementar
Termenii formelor elementare nu conin toate variabilele de intrare, spre deosebire de formele
canonice prezentate anterior. Pornind de la forma de reprezentare canonic putem ajunge la una
elementar prin operaia numit minimizare.
Exprimarea unei funcii prin forme elementare ofer avantaje fa de formele canonice n primul
rnd la implementarea funciei, deoarece numrul de circuite i componente electronice implicat este
minimizat.
Exemplu de scriere a unei funcii sub form elementar:
f ( A, B, C ) = A B + B C (3.6)

3.1.1.1. Minimizarea funciilor logice

Tehnica minimizrii permite exprimarea funciei printr-o form elementar prin transformarea intr-o
form canonic, eliminnd variabilele de intrare neutilizate din termenii funciei. Utilizarea expresiei
elementare la implementare va costa mai puin i/sau va opera mai rapid fa de implementarea expresiei
iniiale.
Printre cele mai rspndite metode de minimizare este utilizarea diagramele Veitch-Karnaugh. Prin
aceast metod se face o simpl identificarea vizual a termenilor care pot fi combinai .

Tehnica minimizrii cu ajutorul diagramelor Veitch-Karnaugh:

1. Avem dat definiia funciei exprimat ca o sum de produse;


2. Elementele din diagrama Veitch-Karnaugh ce corespund termenilor din expresie sunt
marcate cu 1; celelate csue rmase pot fi marcate cu zerouri pentru a indica faptul c
funcia va fi 0 n aceste situaii, sau vor rmne necompletate.
3. Se face gruparea suprafeelor valide de valoare 1, formate din csue adiacente pe
orizontal sau vertical (suprafeele pot conine un numr de elemente egal cu puteri ale
lui 2).
4. Elementele de-a lungul unei laturi sunt considerate adiacente inclusiv cu cele de pe latura
opus (sus i jos sau stnga i dreapta), ntruct ele corespund termenilor cu o singur
variabil diferit.
5. Suprafeele maximale corespund termenilor elementari, iar reprezentarea grafic este
ilustrarea teoremei:
6. AB + AB = A
(3.7)
7. Forma elementar se obine ca o sum de produse, unind prin operatori AND termenii
elementari rezultai n etapa V.

Exemplu: S se minimizeze funcia

f = P0+P2+P5+P7+P8+P9 +P10 +P11 +P12 +P14

folosind diagrama V-K .

REZOLVARE:

22
AB
00 01 11 10
CD
00 1 1 1
01 1 1
11 1 1
10 1 1 1

f = A B D + A BD + AD + AB

- Pentru construirea diagramei Karnaugh se poate porni i de la f.c.n.c., caz n care


suprafeele maximale vor fi date de csuele adiacente coninnd 0 logic.
- Se prefer, totui, lucrul cu f.c.n.d., care are avantajul, pe lng comoditatea oferit de
lucrul cu expresii algebrice care conin sume de produse, i pe acela al implementrii cu
pori tip NAND, mai rspndite i mai avantajoase tehnologic.

3.1.2. Pori logice

Poarta logic este un circuit electronic cu o singur ieire i una sau mai multe intrri. Ea accept pe
fiecare intrare unul din cele dou nivele de tensiune, genernd la ieire unul din cele dou nivele. De
aceea ne referim la tensiunile porilor logice ca la un nivel logic de tensiune nalt (HIGH) i respectiv
un nivel logic de tensiune joas (LOW). Algebra boolean folosete trei operatori fundamentali cu
care pot fi definite toate funciile logice ce pot fi ndeplinite de porile logice, i anume:
- NOT
- AND
- OR
Toate funciile care se obin cu ajutorul acestor operatori sunt implementate de circuite numite pori
logice.

3.1.2.1. Poarta NOT

Operarea porilor logice se face pe semnale de intrare numite variabile logice (variabile care pot fi
sau adevrate 1, sau false 0). Adesea vrem ca n timpul funcionri o variabil s fie modificat, de
exemplu din 1 n 0 sau din 0 n 1. Aceasta este operaia fundamental NU, realizat de poarta NOT.
Simbolul de circuit, expresia boolean i tabela de adevr corespunztoare unei pori NOT sunt:

A f
A 0 1
1 0

23
- Pentru intrare 1 , ieirea este 0 i invers.

3.1.2.2. Poarta AND


Este nevoie la proiectarea unui sistem digital, de a stabili momentul n care dou semnale logice
preiau simultan valoarea logic 1. Sunt extrem de dese astfel de aplicaii cu semnale de control n ecare
trebuie dat o comand, dac mai multe condiii sau evenimente coexist. Aceasta funie este ndeplinit
de operatorul i poarta AND.
Simbolul de circuit, expresia boolean i tabela de adevr corespunztoare unei pori AND sunt
prezentate mai jos:

A B C f
0 0 0 0
A
B f = A B C 0 0 1 0
C 0 1 1 0
0 1 0 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1
- Cnd toate intrrile sunt SUS ieirea este SUS.
- Cnd cel puin o intrae este JOS ieirea este JOS.

3.1.2.3. Poarta OR
Aceast poart semnaleaz prezena, n mod obinuit, a cel puin unui eveniment, lucru indicat prin
asocierea variabilei 1. Operaia SAU i poarta SAU corespunztoare modeleaz astfel de situaii.
Tabelul de adevr, simbolul de circuit i expresia boolean corespunztoare unei pori SAU cu trei intrri
vor fi:
A B C f
0 0 0 0
0 0 1 1
A 0 1 1 1
B
C 0 1 0 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1
Pentru orice intrare SUS ieirea va fi SUS.
3.1.2.4. Poarta NAND
Implementarea funciilor AND, OR i NOT, ca dealtfel a oricrei expresii booleene se poate face
folosiind pori universale. Una dintre acestea este poarta NAND (I-NU).

24
Simbolul de circuit, expresia boolean i tabelul de adevr, pentru o poart I-NU (NAND) cu trei
intrri sunt:
A B C f
0 0 0 1
0 0 1 1
A 0 1 0 1
B 1 0 0 1
C
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0

- Orice intrare JOS va produce ieirea SUS.


3.1.2.5. Poarta SAU-NU (NOR)
Poarta NOR (SAU-NU) este o alt poart universal. Expresia boolean, simbolul de circuit i
tabelul de adevr pentru o poart NOR cu trei intrri, sunt:

A B C f
0 0 0 1
A 0 0 1 0
B
C
0 1 0 0
1 0 0 0
0 1 1 0
1 0 1 0
1 1 0 0
1 1 1 0

- Orice intrare SUS produce ieirea JOS.


- poart care realizeaz operaia NOR n logic pozitiv, realizeaz operaia NAND n
logic negativ i invers.

3.1.2.6. Poarta SAU EXCLUSIV (XOR)


Poarta EXCLUSIVE OR (SAU EXCLUSIV) are iesirea n starea 1 atunci i numai atunci cnd o
singur intrare este n starea 1.
Funcia boolean, simbolul i tabelul de adevr pentru o poart SAU EXCLUSIV cu dou intrri
sunt:
A B f
A 0 0 0
B 0 1 1
1 0 1
1 1 0

25
Aceast poart poate fi privit i ca o combinaie de pori AND i OR.

3.2. Algebr de comutaie.Logic i circuite logice combinaionale.


Componente digitale.

3.2.1. Algebra de comutaie

Cnd vorbim despre algebra boolean sau algebra de comutaie ne referim la o structur algebric de tip:

A= (B, O),
Unde:
- B= {0, 1} - este mulimea constantelor de comutaie,
- O = {AND, OR, NOT} - este mulimea operatorilor de comutaie, definii astfel:

1 ! = 1 =1
, =
0 ! = 0 =0
1 ! = 1 & =1
, $% = (3.8)
0 ! = 0 & =0
1 ! = 0
' = (
0 ! = 1
Echivalene ale operatorilor:
- AND I,, 123 & 435 ! ;
- OR SAU,, + & = 435 ! ;
- NOT NU, #, 123 & 435 ! ;

O expresie de comutaie este o combinaie a unui numr finit de variabile de comutaie, constante de
comutaie si operatori de comutaie, definit astfel:
- orice constant sau variabil de comutaie este o expresie de comutaie;
- dac t1 si t2 sunt expresii de comutaie atunci t1t2, t1+t2 i BBB
@A sunt expresii de comutaie.

Evaluare a unei expresii de comutaie se bazeaz pe urmtoarele reguli:


- dac exist paranteze, evaluarea se face din interior spre exterior;
- ordinea descresctoare a prioritilor operatorilor este: NOT, AND, OR;
- pentru prioriti egale evaluarea se face de la stnga la dreapta.

3.2.1.1. Funcii de comutaie


Funcia f : Bn > B este o funcie de comutaie de n variabile.
Funcia complementar a unei funcii f, notat cu este acea funcie care are valoarea 1 / 0 pentru
toate combinaiile de valori ale variabilelor pentru care funcia f ia valoarea 0 / 1.
Specificarea unei funcii de comutaie de n variabile se poate face n principal prin tabela de adevr sau
prin expresia de comutaie.
Tabela de adevr prezint valorile funciei pentru toate cele 2n combinaii de valori ale
variabilelor.
Exemplu. Se considera funcia f : B3 > B , data prin tabela de adevr:
x y z f
0 0 0 1

26
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 0

Pe baza tabelei de adevr se obine expresia de comutaie a funciei n umtorul mod:


- expresia se scrie sub forma unei sume de produse, cte un termen al sumei pentru fiecare valoare
1 a funciei (n cazul nostru expresia conine trei termeni);
- pentru fiecare termen se scrie un produs al tuturor variabilelor funciei, fiecare variabil
reprezentandu-se n form direct dac variabila are valoarea 1 n combinaia respectiv de valori
din tabel sau n form complementat (negat) dac variabila are valoarea 0. Se obine:
f ( x , y , z ) = x y z + x y z + x y z.

Aceast sum de produse, n care fiecare produs conine toate variabilele att n form directa ct
i negat se numete forma canonic sum de mintermeni (un mintermen fiind un produs al tuturor
variabilelor n form direct sau negat). Aceast form este unic pentru o funcie dat.
Trebuie reinut c o funcie de comutaie poate fi exprimat prin mai multe expresii de comutaie
echivalente. Ne intereseaz expresia minim (suma de produse) obinut aplicnd proprietaile de mai sus,
pentru exemplul considerat fiind:
f ( x, y , z ) = x y z + x y z + x y z = x y z + x y z + x y z + x y z =
= x y ( z + z ) + x + x ) y z = x y 1 + 1 y z = x y + y z.

Observatii.
1. Orice funcie de comutaie de n variabile se poate reprezenta n mod unic printr-o
expresie de form canonic sum de mintermeni;
2. Pentru n variabile exista 2n mintermeni;
3. Pentru o combinaie de valori ale celor n variabile un singur mintermen are valoarea 1,
toti ceilalti mintermeni au valoarea 0;
4. Produsul a doi mintermeni diferii este 1.

3.2.2. Logic i circuite logice combinaionale (CLC)


Independena mrimilor de ieire ale CLC de timp, altfel zis dependena numai de combinaiile
aplicate la intrare este caracteristica principal a acestor circuite.
n figura 3.1 este prezentat schema bloc a unui CLC. Intrrile sunt x0, x1, xm-1 i genereaz n
exterior ieirile y0, y1, , yn-1. O funcie logic (de comutaie) poate descrie funcionarea circuitului.

Fig. 3.1. Circuit logic combinaional

27
Pornind de la schema circuitului se poate analiza CLC-ul n vederea stabilirii funcionrii,
concretizat prin tabela de adevr sau prin expresiile variabilelor de ieire funcie de cele de intrare.
Stabilirea structurii circuitului se face prin analiza ce presupune parcurgerea urmtoarelor etape:
- definirea funciilor logice;
- minimizarea acestora;
- obinerea schemei circuitului.

Tipurile reprezentative de CLC din structura unui calculator numeric sunt: convertoarele de cod,
codificatoarele i decodificatoarele, multiplexoarele i demultiplexoarele, comparatoarele, detectoarele
i generatoarele de paritate, ariile logice programabile, memoriile i circuitele aritmetice.

3.2.3. Convertoare de cod


CLC-ul care permite trecerea dintr-un cod binar n altul sunt convertoarele de cod. Sinteza unui
asemenea CLC se va exemplifica pentru un convertor din cod binar n cod Gray. n figur se prezint
elementele aferente sintezei acestui tip de convertor, n care X3 X2 X1 X0 reprezint cuvntul binar aplicat
la intrare, iar Y3 Y2 Y1 Y0 cuvntul binar obinut la ieire.

Figura 3.2. a) Convertor de cod natural- Gray: tabela de coresponden.

28
Figura 3.2. b) Convertor de cod natural- Gray: diagramele Karnaugh asociate.

Dup reducerile n diagramele Karnaugh rezult:


DE = FE
D =FBBBFE + F
BBBE F = F FE
D =FBBBF + FBBBF = F F
DH BBB
= F FH + FBBBH F = F FH

3.2.4. Codificatoare i decodificatoare

CLC la care activarea unei intrri, dintr-un grup de m, conduce la apariia unui cuvnt de cod la ieire
format din n bii se numesc codificatoare. n figur se prezint elementele unui codificator cu m=3 intrri
i n=2 ieiri.

X0 X1 X2 Y0 Y1
0 0 0 0 0
1 0 0 0 1
0 1 0 1 0
0 0 1 1 1

BBBH F F
DH = F
D BBB FH F
F

Figura 3.3. Codificator cu m=3 i n=2 (schema bloc, tabela de adevr, funcii logice)

29
Decodificatoarele sunt acele CLC care activeaz una sau mai multe ieiri funcie de cuvntul de cod
aplicat la intrare i este necesar n aplicaii care adreseaz memoria, n afiarea numeric, multiplexarea
datelor etc.

3.2.5. Multiplexoare i demultiplexoare

Multiplexoarele (MUX) sunt CLC care fac transferul datelor de la una din intrrile selectate de o adres
(cuvnt de selecie) ctre o ieire unic. Funcional MUX pot fi asimilate cu o reea de comutatoare
comandate. Multiplexoarele pot fi analogice sau numerice, ultimele fiind specifice CN.
Exemplu: sinteza unui MUX 4:1 numeric i se prezint implementarea cu pori logice.

Figura 3.4. Multiplexor numeric 4:1

30
Figura 3.5. Demultiplexor 1:4

3.2.6. Comparatoare

CLC-urile care determin relaiei dintre dou numere sunt comparatoarele numerice. Acestea au
ieirile reprezentate de trei funcii (<, =, >) ce corespund tipului de relaie existent ntre numerele aplicate
la intrare.
elemente definitorii ale unui comparator pe un bit sunt prezentate n figura urmtore.

31
Figura 3.6. Comparator pe un bit

3.2.7. Sumatoare

Un sumator elementar este un CLC care adun dou numere binare xi, yi cu un transport de intrare ci,
genernd la ieire doi bii: suma si i transportul ci+1 ctre rangul superior, conform tabelului:

Din tabel rezult relaiile :


& JI J!
I < JI ! JI < B !JI < ! !
!K JI ! < J! I < !
J
I < !
! < .

32
Relaiile de mai sugereaz obinerea sumatorului elementar din dou semisumatoare:

Figura 3.7. Sumatorul elementar

3.3. Maini cu numr finit de stri

Un automat finit (AF) sau o main cu stri finite este un model de comportament compus din
stri, tranziii i aciuni.
- O stare reine comportamentul compus din stri, tranziii i aciuni. Starea stocheaz informaii
despre trecut, adic reflect schimbrile intrrii de la iniializarea sistemului pn n momentul de
fa.
- Tranziia indic o schimbare de stare i este descris de o condiie care este nevoie s fie
ndeplinit pentru a declana tranziia.
- Aciunea este o descriere a unei activiti ce urmeaz a fi executat la un anumit moment. Exist
cteva tipuri de aciuni:
Aciune de intrare executat la intrarea ntr-o stare.
Aciune de ieire executat la ieirea dintr-o stare.
Aciune de intrare de date executat n funcie de starea prezent i de datele de intrare.
Aciune de tranziie executat n momentul unei tranziii.

Logica automatelor finite stabilete c ieirea i starea urmtoare a unui automat finit este o funcie
de valoarea intrrii i de starea curent.

33
Figura 3.8 Logica automatelor finite

Modelul matematic n funcie de tip, exist mai multe definiii. Un automat finit acceptor este un
cvintuplu <, S, s0, , F>, unde:
- este alfabetul de intrare (o mulime finit i nevid de simboluri).
- S este o mulime finit i nevid de stri.
- s0 este starea iniial, element al lui S. ntr-un automat finit nedeterminist, s0 este o
mulime de stri iniiale.
- este funcia de tranziie a strii: : S x S.
- F este mulimea strilor finale, o submulime (posibil vid) a lui S.

Un automat finit transductor este un sextuplu <, , S, s0, , >, unde:


- , S i s0 i pstreaz semnificaiile din definiia automatului finit acceptor.
- este alfabetul de ieire (o mulime finit i nevid de simboluri).
- este funcia de tranziie a strii : S x S x .
- este funcia de ieire.

34
Dac funcia de ieire este o funcie de stare i de alfabetul de intrare (: S x ), atunci aceast
definiie corespunde modelului Mealy. Dac funcia de ieire depinde doar de stare (: S ), atunci
aceast definiie corespunde modelului Moore.
Aplicaie: Circuitul de mai jos implementeaz un automat cu numr finit de stri (fie acesta A).
Registrul pe un bit etichetat cu R memoreaz starea curent, I este intrarea i O reprezint ieirea.

Figura 3.9. Automat cu numr finit de stri.

(a) Cte stri are automatul A? Desenai diagrama strilor i a tranziiilor pentru automatul A.
(b) Circuitul de mai jos este un automat cu numr finit de stri programabil. Componentele circuitului,
2
sunt etichetate astfel: (M4) - memorie cu patru locaii, fiecare coninnd un bit (2 x1-bit), (M2) -
1
memorie cu dou locaii a cte un bit fiecare (2 x1-bit), (R) - registru pe un bit.

35
Figura 3.10. Automat programabil cu numr finit de stri.

Ce trebuie s conin locaiile de memorie M4 i M2 astfel nct acest circuit s reprezinte o


implementare hardware a automatului M4?

Adresa(M4[1]M4[0]) Continutul locatiei M4


0 0
0 1
1 0
1 1
Adresa(M2[0]) Continutul locatiei R
0 1
1 0

Rspuns:
a) ntruct R este reprezentat pe un bit rezult c A are dou stri. Diagrama strilor i a tranziiilor
pentru automatul A arat astfel:

36
ToDo ----->R

Considerm o stare a automatului (R=0) i alta (R=1). Din schem se v c O= not R. De asemenea,
pentru orice intrare egal cu 0 (I=0) automatul trece din starea curent n cealalt (din R=0 n R=1 sau
invers).
Pentru orice intrare egal cu 1 (I=1) automatul i pstreaz starea.

b) Adresa(M4[1]M4[0]) Coninutul locaiei


00 1
01 0
10 0
11 1
Se observ c M4[1] este I (intrarea n automat) iar M4[0] este R (starea curent). inem cont
de consideraiile anterioare (intrarea 1 pstreaz starea constant, intrare 0 schimb starea).

Adresa(M2[0]) Coninutul locaiei


0 1
1 0
Se observ c O (ieirea) este dat de coninutul locaiei, i este negaia strii R. n finalul acestui
curs, anticipnd puin ce va fi prezentat n cursurile urmtoare, este ilustrat diagrama fluxului de date din
cadrul calculatorului LC-3. Aceasta conine toate structurile logice digitale, combinaionale i secveniale,
care combinate ndeplinesc funcia de procesare a informaiilor, streaz starea const

37
4. Componentele unui sistem de calcul
Structura unui sistem de calcul
Ansamblul de componente hardware (dispozitive fizice) i software (programe) ce soluioneaz anumite
probleme descrise sub forma unui algoritm reprezint un sistem de calcul.

Structura logic a unui sistem de calcul


Un calculator este un sistem stratificat pe mai multe nivele ierarhice:
1. Nivelul (maina) fizic() alctuit din componente electronice i mecanice. La acest nivel se
lucreaz cu secvene de bii care reprezint coduri de instruciuni i date.
2. Limbajul de asamblare, permite programarea calculatorului prin instruciuni simple exprimate
prin mnemonici. Unui mnemonic i corespunde un cod de instruciune.
3. Interfaa dintre resursele sistemului de calcul i aplicaiile ce urmeaz a fi executate este sistemul
de operare care uureaz ofer un limbaj sau un mediu de operare i un set de rutine predefinite
(drivere) pentru lucrul cu aceste resurse.
4. Limbajele de nivel nalt i mediile de programare. Majoritatea limbajelor de programare dispun
de o bibliotec bogat de funcii prin care se pot accesa resursele calculatorului.
5. Aplicaiile sunt produse program care faciliteaz accesul la resursele unui calculator i pentru
personal nespecializat n domeniul calculatoarelor.

Figura 4.1 Structura fizic a unui calculator

Conform modelului definit de J. Von Neumann, un calculator cuprinde 5 tipuri de componente:


- dispozitive de intrare (ex: tastatur, mouse, interfee de proces, etc.)
- memorie (interna i extern, volatil i nevolatil)
- unitate aritmetico-logic
- unitate de comand
- dispozitive de ieire (ex: ecran, imprimant, etc.).

4.1. Magistrale

38
Conectarea commponentelor sistemului de calcul se face prin una sau mai multe magistrale.
Magistrala se definete ca un mediu de comunicaie ntre componentele unui calculator. O magistral se
compune dintr-un set de semnale prin care se transmit date i comenzi.
Pe magistral, transferul de date se face pe baza unui set de reguli care stabilesc cine, cnd si cum
comunic pe magistral; de asemenea stabilesc secvena de apariie a semnalelor, intercondiionrile
existente ntre semnale i relaiile temporare dintre semnale.

Magistrale si standarde de magistral


Din punct de vedere conceptual, magistrala este un mediu comun de comunicaie ntre componentele
unui sistem de calcul; fizic aceasta este alcatuit dintr-un set de semnale ce faciliteaza transferul de date si
sincronizeaz componentele sistemului.
Funcie de numarul semnalelor utilizate pentru transferul de date, magistralele pot fi de doua tipuri:
magistrale paralele si magistrale seriale.
O magistrala se compune din urmatoarele tipuri de semnale:
- semnale de date - linii bidirectionale utilizate pentru transferul de date
- semnale de adresa - specific adresa modulului destinatie
- semnale de comanda - specific directia de transfer si tipul de modul I/E
- semnale de control - reglarea condiiilor de transferare a datelor
- semnale de ntrerupere - aparitia unor evenimente interne sau externe
- semnale de ceas - folosite pentru sincronizare
- semnale de alimentare - folosite pentru alimentarea modulelor sistemului
- semnale de control al accesului - n cazul magistralelor multimaster.

Clasificarea magistralelor
a. dup modul de lucru (n raport cu semnalul de ceas):
- magistrale sincrone la care ciclurile de transfer sunt direct corelate cu semnalul de ceas (e.g.
magistrala Pentium)
- magistrale asincrone la care nu exista o legatura directa intre evolutia n timp a unui ciclu de
transfer si ceasul sistemului (e.g. ISA, IDE, PCI)
b. dup numarul de unitati master conectate pe magistrala
- magistrale unimaster: un singur modul master pe magistrala ; nu necesit mecanisme de arbitrare
a magistralei
- magistrale multimaster: trebuie s conin semnale de arbitrare si un protocol de transfer al
controlului
c. dup modul de realizare a transferului de date
- magistrale cu transfer prin cicluri (magistrale secveniale) ciclurile de transfer se desfoar
secvenial. La un moment dat cel mult un ciclu de transfer este n curs de desfurare.
- magistrale tranzacionale transferul de date se efectueaza prin tranzacii; o tranzacie este
divizat n mai multe faze si mai multe tranzacii se pot desfura simultan cu condiia ca
tranzaciile s fie n faze diferite.

Teoretic, la aceste magistrale factorul de crestere a vitezei (n comparatie cu o magistrala


clasica) este egal cu numarul de faze n care se divide o tranzacie (ex : magistrala
procesorului Pentium).

Sistemele pot avea o singura magistrala (single bus) sau magistrale multiple (multiple bus).

39
Figura 4.2. Sistem single bus

Figura 4.3. Sistem multiple bus

4.2. Unitatea central, procesorul (executia unei instruciuni, tipuri de


uniti centrale, exemple de microprocesoare)

Microprocesorul este elementul central al structurii, responsabil cu aducerea din memorie,


decodificarea i execuia instruciunilor main, codificate binar. n conformitate cu aceste
instruciuni, microprocesorul genereaz secveniat toate semnalele (adrese, date, comenzi)
necesare memoriilor i interfeelor pe care le gestioneaz. Conine regitri interni, uniti de

40
execuie, o unitate de comand cablat sau microprogramat, busuri interne de interconectare etc.
n general este integrat pe un singur circuit.
n sfera comercial, primul microprocesor, pe doar 4 bii, s-a realizat n anul 1971 la compania
Intel i a fost proiectat de ctre inginerul Tedd Hoff. S-a numit Intel 4004. (n domeniul militar
existau pare-se mai demult asemenea sisteme integrate complexe; spre ex. n comanda
avioanelor militare americane F14A a existat un microsistem pe 20 de bii, cu procesare
pipeline a instruciunilor).
Bus-ul de adrese este unidirecional de tip tree state (TS). Prin intermediul acestui bus microprocesorul
pune adresa de acces la memorie sau la porturile I/O (Input/Output). Lumea extern a microprocesorului
este constituit exclusiv din memorie i interfeele de intrare ieire. Acestea sunt resursele care pot fi
accesate (scrise respectiv citite) de ctre microprocesor. Aadar, acesta nu vede n mod direct
perifericele ci doar prin intermediul interfeelor de I/O.
Bus-ul de date este de tip bidirecional TS. Prin intermediul acestui bus microprocesorul aduce din
memorie instruciunea, respectiv citete data (operandul) din memorie sau dintr-un port de intrare
(arhitectura Princeton de memorie).
La scriere microprocesorul plaseaz pe bus-ul de date rezultatul pe care dorete s-l scrie n memorie sau
ntr-un port de ieire. La citire, rezultatul este preluat prin intermediul acestui bus din memorie sau dintr-
un port de intrare. n ambele cazuri, microprocesorul activeaz adresa
respectiv pe bus-ul de adrese mpreun cu semnalele de comand aferente (Read, Write, Memorie,
Interfa etc.) pe bus-ul de comenzi. Pe bus-ul de stri, dispozitivele slave (memorii, interfee) comunic
informaii referitoare la modul de desfurare al transferului (Ex. semnalul ateapt, emis spre
microprocesor, cu semnificaia c transferul de date comandat nu este nc
ncheiat).
Unitatea centrala de prelucrare (UCP) reprezinta nucleul unui calculator, asigurnd practic executia
programelor stocate n memorie. Cele trei componente importante care asigur disponibilitatile UCP sunt:
- Unitatea de Comanda (UC);
- Unitatea Aritmetica si Logica (UAL);
- Registrele Generale (RG).

Unitatea de Comanda aduce instructiunile di memorie, determin tipul lor dup care descompune fiecare
instructiune ntr-o secvena de faze. Fiecare faz este caracterizata de un set de microcomenzi a caror
finalitate este reprezentata de efectuarea unor operatii elementare n unitatile de executie ale UCP
respectiv registre, UAL, memorie, interfete de intrare / ieire.
Unitatea de comanda conine mai multe module care fac posibil realizarea funciilor sale.
- Registrul de Instructiuni (RI) pastreaza codul instructiunii n curs de executie.
- Numaratorul de Program (NP) conine adresa instructiunii curente.
- Registrul de Stare (RS) este format dintr-un set de bistabile de stare care contin informatii legate
de modul de executie a instructiunilor (validarea ntreruperilor, executia pas cu pas, etc.),
rezultatele operatiilor aritmetice si logice (depasire de cxapacitate de reprezentare, transport spre
rangul superior, etc.), sau informatii legate de continutul anumitor registre (par sau impar, zero,
etc.).
- Blocul Circuitelor de Comanda (BCC) semnalele de comanda (specifice tipului unei instructiuni,
fazei curente si informatiei de stare)necesare executiei instructiunilor.
- Generatorul de Tact (GT) genereaza semnalul de tact (a carui frecventa determina viteza de
lucru) pentru functionarea sincrona a ntrgului calculator.
- Generatorul de Faze (GF) creeaza succesiunea specific de faze care compun o instructiune.
Faza urmatoare este determinata de faza curenta, tipul instructiunii si informatia de stare din
UCP.

41
Figura 4.4. Structura UCP

Unitatea Aritmetica si Logica (UAL) executa totalitatea operatiilor aritmetice (adunare, scadere,
nmultire, mpartire) si logice (Si, SAU, NU, SAU EXCLUSIV, etc.). O importanta aparte pentru UAL
prezinta registrul acumulator AC, care de multe ori este tratat ca facnd parte din aceasta.
Registrele Generale (RG) pastreza date cu care lucreaza programul n executie, avand rolul unor locatii
de memorie rapida. Registrul acumulator este implicat n toatalitatea operatiilor efectuate de UAL
pastrnd unul din operanzi si rezultatul.

Structura unui procesor


Unitatea aritmetica si logica. Registre mai importante Procesorul este format n principal din unitatea
aritmetica si logica (UAL) si mai multe registre, care sunt legate mpreuna prin magistrale interne. Unul
dintre cele mai importante registre al unui procesor este registrul numarator de program (program counter,
PC). Acesta conine totdeauna adresa din memorie a instructinunii care se executa (sau urmeaza s se
execute), si si modifica continutul n ritmul executarii programului. De asemenea, un alt registru
important este si registrul de instructiuni, care pastreaza instructiunea n curs de executie. n plus, UCP
conine mai multe registre de uz general. UAL executa asupra datelor de intrare operatii aritmetice

42
(adunari, scaderi, nmultiri,mpartiri), operatii logice (SI, SAU) si alte operatii simple. n figura se
prezinta o parte a UCP, numita calea de date von Neumann, avnd ca element central UAL.

n continuare se exemplifica realizarea unei adunari de catre aceasta structura.


5. Cei doi operanzi, O1 si O2, se afla n doua registre de uz general, A si B.
6. Operanzii sunt transferati n cele doua registre de intrare ale UAL.
7. UAL calculeaza rezultatul adunarii, si depune rezultatul n registrul de ieire.
8. Rezultatul este mutat n alt registru de uz general al UAL, C.Apoi, daca se doreste,
continutul registrului C poate fi transferat n memorie.

Majoritatea instructiunilor este de tipul registru-registru sau registru-memorie.


n primul caz, operanzii (operandul) sunt extrasi din registre si adusi n registrele de
intrare ale UAL, iar rezultatul este depus ntr-un alt registru.
n al doilea caz, operanzii (operandul) sunt adusi din memorie n registre, de unde pot fi folositi ca date de
intrare pentru UAL.
Rezultatul este depozitat napoi n memorie. n principiu, pasii pe care i realizeaza procesorul la executia
unei instructiuni sunt urmatorii:
1. Transfera instructiunea din memorie n registrul de instructiuni (extrage instructiunea).
2. Schimba numaratorul de program astfel nct acesta s indice adresa urmatoarei instructiuni
(continutul acestuia creste cu un numr egal cu numarul de octeti al instructiunii n curs de
executie).

43
3. Determina tipul instructiunii proaspat extrase (decodifica).
4. Daca instructiunea are nevoie de un operand (cuvnt) din memorie, determina unde se gaseste
acesta.
5. Extrage (aduce) cuvntul respectiv n unul dintre registrele UCP, daca este cazul.
6. Executa instructiunea.
7. Salt la pasul 1 pentru a ncepe executia instructiunii urmatoare.Deseori, aceasta secvena de pasi
este denumita ciclul extrage-decodifica-executa (fetch-decode-execute).

Trebuie precizat ca exista situatii cnd executia programului conine ramificatii sau salturi, adica
instructiunile executate nu sunt situate la locatii succesive n memorie.n acest caz la punctul 6 de mai sus
efectul instructiunii este ca n registrul numarator de program este introdusa adresa instructiunii de salt,
care este diferita de adresa instructiunii introduse la punctul 2.

Tehnica pipeline
n scopul cresterii vitezei de executie a instructiunilor, procesoarele folosesc tehnica numita pipeline
(banda de asamblare sau conducta).Astfel, executia unei instructiuni este mpartita n mai multe parti, de
fiecare parte ocupndu-se o componenta hardware dedicata (unitate) a procesorului. Toate unitatile
hardware pot s functioneze n paralel. De exemplu la o banda de asamblare cu 4 unitati (numite si
segmente) avem: S1 pentru extragere instructiune, S2 pentru decodificare, S3 pentru extragere operanzi
iar S4 pentru executie. Functionarea este prezentata n continuare: -pe perioada ciclului 1, unitatea S1
extrage instructiunea 1 (I1) din memorie; -pe perioada ciclului 2, unitatea S1 extrage instructiunea 2 (I2)
din memorie, iar unitatea S2 decodifica I1; -pe perioada ciclului 3, unitatea S1 extrage instructiunea 3 (I3)
din memorie, unitatea S2 decodifica I2, iar unitatea S3 extrage operanzii pentru I1; -pe perioada ciclului
4, unitatea S1 extrage instructiunea 4 (I4) din memorie, unitatea S2 decodifica I3, unitatea S3 extrage
operanzii pentru I2, iar unitatea S4 executa I1. Astfel, dup 4 cicluri, instructiunea 1 este executata
complet, instructiunea 2 este executata n proportie de 75%, etc.

Memoria intermediar
n general, procesoarele pot lucra la viteze mult mai mari n raport cu memoriile. Introducerea unei
memorii mai mari n interiorul UCP i-ar creste acesteia dimensiunile si costul. Memoria intermediara sau
cache (de la frantuzescul cacher, a ascunde) este o memorie de capacitate mai mica dar foarte rapida.
Memoria principala a calculatorului (identificata de obicei ca RAM) are o capacitate foarte mare dar este
mai lenta. Ideea de baza a memoriei intermediare este urmatoarea: cuvintele de memorie cele mai
frecvent utilizate sunt pastrate n memoria intermediara; doar cnd UCP nu gaseste un cuvnt, l cauta n
memoria principala. Orice procesor are un controler de memorie cache care este responsabil cu aducerea
datelor din memoria principala n cea de tip cache. O caracteristica a memoriei cache este raportul dintre
cache hit (numarul de accesari reusite la memoria cache, adica atunci cnd datele de care procesorul
avea nevoie au fost gasite n memoria cache) si numarul total de accesari.

44
Termenul de cache miss se refera la cazurile n care datele solicitate de procesor nu au fost
ncarcate n prealabil n memoria cache, urmnd s fie preluate din memoria principala, mai lenta. De
exemplu, un procesor Intel Core Duo 6600 are o memorie intermediara pe doua niveluri. Exista o pereche
de memorii intermediare de 32 KB pentru instructiuni si 32 KB pentru date, chiar n cipul UCP (level 1-
nivelul 1), precum si o memorie intermediara unificata, situata tot n interiorul capsulei circuitului integrat
care gazduieste UCP, legata de UCP printr-o cale de mare viteza (nivelul doi), de 4 MB.
Ambele memorii ruleaza la frecventa cu care lucreaza si procesorul, adica 2 GHz. Procesorul Itanium a
fost construit chiar cu 3 niveluri de memorie cache. Pentru alte procesoare dual core sau quad core
memoria cache L2 este n gama 6MB -12 MB. Acesata memorie este folosita n comun de toate
procesoarele.

Modul protejat
Initial, procesoarele (8088 si 80286) rulau n asa numitul mod real. n acest mod, sistemul de operare
(asigura gestionarea resurselor hardware si software ale calculatorului si interfata cu utilizatorul) era de
tipul single-tasking, adica numai un program rula la un moment dat. Sistemul de operare folosea
instructiuni de 16 biti si putea adresa 1 MB de memorie. Nu exista protectie incorporata pentru ca un
program s nu suprascrie peste un alt program sau chiar peste sistemul de operare. Astfel, daca rulau mai
multe programe, ntregul sistem se putea bloca. O importanta facilitate a procesoarelor, aparuta odata cu
generatia Intel 386, o reprezinta existenta modului protejat. Conform acestui mod nu se pot face scrieri
la orice adresa din spatiul de memorie. Acest mod este folosit pentru facilitarea unui mod de lucru
multitasking foarte bun. Modul multitasking nseamna ca pe un calculator pot rula n acelasi timp mai
multe programe aplicatie, fara ca ele s interfere unul cu celalalt. Sistemele de operare scrise pentru aceste
calculatoare opereaza cu instructiuni pe 32 de biti si pot adresa ntregul spatiu de memorie. Un program
eronat nu putea deteriora alte programe sau sistemul de operare. Putea fi terminat, n timp ce restul
sistemului continua s functioneze fara a fi afectat.

ntreruperi
Un alt aspect important al procesoarelor este conceptul de ntrerupere. n principiu prin ntrerupere se
ntelege ntreruperea executiei normale a unui program datorita unui eveniment care a avut loc n
exteriorul sau n interiorul UCP. Ca efect, programul n rulare va fi ntrerupt si se va face un salt la un alt
program a carui adresa depinde de evenimentul care a generat ntreruperea. Programul respectiv trebuie s
realizeze niste actiuni n funcie de evenimentul (sursa) care a generat ntreruperea. Dupa efectuarea
acelui program, procesorul va continua cu rularea programului initial, din punctul n care a fost ntrerupt.
O alternativa mult mai putin eficienta este ca UCP s verifice periodic daca anumite evenimente au avut
loc. n acest caz s-ar pierde timp n situatiile n care verificarea se face degeaba. n plus, s-ar putea ca
anumite evenimente s apara ntre doua verificari consecutive, iar deservirea lor ulterioara s fie prea
trzie. Semnalele (cererile) de ntreruperi pot veni de la diverse surse. De exemplu, apasarea unei taste,
receptia unui octet la portul serial sau conectarea unui dispozitiv la un port USB genereaza ntreruperi.
Acestea sunt ntreruperi hardware. ntreruperile initiate n urma executiei unui program se numesc
ntreruperi software (de exemplu la realizarea unei mpartiri cu zero).
IRQ (Interrupt ReQuest line) reprezinta liniile prin care dispozitivele hardware pot cere ntreruperi
procesorului. Fiecare dispozitiv (porturi, tastatura, hard disc,...) are alocata o astfel de linie, numita IRQi,
cu i avnd valori ntre 1 si 15. Cele 15 linii sunt conectate la intrarile a doua circuite speciale numite
controllere de ntreruperi, legate n cascada, de unde o singura linie este conectata la o intrare speciala
(pin) al procesorului. Procesoarele din familia Intel accepta 256 de tipuri de ntreruperi (15
hardware), fiecare corespunznd unui anumit eveniment.

45
Prin constructie, s-a stabilit modalitatea de determinare a adresei unde se va face saltul pentru deservirea
ntreruperii, astfel: n memorie exista o tabela, cu 1024 de locatii, situata chiar la nceputul
memoriei; pentru fiecare ntrerupere exista alocati 4 octeti, n funcie de care se calculeaza adresa de salt.
Aceasta tabela este creata n timpul procedurii de initializare a sistemului, de catre programul continut n
memoria ROM BIOS.

Tehnica DMA
O alta caracteristica standard a procesoarelor din PC-uri este tehnica DMA. De fiecare data cnd are loc
un transfer ntre un dispozitiv de intrare-ieire (prin intermediul unui port) catre memorie sau invers,
acesta are loc n doua etape: n prima octetul este citit de UCP ntr-unul dintre registre, iar n a doua
octetul este scris n memorie.

Daca numarul de octeti care trebuie transferat este mare, aceasta metoda are dezavantajul ca UCP nu
poate face altceva n acel timp si, respectiv, transferul se face n doi pasi. Pentru a elimina acest neajuns,
proiectantii PC-urilor au decis s incorporeze n acesta un circuit (procesor) suplimentar, numit controller
de acces direct la memorie (Direct Memory Access, DMA). Astfel, UCP poate s-i spuna controller-ului
de DMA s transfere un bloc de octeti din memorie ntr-un dispozitiv de ieire, sau n sens invers, dintr-
un dispozitiv de intrare n memorie. Un PC are 8 canale DMA, folosite de placa de sunet, unitatile de hard
disc si de discheta, etc.
Cnd PC-ul este pus sub tensiune, procesorul sare automat la adresa FFFF0h, asteptnd s gaseasca aici
instructiuni de executat. Rezulta ca la adresa respectiva trebuie s existe memorie ROM, care pastreaza
informatia n permanenta. Deoarece aceasta adresa este cu exact 16 octeti mai jos de sfrsitul primului
megaoctet (MB) de memorie, care reprezinta tot ceea ce vede procesorul la pornire, la adresa
respectiva trebuie nscrisa o adresa de salt la o adresa mai mica.

46
Un program reprezinta o lista secveniala de instructiuni. Un procesor poate s faca n principal
urmatoarele trei tipuri de instructiuni:
- operatii aritmetice si logice pe baza UAL
- poate transfera un operand dintr-o locatie de memorie n alta
- poate testa rezultatul operatiilor efectuate si apoi, funcie de rezultatul testului, poate face salturi
n program.

Exista mai multe tipuri de limbaje de programare:


- -Limbaje de nivel nalt (C, Pascal, BASIC)
- -Limbaje de nivel cobort, numite limbaje de asamblare.

Orice program trebuie translatat ntr-un limbaj masina pe care l ntelege procesorul. Acest
lucru este realizat de programe numite complilatoare, interpretoare sau asambloare.
Exemple de instructiuni n limbaj de asamblare:
- LOADA mem ncarca registrul A cu continutul locatiei de memorie de la adresa mem.
- LOADB con ncarca registrul B cu constanta con.
- SAVEB mem Salveza registrul B n locatia de memorie de la adresa mem.
- ADD Aduna registrele A si B si depune rezultatul n registrul C.
- SUB Scade registrele A si B si depune rezultatul n registrul C.
- JUMP addr Salt la adresa addr
- JNEQ addr Salt, la adresa addr, daca operandul A nu este egal cu B.

Fiecare instructiune n limbaj de asamblare este reprezentata prin 1, 2 sau mai multi octeti. Aceste numere
binare reprezinta limbajul masina. Astfel, un program este reprezentat printr-un numr de octeti n
memorie.

4.3. Tipuri de memorie (memoria principal, memoria de lucru, memoria


cache, memoria ROM, memoria video, memoriile secundare)

Memoria poate fi vzut intr-o prim abordare ca o stiv de locaii binare (cuvinte), fiecare
cuvnt fiind caracterizat de o adres binar unic.

47
Figura 4.4. Schem generic de memorie

n general M=8,16,32,64<=> lrgime bus date microprocesor (microsistem pe M biti)


Memoria este caracterizat prin 2 parametri de baz:
- capacitatea (nr. de locaii pe care le conine)
- latena (timpul de acces) care este o caracteristic intrinsec a circuitului de memorie si reprezint
n principiu timpul scurs din momentul furnizrii adresei de ctre microprocesor pn n
momentul n care memoria a ncheiat operaia comandat (citire sau scriere).

Fireste, se doresc capaciti ct mai mari si latente ct mai mici, cerine n general contradictorii.

Figura 4.5. Cilclu extern citire memorie

48
ntre busul de adrese si memorie exista un decodificator N:2N ca n figur:

Figura 4.5. Decodificator N:2N

Cu 10 bii de adrese => 210 cuvinte = 1k cuvnt (kilo)


Cu 20 bii de adrese => 220 cuvinte = 210 k cuvnt = 1M cuvnt (mega)
Cu 30 bii de adrese => 230 cuvinte = 210 M cuvnt = 1G cuvnt (giga)
Cu 40 bii de adrese => 240 cuvinte = 210 G cuvnt = 1T cuvnt (terra)
M = 8 => 1 cuvnt = 1 octet

4.3.1. Clasificare memoriei


Din punct de vedere tehnologic memoriile se mpart:
- ROM (Read Only Memory) EPROM, EEPROM
- RAM (Random Acces Memory)
- SRAM (static)
- DRAM (dinamic) uzual este memoria pricipal

Memoriile EPROM sunt memorii rezidente care pstreaz coninutul i dup decuplarea tensiunii
de alimentare. Ele sunt reprogramabile n sensul n care pot fi terse prin expunere la raze
ultraviolete i renscrise pe baza unui dispozitiv special numit programator de EPROM uri.
EPROM-urile pstreaz aa numitul program monitor nscris de ctre fabricant care este primul
program procesat de ctre sistem imediat dup alimentarea (resetarea) sa. Acest lucru este
absolut necesar ntruct coninutul memoriilor RAM este neprecizabil imediat dup alimentare.
Prin urmare, imediat dup RESET coninutul PC-ului este iniializat i va pointa spre prima
instruciune din programul monitor rezident n EPROM.Rolul programului monitor este de a
efectua o testare sumar a microprocesorului i a celorlalte componente ale microsistemului,
dup care va iniia ncrcarea sistemului de operare (Linux, Windows etc.) de pe disc n memoria
RAM. Dup aceasta programul monitor d controlul sistemului de operare rezident acum n
RAM. De asemenea ROM-ul conine rutinele de intrare ieire BIOS.

49
4.3.1.1. SRAM
Sunt memorii deosebit de rapide, timp de acces de t0 = 1 ns 15 ns, avnd capacitate de integrare
redus (sute de Ko per circuit).

4.3.1.2. DRAM (memoria principal)


Constituie peste 95 % din memoria oricrui sistem de calcul de uz general datorit faptului c
ofer densiti mari de integrare (64 Mbii 256 Mbii / chip) i timpi de acces relativ
rezonabili t0=30 ns 60 ns.
Totui, decalajul ntre timpul de acces ridicat al acestor memorii i viteza mare de execuie a
microprocesorului, constituie una dintre marile probleme tehnologice i arhitecturale n ingineria
calculatoarelor. Fiind realizate n tehnologie MOS puterea absorbit este redus. Din pcate au 2
mari dezavantaje:
1. Accesare (citire / scriere) complicat. Circuitele DRAM sunt organizate sub o form
matricial, pe linii i coloane. Bitul ce se dorete a fi accesat se afl la intersecia liniei cu
coloana selectat.
2. Necesitatea regenerrii memoriei DRAM.
Bitul de informaie DRAM este implementat sub forma unui condensator. Din pcate acest
condensator se descarc n timp i prin urmare cu timpul poate s piard informaia pe care o
memoreaz => deci c periodic el trebuie rencrcat (refresh, regenerare).
Regenerarea se face pe ntreg rndul din matricea de memorare. Conform catalogului un anumit
rnd ine minte informaia circa 2 ms. Dup acest interval, ntreg rndul trebuie regenerat.
Algoritmul de regenerare va trebui s fie unul de tip secvenial care s regenereze rnd dup rnd
n mod ordonat. Rezult c rata de regenerare a 2 rnduri succesive i respectiv (i+1) trebuie s se
fac la un interval de maxim 2 ms/N, unde N=nr. de rnduri al circuitului de memorie DRAM.
De exemplu, considernd N=128 rnduri (DRAM 4116, 4164) => rata de regenerare 2 ms/128 ~
15,6 s.
Prin urmare vom avea accese la DRAM din 2 pri:
- din partea procesorului care citete / scrie conform programului pe care l execut
- din partea unui automat de regenerare care regenereaz periodic, rnd dup rnd, memoria
DRAM.

Posibilele conflicte la memoria DRAM ntre microprocesor i automatul de regenerare vor trebui
gestionate corespunztor, eventual acceptnd chiar prin blocaje reciproce, rezultnd scderea
performanei. Ar fi util implementarea unei "regenerari transparente" (care s nu blocheze deloc
procesorul). Acest deziderat necesit compromisuri ntre viteza de procesare i gradul de
transparen al regenerrii.
Standardizarea bus-urilor i a protocoalelor aferente a condus la conceptul fecund de
microsistem de dezvoltare. ntr-un asemenea microsistem, prin simpla conectare la bus-ul
comun (date, adrese, comenzi, stri) standard a unor noi module compatibile (memorii, interfee)
se permite o dezvoltare n timp a microsistemului iniial. Spre exemplu, cunoscutele
microsisteme standardizate de tip IBM PC, constituie astfel de sisteme de dezvoltare construite
n jurul unor magistrale standardizate.

50
4.3.2. Memoria principal

Memoria principal este o memorie operativ adic aici se ncarc programele lansate n execuie i datele
aferente.
Este o memorie construit n tehnologie semiconductoare
Este o memorie volatil
Este o memorie cu acces direct din punctul de vedere al procesorului
Este o memorie cu acces aleator:
- Memoriile cu acces aleator sunt caracterizate prin faptul c fiecare locaie poate fi accesat
independent, timpul de acces pentru oricare locaie fiind acelai - independent de poziia locaiei
- Fiecare celulconine linii de date (citire sau scriere - numite linii de bit la majoritatea celulelor
bipolare sau unipolare) i linii de selecie.

Unitatea de memorie n calculatoarele contemporane se realizeaz cu ajutorul modulelor integrate.


Legtur dintre CPU i memoria principal se realizeaz prin trei magistrale:
- magistrala de adrese ADRBUS;
- magistrala de date DATA BUS;
- magistrala de control CONTROL BUS.

Magistrala de adrese este unidirecional, cea de date este bidirecional, iar cea de control conine linii de
comand, dar i linii informaie de stare. Memoria este organizata pe locaii:

O locaie are m ranguri notate Bm-1, ... B1, B0.


Citirea i scrierea memoriei se face paralel, deci, se scrie sau se citete un cuvnt pe m bii. Adresarea
memoriei se face prin magistrala de adrese (ADRBUS) i se presupune c aceast magistral are n linii.
Pentru fiecare combinaie de bii ai acestei magistrale se definete o anumit adres. Deci, legtura ntre
coninutul magistralei i o anumit locaie se face printr-un proces de decodificare. Dac magistrala de
adrese are nlinii atunci mulimea adreselor este 2n.

51
A = {0,1,...2n -1}
unde: A = spaiul adreselor
Pe de alt parte, dndu-se o geometrie a memoriei rezult mulimea locaiilor fizice n care sunt memorate
cuvinte care conin m bii.
Atunci cnd limea cuvntului memorie nu este suficient pentru reprezentarea datei, atunci se vor utiliza
mai multe locaii consecutive. Dac de exemplu, o dat se reprezint pe dou cuvinte n memorie (UIA),
atunci pentru a reprezenta data, se va folosi prima locaie pentru reprezentarea cuvntului mai puin
semnificativ (de la adresa j), iar locaia urmtoare (adresa j+1) pentru cuvntul mai semnificativ.
Procesoarele moderne au faciliti de gestiune a memoriei. Operaiile de gestiune se refer la
implementarea memoriei virtuale, protecia memoriei etc.
Unitatea de gestiune a memoriei (Memory Management Unit - MMU) poate fi ncorporat n unitatea de
control din CPU sau poate fi extern unitii de control. n particular, n cazul microprocesoarelor pot fi
ncorporate n microprocesoare sau sunt livrate ca un modul separat - modulul MMU).
Memoria principala (MP) conine informatia n curs de prelucrare cum ar fi programul n executie si date
cu care opereaza acesta. Pentru a se realiza o viteza ridicata de transfer MP este conectata direct la
magistralele sistemului. Adresa locatiei referite este pastrata n Registrul de Adrese (RA), iar datele
citite/scrise din/n memorie se pastreaza n Registrul de Date (RD). RA si RD vor mai fi ntlnite si la
microprocesoare ca registre tampon. Prezenta lor este absolut necesara deoarece magistralele nu trebuie
retinute pe toata durata transferului n/din memorie.
Circuitele de control ale memoriei (CCM) genereaza semnalele de selectie si comanda a modulelor de
memorie.

4.3.3. Memoria cache

Memoria cache este o memorie situat din punct de vedere logic ntre CPU (Central Processing Unit -
unitate central) i memoria principal (uzual DRAM - Dynamic Random Access Memory), mai mic,
mai rapid i mai scump (per byte) dect aceasta i gestionat n general prin hardware astfel nct s
existe o ct mai mare probabilitate statistic de gsire a datei accesate de ctre CPU, n cache. Aadar,
cache-ul este adresat de ctre CPU n paralel cu memoria principal (MP): dac data dorit a fi accesat se

52
gsete n cache, accesul la MP se aborteaz, dac nu, se acceseaz MP cu penalizrile de timp impuse de
latena mai mare a acesteia, relativ ridicat n comparaie cu frecvena de tact a CPU. Oricum, data
accesat din MP se va introduce i n cache.
Memoriile cache sunt implementate n tehnologii de nalt performan, avnd deci un timp de acces
foarte redus dac sunt integrate n microprocesor (cca. 1 5 ns la ora actual). Ele reduc timpul mediu de
acces al CPU la MP, ceea ce este foarte util.
Se definete un acces al CPU cu hit n cache, un acces care gsete o copie n cache a datei accesate. Un
acces cu miss n cache este unul care nu gsete o copie n cache a datei accesate de ctre CPU i care,
prin urmare, adreseaz MP cu toate penalizrile de timp care deriv din accesarea acesteia.
Se definete ca parametru de performan al unei memorii cache rata de hit, ca fiind raportul statistic ntre
numrul acceselor cu hit n cache respectiv numrul total al acceselor CPU la memorie. Msurat pe
benchmark-uri (programe de test) reprezentative, la ora actual sunt frecvente rate de hit de peste 90 %.
n esen, eficiena memoriilor cache se bazeaz pe 2 principii de natur statistic i care caracterizeaz
intrinsec noiunea de program: principiile de localitate temporal i spaial. Conform principiului de
localitate (vecintate) temporal, exist o mare probabilitate ca o dat (instruciune) accesat acum de
ctre CPU s fie accesat din nou, n viitorul imediat. Conform principiului de localitate spaial, exist o
mare probabilitate ca o dat situat n imediata vecintate a unei date accesate curent de ctre CPU, s fie
i ea accesat n viitorul apropiat (pe baza acestui principiu statistic se aduce din MP n cache un ntreg
bloc i nu doar strict cuvntul dorit de ctre CPU). O bucl de program structur esenial n orice
program exemplific foarte clar aceste principii i justific eficiena conceptului de cache.
Din punct de vedere arhitectural, exist 3 tipuri distincte de memorii cache n conformitate cu gradul de
asociativitate: cu mapare direct, semiasociative i total asociative.

Figura 4.6. Scheme de mapare n cache

La cache-urile cu mapare direct, ideea principal const n faptul c un bloc din MP poate fi gsit n
cache (hit) ntr-un bloc unic determinat. n acest caz regula de mapare a unui bloc din MP n cache este:

(Adresa bloc MP) modulo (Nr. blocuri din cache)

Stricteea regulii de mapare conduce la o simplitate constructiv a acestor memorii dar i la fenomenul de
interferen al blocurilor din MP n cache. Astfel, de exemplu, blocurile 12, 20, 28, 36, 42 etc. nu pot
coexista n cache la un moment dat ntruct toate se mapeaz pe blocul 4 din cache. Prin urmare, o bucl
de program care ar accesa alternativ blocurile 20 i 28 din MP ar genera o rat de hit egal cu zero.
La cache-urile semiasociative exist mai multe seturi, fiecare set avnd mai multe blocuri componente.
Aici, regula de mapare precizeaz strict doar setul n care se poate afla blocul dorit, astfel:

(Adresa bloc MP) modulo (Nr. seturi din cache)

53
n principiu blocul dorit se poate mapa oriunde n setul respectiv. Mai precis, la un miss n cache, nainte
de ncrcarea noului bloc din MP, trebuie evacuat un anumit bloc din setul respectiv. n principiu, n mod
uzual, exist implementate dou-trei tipuri de algoritmi de evacuare: pseudorandom (cvasialeator, uor de
implementat), FIFO (sau round-robin, se evacueaz blocul cel mai vechi din cache. Contorul aferent se
ncarc doar la ncrcarea blocului n cache i nu la fiecare hit per bloc, ca la algoritmul LRU) i LRU
(Least Recently Used).
Dac un set din cache-ul semiasociativ conine N blocuri atunci cacheul se mai numete tip N-way set
associative. Mai nou, se implementeaz algoritmi de evacuare predictivi, care anticipeaz pe baze
euristice utilitatea de viitor a blocurilor memorate n cache, evacundu-l pe cela mai puin valoros. Dei
aceti algoritmi depesc n mod normal cadrul acestui curs de iniiere n domeniul microprocesoarelor, n
continuare se va prezenta totui unul, integrat n arhitectura numit Selective Victim Cache.
Este evident c ntr-un astfel de cache rata de interferen se reduce odat cu creterea gradului de
asociativitate (N mare). Aici, de exemplu, blocurile 12, 20, 28 i 36 pot coexista n setul 0. Prin
reducerea posibilelor interferene ale blocurilor, creterea gradului de asociativitate determin
mbuntirea ratei de hit i deci a performanei globale. Pe de alt parte ns, asociativitatea impune
cutarea dup coninut (se caut deci ntr-un set dac exist memorat blocul respectiv) ceea ce conduce la
complicaii structurale i deci la creterea timpului de acces la cache i implicit la diminuarea
performanei globale. Optimizarea gradului de asociativitate, a capacitii cache, a lungimii blocului din
cache etc., nu se poate face dect prin laborioase simulri software, variind toi aceti parametrii n
vederea minimizrii ratei globale de procesare a instruciunilor [instr./cicli].
n fine, memoriile cache total asociative, implementeaz practic un singur set permind maparea blocului
practic oriunde n cache. Ele nu se implementeaz deocamdat n siliciu datorit complexitii deosebite
i a timpului prohibit de cutare. Reduc ns (practic) total interferenele blocurilor la aceeai locaie
cache i constituie o metric superioar util n evaluarea ratei de hit pentru celelalte tipuri de cache-uri
(prin comparaie).
Pentru a reduce rata de miss a cache-urilor mapate direct (fr s se afecteze ns timpul de hit sau
penalitatea n caz de miss), cercettorul Norman Jouppi (DEC) a propus conceptul de victim cache.
Aceasta reprezint o memorie mic complet asociativ, plasat ntre primul nivel de cache mapat direct i
memoria principal. Blocurile nlocuite din cache-ul principal datorit unui miss sunt temporar memorate
n victim cache. Dac sunt referite din nou nainte de a fi nlocuite din victim cache, ele pot fi extrase
direct din victim cache cu o penalitate mai mic dect cea a memoriei principale. Deoarece victim cache-
ul este complet asociativ, multe blocuri care ar genera conflict n cache-ul principal mapat direct, ar putea
rezida n victim cache fr s dea natere la conflicte. Decizia de a plasa un bloc n cache-ul principal sau
n victim cache (n caz de miss) este fcut cu ajutorul unei informaii de stare asociate blocurilor din
cache. Biii de stare conin informaii despre istoria blocului. Aceast idee a fost propus de McFarling,
care folosete informaia de stare pentru a exclude blocurile sigure din cache-ul mapat direct, reducnd
nlocuirile ciclice implicate de acelai bloc. Aceast schem, numit excludere dinamic, reduce miss-
urile de conflict n multe cazuri. O predicie greit implic un acces n nivelul urmtor al ierarhiei de
memorie contrabalansnd eventuale ctiguri n performan. Schema este mai puin eficace cu blocuri
mari, de capaciti tipice cache-urilor microprocesoarelor curente.
Pentru a reduce numrul de interschimbri dintre cache-ul principal i victim cache, Stiliadis i Varma au
introdus un nou concept numit selective victim cache (SVC).

54
Figura 4.7. Ierarhia de memorie pentru schema SVC
Cu SVC, blocurile aduse din memoria principal sunt plasate selectiv fie n cache-ul principal cu mapare
direct fie n selective victim cache, folosind un algoritm de predicie euristic bazat pe istoria folosirii
sale. Blocurile care sunt mai puin probabil s fie accesate n viitor sunt plasate n SVC i nu n cache-ul
principal. Predicia este de asemenea folosit n cazul unui miss n cache-ul principal pentru a determina
dac este necesar o schimbare a blocurilor conflictuale. Algoritmul obiectiv este de a plasa blocurile,
care sunt mai probabil a fi referite din nou, n cache-ul principal i altele n victim cache.

Metrici de performan

Metricile de performan folosite sunt rata de miss la nivelul L1 de cache i timpul mediu de acces la
ierarhia de memorie. n cazurile cu victim cache simplu i cel cu victim cache selectiv, folosim de
asemenea i numrul de interschimbri ntre cache-ul principal i victim cache ca metric de comparaie.
Rata de miss la nivelul L1 de cache se bazeaz pe numrul de referine propagate n nivelul urmtor al
ierarhiei de memorie. n caz de miss n cache-ul principal acestea sunt servite de ctre victim cache, fiind
pltit o penalitate pentru accesul n victim cache precum i pentru interschimbrile de blocuri rezultate
ntre cache-ul principal i victim cache. Timpul mediu de acces la ierarhia de memorie ia n calcul i
aceste penalizri i de aceea este un bun indicator al performanei memoriei sistemului, desigur mai
complet dect rata de miss n nivelul L1 de cache.
Timpul mediu de acces pentru un cache mapat direct se calculeaz astfel:

Unde R este numrul total de referine generate de programele de tip trace, Md reprezint numrul total
de accese cu miss n cache. Pentru fiecare miss, sunt necesari p cicli suplimentari. Presupunem c cei p
cicli includ toate cheltuielile CPU-ului. n cazul victim cache-ului simplu, o penalitate de p cicli este
produs la fiecare miss n primul nivel al ierarhiei de memorie.
Folosirea victim cache-ului selectiv determin mbuntiri ale ratei de miss precum i ale timpului mediu
de acces la memorie, att pentru cacheuri mici ct i pentru cele mari (4Koctei - 128 Koctei). Simulri
fcute pe trace-uri de instruciuni a 10 benchmark-uri SPEC92 arat o mbuntire de aproximativ 21%

55
a ratei de miss, superioar folosirii unui victim cache simplu de 16 Koctei cu blocuri de dimensiuni de 32
octei; numrul blocurilor interschimbate ntre cache-ul principal i victim cache s-a redus cu aproximativ
70%.

4.3.4. Memoria virtual (secundar)

Este descris[ ]n capitolul 7.1.

4.3.5. Memoria video

Din punct de vedere constructiv, memoria video este de tip RAM dinamic (DRAM), n mai ulte
variante.Memoria RAM dinamica are avantajul densitatii mari de integrare si deci al raportului
capacitate/pret mare,dezavantajul fiind, n schimb, necesitatea reamprospatarii periodice a informatiei
continute [DRAM refresh]. Astfel nct, n intervalul de remprosptare [duty cycle], nu se pot face
accesele normale de citire/scriere la memorie.
Un alt dezavantaj il reprezinta faptul ca la un moment dat se poate face doar un singur acces la memorie
(citire sau scriere). La nivelul placii grafice au insa loc doua tipuri de transfer de date: transferul
informatiei de la unitatea centrala a calculatorului, la memoria video; si transferul datelor din memoria
video spre registrii de deplasare, pentru afisarea imaginii pe ecran. Deci capacitatea totala de acces la
memorie va trebui impartita la 2.
La adresabilitati mari de pixel si la adancimi mari de culoare, spre monitor vor trebui transferate cantitati
enorme de date pentru ca afisarea s nu se altereze (rata de remprospatare a imaginii [monitor refresh
rate] va fi mare), ceea ce cu unele tipuri de memorie video nu se reuseste.
In incercarea de a elimina dezavantajele enumerate mai sus (si deci de a creste capacitatea totala de acces
la memoria video), s-au conceput diverse alte variante de memorie RAM, printre care se remarca prin
performante, varianta VRAM [Video RAM].
Memoria VRAM este o memorie DRAM de tip dual-port, adica suporta doua accese simultane (citire sau
scriere), dubland astfel capacitatea totala de acces la ea. Necesitatea reamprospatarii informatiei din
memorie se pastreaza, fiind tot RAM dinamica. In schimb conine un registru de deplasare propriu, cu
incarcare paralela (echivalentul unui ciclu de citire), de capacitate foarte mare (un rand intreg din matricea
memoriei). Acest registru poate fi sincronizat separat de accesele normale la memorie, si e utilizat pentru
reamprospatarea video. Astfel, daca la memoria DRAM clasica, reamprospatarea imaginii afisate ocupa
un procent de 50% din accesele la memoria video, n cazul memoriei VRAM, operaia ocup 0.5%.
Capacitatea de memorie a celor mai moderne plci video variaz de la 128 MB la 16 GB. Din moment ce
memoria video trebuie s fie accesat de ctre GPU (Graphics Processing Unit) i circuitele de afiaj, se
folosete adesea memorie special multi-port sau de mare vitez, cum ar fi VRAM, WRAM, SGRAM etc.
n jurul anului 2003, memoria video era de obicei bazat pe tehnologia DDR. n timpul i dup acest an,
productorii s-au ndreptat spre DDR2, GDDR3, GDDR4, i chiar GDDR5 utilizat n special de ctre
ATI Radeon HD 4870. Rata efectiv a ceasului memorie n plcile grafice moderne este, n general,
cuprins ntre 400 MHz i 3.8 GHz.
Memoria video poate fi utilizat pentru stocarea altor date, precum i a imaginii de pe ecran, cum ar fi Z-
bufferul, care gestioneaz coordonatele de adncime n grafica 3D, texturi, buffer-e vertex, programe
compilate de shader.
Memoria grafic este n general clasificat n dou tipuri majore: dedicat i partajat. Memorie grafic
dedicat, dup cum sugereaz i numele, este memoria care este disponibil pentru utilizarea exclusiv de
ctre subsistemul grafic. Aplicaiile non-grafice i alte subsisteme din sistemul de operare nu pot accesa
acest tip de memorie. Un exemplu de memorie grafic dedicat este de memoria care este prezent fizic
pe adaptoarele grafice "discrete". Acest lucru a fost denumit n mod obinuit ca "la bord" sau "de
memorie video local"-care este, aproape de unitatea de procesare grafic (GPU). Memoria dedicat, cu
toate acestea, nu se limiteaz la memorie on-board. O poriune de memorie de sistem poate fi, de
asemenea, dedicat subsistemelor grafice. Aceast poriune de memorie de sistem nu este niciodat

56
disponibil pentru alte subsisteme sau aplicaii i sunt deinute exclusiv de ctre subsistemele grafice.
Memoria partajat de sistem este o poriune din memoria sistemului, care pot fi utilizat de ctre
subsistemele grafice atunci cnd este necesar. Pentru adaptoarele grafice discrete, acest tip de memorie
este adesea menionat ca "memoria video non-local"-care este, departe de cea a GPU-ului. Memorie
partajat este disponibil pentru alte subsisteme sau aplicaii non-grafice atunci cnd nu este utilizat de
ctre subsistemele grafice. Astfel, acesta nu este garantat s fie disponibil pentru grafic, deoarece ar
putea fi deja n uz.
Diferenele dintre un adaptor grafic "discret" si unul "integrat" pot fi evideniate n contextul de memorie
grafic dedicat versus partajat. Adaptoarele grafice discrete sunt de obicei conectate la sistem prin port
grafic accelerat (AGP), PCI, sau PCI Express bus. Cele mai multe adaptoare discrete au o anumit
cantitate de memorie grafic dedicat cu un bus foarte larg i rapid de memorie local de a acces, oferind
performante mult mai bune dect memoria sistemului. Adaptoarele grafice discrete pot accesa, de
asemenea, i utilizeaza memorie de sistem prin intermediul AGP sau PCI-Express bus de memorie video
non-local discutat mai devreme. Deoarece memoria de sistem este accesat n magistrala sistemului,
accesul este mult mai lent dect accesul la memoria local. Adaptoarele grafice discrete mpart, n
general, o poriune din memoria sistemului cu CPU. De obicei, aceste adaptoare nu cer pentru utilizarea
dedicat de memorie de sistem pentru grafica, lsnd astfel mai multe resurse disponibile pentru restul
sistemului.

4.3.5.1. Memorii secundare

4.4. Dispozitive de intrare/ieire (organizare, conectare, interfete).

Sistemul de intrare/ieire permite introducerea/extragerea informaiilor i este constituit din:


Dispozitive de memorare extern (ME), de exemplu hard-disc, floppy-disc, compact-disc, etc.
Dispozitive de intrare (DI), de exemplu tastatur, mouse, etc.
Dispozitive de ieire (DE), de exemplu monitor, imprimant, etc.

Comunicarea ntre aceste componente se realizeaz prin intermediul unor magistrale. O magistral
reprezint un grup de linii de conexiune ce permit transmiterea de semnale. Exist dou tipuri de
magistrale ntr-un calculator:
Magistrale de Adrese (MA) transmit numai adrese de memorie i conecteaz UCP cu memoria
RAM.
Magistrale de Date (MD) transmit date i instruciuni i conecteaz UCP, memoria RAM i
celelalte componente ale sistemului.

Dispozitivele de intrare/ieire (I/O devices) sunt tastatura, mouse, monitor, imprimanta, placa de retea,
etc. cu urmtoarele elementele principale:
- controller-e de intrare/ieire
- comunicatia sistemului de operare cu dispozitivele de intrare/ieire = programare
/O(intreruperi/drivere)
- interfetele puse la dispozitia utilizatorului

Un dispozitiv I/O este orice dispozitiv care permite introducerea sau extragerea de informatie din
calculator:
- dispozitive de intrare: tastatura, mouse, joystick;
- dispozitive de ieire: monitor, imprimanta, boxe;

57
- dispozitive de intrare & ieire: placa de retea, modem, harddisk, floppy disk, USB stick
(dispozitive de stocare)

Dispozitivele de intrare/ieire (DIE) asigura introducerea si extragerea informatiei n/din calculator.


Numite si Dispozitive Periferice (DP) acestea pot ndeplini mai multe categorii de funcii cum ar fi
comunicarea dintre calculator si utilizatorul uman, comunicarea ntre calculatoare, legatura cu procese
reale etc.
DIE se conecteaza la unitatea centrala prin intermediul interfetelor de intrare/ieire , a caror complexitate
variaza foarte mult de la simple registre pna la controlere inteligente realizate cu microprocesor.

Din punctul de vedere al sistemului de operare DIE sunt vazute ca fisiere iar interfetele n calitate de
canale de comunicaie.
Dispozitive de ieire.
Din punctul de vedere al suportului folosit pentru vizualizarea informatiei extrase din calculator exista
doua tipuri de dispozitive de ieire:
- dispozitive hardcopy exemplu: imprimante cu ace, laser, cu jet de cerneala, termica; plotterele
cu penita sau electrostatic - creeaza imaginea fixa, stabila pe un suport fizic cum ar fi hrtia sau
folia de plastic;
- dispozitive de afisare exemplu: dispozitive cu tub catodic monocrom sau color (CRT), tuburile
cu memorare directa (DVST), dispozitivele de afisare cu cristale lichide (LCD), ecrane cu
plasma, dispozitive de afisare electroluminiscente, etc. - sunt caracterizate de o anumita frecventa
de remprospatare a imaginii pe un ecran, putndu-se obine si efecte dinamice.

Dispozitive de intrare.
Servesc la introducerea datelor sub diverse forme n sistem. Exista sase dispozitive logice de introducere a
datelor grafice si anume: locator (locator), flux (stroke), optiune (choise), culegere
(pick), text (text), valoare (valuator). Pentru acestea au fost realizate dispozitive fizice cum ar fi: tableta
grafica, mouse, trackball, joystick, ecranul senzitiv, creionul optic, butoane, chei, tastatura, valoare.

Execuia unui proces de intrare/ieire


Viteza de lucru a perifericelor difer n funcie de performanele lor tehnologice (foarte mic la
dispozitivele exclusiv mecanice) dar este mult mai mic dect a unitii centrale, care funcioneaz pe
principii exclusiv electronice. Printr-o analogie uman, noi gndim adesea mult mai repede dect putem
scrie.

58
Dup ce unitatea de comand cere perifericelor executia unei operaii de intrare-ieire, ea asteapt un timp
ndelungat (fa de timpii ei de lucru) pentru terminarea operaiei. Astfel, apare un gol n activitatea
unitii de comand. Problema a fost rezolvat prin introducerea unui bloc auxiliar de comand care s
preia controlul asupra operaiilor de intrare-ieire efectuate cu ajutorul perifericelor dup iniierea lor de
ctre unitatea de comand. Prin intermediul procesorului auxiliar care controleaz operatiile cu
perifericele se permite cuplarea, indirect, la unitatea central, a mai multor dispozitive periferice.
Aceast unitate funcional a calculatoarelor a aprut odat cu generatia a doua de calculatoare sub
numele de de canal de intrare-ieire. Rolul su a fost preluat la sistemele de calcul medii mari de unitatea
de schimburi multiple (USM), la minicalculatoare de dispozitivul de control al magistralei de
comunicatii iar la microcalculatoare de o extensie a magistralei. n timp ce procesorul specializat n
operaii de intrare-ieire controleaz schimbul de date ntre memorie i periferice, blocul de comand
poate superviza execuia altor operaii, dintr-un alt program. Modul de lucru cu o unitate central i mai
multe programe rezidente n memorie spre execuie se numete multiprogramare sau multitasking.
Programele aflate n memoria intern a unui calculator care funcioneaz n regim de multitasking se
gsesc n diverse stri: pot astepta terminarea unei operaii de intrare-ieire, pot atepta s fie lansate n
execuie iar un singur program este prelucrat la un moment dat de unitatea central; politica de servire a
acestor programe este stabilit de algoritmii implementai n sistemul de operare.
Dup terminarea unei operaii de intrare-ieire, unitatea de comand este anunat, printr-un semnal numit
ntrerupere, c citirea sau scrierea s-a ncheiat, astfel nct poate continua execuia programului respectiv.
Noua unitate component a sistemului de calcul poate fi ncorporat n schema general a unui calculator.

Interfee

Interfeele i dispozitivele de intrare-ieire ale unui calculator personal sunt adaptate pentru modul de
lucru cu un singur utilizator. De exemplu: exist o singur intrare de tastatur i se folosete o singur
interfa de afiare. Informaiile afiate se pstreaz ntr-o zon de memorie direct accesibil procesorului.
Astfel pot fi implementate aplicaii care necesit o vitez mare de schimbare a informaiilor afiate. n
cazul sistemelor multi-utilizator interfaa utilizator este asigurat de mai multe dispozitive inteligente de
tip display care ncorporeaz o tastatur i un dispozitiv de afiare; legatura cu calculatorul gazd se
realizeaz prin canale seriale. Viteza de schimbare a informaiilor afiate este limitat de viteza relativ
mic a canalului serial.
Configuraia tipic de dispozitive i interfee de intrare-ieire pentru un calculator personal este
urmtoarea: tastatur, monitor de vizualizare, unitate de disc flexibil , unitate disc rigid, unitate de disc
optic, dispozitiv de indicare (mouse), imprimant, interfa de reea, sistem audio (interfa soundblaste i
boxe).
Tastatura este compus dintr-o matrice de contacte (taste) i un microsistem bazat pe un microcontrolor.
Microsistemul are rolul de a detecta eventualele contacte nchise (taste apsate) i de a transmite aceast
informaie sistemului de calcul. La calculatorul IBM-PC comunicaia dintre tastatur i calculator se
realizeaz printr-o legatur serial sincron. Alimentarea tastaturii se face de la calculator prin cablul de
comunicaie (prin semnale separate de alimentare).
Unitatea de disc rigid (hard-disk) are rolul de a pstra programe i date care sunt folosite n mod uzual
ntr-un anumit sistem de calcul. Tot pe hard-disk se pstreaz de obicei i sistemul de operare al
calculatorului, care se ncarc la iniializarea sistemului. O parte a spaiului de pe disc se poate utiliza
pentru extinderea memoriei interne prin tehnica denumit memorie virtual.
Unitatea de disc optic permite citirea informaiilor digitale nregistrate pe un suport optic. Ca i
funcionalitate aceast unitate se situeaz ntre unitatea hard-disk i cea de disc flexibil: informaiile
nregistrate pe discul optic pot fi transportate ntre calculatoare. Scrierea se face secvenial pe tot discul
sau pe o poriune a sa (nscriere multisesiune). Exist diferite standarde pentru viteza de transmisie a
datelor citite: X4, X8, X32, X40,X48
Monitorul video are rolul de a afia rezultatele execuiei unui program precum i informaiile de operare.
Partea inteligent a ieirii video este interfaa video. Exist mai multe standarde pentru implementarea

59
interfeei video: MGA, CGA, EGA, VGA si SVGA. Diferenele constau n: rezoluie pe orizontal (320-
1024 puncte), rezoluie pe vertical 200800 puncte), paleta de culori (2-256 culori) i faciliti de citire-
scriere a informaiilor grafice. Primele 3 variante de interfa genereaz semnale digitale, iar ultimele
semnale analogice. De obicei tipul monitorului trebuie s fie n concordan cu tipul interfeei video.
Imprimanta este un dispozitiv de ieire ce permite tiprirea pe hrtie a rezultatelor unei prelucrri pe
calculator. De obicei legtura cu calculatorul se realizeaz pe canalul paralel. Imprimanta poate s lucreze
n mod alfanumeric (caz n care accept coduri ASCII i secvene specifice de comand ESC), sau n
mod grafic (caz n care informaiile transmise descriu prin puncte o imagine grafic). Exist mai multe
standarde pentru limbajul de comunicaie ntre calculator i imprimant (ex: EPSON, IBM, Hewlet-
Packard, etc.). Acestea difer mai ales prin modul grafic. O imprimant poate s emuleze (s neleag)
mai multe tipuri de limbaje.
Interfaa de reea permite cuplarea calculatorului ntr-o reea locala (LAN). Cel mai rspndit standard de
reea LAN pentru calculatoare personale este Ethernet 10Base5. Conectarea n reea se poate face cu
cablu coaxial, cu cablu bifilar nfurat (UTP-Unshielded Twisted Paire) sau prin fibr optic (mai rar).
Pentru comunicaie se pot folosi mai multe pachete de protocoale: Novel-Netware, Windows-Netware,
TCP/IP i altele.
Mouse-ul este un dispozitiv de indicare, util mai ales pentru sistemele de operare i programele aplicative
care au o interfa grafic utilizator bazat pe meniuri. Micrile mouse-ului sunt transformate n micri
ale unui cursor pe ecran cu ajutorul unui program de interfa (driver). Prin intermediul celor dou sau trei
butoane se pot selecta funcii ale programului care ruleaz. Exist mai multe standarde pentru limbajul de
comunicaie ntre mouse i calculator. Legatura se realizeaz printr-un canal serial.
Interfaa audio permite redarea nregistrrilor audio, mixarea diferitelor surse de sunet (CD, fisier,
microfon), nregistrarea semnalelor audio de intrare, generarea de efecte speciale, filtrarea semnalelor de
intrare, etc. Interfaa este alcatuit dintr-o plac de sunet (soud-blaster) i boxe. O ieire a unitii de disc
optic este conectat la placa de sunet pentru a permite redarea discurilor de muzic.

5. Nivelul fizic
5.1. Microprocesorul, ntreruperile, magistralele de comunicaie
(magistralele sincrone si asincrone, arbitrajul magistralei)
O magistral (bus) definete setul de reguli dup care informaia circul n interiorul unui sistem de
calcul, ntre mai multe sisteme de calcul sau ntre sisteme de calcul i echipamente specializate. Un
standard de magistral conine mai multe tipuri de specificaii:
mecanice - conectorii, cablurile, topologia de cuplare;
electrice - nivelele de tensiunie, curenii impedane;
funcionale - descrierea semnalelor.
Unele calculatoare au impus un standard de magistral prin popularitatea lor (PC AT au impus magistrala
ISA, apoi PCI). Uneori standardele sunt create de grupuri de productori care au interese comune. Un
astfel de standard este SCSI (Small Computer Interface System). Unele standarde sunt adoptate de
organisme ca IEEE. Magistralele realizeaz legtura electric ntre procesor, memorie, dispozitive I/O
i definesc cel mai jos nivel pentru un protocol de comunicaie. Magistrala este o cale de comunica
ie folosit n comun de mai multe blocuri funcionale i este realizat fizic de un set de fire conductoare.
O magistral trebuie s fie versatil i s aib un presczut. Datorit versatilitii, odat definit o schem
de conexiuni, este foarte uor s se adauge noi dispozitive n sistem sau acestea s poat fi uor mutate
dintr-un calculator n altul, dac cele dou calculatoare sunt construite cu acelai tip de magistral.
Pe de alt parte, folosirea unei magistrale poate fi dezavantajoas datorit limitrilor de vitez de transfer
a datelor (throughput) pe care aceasta le poate crea. Viteza la care poate lucra o magistral este impus n

60
primul rnd de factori fizici ca: lungimea traseelor i numrul dispozitivelor ataate (acestea din urm
aduc constrngeri att ca numr efectiv ct i ca diversitate din punct de vedere al ratelor de transfer
i a timpilor de ntrziere).
O magistral este organizat n grupe de semnale care au aceeai funcionalitate:
un set de semnale de control;
un set de semnale de date.

Semnalele de control sunt folosite pentru a indica cereri, acceptri sau pentru a indica tipul informa
iei de pe liniile de date. Setul semnalelor de date este folosit pentru a transporta informaia ntre blocurile
funcionale ale calculatorului de la surs la destinaie (de la iniiator la int). Informaia poate fi date,
comenzi sau adrese. Adesea magistralele de date sunt desprite n dou seturi pentru a separa informaia
ce reprezint adrese. Astfel exist i o magistral de adrese pentru ca datele i adresele s poat fi
vehiculate ntr-o singur tranzacie de la surs la destina
ie. Dupfuncionalitatea semnalelor magistralele pot fi magistrale de control, magistrale de date i
magistrale de adrese. O clasificare a magistralelor poate fi fcut dup blocurile care se conecteaz la
aceasta. Conform acestui criteriu magistralele pot fi:
magistrale procesor- memorie;
magistrale I/O;
magistrale de fundal.

Magistrala procesor memorie este scurt i de mare vitez. Dup cum i spune numele, este conceput
pentru a lega procesoarele de memorie.
Magistralele I/O sunt n primul rnd mai lungi i suport o gam larg de rate de transfer ca o necesitate a
conectrii unei game largi de dispozitive I/O la sistem. De obicei magistralele I/O nu sunt conectate direct
la procesor, ci folosesc fie o magistral procesor memorie, fie o magistral de fundal.
Magistralele de fundal sunt proiectate astfel nct att procesorul, memoria ct i dispozitivele I/O s
foloseasc aceeai cale de comunicaie. La acest tip de magistral se face un compromis pentru a satisface
att necesitile comunicaiei ntre procesor i memorie ct i ale comunicaiei dintre dispozitivele I/O,
sacrificnd desigur performana sistemului.
Magistralele I/O i magistralele de fundal sunt definite prin specificaii, deseori publice, iar magistralele
procesor memorie sunt specifice (proprietatea productorului).
O alt clasificare a magistralelor se poate face dup metoda de comunicaie folosit:
magistrale sincrone;
magistrale asincrone.

Magistrale sincrone dispun de o linie de tact n liniile de control, condus de un oscilator cu cuar, ntre 5-
133MHz. Toate transferurile au loc dup un protocol fix care este raportat la semnalul de tact, ntr-un
numr ntreg de cicluri, numite cicluri de bus. Pentru c protocolul este predeterminat i logica implicat
este simpl, magistralele sincrone pot fi foarte rapide. Avantajul magistralelor sincrone este simplitatea
deoarece nu exist un dialog (protocoalele pot fi implementate prin automate finite simple). Dezavantajul
este c dac un transfer este mai scurt el trebuie totui s dureze un numr ntreg de cicluri de bus, ca
urmare mbuntirile tehnologice ale plcilor I/O nu duc la mrirea vitezei. ntr-un cuvnt, dac avem
plci lente i rapide pe o magistral sincron, transferurile au loc la viteza celei mai lente. Un alt
dezavantaj este c, din cauza deformrii semnalului de ceas, liniile magistralei nu pot fi foarte lungi i nici
forte ncrcate.
La magistrale asincrone transferurile pot dura orict, motiv pentru care acestea se poate adapta uor la o
mare varietate de dispozitive conectate. Coordonarea transferurilor de la surs la destinaie se face pe baza
unui protocol de dialog conversaional (handshaking). Un astfel de protocol const ntr-o serie de pai
parcuri de surs i destinaie astfel nct trecerea la pasul urmtor se face numai cu acordul ambelor pri.

61
Pentru implementarea unui astfel de protocol sunt necesare linii de control suplimentare (DATA
REQUEST, DATA READYetc.).

Aa cum este firesc, cel puin dou blocuri sunt conectate la o magistral. Pentru a evita haosul pe
magistral, controlul acesteia este fcut de un MASTER de magistral. Un MASTER trebuie s poat s
iniieze cereri pentru acces la magistral i s poat s controleze toate tranzaciile. Un procesor este
capabil s fie MASTER pe cnd memoria poate fi numai SLAVE. Cel mai simplu sistem este un sistem
cu un singur MASTER, acesta fiind procesorul. Implicarea procesorului n toate tranzaciile este
ineficient, de aceea exist alternativa de magistral cu mai muli MASTER. ntr-o astfel de magistral
fiecare MASTER este capabil s iniieze un transfer. n aceste condiii trebuie s existe un
mecanism de arbitrare a accesului la magistral ce decide care MASTER va prelua controlul. Arbitrul
primete cererea de administrare a magistralei (BUS REQUEST) pe care o onoreaz sau nu (GRANT) n
urma unei analize. O magistral cu mai muli MASTER conine linii speciale pentru arbitrare. Exist mai
multe metode de arbitrare. Toate metodele respect principiul prioritii i al corectitudinii (fairness).
Pentru cuplarea diferitelor subsisteme la magistrale trebuie inut cont de diafonie, de reflexii, de
impedanele liniilor etc. Pentru legarea semnalelor la liniile de transmisie se folosesc circuite driver, aa
cum sunt de exemplu 74HCxxx sau 74AHCxxx pentru CMOS i 74ABTxxx pentru TTL.
Structura tipic a unei uniti centrale arat c magistrala este ierarhizat, n funcie de vitez, pe dou
nivele; unul de vitez mare (PCI) i unul de vitez mic (ISA).

La magistrala de vitez mare se conecteaz echipamente periferice rapide (hard disc, reea Ethernet,
video, SCSI etc.) iar la cea de vitez mic se conecteaz echipamente periferice lente (unitatea de disc
flexibil, canalele seriale, canalul paralel, etc.).

5.1.2. Moduri de lucru ntre microprocesor si interfetele I/O

Legtura ntre procesor i EP (Echipamente Periferice) se realizeaz prin canale I/O (de intrare/ie
ire) prin intermediul magistralei. Evoluia n timp a canalelor I/O este n acelai timp o evoluie a
creterii complexitii i performanelor. Pot fi enumerate urmtoarele etape:
1. CPU controleaz direct EP;
2. Este adugat un modul I/O (o interfa serial sau paralel, programabile). CPU comand EP prin
transfer programat (direct sau prin interogare);
3. Aceeai configuraie ca la 2, dar transferul are loc prin ntreruperi;

62
4. Modulul I/O are acces direct la memorie prin DMA. Modulul poate muta informaia direct n
memorie, accesul CPU fiind necesar doar la nceputul i sfritul transferului;
5. Modulul I/O folosete un microcalculator sau un microcontroller, cu instruciuni proprii. CPU
programeaz procesorul I/O pentru un transfer, pe care acesta l execut folosind instruciunile
proprii.Cnd transferul se termin, procesorul I/O ntrerupe CPU pentru a comunica rezultatele
transferului;
6. Microcontrollerul are memorie local. El poate controla astfel mai multe EP cu o intervenie
minim din partea CPU. Memoria local poate fi folosit i ca buffer de date, realiznd astfel o
rat de transfer mare.

Evoluia microcontrollerelor integrate a fost paralel cu cea a procesoarelor. Dac la procesoare s-a
urmrit o cretere a vitezei de prelucrare prin creterea tactului, creterea mrimii memoriei CACHE
(uzual 256K integrat), lrgimea busului de date i adrese, la microcontrollere s-a urmrit integrarea de ct
mai multe subsisteme utile (memorie EPROM, RAM, convertoare AD i DA). Dac preul unui procesor
nu a sczut sub cteva zeci de dolari (PII/450MHz), preul unui microcontroller poate ajunge la civa
dolari, ceea ce ncurajeaz eforturile proiectanilor de a realiza module I/O inteligente cu microcontroller,
sau alte aplicaii cu microcontroller.
Conexiunea ntre un modul I/O i unitatea central poate fi:
- Punct-la-punct; linii dedicate pentru transferul de date (de exemplu la un PC AT tastatura, RS232
etc.);
- Multipunct; la liniile de interfa se pot lega mai multe EP (module I/O; ca la SCSI)

Dac o legtur punct cu punct se numete indiscutabil interfa, o legtur multipunct se poate numi att
interfa ct i magistral. Interfaa serial multipunct USB (Universal Serial Bus) conine n numele ei
denumirea de magistral.

Modul de lucru prin interogare (polling)


Se bazeaz pe testarea de ctre microprocesor a unui bit de stare asociat dispozitivului periferic.
Microprocesorul nu va iniializa transferul cu perifericul dect n momentul n care bitul de stare
semnific faptul c perifericul este pregtit pentru transfer (nu lucreaz la un transfer iniiat anterior). S
considerm de exemplu interfaa cu o tastatur. Aceast interfa trebuie s conin minimum 2 registre.

RBuff va memora un octet care reprezint codul ASCII (Unicode) al tastei apsate de ctre utilizator.

63
Bitul Ready din registrul de stare este un bit de tip Read Only cu urmtoarea semnificaie: dac registrul
RBuff se ncarc cu un octet (utilizatorul a apsat o tast) atunci Ready se pune automat pe 1 artnd
microprocesorului c poate s preia codul din RBuff. Bitul Ready se va reseta automat odat cu preluarea
codului din Rbuff de ctre microprocesor.
Un program - absolut principial - de gestiune a tastaturii s-ar scrie ca mai jos:

Dezavantajul acestei metode const n faptul c microprocesorul ateapt un timp T, neacceptabil de mare
la nivelul vitezei sale, pentru a inspecta dac perifericul este sau nu este pregtit. Considernd c
utilizatorul apas o tast la interval de 500 ms i c o instruciune a microprocesorului dureaz cca. 250 ns
(vezi justificarea anterioar) => c pierde 500 ms / 250 ns = 2 milioane instruciuni n bucla de
ateptare n loc s execute instruciuni utile. Acest dezavantaj este eliminat de metoda urmtoare de
comunicare procesor-interfa.

Modul de lucru prin ntreruperi hardware


Se bazeaz pe generarea unui semnal de ntrerupere INT de la interfa (port) spre microprocesor ori de
cte ori acesta dorete un serviciu de la microprocesor. Ca urmare a recepionrii semnalului INT
microprocesorul va abandona programul principal (PP) urmnd s intre intr-o aa numit rutin tratare a
ntreruperii n care va satisface cererea interfeei. La finele rutinei de tratare a ntreruperii printr-o
instruciune de tip RETURN, microprocesorul va reveni n PP, n general dar nu ntotdeauna, pe
instruciunea imediat urmtoare ultimei instruciuni din PP executate. In cazul exemplului cu tastatura
anterior considerat, interfaa va genera ntreruperea INT ori de cte ori utilizatorul a apsat o tast, adic
registrul RBuff este plin, deci conine codul (ASCII, Unicode etc.) al caracterului tastat.

64
Aadar RTI dup ce execut serviciul necesar perifericului (n cazul acesta preluare i depozitare caracter
n memorie) revine n PP, unde pn cnd perifericul cere un nou serviciu (de ex. se apas din nou o
tast), microprocesorul va executa instruciuni utile din PP (sistem de operare, program utilizator etc.) si
deci nu mai este necesar s mai atepte inutil ca n cazul 1.
Totalitatea aciunilor executate de ctre microprocesor din momentul apariiei semnalului de ntrerupere
INT pn n momentul procesrii primei instruciuni din RTI formeaz aa numitul protocol hardware
de acceptare a ntreruperii (sgeile 1 i 3 din figur). n principiu acest protocol se desfoar n
urmtoarele etape succesive:
1. Odat sesizat ntreruperea INT de ctre microprocesor acesta i va termina instruciunea n curs de
execuie dup care, dac anumite condiii sunt ndeplinite (nu exist activat o cerere de ntrerupere sau
de bus mai prioritare etc.), va trece la pasul 2. n general, microprocesoarele examineaz activarea
ntreruperilor la finele ultimului ciclu aferentinstruciunii n curs de execuie.
2. Recunoaterea ntreruperii: microprocesorul va iniializa aa numitul ciclu de achitare a ntreruperii.
Pe parcursul acestui ciclu extern va genera un semnal de rspuns (achitare) a ntreruperii INTACK
(interrupt acknowledge) spre toate interfeele de intrare - ieire. Ca urmare a recepionrii INTACK
interfaa care a ntrerupt va furniza microprocesorului prin intermediul bus-ului de date un aa numit octet
vector de ntrerupere (VI). Acest VI este diferit pentru fiecare periferic n parte, individualizndu-l deci
ntr-un mod unic. Pe baza acestui VI i conform unui algoritm care difer de la microprocesor la
microprocesor, acesta va determina adresa de nceput a RTI, adres ce va urma s o introduc n PC.
Firete, la VI diferii vor corespunde adrese de nceput diferite.
3. Microprocesorul va salva ntr-o zon special de program numit memorie stiv, PC-ul aferent
instruciunii imediat urmtoare instruciunii executate de ctre microprocesor din PP (PCrev), pentru a
putea ti la finele RTI unde s revin exact n PP.
Memoria stiv este o zon de memorie RAM caracterizat la un moment dat de aa numitul vrf al stivei
adic de ultima locaie ocupat din stiv. Acest vrf al stivei este pointat (adresat) permanent de
coninutul unui registru special dedicat, existent n orice microprocesor modern, numit SP (stack pointer).
n memoria stiv sunt posibile 2 tipuri de operaii:

65
Stiva este o memorie de tip LIFO (last n first out) si care spre deosebire de PC n procesarea secvenial,
"crete" (PUSH) de obicei nspre adrese descresctoare evitndu-se astfel suprapunerea zonelor de
program (cod) cu cele de stiva.
4. Intrarea n RTI se face simplu prin introducerea adresei de nceput a RTI calculat n pasul 2, n
registrul PC. Normal n continuare microprocesorul va aduce i executa prima instruciune din RTI
protocolul de tratare fiind n acest moment ncheiat i controlul fiind preluat de RTI a perifericului care a
fost ntrerupt.
Dup cum s-a observat protocolul de tratare salveaz n stiva doar PC-ul de revenire (la anumite
microprocesoare se mai salveaz registrul de stri - flags). Acest fapt se poate dovedi insuficient avnd n
vedere c n cadrul RTI pot fi alterai anumii regitri interni ai microprocesorului.
Aceast alterare a regitrilor poate fi chiar catastrofal la revenirea n PP. Din acest motiv cade n sarcina
celui care scrie RTI s salveze (instruciuni PUSH) respectiv s returneze corespunztor (instruciuni
POP) aceti regitri.

5.2. Magistrala procesorului, magistrala de date, magistrala de adese,


magistrala I/O

Magistrala se definete ca un mediu de comunicaie ntre componentele unui calculator.


O magistral se compune dintr-un set de semnale prin care se transmit date i comenzi. Transferul de date
pe magistral se face pe baza unui set de reguli. Aceste reguli stabilesc cine, cnd si cum comunic pe
magistral; stabilesc secvena de apariie a semnalelor, intercondiionrile existente ntre semnale i
relaiile de timp ntre semnale.
Clasificarea magistralelor s-a fcut n capitolul 4.1.
Schema bloc a unui microsistem (Microprocesor, amplificatoare de magistrale, magistrale de adrese, date
comenzi i stri, module memorie ROM i RAM, porturi I/O lente, porturi I/O rapide interfee DMA,
program incarcator - POST, programe BIOS) este prezentat mai jos:

66
Liniile de comunicaie ntre cele patru module sunt grupate n magistrale. Informatia vehiculata
date, adrese si semnale de comanda, astfel nct n structura calculatorului exista trei magistrale,
respectiv:
- magistrala de date;
- magistrala de adrese;
- magistrala de comenzi.

5.3. Exemple si comparatii.

Magistrale n calculatoare personale

Clasificarea mgistralelor dintr-un calculator personal este prezentat mai jos.

67
- Magistrale I/E , south bridge si controlerul Super I/O

68
6. Compilatoare si asambloare
Software pentru generarea de programe n limbaj main sunt de regul compilatoarele i asambloarele.
Un compilator este un program care transform programul scris ntrun limbaj de programare de nivel
nalt n limbaj main. Compilatoarele pentru un limbaj de programare vor avea partea din fa (cea
care recunoate construciile din limbajul de programare de nivel nalt) identic, iar partea din spate
(cea care creeaz codul main) diferit pentru fiecare tip de sistem de calcul. Se poate ca acelai program
compilat cu compilatoare diferite pentru acelai sistem de calcul s produc cod diferit.
n procesul de compilare al unui program, programul surs, scris ntrun limbaj de programare de nivel
nalt, este transformat n cod n limbaj de asamblare iar mai apoi codul n limbaj de asamblare este
transformat n cod main de ctre asamblor. Aceste traduceri au loc n faza de compilare respectiv de
asamblare. Programul obiect care rezult poate fi linkeditat cu alte programe obiect n faza de
linkeditare.
Programul linkeditat, stocat de regul pe disc, este ncrcat n memoria principal n faza de ncrcare a
programului i este executat de ctre procesor n faza de execuie (runtime).

Pentru activitatea de programare sunt utile generatoarele de programe. Acestea transform programul
surs ntr-un nou format. Din aceast categorie fac parte: macrogeneratorul, asamblorul (relocabil,
absolut), compilatoarele, interpretoarele, editorul de legturi, bibliotecarul, editoarele de texte etc.

69
Macrogeneratorul analizeaz un text surs coninnd descrieri ntr-un limbaj special i prezint la ieire
un fiier cu text scris n limbaj de asamblare, care poate fi prelucrat ulterior de asamblorul relocabil sau
cel absolut. De exemplu, folosind TASM (al firmei Borland) se pot asambla programe n format (cod)
Intel. Pentru a putea avea portabilitate ntre sistemele de tip Microsoft i Linux, pentru procesoare Intel i
compatibile se poate utiliza NASM. Pentru testarea programelor scrise n limbajul MMIXAL, pentru
procesorul MMIX, se poate utiliza un simulator MMIX.
Programul surs, scris de utilizator n limbaj de (macro)asamblare, este constituit dintr-un numr de linii.
Fiecare linie conine o instruciune a limbajului de asamblare sau o directiv de macrogenerare. Rolul
macrogeneratorului este de a expanda macroinstruciunile existente i a rezolva, pe ct posibil, blocurile
condiionale.
Macrogeneratorul recunoate i analizeaz: directivele de control numeric (tipul bazei de numeraie),
directivele de terminare (.END), directivele de asamblare condiional (.IF, .IFF, .IFT etc.), directivele
de definire a macroinstruciunilor (.MACRO, .ENDM), directivele de control (mesaje de eroare),
directivele de generare i substituire, directivele de apelare a macrodefiniiilor dintr-o bibliotec etc.
Asamblorul relocabil transform modulele surs scrise n limbaj de asamblare ntr-un modul obiect
relocabil, o tabel de simboluri i un listing de asamblare. Asamblorul relocabil accept la intrare unul sau
mai multe fiiere surs n limbaj de asamblare obinute folosind macrogeneratorul sau scrise de utilizator.
Ieirile asamblorului constau dintr-un fiier obiect (.obj, .o, .mmo etc.), un fiier de listare (.lst) i o
tabel de simboluri (.map).
Asamblorul absolut transform modulele scrise n limbaj de asamblare (ieire a macrogeneratorului sau
scrise de utilizatori) ntr-un program executabil (.tsk, .cmd, .out, etc.)
Compilatoarele efectueaz translatarea programului surs n program obiect relocabil. Pentru ca un astfel
de modul s devin program executabil este necesar editarea legturilor. Funcia principal a editorului
de legturi este de a transforma i nlnui modulele obiect relocabile rezultate n procesul de asamblare
i/sau compilare pentru a obine un program executabil acceptabil de programul ncrctor al sistemului
de operare. n faza de editare a legturilor pot fi incorporate i module obiect situate n biblioteci
relocabile.
Un compilator este structurat n patru componente principale:
- analizor lexical,
- analizor sintactic i semantic,
- generator de cod i
- optimizator.

Toate aceste componente gestioneaz un tabel de simboluri.


Analizorul lexical realizeaz o prim translatare a textului programului surs ntr-un ir de entiti
lexicale ce constituie reprezentri interne ale unor categorii sintactice precum: cuvinte cheie,
identificatori, constante, delimitatori, operatori etc. Astfel, n fazele urmtoare se poate lucra cu simboluri
de lungime fix i cu un numr mai mic de categorii sintactice. Analizorul lexical va completa tabelul de
simboluri.
Analizorul sintactic i semantic verific corectitudinea sintactic a instruciunilor i colecteaz atributele
semantice ale categoriilor sintactice din program. Ieirea analizorului sintactic i semantic o constituie o
reprezentare codificat a structurii sintactice i un set de tabele ce conin atributele semantice ale
diferitelor categorii sintactice (simboluri, constante etc.)
Generatorul de cod va traduce ieirea analizorului sintactic i semantic n format binar relocabil sau n
limbaj de asamblare.
Optimizatorul are rolul de a prelucra ieirea generatorului de cod cu scopul de a minimiza memoria
necesar la execuie i a elimina redundanele din corpul programului. Unele compilatoare efectueaz
anumite optimizri nainte de generarea codului.

70
O funcie important a compilatorului const n detectarea erorilor din programul surs i corectarea sau
acoperirea lor. Spre deosebire de compilatoare, interpretoarele efecueaz i executarea programului odat
cu traducerea programului surs, furniznd la ieire rezultatele programului.
Mai precis, diferena fa de un compilator este aceea c interpretorul nu produce un program obiect ce
urmeaz a fi executat dup interpreatare, ci chiar execut acest program.
Din punct de vedere structural, un interpretor se aseamn cu un compilator, dar forma intermediar
obinut nu e folosit la generarea de cod, ci pentru a uura decodificarea instruciunii surs n vederea
executrii ei. Este cazul interpretorului sistemului AUTOCAD care analizeaz linia de comand i, dac
comanda este corect, realizeaz funcia solicitat.
Un editor de texte este un program on-line (rspunsul la comenzi este imediat), ce accept comenzi
introduse de la terminal pentru a scrie i/sau terge caractere, linii sau grupuri de linii din programul surs
sau din orice fiier text.
Editoarele de texte pot lucra n mod linie i/sau mod ecran. Ele pun la dispoziie comenzi privind
deplasarea cursorului n text (pe linie, n cadrul unui bloc sau n cadrul ntregului fiier), manipularea
blocurilor de text (marcare, deplasare, copiere, tergere), comenzi de formatare a ieirii etc. Exemplificm
prin Edit (Ms-DOS, Windows), Notepad (Windows), vi sau emacs (UNIX) etc.

Cu toate c majoritatea programelor se scriu n limbaje de nivel nalt, programatorii pot scrie programe
sau secvene din unele programe, care trebuie s ruleze foarte repede, n asamblare. n plus, sar putea s
nu existe compilatoare pentru anumite procesoare speciale sau compilatoarele s nu poat fi folosite
pentru a efectua anumite operaii speciale. n aceste cazuri, programatorul este nevoit s recurg din nou
la limbajul de asamblare.
Limbajele de programare de nivel nalt ne permit s ignorm arhitectura sistemului de calcul int. Pe de
alt parte, la nivel limbaj main, arhitectura este cel mai important aspect de care trebuie inut
cont.

6.1. Limbaje de nivel nalt, limbaje de nivel sczut

Limbajele de programare de nivel nalt sunt independente de maina (microarhitectura hardware) pe care
se proceseaz. Nivelul hardware este abstractizat din punct de vedere al limbajului (operaiile nu depind
de arhitectura setului de instruciuni ISA) [Patt03, Zah04]. C este primul limbaj de nivel mediu
(considerat de nivel nalt de ctre ali cercettori) destinat crerii de sisteme de operare (anterior acestuia
sistemele de operare erau scrise n limbaje de asamblare). De asemenea, n C este permis manipularea
structurilor hardware ale calculatoarelor (regitrii, memorie, porturi). C este un limbaj de programare
standardizat, compilat, implementat pe marea majoritate a platformelor de calcul existente azi. Este
apreciat pentru eficiena codului obiect pe care l poate genera, i pentru portabilitatea sa. A fost dezvoltat
la nceputul anilor 1970 de Brian Kernighan i Dennis Ritchie, care aveau nevoie de un limbaj simplu i
portabil pentru scrierea nucleului sistemului de operare UNIX. Sintaxa limbajului C a stat la baza multor
limbaje create ulterior i nc populare azi: C++, Java, JavaScript, C#. C este un limbaj case sensitive.
Instruciunile din C care rezolv o problem sunt mult mai puine dect cele ale limbajului asamblare
aferent calculatorului LC-3 care rezolv aceeai problem [Patt03]. De asemenea, LC-3 nu asigur
instruciuni de nmulire i mprire. Limbajele de nivel nalt sunt mai expresive dect cele de nivel
mediu sau jos (asamblare). Sunt folosite simboluri pentru variabile i expresii simple pentru structuri
de control (if-else, switch-case) sau repetitive (for, while, do-while). Permite compilarea
condiionat. Dei limbajul C ofer o libertate foarte mare n scrierea codului, acceptnd multe forme
de scriere care n alte limbaje nu sunt permise, acest lucru poate fi i un dezavantaj, n special pentru
programatorii fr experien.

71
6.1.1. Compilare vs. Interpretare
Programele de nivel nalt (High Level Languages HLL) pot fi translatate n instruciuni main (ISA
corespunztoare arhitecturii hardware pe care se va procesa) prin dou metode:
- Interpretare: Codul surs HLL este interpretat de o main virtual (cele mai cunoscute sunt
mainile virtuale Java JVM) care translateaz seciuni din codul surs n limbaj main i l
execut direct pe arhitectura gazd, trecnd apoi la urmtoarea seciune de cod surs. Dintre
avantajele interpretrii fa de metodele tradiionale de compilare s-ar meniona simplitatea
implementrii hardware dar i faptul c nu necesit o zon mare de memorie pentru stocarea
programului compilat. Principalul dezavantaj l reprezint viteza sczut de execuie a aplicaiei,
dar i necesitatea existenei n momentul interpretrii att a codului surs HLL ct i a mainii
virtuale care realizeaz interpretarea.
- Compilare: Compilarea direct translateaz codul surs (poate fi Java, C, C++, Fortran, Pascal)
n instruciuni main, direct executabile pe un procesor int, dar nu le execut ca n cazul
interpretoarelor. Orice modificare a codului surs necesit recompilare. Procesul este realizat
static i poate ngloba tehnici de optimizare de tip analiza dependenelor de date dintre
instruciuni, analiz interprocedural. Se caracterizeaz printr-o lips de portabilitate.

6.2. Descrierea componentelor unui compilator


Compilatorul translateaz un program surs scris ntr-un limbaj de nivel nalt (C, Pascal) n acelai
program - obiect, de regul scris n limbaj de asamblare. n literatura de specialitate, este denumit faz a
unui compilator o succesiune de operaiuni prin care un program de la intrare sufer anumite modificri.
Prin trecere aparinnd unui compilator se nelege o citire a programului dintr-un fiier, transformarea lui
conform unor faze i scrierea rezultatului n alt fiier(de ieire).

72
Figura anterioar ilustreaz cele dou faze majore ale procesului de compilare propriu-zis:
- analiza (de tip front end) - n care se identific prile constituente fundamentale ale
programului (variabile, expresii, declaraii, definiii, apeluri de funcii) i se construiete o
reprezentare intern a programului original, numit cod intermediar (analiza lexical
produce un -> ir de atomi lexicali -> analiza sintactic genereaz -> arborele sintactic ->
analiz semantic construiete o reprezentare a programului surs n-> cod intermediar). Este
dependent de limbajul de nivel nalt i nu de maina pe care se va procesa.
- sinteza (de tip back end) - genereaz cod main eventual optimizat. Se disting dou etape
o optimizare cod intermediar (scheduling) pentru o anumit main;
o generare de cod main (generare cod ntr-o gam variat de formate: limbaj main
absolut, limbaj main relocabil sau limbaj de asamblare urmat de alocare de
resurse). Aceast faz este puternic dependent de maina pe care se va executa
codul obiect generat.

naintea primei faze din cadrul procesului de compilare trebuie realizat de cele mai multe ori o
preprocesare. Preprocesorul translateaz un program al crui limbaj surs este de nivel nalt (C, Pascal)
ntr-un program destinaie (obiect) scris tot ntr-un limbaj de nivel nalt C. Practic are loc interpretarea
directivelor de preprocesare (ncep cu # - include, define, if !defined()endif). De exemplu,
preprocesorul trebuie s introduc coninutul fiierului <stdio.h> n codul surs al aplicaiei create acolo
unde apare respectiva directiv de preprocesare, sau, s nlocuiasc anumite valori constante declarate ca
iruri de caractere cu valorile numerice aferente, dac acest lucru se specific printr-o directiv de tip
#define n cadrul programului.

73
Analiza lexical reprezint prima faz a procesului de compilare, i care este responsabil de
transformarea programului surs vzut ca o succesiune de caractere (text) ntr-o succesiune de atomi
lexicali i de atribute ale lor. Conform definiiei din , un atom lexical este o entitate indivizibil a unui
program - identificatori de variabile/funcii, constante de diverse tipuri, operatori, cuvinte cheie (if, else,
switch/case), delimitatori. Atributele atomilor lexicali sunt: clas, tip, lungime, loc n tabela de
simboluri, dac a fost definit sau nu, etc. Clasa atributului se refer la faptul c este cuvnt-cheie,
identificator de variabil, constant de tip ntreg sau real etc.
Toate fazele unui compilator dispun de rutine de tratare a erorilor i lucreaz n comun cu una sau mai
multe tabele de simboluri n care se pstreaz informaii despre cuvintele cheie ale limbajului,
identificatorii de variabile (tip, lungime, adres stocare n memorie etc.), etichete de instruciuni,
identificatori de proceduri i funcii i alte informaii utile despre programul n curs de compilare. Tabela
de simboluri este creat n faza de analiz a programului surs i folosit n scopul validrii numelor
simbolice facilitnd generarea de cod . Tabela de simboluri realizeaz o asociere simbolic ntre numele
(identificatorul) unei variabile i caracteristicile acesteia (tip, domeniu de vizibilitate, deplasament fa de
nceputul zonei de date statice sau dinamice, stiv). Compilatorul folosete tabela de simboluri pentru a
urmri domeniul de utilizare i valabilitate a unui nume i de a aduga informaii despre un nume. Tabela
de simboluri este cercetat de fiecare dat cnd un nume este ntlnit n textul surs. Mecanismul asociat
tabelei de simboluri trebuie s permit adugarea a noi intrri i gsirea informaiilor existente n mod
eficient. Tabela de simboluri este similar celei generate de asamblor ns cuprinde mai multe informaii
dect aceasta. n asamblare, toi identificatorii (variabilele) erau etichete (labels) i informaiile
reprezentate de acestea erau adrese. Tabela de simboluri conine informaii legate de toate variabilele din
program.
Generatorul de cod constituie faza final a unui compilator. Primete la intrare reprezentarea
intermediar a programului surs mpreun cu informaia din tabela de simboluri - folosit la
determinarea run-time a adresei obiectelor de date, desemnate de nume n reprezentarea intermediar, i
produce la ieire un program obiect echivalent. Codul de ieire trebuie s fie corect i de nalt calitate,
aceasta nsemnnd c el trebuie s foloseasc eficient resursele mainii pentru a putea fi procesat ct mai
rapid.
Ieirile generatorului de cod se gsesc ntr-o gam variat de forme: limbaj de asamblare, limbaj
main relocabil sau limbaj main absolut. Producnd un program ntr-un limbaj de asamblare,
caracterizat de o mai mare lizibilitate, generarea codului se realizeaz mult mai uor. Pot fi generate
instruciuni simbolice precum i utilizate facilitile de macro-asamblare ajuttoare la generarea de
cod. Producnd un program n limbaj main absolut, exist avantajul c programul poate fi plasat
ntr-o locaie fix a memoriei i poate fi imediat executat. Producnd un program n limbaj main
relocabil, acesta permite subprogramelor s fie compilate separat (similar cu fiierul Makefile din
cadrul setului de instrumente SimpleScalar 3.0 ). O mulime de module-obiect relocate pot fi legate
(linked) mpreun i apoi ncrcate pentru execuie de ctre un loader. Ctigul de flexibilitate care
d posibilitatea compilrii separate a subrutinelor i apelarea altor programe compilate anterior dintr-
un modul obiect este tributar costurilor suplimentare pentru legare i ncrcare.

6.3. Programarea n limbaj de asamblare

Limbajul de asamblare permite accesul la unele dintre resursele fizice ale masinii n condiiile utilizarii
unor mnemonice mai usor de manevrat dect codurile numerice asociate instructiunilor limbajului masina
i are nivelul 4 nivelul limbajului de asamblare:

74
Exist cte un astfel de limbaj specific fiecrei familii de procesoare.

6.3.1. Familia de procesoare Intel x86

Familia de procesoare Intel x86 cuprinde seria de procesoare 8086, 8088, 80286, '386, '486, Pentium,
Pentium Pro, i variantele ultime Pentium II,III i IV. Toate aceste procesoare mprtesc o arhitectur
comun i utilizeaz acelai set de instruciuni de asamblare. mbuntirile arhitecturale aduse n
decursul timpului la noile versiuni de procesoare s-au fcut n aa fel nct s se menin compatibilitatea
cu imaginea iniial a unui procesor I8086. Chiar dac n interior un procesor din ultima generaie difer
semnificativ de structura primului procesor din familie, acest lucru este vizibil n mic msur pentru un
programator. De aceea nu se mai vorbete de o anumit arhitectur particular de procesor ci de o
arhitectur corespunztoare unui set de instruciuni de asamblare. Astfel pentru seria de procesoare Intel
pe 16 i 32 de bii se opereaz cu imaginea arhitectural denumit ISA x86 (Instruction Set Architecture).
n acelai mod pentru procesoarele pe 64 de bii s-a introdus arhitectura ISA 64. Aceast arhitectura difer
semnificativ de cea a procesoarelor pe 16 i 32 de bii, iar setul instruciunilor de asamblare este diferit.
Astfel un program scris pentru arhitectura ISA 64. nu mai este compatibil la nivel de coduri de
instruciune cu arhitectura ISA x86. Este interesant de observat c Intel a propus aceast nou arhitectur
chiar nainte de lansarea pe pia a unui procesor pe 64 de bii.
n ceea ce privete arhitectura ISA x86, aceasta a suferit anumite modificri impuse de introducerea, n
versiunile mai noi de procesoare, a unor elemente arhitecturale i funcionale noi. ns aceste elemente

75
noi nu modific componentele existente deja, iar programele scrise pentru primele versiuni de procesoare
ruleaz i pe versiunile noi fr nici o modificare.
Cunoaterea arhitecturii ISA x86 este strict necesar pentru a putea scrie programe n limbaj de
asamblare.
Componentele
n continuare se prezint acele componente ale unui procesor care sunt vizibile i accesibile pentru un
programator n limbaj de asamblare. Astfel, un procesor dispune de un set de registre interne folosite
pentru pstrarea temporar a datelor, a adreselor sau a instruciunilor. Exist registre generale folosite n
majoritatea operaiilor aritmetico-logice i registre speciale, care au o destinaie special.
La arhitectura ISA x86 pe 16 bii exist 8 registre generale pe 16 bii, registre denumite n felul urmtor:
AX, BX, CX, DX, SI, DI, BP, SP. Dintre acestea primele patru se folosesc cu precdere n operaii
aritmetico-logice pentru pstrarea operanzilor, iar urmtoarele patru mai ales pentru pstrarea i calculul
adreselor de operanzi. Primele patru registre se pot adresa i pe jumtate, adic la nivel de octet. Astfel
fiecare registru are o parte superioar "HIGH" (biii D15-D8) i o parte inferioar "LOW" (biii D7-D0).
Denumirea lor este AH i AL pentru registrul AX, BH i BL pentru registrul BX i aa mai departe.
La procesoarele pe 32 de bii (ncepnd de la '386) aceste registre s-au extins la 32 de bii. Astfel
registrele pot fi adresate pe 32 de bii (cu denumirile EAX,EBX, ECX, ... ESP) sau n mod uzual pe 16
sau 8 bii. Partea superioara a unui registru pe 32 de bii (D31-D16) nu se poate adresa individual.
n principiu registrele generale respect principiul de ortogonalitate, adic pentru majoritatea operaiilor
oricare registru este utilizabil. La unele procesoare (ex: procesoarele Motorola) acest principiu este
respectat strict. n cazul procesoarelor Intel anumite operaii speciale impun utilizarea anumitor registre,
ceea ce nseamn c exist o oarecare specializare ntre registre. Aceast specializare decurge de multe ori
i din denumirea registrelor. Astfel:
- registrul AX (EAX n varianta pe 32 de bii) se folosete ca registru "acumulator" n
majoritatea operaiilor aritmetice i logice, adic pstreaz unul dintre operanzi i apoi
rezultatul operaiei; la operaiile de nmulire i mprire n mod obligatoriu primul operand i
rezultatul se pstreaz n acest registru
- registrul BX (EBX) se folosete pentru n operaii aritmetico-logice sau pentru calculul
adresei operandului la "adresarea bazat"
- registrul CX (ECX) se folosete pentru operaii aritmetico-logice sau n mod implicit, la
anumite instruciuni (ex: instruciuni de buclare), pe post de contor
- registrul DX (EDX) se folosete pentru operaii aritmetico-logice sau pentru pstrarea adresei
porturilor la instruciunile de intrare/ieire; de asemenea la operaiile de nmulire i mprire
se folosete ca extensie a registrului acumulator
- registrele SI i DI (ESI, EDI) denumite i registre index, se folosesc cu precdere pentru
calculul adresei operanzilor la "adresarea indexat"; SI adreseaz elementele irului surs
(source index), iar DI elementele irului destinaie (destination index)
- registrul BP (EBP) se folosete cu precdere pentru calculul adresei operanzilor la "adresarea
bazat", alturi de registrul BX
- registrul SP (ESP) se folosete aproape n exclusivitate pentru adresarea stivei (stack pointer);
coninutul registrului se incrementeaz i se decrementeaz automat la orice operaie cu stiva
n afara registrelor generale un procesor mai are i registre speciale sau de control. La procesoarele Intel
numai o parte din aceste registre sunt vizibile i accesibile pentru programator. Aceste registre
controleaz regimul de lucru al procesorului, sau permit efectuarea unor operaii speciale de manipulare a
spaiului de memorie.
Arhitectura ISA x86 opereaz cu urmtoarele registre speciale:
- registrul PC "program counter" pstreaz adresa instruciunii care urmeaz; nu este
adresabil direct (prin nume) dar coninutul su se poate modifica prin execuia instruciunilor de
salt
- registrul PSW "program status word" pstreaz indicatorii de stare ai procesorului;

76
o o parte din indicatori caracterizeaz rezultatul obinut n urma unei anumite
instruciuni:
ZF rezultat 0,
SF semnul rezultatului
OF "overflow" indic o depire de capacitate la ultima operaie aritmetic
PF indicator de paritate (arat paritatea rezultatului)
CF indicator de transport ("carry"), arat dac s-a generat un transport
AC indicator de transport auxiliar, arat dac dup primii 4 bii s-a generat
un transport
o o parte din indicatori controleaz modul de lucru al procesorului:
IF indicator de ntrerupere (interrupt"), daca este setat (1 logic) atunci se
blocheaz toate ntreruperile mascabile, n caz contrar (0 logic) se valideaz
DF indicatorul de direcie, arat direcia de parcurgere a irurilor de caractere
la instruciunile pe iruri (n ordine ascendent sau descendent a adreselor)
- registrele de segment se utilizeaz pentru calculul adresei operanzilor i a instruciunilor; cu
ajutorul lor memoria este divizat n segmente; exist 4 registre segment n versiunea iniial
ISA x86 i 6 registre segment n versiunea pe 32 de bii:
o registrul CS registrul segment de cod, folosit pentru adresarea instruciunilor (a
codurilor); acest registru pstreaz adresa de nceput (descriptorul n varianta extins)
pentru segmentul de cod (segmentul unde se afl programul)
o registrul DS registrul segment de date, folosit pentru adresarea operanzilor din
memorie; acest registru pstreaz adresa de nceput (sau descriptorul) pentru segmentul
de date
o registrul SS registrul segment de stiv, folosit pentru adresarea memoriei stiv;
pstreaz adresa de nceput (descriptorul) segmentului unde se afl organizata stiva
o registrul ES registrul extra-segmentului de date, folosit pentru pstrarea adresei celui
de al doilea segment de date
o registrele FS i GS registre segment introduse ncepnd de la versiunea '386 i care
se folosesc pentru adresarea operanzilor
Versiunile mai noi de procesoare conin i alte registre speciale, dar acestea au o importan mai mic
pentru un programator obinuit. Ele vor fi introduse pe parcurs n momentul n care acest lucru va fi
necesar.
Un limbaj de asamblare conine instruciuni corespunztoare unor operaii simple care sunt direct
interpretate i executate de procesor. Fiecrei instruciuni din limbajul de asamblare i corespunde n mod
strict un singur cod executabil. n contrast, unei instruciuni dintr-un limbaj de nivel nalt (ex: C, Pascal,
etc.) i corespunde o secven de coduri (instruciuni n cod main). Un anumit limbaj de asamblare este
specific pentru un anumit procesor sau eventual pentru o familie de procesoare. Instruciunile sunt n
direct corelaie cu structura intern a procesorului. Un programator n limbaj de asamblare trebuie s
cunoasc aceast structur precum i tipurile de operaii permise de structura respectiv.
Un program n asamblare scris pentru o anumit arhitectur de procesor nu este compatibil cu un alt tip de
procesor. Pentru implementarea unei aplicaii pe un alt procesor programul trebuie rescris. n schimb
programele scrise n limbaj de asamblare sunt n general mai eficiente att n ceea ce privete timpul de
execuie ct i spaiul de memorie ocupat de program. De asemenea, programarea n limbaj de asamblare
d o mai mare flexibilitate i libertate n utilizarea resurselor unui calculator. Cu toate acestea astzi
utilizarea limbajului de asamblare este mai puin frecvent deoarece eficiena procesului de programare
este mai sczut, exist puine structuri de program i de date care s uureze munca programatorului, iar
programatorul trebuie s cunoasc structura procesorului pentru care scrie aplicaia. n plus programele nu
sunt portabile, adic nu ruleaz i pe alte procesoare.

77
6.4. Directive si instruciuni ASM.
Un program scris n limbaj de asamblare conine instruciuni i directive. Instruciunile sunt traduse n
coduri executate de procesor; ele se regsesc n programul executabil generat n urma compilrii i a
editrii de legturi. Directivele sunt construcii de limbaj ajuttoare care se utilizeaz n diferite scopuri
(ex: declararea variabilelor, demarcarea segmentelor i a procedurilor, etc.) i au rol n special n fazele de
compilare i editare de legturi. O directiv nu se traduce printr-un cod executabil i n consecin NU se
execut de ctre procesor.

6.4.1. Sintaxa unei instruciuni n limbaj de asamblare


O instruciune ocup o linie de program i se compune din mai multe cmpuri, dup cum urmeaz
(parantezele drepte indic faptul c un anumit cmp poate s lipseasc):

[<eticheta>:] [<mnemonica> [<parametru_1> [,<parametru_2>]] [;<comentariu>]

- <eticheta> - este un nume simbolic (identificator) dat unei locaii de memorie care conine
instruciunea care urmeaz; scopul unei etichete este de a indica locul n care trebuie s se
fac un salt n urma executrii unei instruciuni de salt; eticheta poate fi o combinaie de
litere, cifre i anumite semne speciale (ex: _), cu restricia ca prima cifr s fie o liter
- <mnemonica> - este o combinaie de litere care simbolizeaz o anumit instruciune (ex:
add pentru adunare, mov pentru transfer, etc.); denumirile de instruciuni sunt cuvinte
rezervate i nu pot fi utilizate n alte scopuri
- <parametru_1> - este primul operand al unei instruciuni i n acelai timp i destinaia
rezultatului; primul parametru poate fi un registru, o adres, sau o expresie care genereaz
o adres de operand; adresa operandului se poate exprima i printr-un nume simbolic
(numele dat unei variabile)
- <parametru_2> - este al doilea operand al unei instruciuni; acesta poate fi oricare din
variantele prezentate la primul operand i n plus poate fi i o constant
- <comentariu> - este un text explicativ care arat inteniile programatorului i efectul
scontat n urma execuiei instruciunii; avnd n vedere c programele scrise n limbaj de
asamblare sunt mai greu de interpretat se impune aproape n mod obligatoriu utilizarea de
comentarii; textul comentariului este ignorat de compilator; comentariul se considera pn
la sfritul liniei curente
ntr-o linie de program nu toate cmpurile sunt obligatorii: poate s lipseasc eticheta, parametrii,
comentariul sau chiar instruciunea. Unele instruciuni nu necesit nici un parametru, altele au nevoie de
unul sau doi parametri. n principiu primul parametru este destinaia, iar al doilea este sursa.
Constantele numerice care apar n program se pot exprima n zecimal (modul implicit), n
hexazecimal (constante terminate cu litera 'h') sau n binar (constante terminate cu litera 'b'). Constantele
alfanumerice (coduri ASCII) se exprim prin litere ntre apostrof sau text ntre ghilimele.

Clase de instruciuni
n aceast prezentare nu se va face o prezentare exhaustiva a tuturor instruciunilor cu toate
detaliile lor de execuie. Se vor prezenta acele instruciuni care se utilizeaz mai des i au importan din
punct de vedere al structurii i al posibilitilor procesorului. Pentru alte detalii se pot consulta
documentaii complecte referitoare la setul de instruciuni ISA x86 (ex: cursul AoA The Art of
Assembly Language, accesibil pe Internet).

6.4.2. Instruciuni de transfer


Instruciunile de transfer realizeaz transferul de date ntre registre, ntre un registru i o locaie de
memorie sau o constant se ncarc ntr-un registru sau locaie de memorie. Transferurile de tip memorie-

78
memorie nu sunt permise (cu excepia instruciunilor pe iruri). La fel nu sunt permise transferurile
directe ntre dou registre segment. Ambii parametrii ai unui transfer trebuie s aib aceeai lungime
(numr de bii).

Instruciunea MOV
Este cea mai utilizat instruciune de transfer. Sintaxa ei este:

[<eticheta>:] MOV <parametru_1>, <parametru_2> [;<comentariu>]

unde:
<parametru_1> = <registru>| <reg_segment>|<adresa_offset>|<nume_variabil>|<expresie>
<parametru_2> = <parametru_1>|<constant>
<registru> = EAX|EBX|.....ESP|AX|BX|....SP|AH|AL|....DL
<expresie> = [[<registru_index>][+<registru_baz>][+<deplasament>]]
; aici parantezele drepte marcate cu bold sunt necesare
<registru_index> = SI| DI |ESI | EDI
<registru_baz> = BX|BP |EBX| EBP
<deplasament> = <constant>

Exemple:
mov ax,bx et1: mov ah, [si+100h]
mov cl, 12h mov al, 'A'
mov dx, var16 mov si, 1234h
mov var32,eax sf: mov [si+bx+30h], dx
mov ds, ax mov bx, cs

Exemple de erori de sintax:


mov ax, cl ; operanzi inegali ca lungime
mov var1, var2 ; ambii operanzi sunt locaii de memorie
mov al, 1234h ; dimensiunea constantei este mai mare dect cea a registrului
mov ds, es ; dou registre segment

Instruciunea LEA, LDS i LES


Aceste instruciuni permit ncrcarea ntr-un registru a unei adrese de variabile. Prima
instruciune LEA ("load effective address") ncarc n registrul exprimat ca prim parametru adresa de
offset a variabilei din parametrul 2. Urmtoarele dou instruciuni ncarc att adresa de offset ct i
adresa de segment; LDS ncarc segmentul n registrul DS, iar LES n ES.
LEA parametru_1>,<parametru_2>
LDS <parametru_1>, <parametru_2

Exemple:
lea si, var1 ; SI<= offset(var1)
lds bx, text ; DS<= segment(text), BX<=offset(text)
lea di, [bx+100] ; DI<= BX+100

Instruciunea XCHG
Aceast instruciune schimb ntre ele coninutul celor doi operanzi.

XCHG <parametru_1>, <parametru_2>

79
Atenie: parametrul 2 nu poate fi o constant.
Exemple:
xchg al, bh
xchg ax,bx

Instruciunile PUSH i POP


Cele dou instruciuni opereaz n mod implicit cu vrful stivei. Instruciunea PUSH pune un
operand pe stiv, iar POP extrage o valoare de pe stiv i o depune ntr-un operand. n ambele cazuri
registrul indicator de stiv (SP) se modific corespunztor (prin decrementare i respectiv incrementare)
astfel nct registrul SP s indice poziia curent a vrfului de stiv. Sintaxa instruciunilor este:

PUSH <parametru_1>
POP <parametru_1>

Transferul se face numai pe 16 bii. Aceste instruciuni sunt utile pentru salvarea temporar i
refacerea coninutului unor registre. Aceste operaii sunt necesare mai ales la apelul de rutine i la
revenirea din rutine.

Exemple:
push ax push var16
pop bx pop var16

6.4.3. Instruciuni aritmetice


Aceste instruciuni efectueaz cele patru operaii aritmetice de baz: adunare, scdere, nmulire i
mprire. Rezultatul acestor instruciuni afecteaz starea indicatorilor de condiie.

Instruciunile ADD i ADC


Aceste instruciuni efectueaz operaia de adunare a doi operanzi, rezultatul plasndu-se n primul
operand. A doua instruciune ADC (ADD with carry) n plus adun i coninutul indicatorului de
transport CF. Aceast instruciune este util pentru implementarea unor adunri n care operanzii sunt mai
lungi de 32 de bii.

ADD <parametru_1>,<parametru_2>
ADC <parametru_1>,<parametru_2>

Exemple:
add ax, 1234h
add bx, ax
adc dx, var16

Instruciunile SUB i SBB


Aceste instruciuni implementeaz operaia de scdere. A doua instruciune, SBB (Subtract with
borrow) scade i coninutul indicatorului CF, folosit n acest caz pe post de bit de mprumut. Ca i ADC,
SBB se folosete pentru operanzi de lungime mai mare.

SUB <parametru_1>,<parametru_2>
SBB <parametru_1>,<parametru_2>

80
Instruciunile MUL i IMUL
Aceste instruciuni efectueaz operaia de nmulire, MUL pentru ntregi fr semn i IMUL
pentru ntregi cu semn. De remarcat c la operaiile de nmulire i mprire trebuie s se tin cont de
forma de reprezentare a numerelor (cu semn sau fr semn), pe cnd la adunare i scdere acest lucru nu
este necesar. Pentru a evita dese depiri de capacitate s-a decis ca rezultatul operaiei de nmulire s se
pstreze pe o lungime dubl fa de lungimea operanzilor. Astfel dac operanzii sunt pe octet rezultatul
este pe cuvnt, iar daca operanzi sunt pe cuvnt rezultatul este pe dublu-cuvnt. De asemenea se impune
ca primul operand i implicit i rezultatul s se pstreze n registrul acumulator. De aceea primul operand
nu se mai specific.

MUL <parametru_2>
IMUL <parametru_2>

Exemple:
mul dh ; AX<=AL*DH
mul bx ; DX:AX<= AX*BX DX este extensia registrului acumulator AX
imul var8 ; AX<=AL*var8

Instruciunile DIV i IDIV


Aceste instruciuni efectueaz operaia de mprire pe ntregi fr sem i respectiv cu semn.
Pentru a crete plaja de operare se consider c primul operand, care n mod obligatoriu trebuie s fie n
acumulator, are o lungime dubl fa de al doilea operand. Primul operand nu se specific.

DIV <parametru_2>
IDIV <parametru_2>

Exemple:
div cl ; AL<=AX/CL i AH<=AX modulo CL (adic restul mpririi)
div bx ; AX<= (DX:AX)/BX i DX<=(DX:AX) modulo BX

Instruciunile INC i DEC


Aceste instruciuni realizeaz incrementarea i respectiv decrementarea cu o unitate a
operandului. Aceste instruciuni sunt eficiente ca lungime i ca vitez. Ele se folosesc pentru contorizare
i pentru parcurgerea unor iruri prin incrementarea sau decrementarea adreselor.

INC <parametru>
DEC <parametru>

Exemple:
inc si ; SI<=SI+1
dec cx ; CX<=CX-1

Instruciunea CMP
Aceast instruciune compar cei doi operanzi prin scderea lor. Dar rezultatul nu se memoreaz;
instruciunea are efect numai asupra indicatorilor de condiie. Aceast instruciune precede de obicei o
instruciune de salt condiionat. printr-o combinaie de instruciune de comparare i o instruciune de salt
se pot verifica relaii de egalitate, mai mare, mai mic, mai mare sau egal, etc.

CMP <parametru_1>, <parametru_2>

81
Exemplu:
cmp ax, 50h

6.4.4. Instruciuni logice


Aceste instruciuni implementeaz operaiile de baz ale logicii booleene. Operaiile logice se
efectueaz la nivel de bit, adic se combin printr-o operaie logic fiecare bit al operandului 1 cu bitul
corespunztor din operandul al doilea. Rezultatul se genereaz n primul operand.

Instruciunile AND, OR, NOT i XOR


Aceste instruciuni implementeaz cele patru operaii de baz: I, SAU, Negaie i SAU-
Exclusiv.

AND <parametru_1>,<parametru_2>
OR <parametru_1>, <parametru_2>
NOT <parametru_1>
XOR <parametru_1>,<parametru_2>

Exemple:
and al, 0fh
or bx, 0000111100001111b
and al,ch
xor ax,ax ; terge coninutul lui ax

Instruciunea TEST
Aceast instruciune efectueaz operaia I logic fr a memora rezultatul. Scopul operaiei este
de a modifica indicatorii de condiie. Instruciunea evit distrugerea coninutului primului operand.

TEST <parametru_1>,<parametru_2>

Exemple:
test al, 00010000b ; se verific dac bitul D4 din al este zero sau nu
test bl, 0fh ;se verifica dac prima cifr hexazecimal din bl este 0

6.4.5. Instruciuni de deplasare i de rotire


Instruciunile SHL, (SAL), SHR i SAR
Aceste instruciuni realizeaz deplasarea (eng. shift) la stnga i respectiv la dreapta a coninutului
unui operand. La deplasarea "logic" (SHL, SHR) biii se copiaz n locaiile nvecinate (la stnga sau la
dreapta), iar pe locurile rmase libere se nscrie 0 logic. La deplasarea "aritmetic" (SAL, SAR) se
consider c operandul conine un numr cu semn, iar prin deplasare la stnga i la dreapta se obine o
multiplicare i respectiv o divizare cu puteri ale lui doi (ex: o deplasare la stnga cu 2 poziii binare este
echivalent cu o nmulire cu 4). La deplasarea la dreapta se dorete meninerea semnului operandului, de
aceea bitul mai semnificativ (semnul) se menine i dup deplasare. La deplasarea la stnga acest lucru
nu este necesar, de aceea instruciunile SHL i SAL reprezint aceeai instruciune.
n figura de mai jos s-a reprezentat o deplasare logic i o deplasare aritmetic la dreapta. Se
observ c bitul care iese din operand este nscris n indicatorul de transport CF

0 D7 D6 .... D1 D0 CF SHR

82
D7 D6 .... D1 D0 CF SAR
Formatul instruciunilor:

SHL <parametru_1>, <parametru_2>


SAL <parametru_1>, <parametru_2>
SHR <parametru_1>, <parametru_2>
SAL <parametru_1>, <parametru_2>

Primul parametru este n concordan cu definiiile anterioare; al doilea parametru specific


numrul de poziii binare cu care se face deplasare; acest parametru poate fi 1 sau dac numrul de pai
este mai mare atunci se indica prin registrul CL. La variantele mai noi de procesoare se accept i forma
n care constanta este diferit de 1.

Exemple:
shl ax,1
shr var, cl

Instruciunile de rotire ROR, ROL, RCR, RCL


Aceste instruciuni realizeaz rotirea la dreapta sau la stnga a operandului, cu un numr de poziii
binare. Diferena fa de instruciunile anterioare de deplasare const n faptul c n poziia eliberat prin
deplasare se introduce bitul care iese din operand. Rotirea se poate face cu implicarea indicatorului de
transport (CF) n procesul de rotaie (RCR, RCL) sau fr (ROR, ROL). n ambele cazuri bitul care iese
din operand se regsete n indicatorul de transport CF. Figura de mai jos indic cele dou moduri de
rotaie pentru o rotaie la dreapta.

D7 D6 .... D1 D0 CF ROR

D7 D6 .... D1 D0 CF RCR

Formatul instruciunilor:

ROR <parametru_1>, <parametru_2>


ROL <parametru_1>, <parametru_2>
RCR <parametru_1>, <parametru_2>
RCL <parametru_1>, <parametru_2>

Referitor la parametri, se aplic aceleai observaii ca i la instruciunile de deplasare.

6.4.6. Instruciuni de salt


Instruciunile de salt se utilizeaz pentru controlul secvenei de execuie a instruciunilor. n
principiu exist dou tipuri de salt:
- instruciuni de ramificare i ciclare (buclare)
- instruciuni de apel i revenire din rutine

83
6.4.7. Instruciunile de apel i revenire din rutine
Utilizarea rutinelor (a procedurilor) permite structurarea programelor scrise n limbaj de asamblare
i implicit scade complexitatea procesului de proiectare i programare. Se recomand ca anumite operaii
care se repet s fie scrise sub form de rutine, urmnd a fi apelate de mai multe ori. Uneori se justific
utilizarea de rutine chiar i numai cu scop de structurare a programului.

Instruciunile CALL i RET


Instruciunea CALL realizeaz un salt la adresa exprimat n instruciune. nainte de salt procesorul
salveaz pe stiv adresa de revenire n programul apelant (adresa instruciunii de dup instruciunea
CALL). Instruciunea RET se plaseaz la sfritul rutinei i realizeaz revenirea n programul apelant. n
acest scop se extrage de pe stiv adresa de revenire i se face salt la aceast adres. O rutin conine mai
multe instruciuni RET dac exist mai multe ramificri n secvena rutinei.
Formatul instruciunilor:
CALL <adres>
RET [<constant>]
unde:
<adresa> - este o etichet (numele rutinei) sau o expresie evaluabil ca i o adres
<constanta> indic numrul de poziii cu care trebuie s se descarce stiva nainte de
revenirea din rutin; n mod uzual acest parametru lipsete

Exemple:
call rut_adunare
call 1000:100
ret
ret 2 ; descrcarea stivei cu 2 uniti

Funcie de poziia rutinei fa de instruciunea de apel compilatorul va genera o adres "apropiat"


(eng. near) care este de fapt adresa de offset a rutinei, sau o adres "ndeprtat" (eng. far), care conine i
adresa de segment. Al doilea caz se aplic atunci cnd rutina se afl n alt segment dect instruciunea de
apel. programatorul poate cere o adres "near" sau "far" n mod explicit printr-o directiv de declarare a
procedurii.

6.4.8. Instruciunile de ramificare i ciclare


Aceste instruciuni modific secvena de execuie a instruciunilor. Exist instruciuni de salt
necondiionat (care se execut n orice condiie) i instruciuni de salt condiionat. cele din urm
determin execuia unui salt n msura n care o anumit condiie este ndeplinit. O condiie poate fi
starea unui indicator de condiie sau o combinaie a acestora. Formatul instruciunilor este:

JMP <adres>
J<cc> <adres>
unde:
<adres> este o etichet sau o expresie evaluabil ca i o adres
<cc> este o combinaie de litere care sugereaz condiia care se aplic
n primul tabel s-au indicat variantele de salt condiionat care implic testarea unui singur indicator de
condiie. Urmtoarele dou tabele prezint instruciunile de salt condiionat utilizate dup o operaie de
comparare a dou numere.

Instruciunea Condiia Instruciuni Explicaii


echivalente
JC CF=1 JB,JNAE salt dac a fost un transport
JNC CF=0 JNB,JAE salt dac nu a fost un transport

84
JZ ZF=1 JE salt dac rezultatul este zero
JNZ ZF=0 salt dac rezultatul nu este zero
JS SF=1 salt dac rezultatul este negativ
JNS SF=0 salt dac rezultatul este pozitiv
JO OF=1 salt la depire de capacitate
JNO OF=0 salt daca nu este depire
JP PF=1 salt dac rezultatul este par
JNP PF=0 salt dac rezultatul nu este par

Instruciuni de salt condiionat utilizate dup compararea a dou numere fr semn:

Instruciune Condiie Indicatori testai Instruciuni Explicaii


echivalente
JA > CF=0,ZF=0 JNBE salt la mai mare
JAE >= CF=0 JNB,JNC salt la mai mare sau egal
JB < CF=1 JNAE,JC salt la mai mic
JBE <= CF=1 sau ZF=1 JNA salt la mai mic sau egal
JE = ZF=1 JZ salt la egal
JNE != ZF=0 JNZ salt la diferit

Instruciuni de salt utilizate dup compararea a dou numere cu semn (reprezentate n complement
fa de doi).

Instruciune Condiie Indicatori testai Instruciuni Explicaii


echivalente
JG > SF=OF sau ZF=0 JNLE salt la mai mare
JGE >= SF=OF JNL salt la mai mare sau egal
JL < SF!=OF JNGE salt la mai mic
JLE <= SF!=OF sau ZF=1 JNG salt la mai mic sau egal
JE = ZF=1 JZ salt la egal
JNE != ZF=0 JNZ salt la diferit

Observaie: relaiile de ordine (mai mic, mai mare, etc.) se stabilesc ntre primul i al doilea
parametru al operaiei de comparare.

Exemple:
cmp ax, 100h
je et1 ; salt dac ax=100h
cmp var1,al
jb mai_mic ; salt dac var1<al
add dx,cx
jo eroare ; salt dac apare depire de capacitate

Instruciunile de ciclare LOOP, LOOPZ, LOOPNZ

85
Aceste instruciuni permit implementarea unor structuri de control echivalente cu instruciunile
"for", "while" "do-until" din limbajele de nivel nalt. Aceste instruciuni efectueaz o secven de operaii:
decrementarea registrului CX folosit pe post de contor, testarea condiiei de terminare a ciclului i salt la
etichet (la nceputul ciclului) n cazul n care condiia nu este ndeplinit.

Sintaxa instruciunilor:
LOOP <adres>
LOOPZ <adres>
LOOPNZ <adres>
unde: <adresa> este o etichet sau o expresie evaluabil la o adres

Pentru instruciunea LOOP condiia de terminare a ciclului este CX=0, adic contorul ajunge la 0. Pentru
instruciunea LOOPZ n plus ciclul se ncheie i n cazul n care ZF=0. La instruciunea LOOPNZ ieirea
din bucl se face pentru ZF=1.

Exemplu:
mov cx, 100
et1: .....
loop et1 ; ciclul se execut de 100 de ori

6.4.9. Instruciuni de intrare/ieire


Aceste instruciuni se utilizeaz pentru efectuarea transferurilor cu registrele (porturile)
interfeelor de intrare/ieire. Trebuie remarcat faptul c la procesoarele Intel acestea sunt singurele
instruciuni care opereaz cu porturi.

Instruciunile IN i OUT
Instruciunea IN se folosete pentru citirea unui port de intrare, iar instruciunea OUT pentru
scrierea unui port de ieire. Sintaxa instruciunilor este:

IN <acumulator>, <adres_port>
OUT <adres_port>, <acumulator>
unde:
<acumulator> - registrul AX pentru transfer pe 16 bii sau AL pentru transfer pe 8 bii
<adresa_port> - o adres exprimabil pe 8 bii sau registrul DX

Se observ c dac adresa portului este mai mare dect 255 atunci adresa portului se transmite prin
registrul DX.

Exemple:
n al, 20h
mov dx, adresa_port
out dx, ax

6.4.10. Instruciuni pe iruri


Aceste instruciuni s-au introdus cu scopul de a accelera accesul la elementele unei structuri de tip
ir sau vector. Instruciunile folosesc n mod implicit registrele index SI i DI pentru adresarea
elementelor irului surs i respectiv destinaie. n mod implicit registrul DS pstreaz adresa de segment
a sursei iar registrul ES adresa de segment a destinaiei. Dup efectuarea operaiei propriu-zise
(specificat prin mnemonica instruciunii), registrele index sunt incrementate sau decrementate automat
pentru a trece la elementele urmtoare din ir. Indicatorul DF determin direcia de parcurgere a irurilor:

86
DF=1 prin incrementare, DF=0 prin decrementare. Registrul CX este folosit pentru contorizarea
numrului de operaii efectuate. Dup fiecare execuie registrul CX se decrementeaz.

Instruciunile MOVSB, MOVSW


Aceste instruciuni transfer un element din irul surs n irul destinaie. Instruciunea MOVSB
opereaz pe octet (eng. move string on byte), iar MOVSW opereaz pe cuvnt. La operaiile pe cuvnt
registrele index se incrementeaz sau se decrementeaz cu 2 uniti, deoarece un cuvnt ocup 2 locaii n
memorie. Instruciunile nu au parametrii; programatorul trebuie s ncarce n prealabil adresele irurilor n
registrele SI i DI, i lungimea irului n CX.

Exemplu:
mov si, offset sir_sursa ; "offset" este un operator care determin adresa
mov di, offset sir_destinatie ; de offset a variabilei
mov cx, lung_sir
et: MOVSB ; DS:[SI]=>ES:[DI], SI++, DI++, CX--
jnz et

Instruciunile LODSB, LODSW, STOSB i STOSW


Primele dou instruciuni realizeaz ncrcarea succesiv a elementelor unui ir n registrul
acumulator. Urmtoarele dou instruciuni realizeaz operaia invers de salvare a registrului acumulator
ntr-un ir. i la aceste instruciuni registrele index (SI pentru ncrcare i DI pentru salvare) se
incrementeaz sau se decrementeaz automat, iar registrul CX se decrementeaz. Terminaiile "B"
respectiv "W" indic lungimea pe care se face transferul: octet sau cuvnt.

Instruciunile CMPSB, CMPSW, SCASB i SCASW


Aceste instruciuni realizeaz operaii de comparare cu elemente ale unui ir. Primele dou
instruciuni compar ntre ele elementele a dou iruri, iar ultimele dou compar coninutul registrului
acumulator cu cte un element al irului (operaie de scanare).

Instruciunile REP, REPZ, REPE, REPNZ, REPNZ


Aceste instruciuni permit execuia multipl a unei instruciuni pe iruri. Prin amplasarea unei astfel
de instruciuni n faa unei instruciuni pe iruri oblig procesorul execuia repetat a operaiei pn ce
condiia de terminare este satisfcut. La prima variant, REP, condiia de terminare este CX=0. La
instruciunile REPZ i REPE operaia se repet atta timp ct rezultatul este zero sau operanzii sunt egali.
La REPNZ i REPNE operaia se repet atta timp ct rezultatul este diferit de zero sau operanzii sunt
diferii.

Exemple:
mov si, offset sir_sursa
mov di, offset sir_destinatie
mov cx, lungime_sir
rep movsb ; transfer irul surs n irul destinaie

6.4.11. Instruciuni speciale


n aceast categorie s-au inclus acele instruciuni care au efect asupra modului de funcionare al
procesorului.

Instruciunile CLC, STC, CMC


Aceste instruciuni modific starea indicatorului CF de transport. Aceste instruciuni au
urmtoarele efecte:

87
CLC terge (eng. clear) indicatorul, CF=0
STC seteaz indicatorul, CF=1
CMC inverseaz starea indicatorului, CF=NOT CF

Instruciunile CLI i STI


Aceste instruciuni terg i respectiv seteaz indicatorul de ntrerupere IF. n starea setat (IF=1)
procesorul detecteaz ntreruperile mascabile, iar n starea invers blocheaz toate ntreruperile mascabile.

Instruciunile CLD i STD


Aceste instruciuni modifica starea indicatorului de direcie DF. Prin acest indicator se controleaz
modul de parcurgere a irurilor la operaiile pe iruri: prin incrementare (DF=0) sau prin decrementare
(DF=1).

Instruciunile NOP, HLT i HIT


Instruciunea NOP nu face nimic (eng. no operation). Aceast instruciune se folosete n scopuri
de temporizare, pentru ntrzierea unor operaii sau pentru implementarea unor bucle de ateptare.
Instruciunea HLT (eng. halt) determin oprirea procesorului. Instruciunea HIT determin oprirea
temporar a procesorului pn la apariia unui semnal de ntrerupere sau de iniializare (reset).

Instruciunea CPUID
Aceast instruciune permite identificarea tipului de procesor pe care rupeaza programul.

7. Nivelul sistemului de exploatare

7.1. Memoria virtual, conceptual de paginare , conceptul de segmentar

Memoria virtual reprezint o tehnic de organizare a memoriei prin intermediul creia programatorul
vede un spaiu virtual de adresare foarte mare i care, fr ca programatorul s simt, este mapat n
memoria fizic disponibil. Uzual, spaiul virtual de adrese corespunde suportului disc magnetic,
programatorul avnd iluzia prin mecanismele de memorie virtual (MV), c deine o memorie (virtual)
de capacitatea hard-discului i nu de capacitatea memoriei fizice preponderent DRAM (limitat la 64
1024 Mo la ora actual). n cazul MV, memoria principal este analoag memoriei cache ntre CPU
(Central Processing Unit) i memoria principal, numai c de aceast dat ea se situeaz ntre CPU i
discul hard. Deci memoria principal (MP) se comport oarecum ca un cache ntre CPU i discul hard.
Prin mecanismele de MV se mrete probabilitatea ca informaia ce se dorete a fi accesat de ctre CPU
din spaiul virtual (disc).
Pentru implementarea conceptului de memorie virtual se folosete urmtoarea schem de principiu:

AL reprezint adresa logic care este generat de CPU prin citirea instruciunii curente. Prin prelucrarea
adresei logice n MMU rezult adresa fizic . MMU realizeaz o alta funcie de translatare
fT*: AL AE.

88
fT realizeaz translatarea ntre adresele logice (virtuale) i cele fizice (reale). Dac adresa logic nu are
corespondent fizic n memoria principal , atunci se genereaz comenzile de transfer (CT) pentru
transferul ntre memoria extern i memoria principal.
Realizarea practic a conceptului de memorie virtual se bazeaz pe transferul n blocuri ntre memoria
extern i memoria principal . Cea mai rspndit metod de implementare este metoda segmentrii
memoriei. S-a artat c fiecare instruciune la nivel cod maina este format din 2 cmpuri mari:

n cmpul de adres apar elementele constiutive ale adresei logice din care, prin efectuarea unor calcule,
se determin adresa efectiv sau adresa fizic.
n cazul adresei efective:
AE=f(AL)
Unde
- AL: adresa logic;
- AE: adresa efectiv.

Pe parcursul timpului vitezele de transfer au evoluat astfel:


- Interfaa IDE (pe cablul paralel de legtur ntre placa de baz i HDD) asigura 133MB/sec.
- Prima interfa SATA serial a crescut viteza de transfer la 150MB/sec.
- Evoluia la SATA2 a realizat dublarea acestei performane la 300MB/sec.
- Interfaa SATA3 a dus la o la vitez de 540 - 560MB/sec
- SSD -urile sunt compatibile att cu SATA2 ct i cu SATA3 iar viteza de transfer a crescut de
peste 4 ori.

De obicei, spaiul virtual de adresare este mprit n entiti de capacitate fix (4 64 Ko actualmente),
numite pagini. O pagin poate fi mapat n MP sau pe disc.

89
Figura 4.8. Maparea adreselor virtuale n adrese fizice

7.1.1. Paginarea
n general, prin mecanismele de MV, MP conine paginile cel mai recent accesate de ctre un program, ea
fiind dup cum am mai artat, pe post de cache ntre CPU i discul hard. Transformarea adresei virtuale
emis de ctre CPU ntro adres fizic (existent n spaiul MP) se numete mapare sau translatare.
Aadar mecanismul de MV ofer o funcie de relocare a programelor (adreselor de program), pentru c
adresele virtuale utilizate de un program sunt relocate spre adrese fizice diferite, nainte ca ele s fie
folosite pentru accesarea memoriei. Aceast mapare permite aceluiai program s fie ncrcat i s ruleze
oriunde ar fi ncrcat n MP, modificrile de adrese realizndu-se automat prin mapare (fr MV un
program depinde de obicei n execuia sa de adresa de memorie unde este ncrcat).
MV este un concept deosebit de util n special n cadrul sistemelor de calcul multiprogramate care - de
exemplu prin time-sharing permit execuia cvasi-simultan a mai multor programe (vezi sistemul de
operare WINDOWS XX, NT, Unix, Ultrix etc.). Fiecare dintre aceste programe are propriul su spaiu
virtual de cod i date ( avnd alocate un numr de pagini virtuale), dar n realitate toate aceste programe
vor partaja aceeai MP, care va conine dinamic, pagini aferente diverselor procese.
n implementarea MV trebuie avute n vedere urmtoarele aspecte importante:
- paginile s fie suficient de mari (4 ko 16 ko 64 ko) astfel nct s compenseze timpul mare de
acces la disc (9 12 ms).
- organizri care s reduc rata de evenimente PF, rezultnd un plasament flexibil al paginilor n
memorie (MP)
- PF-urile trebuie tratate prin software i nu prin hardware (spre deosebire de miss-urile n cache-
uri), timpul de acces al discurilor permitnd lejer acest lucru.
- scrierile n MV se fac dup algoritmi tip Write Back i nu Write Through (ar consuma timp
enorm).

90
Figura 4.9. Translatare adres virtual n adres fizic

Fiecare program are propria sa tabel de pagini care mapeaz spaiul virtual de adresare al programului
ntr-un spaiu fizic, situat n M.P.
Tabela de pagini + PC + registrele microprocesorului formeaz starea unui anumit program. Programul +
starea asociat caracterizeaz un anumit proces (task). Un proces executat curent este activ, altfel el este
inactiv. Comutarea de taskuri implic inactivarea procesului curent i activarea altui proces, inactiv pn
acum rezultnd deci ca fiind necesar salvarea/restaurarea strii proceselor. Desigur, sistemul de operare
(S..) trebuie doar s rencarce registrul pointer al adresei de baz a paginii (PTR) pentru a pointa la
tabela de pagini aferent noului proces activ.

7.1.2. Segmentarea
Constituie o alt variant de implementare a MV, care utilizeaz n locul paginilor de lungime fix,
entiti de lungime variabil zise segmente. n segmentare, adresa virtual este constituit din 2 cuvinte: o
baz a segmentului i respectiv un deplasament (offset) n cadrul segmentului.
Datorit lungimii variabile a segmentului (de ex. 1 octet 2 octei la arhitecturile Intel Pentium), trebuie
fcut i o verificare a faptului c adresa virtual rezultat (baza + offset) se ncadreaz n lungimea
adoptat a segmentului. Desigur, segmentarea ofer posibiliti de protecie puternice i sofisticate a
segmentelor. Pe de alt parte, segmentarea induce i
numeroase dezavantaje precum:
2 cuvinte pentru o adres virtual, necesare avnd n vedere lungimea variabil a segmentului. Asta
complic sarcina compilatoarelor i a programelor
- ncrcarea segmentelor variabile n memorie mai dificil dect la paginare

91
- fragmentare a memoriei principale (poriuni nefolosite)
- frecvent, trafic ineficient MP-disc (de exemplu pentru segmente mici, transferul cu discul e
complet ineficient accese la nivel de sector = 512 octeti)

Exist n practic i implementri hibride segmentare paginare

7.2. Exemple de gestionare a memoriei virtuale.

O schema a ierharhiei memoriei este prezentat alturat.

Unitatea de management a memoriei virtuale

92
7.2.1. Memoria virtual
Reprezint separarea conceptual a memoriei logice disponibile pentru aplicatii fata de memoria fizica. n
acest mod putem avea o memorie virtuala de dimensiuni mari chiar cu o memorie fizica de dimensiuni
reduse :

- n acelai sens, nu toate obiectele (date sau instruciuni) pot fi la un moment dat n memoria
principal. Dac avem memorie virtual, atunci unele dintre obiecte se pot afla pe disc. Spaiul de
adresare este de regul mprit n blocuri de lungime fix pagini.
- La un moment dat, paginile se afl fie n memoria principal, fie pe disc
- Atunci cnd se cere un obiect care nu este n cache sau n memoria principal, apare un page-
fault moment n care ntreaga pagin este mutat de pe disc n memoria principal. Aceste
page-fault dureaz mai mult i atunci sunt controlate de software i UCP nu face pauz.
- De regul, UCP comut ctre alt task atunci cnd apare un acces la disc. Memoria cache i
memoria principal au aceeai relaie ca i cea existent ntre memoria principal i disc.
- n orice moment, un calculator ruleaz mai multe procese, fiecare avnd propriul spaiu de adrese
de memorie. Ar fi foarte costisitor s se dedice un ntreg spaiu de adresare pentru fiecare proces,
avnd n vedere c multe dintre procese folosesc doar o mic parte a spaiului propriu de adrese.
A aprut astfel necesitatea partajrii unei pri a memoriei ntre mai multe procese.
- Acest procedeu poart numele de memorie virtual memoria fizic se divide n blocuri care
sunt alocate diferitelor procese.
- Inerent unei astfel de abordri este o schem de protecie ce restricioneaz accesul proceselor la
blocuri ce aparin altor procese. Majoritatea formelor de memorie virtual reduc, de asemenea,
timpul de pornire a unui program, deoarece nu tot codul sau datele trebuie s fie deja n memoria
fizic nainte ca programul s nceap.
- ns partajarea ntre procese a memoriei nu este adevratul motiv pentru care s-a inventat
memoria virtual. Dac un program devine prea mare pentru memoria fizic, este sarcina
programatorului s l fac s ncap n ea. Au rezultate acele suprapuneri (overlay).
- Blocurile de memorie n cazul memoriei virtuale se numesc pagini sau segmente. UCP folosete
adrese virtuale ce sunt translatate (hardware ct i software) n adrese fizice ce acceseaz
memoria principal. Acest procedeu se numete procedeul de mapare a memoriei sau de
translatare a adreselor. Astzi memoria virtual intervine la nivel de memorie principal i disc
magnetic
Cererea de pagini (demand paging)

93
Atunci cnd o pagin de memorie este referit (fie c este vorba despre cod sau date) i ea nu se afl n
memorie atunci ea este adus de pe disc i se re-execut instruciunea

Paii ce se urmresc n cazul unui page fault:

n cazul supra-alocrii memoriei trebuie s renunm la ceva deja existent n memorie.


Supra-alocarea apare atunci cnd programele au nevoie de mai multe pagini de memorie dect cele
existente fizic.

94
Metoda de abordare: dac nici o pagin fizic nu este liber, se caut una care nu este utilizat la
momentul respectiv i se elibereaz.

8. Arhitecturi evoluate
Arhitectura Setului de Instruciuni
Arhitectura setului de instruciuni (ISA - Instruction Set Architecture) este folosit pentru a abstractiza
funcionarea intern a unui procesor. ISA definete personalitatea unui procesor: cum funcioneaz
procesorul d.p.d.v. al programatorului, ce fel de instruciuni execut, care este semantica acestora, n timp
ce microarhitectura se refer la cum este implementat ISA, pipeline-ul de instruciuni, fluxul de date
dintre unitile de execuie (dac sunt mai multe), registre i cache. Astfel, o ISA poate fi implementat de
diferite microarhitecturi: la ARM, ARMv6 este un exemplu de ISA, i este implementat de 4 procesoare,
la Pentium numele ISA este IA-32 i este implementat de diferite procesoare produse de Intel, AMD,
Via, Transmeta.
Astfel, ISA este cea mai important parte a design-ului unui procesor; alte aspecte cum sunt interaciunea
cu cache-ul, pipeline-ul, fluxul de date n procesor putnd fi schimbate de la o versiune la alta a
procesorului.
La ora actual exist dou filozofii de design pentru un procesor:
- Complex Instruction Set Computer (CISC)
- Reduced Instruction Set Computer (RISC).

n afar de acestea exist i ISA-uri pentru procesoare specializate, cum sunt GPU-urile pentru plci
grafice si DSP-urile pentru procesare de semnal.

8.1. Masinile RISC (evolutia arhitecturii sistemelor de calcul, principii de


proiectare a masinilor RISC),

8.1.1. RISC (Reduced Instruction Set Computer) au urmtorele caracteristicile:


- set redus de instruciuni: ~100-200; complexitatea care este eliminat din ISA este de fapt
transferat programatorului n limbaj de asamblare i compilatoarelor; codul conine mai multe
instruciuni, i n multe cazuri (mai ales n trecut (anii '70, '80)) acest fapt constituie o problem
- instruciunile sunt de obicei codificate pe lungime fix; permite o implementare mai simpl a UC
- execuia instruciunilor ntr-un singur ciclu (folosind pipeline)
- arhitectur load-store - numai instruciunile de tip LOAD i STORE lucreaz cu memoria
- un numr mai mare de registre (din cauza load-store): 32-64; familii de arhitecturi: ARM, AVR,
AVR32, MIPS, PowerPC (Freescale, IBM), SPARC (SUN)

Exemplu: ncrcarea unui cuvnt de date din memorie ntr-un registru la arhitectura AVR32:

ld.w Rd, Rp++

Rd - registrul destinaie
Rp - registrul ce conine adresa cuvntului; aceasta este incrementat dup copierea coninutului.

8.1.2. CISC (Complex Instruction Set Computer)

Arhitecturile de tip CISC pun accentul pe hardware avnd instruciuni complexe ce reduc dimensiunea
codului i simplificnd partea de software. Cele mai importante caracteristici sunt:
- instruciunile pot accesa memoria, avnd deja ncorporate load-ul i store-ul

95
- varietate mare de moduri de adresare a memoriei
- instruciunile au dimensiuni variabile i necesit mai muli cicli de ceas pentru a fi executate
- necesit un nivel suplimentar ntre hardware i ISA, controlul microprogramului - instruciunile
sunt implementate n microcod;
- familii de arhitecturi: IA-32, x86-64

Exemplu:
La IA-32:
add [ebx],eax (se adun operandul de la adresa data de registrul ebx cu cel din registrul
eax i rezultatul se stocheaza la adr primului operand)
La o arhitectura RISC:
load r1, $10
load r2, $11
add r1,r2
store $10, r1

$10, $11 sunt locaii de memorie (adrese), numele instruciunilor sunt generice, nu aparin unei
arhitecturi anume
Pentru o arhitectura RISC am avea intai de incarcat operanzii din memorie folosind instruciuni de tip
LOAD si apoi s apelam instruciunea pentru inmultire, n final stocand rezultatul n memorie folosind o
instruciune de tip STORE.

8.1.3. RISC vs CISC

Regula 80-20: 80% din timp se folosesc 20% din instruciunile unui procesor. Multe instruciuni CISC
sunt nefolosite de ctre programatori, iar majoritatea instruciunilor complexe pot fi sparte n mai multe
instruciuni simple. Ambele abordri fac compromisuri pentru a minimiza una dintre aceste fracii: n

96
cazul RISC, se prefer un numr mai mare de instruciuni pe program pentru a micora numrul de cicli
pe instruciune, n timp ce la CISC este invers.
Totui, lucrurile nu stau att de simplu. Dei arhitecturile RISC au fost devansate n anii 80 de ctre CISC
datorit lipsei software-ului i al unui segment de pia, precum i datorit preului ridicat al memoriei, o
dat cu progresele tehnologice, procesoarele cu ISA RISC au monopolizat domeniul embedded. n plus,
cele dou arhitecturi au nceput s se apropie, majoritatea procesoarelor actuale avnd o arhitectura
hibrid, de exemplu Intel Pentium avnd un interpretor CISC peste un nucleu RISC.

8.2. Arhitecturi paralele, exemple.

8.2.1. Paralelism - Pipelining


Chiar dac un program este n mod tradiional interpretat secvenial, instruciune cu instruciune, o parte
dintre acestea nu sunt dependente ntre ele i pot fi executate n paralel. Aceast metod de a extrage
paralelism la nivelul unui singur flux de instruciuni de numete paralelism la nivel de instruciunie sau
Instruction-level parallelism (ILP).
O metod de a implementa ILP este banda de asamblare (pipeline). Banda de asamblare presupune c
atunci cnd o instruciune i este executat, instruciunea i+1 este decodificat i instruciunea i+2 este
citit, astfel fiecare subsistem din procesor este ocupat la un moment dat.

Modelul de baz pentru un pipeline la o arhitectura RISC este cel din 4 etape:
1. Instruction Fetch,
2. Instruction Decode,
3. Execute,
4. Register Write Back.

97
n stagiul Fetch se aduce instruciunea din memorie, de la adresa dat de contorul program (PC -
program counter).
n stagiul Decode se decodific instruciunea
n Execute se execut efectiv operaia de ctre unitatea aritmetico-logica,
n Writeback se stocheaz rezultatele n regitrii sau memorie.

Pentru CISC, avem de obicei un numr mai mare de etape (>12).


Banda de asamblare superpipeline este mai lung dect banda obinuit (cele 4 stagii F, D, E, W sunt
mprite la rndul lor n mai multe stagii).

Teoretic cu ct banda de asamblare este mai segmentat, mai multe instruciuni pot fi executate n paralel
i, fiecare stagiu fcnd mai puine operaii, se poate mri frecvena ceasului. ns, ali factori
caracteristici ai design-ului pot scdea performanele i nu ntotdeauna un procesor cu superpipelining
este mai bun dect unul cu band de asamblare normal. Pentru o arhitectur i un set de instruciuni date
exist un numr optim de etape ale benzii de asamblare. Peste acest numr se reduce performana.
Pentru procesoarele RISC, unde instruciunile se execut ntr-un singur ceas, aceast durat de execuie
este dat de instruciunea cea mai lung.
Banda de asamblare mrete productivitatea (throughput-ul), adic numrul de instruciuni executate n
unitatea de timp, nsa timpul de execuie (latena) a unei instruciuni nu se micoreaz, ci se poate chiar
mri.
Pentru a paraleliza i mai mult execuia instruciunilor, procesoarele superscalare introduc benzi de
asamblare independente ce funcioneaz n paralel. Se mrete astfel numrul de resurse i complexitatea
procesorului, ns mai multe instruciuni pot fi aduse, decodificate i executate n acelai timp, dup cum
este ilustrat.

8.2.2. Hazard
n cazul unui procesor cu band de asamblare, pentru a obine performan maxim, este necesar ca o
instruciune s fie prezent n fiecare stagiu al pipeline-ului. Acest lucru nu este posibil ns datorit
faptului c instruciunile pot avea diferite dependene ntre ele ceea ce face ca execuia lor n pipeline s
duc la rezultate nedorite, situaie care poart numele de hazard.

98
8.2.2.1. Tipuri
Exist trei tipuri de dependene care pot conduce la hazarde:
1. Structurale: cnd dou instruciuni aflate n execuie n pipeline doresc acces la aceeai structur
hardware n acelai timp.

Exemplu:
add r1, r2
load r3, [r4 + offset]
- ambele instruciuni necesit acces la unitatea de adunare: prima pentru a executa o adunare, iar a doua
pentru a calcula adresa de la care se face citirea din memorie.

2. De date: cnd dou instruciuni folosesc acelai registru sau aceeai locaie de memorie i cel
puin una dintre ele este o scriere

RAW (Read after Write): instruciunea Ii+1 citete o locaie de memorie scris de instruciunea Ii
Exemplu:
add r1, r2
add r3, r1
- valoarea lui r1 este disponibil n a doua instruciune abia dup ce prima instruciune a scris rezultatul
WAR (Write after Read): instruciunea Ii+1 scrie o locaie de memorie care este citit de instruciunea
Ii
Exemplu:
add r2, r1
add r1, r3
- valoarea lui r1 nu poate fi modificat n a doua instruciune pn cnd prima instruciune nu a terminat
citirea lui
WAW (Write after Write): instruciunea Ii+1 scrie o locaie de memorie care este scris i de
instruciunea Ii
Exemplu:
mov r1, r2
mov r1, r3
- este necesar ca cele dou scrieri n r1 s se execute n ordinea din program pentru a nu modifica valoarea
vzut de instruciunile urmtoare

3. De control: cnd o instruciune de salt (branch, jump, call, ret) este executat; instruciunile de
salt pot modifica PC (contorul program), srind la o alt instruciune dect cea imediat
urmtoare; n acest caz adresa urmtoarei instruciuni care trebuie citit nu se cunoate pn cnd
instruciunea de salt nu este executat

Exemplu:
if (a == b) (i1)
d = a+b (i2)
c = 1 (i3)
else
d = a * b (i4)
n banda de asamblare se aduc din memorie la rand instruciunile i1,i2,i3, insa daca n urma executiei
instruciunii if (tradusa n assembler printr-o instruciune de comparare si apoi una de salt condiionat
(jmp - jump) se sare la ramura de else apare un hazard de control. Instruciunile i2,i3 nu mai trebuiesc
executate, i n schimb trebuie adus instruciunea i4, deci se face flushla pipeline i se aduce
instruciune i4, pierzandu-se astfel din eficiena prelucrrii n paralel a instruciunilor.

99
8.2.2.2. Soluii

O soluie simpl ar fi adugarea de ctre programator sau compilator sau automat, de ctre UC a
procesorului, a unor instruciuni nop pentru ntrzierea execuiei instruciunilor cu dependine; aa
numitele pipeline bubbles sau pipeline stalls.

Forwarding - dac unul sau mai multi operanzi ai unei instructiuni depind de o instructiune aflata nainte
n pipeline, rezultatul acesteia poate fi forwardat catre stagiile anterioare. Aceasta soluie necesit
hardware suplimentar pentru logica de control.

Exemplu:
instr k: add r1,r2
instr k+1: add r1,5
Rezultatul obtinut pentru instruciunea k n unitatea aritmetico-logic, n stagiul de
Execute este forwardat stagiului Decode al instructiunii k+1.

Out-of-order execution(OOE) este o tehnica de planificare dinamica(dynamic scheduling) prin care


instruciunile sunt executate n alt ordine dect cea a programului, ns rezultatele sunt ordonate ca si
cum ar fi fost executate normal. Prin aceast rearanjare, se evit adugarea de ntrzieri, intrnd n
pipeline instruciuni fr dependene de date ntre ele. Aceasta soluie necesit hardware
suplimentar(registre suplimentare, buffers pentru cozi de ateptare etc), iar algoritmul cel mai cunoscut
este cel al lui Tomasulo .

Deoarece registrele generale sunt limitate, iar codul unui program i refolosete des, genernd hazarde de
date, putem folosi tehnica de register renaming. Aceasta minimizeaz apariia hazardelor, prin adaugarea
unor registre suplimentare, ce nu sunt vizibile programatorului. Redenumirea registrelor rezolv hazardele
de date WAR, WAW nsa nu si RAW, fiind folosit i n algoritmul Tomasulo de planificare OOE.

Exemplu:
instr k add r1,r2,r3
instr k+1 mul r3,r2,r1
instr k+2 sub r1,r2,r4 //hazard WAW intre instr k si k+2
Dup redenumirea registrelor:
add l1, l2, l3
mul l5, l2, l4
add l6, l2, l7

n cazul hazardelor de control, putem amna aducerea instruciunilor din branch prin adugarea de
ntarzieri n pipeline sau intercalarea altor instruciuni independente de acel branch, ns soluia cea mai
bun este predicia ramificatiilor (branch prediction) care minimieaza numrul de cicli pierdui. Aceast
predicie poate fi static, facut de ctre compilator prin optimizari de tipul loop unrolling (de exemplu n
bucla for, a crei condiie este nendeplinit doar o dat pentru a se iei din bucl) sau profile-driven(se
creeaz profile ale programelor n urma mai multor execuii).
Predicia dinamic se face de catre procesor prin intermediul unor circuite (branch predictors) i n
general se bazeaz pe meninerea unor tabele cu informaii despre fiecare dintre ramificaii.

100
9. Bibliografie
1. Patterson, David A.; Hennessey, John L , Computer Architecture: A Quantitative Approach,
Publisher: Morgan Kaufmann; 5 edition (September 30, 2011), ISBN-13: 978-0123838728
2. Null J., Lobur J., The essentials of computer organization and architecture, Jones & Bartlett
Learning, 3rd edition (December 17, 2010), ISBN-13: 978-1449600068.
3. Stallings W., Computer Organization and Architecture, 9th ed., Prentice Hall, March 11, 2012,
ISBN-13: 978-0132936330.
4. Chalk B.S., Computer Organization and Architecture, Palgrave Macmillan, 2003.
5. Hyde R., The Art of Assembly Language Programming, No Starch Press, 2nd edition,
2010,ISBN-13: 978-1593272074 .
6. Gorgan D., Sebestyen G. - Structura calculatoarelor, Editura Albastra, 2000.
7. Corneliu Burileanu, Mihaela Ionita, Mircea Ionita, Mircea Filotti Microprocesoarele x86 o
abordare software, 1999.

101