Note de curs
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.
5
1.2. Structura fizic a unui calculator, tipuri de calculatoare, exemple de
arhitecturi uniprocesor si multiprocesor
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.
6
Figura 1.1 Arhitectura unui sistem de calcul.
Sunt dou clasificrim date de Flinn i Wang a diverselor tipuri de arhitecturi, generate din arhitectura de
baza von Neumann.
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).
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).
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).
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).
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.
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.
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.
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.
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.
11
- execuia unui set de instructiuni se efectueaza secvenial, prin citirea de instruciuni consecutive
din memorie.
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).
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).
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.
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
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
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.
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
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.
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.
17
Figura 2.3 Semnalul eantionat, cuantizat i codat numeric
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.
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.
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 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
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 ) = S0 , A + B + C = S1 etc, funcia se poate rescrie:
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)
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 .
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
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.
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.
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
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
25
Aceast poart poate fi privit i ca o combinaie de pori AND i OR.
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.
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
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.
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.
28
Figura 3.2. b) Convertor de cod natural- Gray: diagramele Karnaugh asociate.
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.
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.
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:
32
Relaiile de mai sugereaz obinerea sumatorului elementar din dou semisumatoare:
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.
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.
(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.
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.
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.
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.
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.
Sistemele pot avea o singura magistrala (single bus) sau magistrale multiple (multiple bus).
39
Figura 4.2. Sistem single bus
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.
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.
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.
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.
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
Fireste, se doresc capaciti ct mai mari si latente ct mai mici, cerine n general contradictorii.
48
ntre busul de adrese si memorie exista un decodificator N:2N ca n figur:
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).
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.
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:
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.
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.
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:
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:
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%.
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.
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)
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.
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.).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
- <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).
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:
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:
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.
79
Atenie: parametrul 2 nu poate fi o constant.
Exemple:
xchg al, bh
xchg ax,bx
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
ADD <parametru_1>,<parametru_2>
ADC <parametru_1>,<parametru_2>
Exemple:
add ax, 1234h
add bx, ax
adc dx, var16
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
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
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.
81
Exemplu:
cmp ax, 50h
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
0 D7 D6 .... D1 D0 CF SHR
82
D7 D6 .... D1 D0 CF SAR
Formatul instruciunilor:
Exemple:
shl ax,1
shr var, cl
D7 D6 .... D1 D0 CF ROR
D7 D6 .... D1 D0 CF RCR
Formatul instruciunilor:
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.
Exemple:
call rut_adunare
call 1000:100
ret
ret 2 ; descrcarea stivei cu 2 uniti
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.
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 utilizate dup compararea a dou numere cu semn (reprezentate n complement
fa de doi).
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
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
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
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.
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
Exemple:
mov si, offset sir_sursa
mov di, offset sir_destinatie
mov cx, lungime_sir
rep movsb ; transfer irul surs n irul destinaie
87
CLC terge (eng. clear) indicatorul, CF=0
STC seteaz indicatorul, CF=1
CMC inverseaz starea indicatorului, CF=NOT CF
Instruciunea CPUID
Aceast instruciune permite identificarea tipului de procesor pe care rupeaza programul.
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.
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)
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
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.
Exemplu: ncrcarea unui cuvnt de date din memorie ntr-un registru la arhitectura AVR32:
Rd - registrul destinaie
Rp - registrul ce conine adresa cuvntului; aceasta este incrementat dup copierea coninutului.
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.
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.
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.
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.
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