Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




























ALTE CARACTERISTICI ARHITECTURALE ALE MICROPROCESOARELOR

Informatica


ALTE CARACTERISTICI ARHITECTURALE ALE MICROPROCESOARELOR

In acest capitol se vor considera caracteristici referitoare la organizarea registrelor, aritmetica numerelor in formatul cu virgula mobila, intreruperi, capcane si mijloace de depanare.



2.1 Organizarea registrelor.

Desi unii cercetatori sustin contrariul, practica a demonstrat utilitatea registrelor in imbunatatirea performantelor microprocesoarelor. Ca exemplu se poate cita arhitectura procesoarelor RISC, unde se intilnesc zeci sau chiar 138 registre in componenta unitatii centrale de prelucrare.

Efectele pozitive ale utilizarii registrelor decurg din urmatoarele :

a) operatiile asupra continutului registrelor sint mai rapide decit cele asupra operanzilor continuti in memorie, pentru ca ALU are acces direct la registre. In felul acesta rularea programelor poate fi accelerata prin pastrarea in registre a datelor cu cea mai mare frecventa de utilizare.

b) lungimea medie a programelor scade, intrucit instructiunile care manipuleaza operanzii aflati in registre nu necesita o intreaga adresa, ci numai citiva biti pentru specificarea registrului respectiv.

Pe de alta parte, continuturile registrelor (asa numitul context) trebuie salvate la aparitia unei intreruperi sau capcane sau atunci cind, in regim de multiprogramare, are loc comutarea programului curent (despre acest subiect se va discuta, pe larg, intr-un capitol ulterior). In consecinta, un set numeros de registre conduce la timpi mai lungi de tratare a intreruperii sau de planificare a taskurilor.

2.1.1. Principalele operatii ale unitatii centrale de prelucrare

Cele mai frecvente operatii efectuate de catre CPU sint transferul de date si evaluarea de expresii. Practic toate limbajele algoritmice, cum sint C, Pascal, Fortran, poseda declaratii de asignare si declaratii de control al fluxului comenzilor (if, while, for etc.). Asignarea presupune, in general, evaluarea unei expresii si asignarea rezultatului unei variabile. Declaratiile de control al fluxului comenzilor implica evaluarea unui predicat si un salt, in functie de valoarea predicatului, la unul din mai multele blocuri de instructiuni specificate.

Forma obisnuita de scriere a expresiilor, de exemplu :

( A + B ) * ( (C + D) / ( E - F ) )

nu se preteaza la evaluarea directa, deoarece ordinea in care se executa operatiile nu coincide cu ordinea de aparitie a lor in secventa de operatie. Din acest motiv compilatorul reordoneaza expresia pentru a fi mai adecvata din punctul de vedere al generarii codului. Se foloseste notatia numita "reverse polish", conform careia un operator se aplica celor doi operanzi aflati imediat la stinga sa. Cu aceasta notatie expresia din exemplul dat devine :

( (A B +) ((C D +)(E F -)/)*)

Pentru stocarea operanzilor pe durata evaluarii unei expresii se pare ca stiva constituie cea mai adecvata structura de date (fig. 2.1.). Etapele din figura sint inlantuite intr-o secventa al

carei rezultat final este valoarea expresiei, stiva raminind in starea anterioara inceperiii evaluarii expresiei. Pentru o instructiune cu n operanzi toate operatiile aritmetice sint efectuate asupra celor n elemente din virful stivei. Acest mod de evaluare a expresiilor a generat sugestii pentru organizare a registrelor care sa ofere un bun suport operatiilor c 121g62b u structuri de tip stiva.


Fig 2.1. Evaluarea unei expresii aritmetice in notatia "reverse polish"

2.1.2. Masini cu arhitectura de tip stiva

Ideea care a stat la baza masinilor cu arhitectura de tip stiva (stack machines) consta in organizarea registrelor pentru a memora si gestiona automat partea superioara a stivei de evaluare. Instructiunile unei masini de tip stack machine ideala opereaza doar asupra registrelor ce contin virful stivei, cu exceptia instructiunilor de transfer de date, care citesc/inscriu registrul din virful stivei in/din memorie. Intrucit stiva poate creste peste capacitatea de memorare oferita de registre, partea inferioara a stivei este pastrata in memorie. Acest fapt necesita existenta unor mecanisme pentru tratarea situatiilor cind virful stivei depaseste partea continuta in registre (register overflow: toate registrele incarcate, apare necesitatea inscrierii unui nou operand in stiva) sau cind virful stivei coboara sub partea ce ar putea fi continuta in registre (register underflow: toate registrele vide, apare necesitatea citirii unui operand din stiva).

Practica nu ofera prea multe exemple de masina de tip stack machine. Majoritatea acestora au fost construite pentru functii specializate, asa cum sint procesoarele matematice. Ca exemplu se poate da procesorul matematic 80287 al familiei iAPX286, ale carui registre interne constituie o mica stiva. In acelasi timp setul de instructiuni al procesorului 80287 contine si instructiuni destinate operatiilor implicind operandul din virful stivei si un operand continut in oricare alt registru. Ca procesor de uz general de tipul stack machine se poate cita transputerul elaborat de catre firma INMOS. Conceptul de stack machine este rar utilizat in practica, dar el s-a dovedit util in crearea de masini abstracte, folosite ca masini intermediare pentru generarea codului masina, problema ce face obiectul preocuparilor celor ce studiaza si realizeaza compilatoare.

2.1.3. Masini cu acumulator

Majoritatea microprocesoarelor din prima generatie sint masini cu acumulator, care foloseau un registru sau un mic numar de registre pentru prelucrarea datelor. In astfel de masini, un registru, numit acumulator, contine unul din operanzi si, in acelasi timp este folosit pentru a stoca rezultatul operatiei. Masinile cu acumulator poseda moduri simple de adresare, ceea ce nu ofera suficiente facilitati pentru limbajele de nivel inalt, care necesita determinarea in timpul rularii a adreselor in memorie ale unor variabile, deci nu se poate concepe determinarea acestora de catre compilator si fixarea in codul generat a valorilor gasite. Functia de baza a acumulatorului era aceea de a servi ca virf al stivei de evaluare, intrucit el constituie un operand al tuturor instructiunilor de prelucrare.

2.1.4. Masini cu registre index

Arhitecturile cu registre index au reprezentat un progres notabil fata de cele cu acumulator, intrucit permit evaluarea in timpul rularii a adreselor. Registrul index contine un numar care, prin adunarea cu o valoare continuta in codul instructiunii, permite determinarea adresei complete a operandului. O varianta o constituie registrele baza.

De multe ori aceeasi masina contine ambele tipuri de registre. Adresa operandului se determina adunind continutul registrului baza cu cel al registrului index si cu un offset continut intr-un cimp al instructiunii. iAPX 286 constituie un exemplu reprezentativ. Acest microprocesor dispune de registre index, baza si de segment, folosite la evaluarea adreselor.

Introducerea registrului index scurteaza lungimea instructiunii deoarece, in locul unei adrese complete, corpul acesteia poate contine doar un offset exprimat pe un numar mai mic de biti, la care se adauga un mic cimp pentru specificarea registrului index (in situatia ca microprocesorul dispune de mai multe astfel de registre).

2.1.5.Organizarea registrelor de uz general

Numeroase microprocesoare dispun de un set de registre interne care se pot utiliza pentru toate functiile posibile, intrucit toate instructiunile pot folosi orice registru, indiferent de numele acestuia (cu exceptia unui mic numar de registre destinate comenzii microprocesorului). Se spune ca aceste masini au un set ortogonal de instructiuni si un fisier de registre. Fiecarui registru ii poate reveni una din urmatoarele functii:

-acumulator,cind este utilizat pentru evaluarea de expresii;

-index/baza: orice registru poate fi desemnat ca registru baza sau registru index, utilizat la determinarea adresei operandului. Deci, orice registru poate stoca informatii de tipul indicatorului cadrului sau element din cimpul de afisare;

-indicator al variabilei: registrul este folosit pentru memorarea adresei sau este utilizat pentru explorarea unei date de lungime mare, cum este sirul de caractere;

-indicator de stiva: registrul permite implementarea mecanismului de stiva;

-registru de comanda: registrul contine informatii de comanda a microprocesorului. Este cazul unui registru de uz general care contine contorul programului.

Ortogonalitatea intre fisierul de registre si setul de instructiuni trebuie privita ca suport pentru executia eficienta a programelor scrise in limbaje de nivel inalt, intrucit simplifica optimizarea utilizarii de catre compilator a registrelor pe durata fazei de generare a codului. Asa cum s-a aratat [5], optimizarea se face mai usor fie cind exista mai putine variante, fie cind acestea sint uniforme. Ortogonalitatea este o noua contributie in favoarea uniformitatii si permite sa partajeze dinamic setul de registre intre diferitele functii, cum sint acumulatoare, registre baza, registre index, cu scopul satisfacerii cerintelor diverse ale programelor. Acesta este motivul pentru care piata actuala cunoaste o ampla raspindire a microprocesoarelor cu organizarea de tip general a registrelor, desi exista unele exceptii notabile.

Lungimea medie a instructiunii pentru tipul de organizare mentionat este mica, fapt datorat posibilitatii de a pastra in registre un numar mai mare de operanzi fata de alte structuri, iar specificarea unui registru ocupa mai putin spatiu in codul instructiunii comparativ cu specificarea unei adrese. Afirmatia este sustinuta si de disponibilitatea registrelor baza si index pentru stocarea adreselor de memorie. Pentru programele scrise in limbaje de nivel inalt multe variabile au adrese alocate dinamic, in timpul rularii, ceea ce impune necesitatea pastrarii lor in registre.

Desi mai putin evidenta la prima vedere, includerea unitatilor de prelucrare a numerelor cu virgula mobila (FPU) in clasa microprocesoarelor este o necesitate. Chiar daca ele executa operatii specializate, caracteristicile arhitecturale si programabilitatea justifica numele de microprocesor. Unele procesoare matematice au registrele organizate similar cu cele unitatii centrale de prelucrare in conjunctie cu care opereaza si, mai mult, pot avea fisierul de registre considerat ca o prelungire logica a fisierului de registre al unitatii centrale,cu care au comun chiar setul de instructiuni (cu exceptia celor pentru operatii aritmetice cu numere in formatul cu virgula mobila).

2.1.6. Masini fara registre

Asa cum s-a aratat, arhitecturile cu registre nu au doar avantajele unui cod mai compact si performante mai bune in anumite imprejurari, ci si dezavantajul creat de necesitatea unor operatii, consumatoare de timp, pentru salvarea contextului cind se face comutarea la un alt program. Mai delicata este problema in structurile multiprocesor, in care apare pericolul ca datele folosite in comun de programe rulind pe microprocesoare diferite sa fie comparate in registrele unei unei CPU, unde sa fie si modificate. Intrucit registrele nu sint accesibile dispozitivelor exterioare, modificarile nu sint vizibile de catre alte CPU.

In arhitecturile cu registre aceste probleme se solutioneaza fie prin intermediul unor instructiuni speciale, destinate manipularii datelor critice, fie prin unele particularitati de limbaj, care permit compilatorului identificarea variabilelor care nu pot fi copiate sau manipulate in registre. De aceea exista o serie de propuneri si chiar implementari de microprocesoare fara registre. Avantajele (comutarea rapida a contextului si eliminarea problemelor conexe variabilelor folosite in comun) le recomanda pentru folosirea in configuratii multiprocesor. iAPX432, familie ce va fi prezentata intr-un capitol ulterior, este un reprezentant tipic al acestei generatii de masini. Dintre dezavantaje sint de mentionat cresterea lungimii medii a instructiunii, precum si cresterea duratei medii de executie a unei instructiuni.

2.1.7. Influenta registrelor asupra compactitatii codului

Organizarea registrelor influenteaza lungimea medie a unei instructiuni. Cele doua cazuri extreme sint: masina fara registre si masina cu organizare de tip stiva. Prima clasa necesita specificarea - in cel mai nefavorabil caz - a unui numar de trei adrese. Cea de a doua clasa necesita specificarea de adrese doar pentru operatiile de acces la memorie. Intre cele doua extreme eista mai multe clase intermediare (masini cu o adresa - decicu acumulator fix, sau cu doua adrese).

Pentru evaluarea compactitatii codului mai sint de considerat si alti factori, intre care numarul de instructiuni necesar pentru a efectua o anumita operatie.

O comparatie intre parametrii de executie pe diverse tipuri de masini evidentiaza dezavantajele tipice ale masinii cu acumulator, care necesita un numar mai mare de operatii de acces la memorie (consumatoare de timp), consecinta a numarului mic de registre. Programul masinii cu organizarea bazata pe stiva este mai compact, dar masina cu registre de uz general poate emula comportamentul masinii cu stiva fara a consuma un numar superior de instructiuni.

2.1.8. Concluzii

Numarul, dimensiunea si functiile registrelor sint elemente de cea mai mare importanta in evaluarea organizarii interne a unui microprocesor, incluzind aici si procesoarele matematice.

Dimensiunile registrelor sint influentate de lungimea cuvintului de date extern si de dimensiunea adresei emise de catre CPU, adresele fiind un tip special de operanzi manipulati prin registre. Pentru microprocesoarele de 8 si 16 biti, cu lungimea cuvintului de date mai mica decit cea a adresei,se utilizeaza instructiuni speciale si mecanisme adecvate pentru operatii simple asupra adreselor. Acest lucru nu mai este necesar la microprocesoarele de 32 biti. Pentru manipularea de catre registre a datelor mai scurte decit lungimea registrelor se folosesc diverse metode. In fig. 2.2. se indica trei astfel de metode. Ele sint ilustrate considerind un fisier de registre compus din 16 registre de 32 biti. Fig. 2.2.a. ilustreaza memorarea octetilor, a cuvintelor si a cuvintelor lungi, cite un element de date in fiecare registru, indiferent de lungimea elementului. Aceleasi 16 registre de 32 biti apar ca 64 registre de 16 biti sau 128 registre de 8 biti (fig. 2.2.b.). In fig. 2.2.c. cele 16 registre sint specializate in manipularea octetilor, cuvintelor si cuvintelor lungi. De remarcat ca s-au creat cite 16 registre pentru fiecare lungime de cuvint.

Prima schema de alocare este mai simpla. A doua schema conserva, intr-o oarecare masura, ortogonalitatea si introduce o mai flexibila utilizare a registrelor, dar si complicatii in utlizarea lor optima. A treia schema este caracterizata de cel mai mic grad de ortogonalitate, intrucit contine restrictii in privinta utilizarii registrelor.

Fig 2.2. Diferite scheme de alocare in registre a operanzilor de variate dimensiuni

Orice microprocesor dispune, in afara celor mentionate pina acum, de registre dedicate unor functii speciale. Este cazul celor ce contin indicatorii de conditie, contorul programului, precum si al registrelor de segment sau de pagina. In unele sisteme, aceste registre au copii, una fiind disponibila pentru modul de lucru utilizator (user mode) iar cealalta pentru modul de lucru supervizor (supervisory mode).

2.2. Numere cu virgula mobila

2.2.1. Reprezentarea numerelor reale

Numerele reale constituie un tip de date important, indeosebi pentru aplicatii stiintifice si ingineresti. Multimea numerelor reale constituie un interval, deci intre oricare doua numere reale exista un al treilea. Calculatoarele permit reprezentarea exacta doar pentru un numar finit de numere, deoarece orice element de date se reprezinta cu ajutorul unui numar finit de biti, deci exista un numar finit - chiar daca mare - de combinatii posibile. Deci valorile reale pot fi reprezentate doar cu aproximatie intr-un sistem de calcul.

O alta caracteristica a datelor reale este gama larga in care se incadreaza valorile acestora. Esentiala ramine reprezentarea cu o anumita precizie relativa a numerelor, indiferent de eroarea absoluta de reprezentare. Adesea se vorbeste despre reprezentarea cu un numar dat de zecimale exacte.

O metoda de a separa domeniul si precizia consta in a reprezenta numerele in forma:

x = (-1)s (j.m)Ke,

in care s este bitul de semn, j este partea intreaga a mantisei, m - partea sa fractionara, K este baza de reprezentare si e - exponentul. j are lungimea de un bit.

Deoarce baza K este o constanta a reprezentarii, valoarea unui numar in formatul cu virgula mobila este complet specificata prin:

-semnul mantisei;

-partea intreaga a mantisei;

-partea fractionara a mantisei;

-exponentul.

Fig. 2.3. indica un mod de alocare a celor n biti destinat reprezentarii unui numar real.

Fig. 2.3. Formatul generic pentru numere cu virgula mobila.

Este interesant de remarcat relatia intre mantisa si valoarea lui K: alegerea bazei de reprezentare egala cu baza de numeratie pentru mantisa simplifica separarea partilor intreaga si fractionara. Este motivul pentru care, in format extern, K = 10, iar in format intern K = 2 (formatul extern este cel cu care opereaza programatorul, iar formatul intern - cel asupra caruia opereaza sistemul de calcul).

Valoarea lui K impreuna cu numerele de biti folosite pentru reprezentarea numerelor reale definesc gama si precizia reprezentarii in formatul cu virgula mobila. Gama este cuprinsa intre si . Precizia relativa este data de valoarea maxima a raportului (xi+1 - xi)/xi, xi si xi+1 fiind doua valori reprezentabile intre care nu mai exista o a treia valoare. Raportul este maxim cind mantisa este minima, deci precizia relativa este, iar cea absoluta are valoarea .

Se poate vedea disjunctia intre cerintele referitoare la gama si precizie, deoarece valori mari ale lui q maresc gama, dar inrautatesc precizia.

Multe formate de reprezentare cu virgula mobila folosesc forma normalizata a mantisei, in care j este egal cu 1. Utilizarea formei normalizate conduce la obtinerea preciziei maxim posibile in urma calculelor, caci trunchierea are loc dupa normalizare. In schimb ea nu permite reprezentarea exacta a lui 0, si poate avea ca efect si limitarea inferioara a celei mai mici valori pozitive reprezentabile.

In urma operatiilor cu numere reprezentate in formatul cu virgula mobila pot aparea depasiri superioare (overflow), cind rezultatul depaseste limita maxima a gamei de reprezentare, sau depasiri inferioare (underflow), cind rezultatul este mai mic decit cel mai mic numar reprezentabil.

2.2.2. Standardul IEEE 754

Standardul IEEE 754 acceptat de marea parte a specialistilor, ofera o maniera unitara de reprezentare a numerelor in formatul cu virgula mobila, fapt ce a condus la utilizarea sa exclusiva in toate sistemele cu microprocesoare. Standardul IEEE 754 permite si conversia comoda intre diferite formate cu virgula mobila, conversii din si in formatul BCD, precum si tratarea cazurilor de exceptie.

2.2.2.1. Formate

Exista patru formate, impartite in doua clase: formate de baza si formate extinse. Fiecare grup include un format cu precizie simpla si un altul cu precizie dubla. Formatele sint compuse din bitul de semn s, o parte fractionara f si un exponent e. Desi e poate fi pozitiv sau negativ, el este adunat cu un deplasament (reprezentarea cu exponent deplasat) asa ca valoarea sa minima este zero.

Formatele extinse depind de implementare si sint compuse dintr-un bit de semn s, o parte intreaga a mantisei j, o parte fractionara f a acesteia, si un exponent e, de asemenea deplasat.

Fig.2.4. Formate IEEE 754

Formatul de baza cu precizie simpla. Acest format include un bit de semn, un exponent de 8 biti si o mantisa de 32 biti (fig. 2.4.a). Valoarea v a numarului se determina astfel:

-daca e=255 si f=0, atunci v = NaN (Not a Number - nu este valoare numerica in formatul cu virgula mobila );

-daca e=255 si f=0, atunci v = (-1)s x;

-daca 0<e<255 atunci v = (-1)s x 2e-127 x 1.f (1.f este numarul zecimal cu partea intreaga 1 si cea fractionara f);

-daca e=0 si f=0, atunci v = (-1)s x 2-126 x 0.f;

-daca e=0 si f=0, atunci v = 0

Formatul de baza cu precizie dubla. Formatul include un bit de semn, un exponent de 10 biti si o mantisa de 52 biti (fig. 2.4.b). Valoarea v a numarului se determina astfel:

-daca e=2047 si f=0, atunci v = NaN ;

-daca e=2047 si f=0, atunci v = (-1)s x ;

-daca 0<e<2047, atunci v = (-1)s x 22-1023 x 1.f;

-daca e=0 si f=0, atunci v = (-1)s x 22-1023 x 0.f;

-daca e=0 si f=0, atunci v=0

Formatul extins, cu precizie simpla. Formatul include un bit de semn, o parte intreaga de 1 bit, o parte fractionara de cel putin 31 biti si cu un exponent cu valoarea minima m si valoarea maxima M, cu m < 1022 si M < 1023. Valoarea v a numarului se determina astfel :

-daca e=M si f=0, atunci v = NaN ;

-daca e=M si f=0, atunci v = (-1)s x ;

-daca m < e < M , atunci v = (-1)s x 2e x (j.f);

-daca e=m si j=f=0, atunci v = 0 ;

-daca e=m si j=0 sau f=0, atunci v = (-1)s x 2e (j.f),cu e` =m sau e` = m + 1.

Formatul extins, cu precizie dubla. Formatul este similar cu cel extins cu precizie simpla, dar m < -16382 si m < 16383, iar numarul de biti al partii fractionare este de cel putin 63.

2.2.2.2 Rotunjirea

Operatia de rotunjire actioneaza asupra unui numar, considerat a avea precizie infinita, si il modifica pentru a obtine un alt numar care sa se poata incadra intr-un format de destinatie. Operatia este insotita si de un indicator care arata daca rezultatul este sau nu corect.

Standardul IEEE 754 include un mecanism de rotunjire care se aplica automat in conditiile in care nu se selecteaza un altul din trei disponibile. Mecanismul standard efectueaza rotunjirea la cea mai apropiata valoare ce se poate reprezenta. Daca exista doua valori posibile, se alege cea cu sot. In astfel de cazuri eroarea de rotunjire este egala cu o jumatate din valoarea asociata celei mai putin semnificative pozitii binare.

Cele trei mecanisme de rotunjire selectabile sint:

-rotunjirea catre + ;

-rotunjirea catre - ;

-rotunjirea catre 0 (trunchiere);

Operatia de rotunjire poate fi efectuata pentru a produce formatul cerut de destinatia la care se stocheaza numarul, dar ea care poate fi efectuata si asupra numerelor cu dubla precizie in scopul conversiei lor in formate cu simpla precizie. Standardul IEEE 754 include o asemenea facilitate deoarece unele masini nu accepta decit formatul cu dubla precizie.

2.2.2.3. Valori speciale

Reprezentarea standard in formatul cu virgula mobila accepta infinitul in operatii aritmetice sub doua forme, selectabile de catre utilizator: cea proiectiva si cea afina. In absenta optiunii utilizatorului se adopta forma proiectiva. Forma afina este definita prin relatia:

- < orice numar finit < +

Forma proiectiva compara intotdeauna numerele egale, indiferent de semn. Standardul defineste un set de operatii astfel incit utilizarea unui operand nu conduce la rezultate nedorite. In consecinta nu sint necesare capcane pentru detectarea acestor situatii, raminind, insa, valabile restrictiile privind operato- rul care se vor discuta mai tirziu.

O alta valoare speciala este NaN, introdusa pentru a semnala operatii ilegale sau operatii care produc rezultate ilegale. Standardul defineste capcane pentru valorile NaN, care activeaza un caz de exceptie cind asupra acestor valori se efectueaza operatii. Exista si situatia in care sint permise operatii cu una sau mai multe valori NaN, dar sint afectati in mod corespunzator indicatorii de eroare.

2.2.2.4. Operatii

Standardul mentionat defineste urmatoarele operatii: adunare, scadere, inmultire, impartire, extragerea radicalului de ordinul doi, determinarea restului unei impartiri, conversii de formate (virgula mobila, intregi, BCD), comparatia intre numere in formatul cu virgula mobila. In cadrul ultimei operatii sint permise relatiile "mai mic" , "egal" , "mai mare", si "neordonat",acestea din urma pentru cazurile utilizind argumente sau NaN.

2.2.2.5 Exceptii si capcane

Standardul IEEE 754 defineste exceptiile care trebuie detectate, precum si informatiile care trebuie transmise rutinei activate de capcana, impreuna cu indicatorii de conditie.



Operatie ilegala. Acest tip de exceptie se poate subdiviza in doua clase: operand ilegal si rezultat ilegal. In ambele clase, daca nu se activeaza o capcana, rezultatul este NaN.

Exceptia "operand ilegal " apare cind:

-cel putin un operand este NaN si nu este activata nici o capcana;

-se executa una din operatiile (reprezentare proiec- tiva), (reprezentare afina), / , 0 / 0, 0 *;

-in operatia REM de evaluare a restului impartirii lui x cu y (x REM y) x este infinit sau y este zero ;

-se evalueaza radicalul de ordinul doi al unui numar negativ;

-se executa conversia din formatul cu virgula mobila in intreg sau BCD si, datorita unei depasiri superioare, sau operand sau NaN ,conversia nu se poate termina corect;

-se efectueaza comparatii cu predicatele < , > sau negatele lor, iar relatia dintre operanzi este "neordonat".

Exceptiile datorate rezultatelor incorecte apar cind rezultatul unei operatii nu este adecvat formatului de destinatie.

Alte exceptii. Alte exceptii evidentiate de catre standard sint:

-impartirea cu zero ;

-depasirea superioara (overflow);

-depasirea inferioara (underflow);

-rezultate inexacte, care apar cind valoarea rotunjita a rezultatului produce o depasire.

Parametrii capcanelor. Capcanele (traps) asociate exceptiilor pot fi activate sau dezactivate de catre utilizator. Cind o capcana este activata, exceptia are ca efect activarea unei rutine definite de utilizator sau proprie sistemului. Acestei rutine trebuie sa i se furnizeze urmatoarele informatii:

-tipul exceptiei detectate;

-tipul de operatie care se executa;

-formatul de destinatie;

-rezultatul corect rotunjit (in cazul depasirilor superioara sau inferioara), rezultatul inexact si ilegal, ca si informatia care nu se incadreaza in formatul de destinatie;

-valorile operanzilor (in cazul impartirii cu zero si al exceptiilor privind operanzii (legali).

2.3. Intreruperi.

Intreruperea este produsa de un eveniment exterior CPU, adesea de o operatie de intrare/iesire. Efectul intreruperii consta in suspendarea executiei programului aflat in rulare si in transferarea controlului unei rutine dedicate tratarii intreruperii (intrrerupt handler); acesteia ii revine sarcina de a efectua actiunile cerute de evenimentul extern care a generat intreruperea.

Intreruperile imbunatatesc eficienta de utilizare a unitatii centrale, deoarece permit efectuarea de operatii I/O in paralel cu activitatea CPU. In figura 2.5 se exemplifica situatia transferului unui bloc de date efectuat in paralel cu operatia de calcul. CPU transmite primul element de date spre dispozitivul periferic si activeaza posibilitatea de intrerupere de catre acesta, dupa care reia operatiile de calcul. Perifericul incepe operatia de transfer spre iesirea blocului de date. Cind transferul s-a terminat perifericul genereaza o cerere de intrerupere catre CPU, care isi suspenda temporar activitatea si activeaza rutina de tratare. Aceasta testeaza situatia blocului ce trebuie transferat si, in cazul in care este necesar, transmite perifericului un nou element de date, dupa care controlul este returnat programului intrerupt. Operatia continua pina cind perifericul a transmis intregul bloc, moment la care posibilitatea de emitere de catre acesta a cererilor de intrerupere este dezactivata.

Fig. 2.5. Folosirea intreruperilor pentru simultaneitatea operatiilor CPU si I/O

2.3.1. Tipuri de intreruperi.

Microprocesoarele folosesc, in general, patru clase de intreruperi:

a) intreruperi vectorizate;

b) intreruperi nemascabile;

c) intreruperi nevectorizate;

d) intreruperi cu relansare.

a) Intreruperi vectorizate.

Intrucit exista mai multe surse de intreruperi, selectarea rutinei de tratare presupune cunoasterea identitatii sursei intreruperii. Aceasta se realizeaza prin executia unui ciclu special, numit ciclu de confirmare a acceptarii cererii de intrerupere (interrupt acknowledge cycle). Pentru aceasta se utilizeaza magistrala externa a microprocesorului. In cadrul ciclului nu se executa operatii de acces la memorie sau la un port de intrare/iesire, ci se comanda (direct sau indirect) elementul care a generat intreruperea, acesta trebuind sa furnizeze CPU un cod de identificare. Acest cod, citit de catre microprocesor in ciclul de confirmare a acceptarii cererii de intrerupere, este utilizat de catre CPU ca index al unei matrici pastrate in memorie. In felul acesta se poate realiza accesul la elementul matricii care contine informatia necesara lansarii in executie a rutinei de tratare a intreruperii, dupa care are loc activarea rutinei mentionate.

In general intreruperile vectorizate sint mascabile adica este posibila ignorarea cererii de intrerupere vectorizata formulata de un dispozitiv extern. Pentru aceasta se folosescinstructiuni adecvate.

Primirea cererilor de intreruperi vectorizate se face printr-un singur semnal fizic, deoarece detaliile privind sursa cererii se obtin prin ciclul de confirmare a acceptarii cererii de intrerupere.

b) Intreruperi nemascabile.

Acest tip de intreruperi nu poate fi mascat, deci o astfel de cerere de intrerupere suspenda executia programului aflat in rulaj indiferent de functia executata de acesta. Evenimentele externe asociate intreruperilor nemascabile sint mai importante decit orice operatie posibila efectuata prin program. De aceea, doar evenimentelor cu efecte catastrofale li se atribuie posibilitatea de emitere de intreruperi nemascabile. Ca exemple tipice se mentioneaza tendinta de a iesi din parametrii de functionare normala a sursei de alimentare sau detectarea unor erori in operatiile in conjunctie cu memoria.

Semnalarea unei cereri de intrerupere nemascabila se face printr-un semnal de intrare distinct. Nu mai este necesara indicarea sursei unei astfel de intreruperi, intrucit ea se cunoaste. Cu toate acestea, la primirea unei intreruperi nemascabile, majoritatea microprocesoarelor efectueaza acelasi ciclu de confirmare a acceptarii cererii de intrerupere nu pentru obtinerea de date suplimentare, ci pentru a confirma initiatorului ca intreruperea se afla in curs de servire.

c) Intreruperi nevectorizate

Intreruperile nevectorizate se implementeaza prin acelasi mecanism ca si in cazul intreruperilor nemascabile, adica exista linii specializate de intrare pentru semnalarea cererilor. Spre deosebire de cele nemascabile, intreruperile nevectorizate pot fi dezactivate prin program.

d) Intreruperi cu relansare

Cind apare necesitatea servirii unei cereri de intrerupere CPU suspenda programul in curs de executie si salveaza minimum de informatie pentru a putea relua, la un moment ulterior, executia programului suspendat. Suspendarea unui program se face, de regula, la terminarea instructiunii curente prntru a se reduce la minimum posibil informatiile ce se salveaza in conjunctie cu programul intrerupt. Sint, insa, cazuri cind intreruperea este declansata de o situatie care impiedica insasi terminarea executiei corecte a unei instructiuni, caz in care intreruperea trebuie servita inainte de terminarea instructiunii. Ca exemplu se poate cita aparitia unei erori intr-un ciclu de acces la memorie. Deoarece acest tip de intrerupere suspenda un program in mijlocul executiei unei instructiuni este necesara salvarea intregii informatii necesare executiei instructiunii. O alta solutie ar consta in proiectarea instructiunilor astfel incit sa fie posibila intotdeauna repornirea executiei lor, indiferent de momentul la care a survenit intreruperea.

2.3.2. Timpul de latenta

Intreruperile semnaleaza aparitia unor evenimente externe care necesita o anumita actiune de raspuns din partea unitatii centrale de prelucrare. In cazul transferului unui bloc de date spre un periferic, evenimentul consta in transferul elementului de date urmator sau in dezactivarea intreruperii de la acel periferic (atunci cind transferul intregului bloc este terminat).

Un element important de caracterizare a microprocesoarelor este viteza cu care acestea raspund la cererile de intrerupere. Intervalul de timp minim intre servirea a doua cereri de intrerupere nu poate fi mai scurt decit timpul de servire a uneia dintre ele. Timpul cerut de servirea unei cereri de intrerupere depinde de operatiile necesitate de evenimentul extern care a cauzat intreruperea, precum si de intirzierea intre activarea cererii si inceputul activitatii rutinei de testare. Aceasta intirziere este caracteristica microprocesorului si se numeste timp de latenta.

Pentru a putea evalua timpul de latenta a unui microprocesor trebuie examinata secventa de operatii necesare pentru comutarea de la programul intrerupt la rutina de servire a intreruperii. Operatiile necesare in acest scop sint:

-salvarea in stiva a contorului programului si a indicatorilor de conditie;

-executia ciclului de confirmare a acceptarii cererii de intrerupere;

Aceste operatii sint cele strict necesare pentru lansarea in executie a rutinei de tratare. De cele mai multe ori, rutina foloseste toate registrele unitatii centrale (sau o mare parte a lor), asa ca este necesara si salvarea in stiva a continutului acestora. Unele microprocesoare efectueaza automat salvarea, o data cu cea a continutului programului si a indicatorilor; la altele salvarea se face in rutina de tratare a intreruperilor. Oricum, timpul de salvare trebuie luat in considerare la evaluarea timpului de latenta.

2.3.3. Prioritati.

Intrucit, in cadrul unui sistem, pot exista mai multe surse de intrerupere, este posibila aparitia simultana a mai multor cereri de intrerupere. In consecinta devine necesara prezenta unui mecanism de solutionare a conflictului intre aceste cereri. Mecanismul se bazeaza pe asocierea de prioritati cererilor de intrerupere. Lui i se poate aloca si sarcina de a decide daca unei cereri de intrerupere i se poate da raspuns la un anumit moment. Regula generala adoptata este accea ca o cerere nu poate fi acceptata daca, la acel moment, se prelucreaza o intrerupere de nivel de prioritate superior. Ca urmare, tratarea cererilor de intrerupere cu prioritate mai mica este aminata pina cind conditiile permit tratarea.

Criteriul de baza pentru alocarea prioritatilor este bazat pe viteza de raspuns impusa de evenimentele asociate. Cu cit aceasta este mai mare, cu atit nivelul de prioritate este mai inalt. Ordinea de prioritate este, in general, urmatoarea:

a) intreruperi cu relansare; ele au prioritatea maxima, deoarece sint asociate unor evenimente care nu pot astepta terminarea instructiunii curente pentru a fi servite;

b) intreruperi nemascabile; intreruperile din aceasta clasa sint mai prioritare decit cele vectorizate sau nevectorizate, intrucit evenimentele care le determina necesita o servire rapida si intreruperile nu pot fi mascate;

c) intreruperi vectorizate;

d) intreruperi nevectorizate.

Intreruperile vectorizate constituie o clasa aparte, implicind diferiti timpi de raspuns, deci cererile sint formulate pe aceeasi linie catre unitatea centrala de prelucrare. Evenimentul care determina o intrerupere vectorizata este specificat prin indexul vectorului, citit pe durata ciclului de confirmare a acceptarii cererii de intrerupere. In consecinta este necesara introducerea unei ordonari suplimentare a prioritatilor in clasa intreruperilor vectorizate, ordonare realizata prin folosirea unui circuit exterior unitatii centrale de prelucrare, intrucit CPU are o singura linie pentru toate cererile de acelasi tip.

Fiecare familie de microprocesoare dispune de o unitate de gestiune a intreruperilor, care arbitreaza diferitele cereri de intreruperi vectorizate (fig. 2.6). Aceste circuite accepta cererile individuale de intreruperi de la dispozitivele externe si asociaza cite o prioritate fiecarei cereri. Cind se desfasoara un ciclu de confirmare a acceptarii cererii de intrerupere semnalul de iesire INTAi indica evenimentul a carui cerere de intrerupere este preluata spre servire. INTAi permit dispozitivului selectat sa transmita pe magistrala indexul vectorului sau de intrerupere pe durata ciclului de confirmare a acceptarii cererii de intrerupere, astfel incit sa se poata activa de catre CPU subrutina adecvata de tratare.




Fig. 2.6. Interconectarea intre CPU si unitatea de gestiune a intreruperilor

Fig. 2.7 Un mod de implementare a prioritatilor (daisy chain) Daca numarul evenimentelor generatoare de cereri de intrerupere este superior celui cu care poate lucra unitatea de gestiune a intreruperilor se poate realiza conexiunea din fig. 2.7., numita daisy chain, in care m astfel de unitati sint interconectate la aceeasi linie INTRi si aceeasi linie INTAi. Devine posibila ierarhizarea prioritatilor pe o intrare i de formulare a cererilor de intrerupere catre CPU. Prioritatea depinde de pozitia in inserierea de unitati de gestiune a intreruperilor. Cind exista o cerere de intrerupere formulata prin intermediul unei unitati toate cererile formulate la unitati ulterioare in conectarea seriala nu sint onorate la acel moment.

O alta caracteristica a unitatilor de gestiune a cererilor de intrerupere consta in dezactivarea tuturor cererilor de intrerupere avind nivelul de prioritate inferior celei aflate in curs de servire. Drept urmare, evenimentele minore sint impiedicate sa lungeasca durata servirii intreruperii provocate de un eveniment important. Deci, daca in curs de rulare se afla rutina intreruperii de prioritate i, intreruperea de prioritate j va fi servita doar dupa terminarea tratarii intreruperii i,presupunind ca i are prioritate superioara lui j.

2.4. Capcane.

Capcana (trap) este un mecanism care produce apelarea automata a unei proceduri. Spre deosebire de o intrerupere, capcana este activata, explicit sau implicit, de catre o actiune efectuata de catre programul aflat in rulaj. Capcanele sint utilizate pentru tratarea unor conditii de exceptie, adesea anormale, care apar in cursul existentei unui program, sau pentru activarea unor proceduri speciale, cum ar fi rutine ale sistemului de operare.

Exceptiile generate de gestiunea memoriei externe sau de unitatile cu virgula mobila pot fi considerate drept capcane, desi CPU este prevazuta cu linii externe, de acelasi tip cu cele pentru intreruperi, pentru detectarea acestor situatii. In cazul capcanelor, aceste linii externe sint activate de stari de eroare cauzate de program, fie in gestiunea memoriei, fie in utilizarea unitatii aritmetice cu virgula mobila.

Exista trei tipuri de capcane:

a) capcane activate intotdeauna ;

b) capcane activate/dezactivate prin program ;

c) capcane solicitate explicit prin program.

Primul din aceste tipuri se asociaza cu un eveniment de tip eroare,indiferent de operatia efectuata de catre CPU; de aceea, nu exista mijloace de dezactivare a acestui tip de capcana. Exemple tipice in acest sens sint: tentativa de a executa o instructiune inexistenta sau aceea de a executa, dintr-un regim neprivilegiat, o instructiune rezervata regimului privilegiat. In aceeasi clasa pot fi incadrate si capcanele in conjunctie cu gestiunea memoriei externe.

In al doilea tip de capcane sint cuprinse evenimentele care reprezinta sau nu reprezinta o conditie de exceptie sau anormala, in functie de actiunile specifice efectuate de catre program. Acesta este motivul pentru care capcanele pot fi activate (dezactivate) de programul insusi, dupa cum este necesar sau nu a detecta aceste situatii. Standardul IEEE 754 prevede ca exceptiile generate de operatiile cu numere cu virgula mobila sau de conversie pot genera o capcana numai in urma unei activari de catre program. Un alt exemplu: capcana utilizata pentru a detecta tentativa de executie a unei operatii cu operanzi cu virgula mobila in absenta unitatii aritmetice dedicate acestor operatii. In aceste cazuri capcana se dezactiveaza cind configuratia hardware include procesorul matematic.

Al treilea tip de capcana nu se foloseste, in mod obisnuit, pentru detectarea conditiilor anormale, dar reprezinta un mijloc de activare a executiei unor rutine speciale, de cele mai multe ori acestea fiind functii ale sistemului de operare. Adesea ele sint astfel organizate incit sa fie posibila activarea lor la aparitia unor capcane. Operatiei ii sint dedicate instructiuni speciale, numite adesea apeluri de sistem (system-call instructions), data fiind menirea lor principala de activare a rutinelor sistemului de operare. Cind se executa o astfel de instructiune se activeaza capcana corespunzatoare. Prin asocierea unui parametru aceeasi instructiune poate activa capcane diferite.

2.4.1. Manipularea capcanelor

Actiunile cerute de manipularea capcanelor sint similare cu cele executate la aparitia unei intreruperi: se salveaza in stiva contorul programului si indicatorii de conditie, apoi se executa saltul la rutina de tratare a capcanei. Informatia despre rutina de tratare este memorata intr-un vector stocat intr-o zona de memorie bine precizata; in anumite cazuri capcanele si intreruperile folosesc in comun acelasi vector.

Capcanele permanent activate sau cele care pot fi activate de catre program au asociat un element specific al vectorului capcanei, intrucit corespund unor evenimente definite aprioric. Al treilea tip de capcane folosesc acest parametru asociat drept index pentru identificarea rutinei corespunzatoare, intrucit programul este cel ce asociaza un anume inteles acestor capcane. Capcane destinate detectarii anomaliilor efectueaza si salvarea in stiva a conditiilor care au provocat capcana, fapt ce permite rutinei de tratare sa furnizeze diagnoza privind eroarea si sa "repare" efectele acesteia.

De regula, rutina de tratare a capcanei se executa la un nivel privilegiat superior fata de cel in care se afla programul ce a produs capcana. Unele microprocesoare au doua indicatoare de stiva, unul pentru starea normala, iar celalalt - pentru starea sistem. Stiva sistem este folosita pentru salvarea informatiilor legate de tratarea capcanei, asa ca, printr-o simpla instructiune return-from-interrupt, se termina executia rutinei si se returneaza controlul programului curent.

2.4.2. Prioritati

Aparitia simultana de intreruperi si capcane ridica probleme legate de selectarea celei careia sa i se acorde atentie.

Ca si intreruperile, capcanele sint servite, de regula, la terminarea instructiunii curente. Unele capcane (cum este page fault trap, despre care se va discuta mai tirziu) trebuie servite imediat, intrerupind instructiunea curenta. Ele pot fi considerate similar cu intreruperile cu relansare.

Desi fiecare microprocesor are propriile sale reguli de prioritate privind capcanele, se pot folosi urmatoarele criterii generale:

- capcanele cu relansare au prioritatea maxima, ca si intreruperile cu relansare;

-celelalte capcane au prioritati superioare intreruperilor mascabile, deoarece ele sint folosite pentru detectarea erorilor si starilor anormale, deci necesita atentie imediata;

-intreruperile nemascabile pot intrerupe rutinele de tratare a capcanelor si a intreruperilor.

Evident, pentru asignarea de prioritati capcanelor nu sint necesare circuite exterioare.

2.5. Instrumente de depanare

Practica arata ca programele, oricit de ingrijit sint proiectate si realizate, contin, cel putin in faza initiala, erori (bugs). Erorile trebuie localizate si corectate (programele trebuie depanate), proces care, de multe ori, este iterativ. Depanarea este un proces dificil, care se simplifica prin fragmentarea programelor in blocuri mai mici, mai usor de stapinit. In sprijinul depanatorului se pot oferi urmatoarele seturi de instrumente:

a) executie pas cu pas;

b) puncte de suspendare a executiei (breakpoints);

c) trasee ale programului (program trace).

Primul instrument permite rularea programului instructiune cu instructiune, executia fiind stopata la sfirsitul fiecarei instructiuni. Prin examinarea starii CPU si a locatiilor de memorie se poate determina eventuala abatere a programului de la comportarea dorita.

Punctele de suspendare a executiei permit suspendarea executiei unui program dupa executia unei anumite instructiuni. Ele permit executia unor blocuri mai mari de program inainte de suspendarea executiei la un anumit punct cu scopul testarii rezultatelor intermediare.

Traseul programului consta intr-o inregistrare a tuturor instructiunilor executate de program de la ultima suspendare si permite verificarea corectitudinii fluxului de instructiuni parcurse de program. Pentru oferirea suportului necesar acestor instrumente de depanare, toate microprocesoarele moderne sint prevazute cu mecanismele hardware care se descriu in cele ce urmeaza.

2.5.1. Capcana de traseu

Majoritatea microprocesoarelor sint prevazute cu o capcana speciala, numita trace trap - capcana de traseu. Ea permite atit executia pas cu pas, cit si realizarea de trasee ale programului. Capcana se activeaza (dezactiveaza) prin intermediul unui indicator de conditie special, accesibil prin program.

Cind este activa, capcana de traseu lanseaza in executie rutina de tratare dupa ultima instructiune executata. Desigur, capcana este dezactivata automat pe durata executiei rutinei de tratare in scopul evitarii generarii unei bucle infinite.

Rutina de tratare a capcanei de traseu permite programatorului sa afiseze un set de informatii (starea CPU, locatii de memorie) care sa inlesneasca depanarea programului. Aceeasi rutina permite memorarea intr-un tampon al traseului a datelor despre instructiunea executata.

2.5.2. Puncte de suspendare software a executiei

Rularea pas cu pas a programelor este, de cele mai multe ori, consumatoare de timp, mai ales dupa ce s-au corectat mari blocuri de program. In aceste conditii isi dovedeste utilitatea punctul de suspendare a executiei (breakpoint). Aceasta facilitate permite inserarea in program a unor "comenzi" de suspendare. In acest scop se selecteaza instructiunile pentru care tentativa CPU de a le executa duce la suspendarea executiei programului. Pentru implementare se foloseste o instructiune capcana specifica, a carei lungime este cea minima permisa pentru o instructiune.

Cerinta privind lungimea este mai bine inteleasa cind se considera operatiile necesare realizarii punctului de suspendare a executiei (fig. 2.8.). Instructiunea a carei executie ar trebui sa suspende rularea programului este stocata intr-o zona speciala de memorie si este inlocuita prin instructiunea breakpoint. De aceea, instructiunea capcana nu poate 4fi mai lunga decit cea pe care o inlocuieste; in caz contrar, substituirea ar afecta si o a doua instructiune. Cind contorul programului indica locatia in care se afla instructiunea breakpoint, aceasta este executata, fapt ce rezulta in activarea rutinei asociate de tratare.

Fig 2.8. Operatii in conjunctie cu punctul de suspendare software a executiei

Este posibila reluarea executiei programului dupa o suspendare prin breakpoint, dar, in prealabil,instructiunea originala trebuie readusa in locatia corespunzatoare din zona de salvare. 2.5.3. Punct de suspendare hardware a executiei

Mecanismul de suspendare software a executiei permite utilizatorului sa intrerupa executia unui program doar cu ajutorul unei instructiuni particulare. Nu este posibil sa se stopeze rularea programului impunind drept conditie de oprire accesul la un anumit operator dintr-o anumita locatie.

Punctul de suspendare hardware a executiei se implementeaza cu ajutorul unitatii de gestiune a memoriei (memory management unit - MMU), care contine registre in care se inscrie adresa de memorie la a carei adresare trebuie sa se suspende executia programului. Cind mecanismul de breakpoint este activat, MMU compara fiecare noua adresa de acces cu continutul registrelor de breakpoint. La coincidenta MMU emite un semnal capcana, fapt ce permite ca tentativa de acces la locatia de memorie al carei nume este pastrat in registrele de breakpoint sa conduca la suspendarea executiei programului si activarea unei rutine adecvate de tratare a situatiei.

Microprocesoarele moderne permit utilizarea de puncte de suspendare a executiei programului atit software, cit si hardware. Numarul primelor este limitat doar de dimensiune zonei de salvare, in timp ce numarul de puncte de suspendare hardware este limitat de numarul de registre breakpoint din MMU.

2.6. Concluzii

Spre deosebire de cele din capitolul anterior, caracteristicile arhitecturale ce fac obiectul acestui capitol nu sint special destinate implementarii programelor scrise in limbaje de nivel inalt, poate cu exceptia celei referitoare la aritmetica numerelor cu virgula mobila.

Aceste caracteristici au importanta in utilizarea microprocesorului pentru aplicatii specifice. De exemplu, tipul si viteza mecanismului de intreruperi definesc comportarea microprocesorului la evenimente externe, indisolubil legata de functionarea in sistemele de timp real. Mai mult, asa cum se va constata, aceste mecanisme sint indispensabile in implementarea functiilor complexe ale sistemelor de operare, cum sint gestiunea memoriei, protectia, multiprelucrarea.





Document Info


Accesari: 2452
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )