Documente Academic
Documente Profesional
Documente Cultură
Date de contact
Profesor: Email:
Asistenti:
Laborator: Website:
Traian C. IONESCU tcion@rdsmail.ro traian.ionescu@siveco.ro traiancionescu@gmail.com Radu PIETRARU Andrei HOHAN Bogdan CARSTOIU ED 312 http://smp.aii.pub.ro/
2
Capitolul 1
Introducere
Componenta esentiala a programei de computer engineering Accentul este pus mai putin pe analiza si formule si mai mult pe intelegerea proiectarii si a functionarii unui sistem real. Plan invatamant Automatica
4
Obiectivele cursului
Obiective generale: Obtinerea de experienta in abordarea subiectelor tehnice complexe si capacitatea de a digera informatii tehnice detaliate intr-un interval de timp rezonabil de scurt
Dezvoltarea abilitatii de a combina creativitatea cu abordarea metodica a proiectarii hardware si software pentru a minimiza numarul de erori Dezvoltarea atentiei catre detalii la implementarea proiectarii Obtinerea de experienta in aplicarea metodelor de rezolvare a problemelor pentru a gasi solutii ce satisfac un set de constrangeri, debugging hardware/software
5
Obiectivele cursului
Obiective specifice: Intelegerea legaturii dintre conceptele logicii digitale de nivel jos si conceptele arhitecturii de nivel inalt
Intelegerea executiei unei instructiuni ciclu cu ciclu Intelegerea conceptelor precum: magistrala, memorie, interfatarea acestora, intreruperi (..)
Evaluarea cunostintelor
Structura cursului: 14 sapt x 3 ore/sapt = 42 ore curs 14 sapt x 2 ore/sapt = 28 ore aplicatii Metoda de evaluare a cunostintelor: evaluarea continua Evaluarea activitatii la curs: 2 examene scrise, (sapt. 8, sesiunea de vara) Evaluarea activitatii aplicative: 4 lucrari (2 teme de programare, 1 tema de cercetare + 1 tema de proiectare hardware)
7
Baza materiala:
25 PCuri conectate la Internet (ED308) 12 PCuri conectate la Internet (ED312) 12 platforme cu 8051 12 platforme cu 80386 (ED312)
Probele de examen:
Saptamana 8: 3 subiecte + 1 problema, pondere 40 % din nota la examen conditie de promovare: minimum 5 Sesiunea de vara: 3 subiecte + 1 problema, pondere 60 % din nota la examen Conditie de promovare: minimum 5 Timp de elaborare a raspunsurilor: 150 min
9
Aplicatii:
Cele 4 teme, notate de la 0 la 10, suma minima pentru promovare 28
10
11
Bibliografie
www.cpu-world.com/Arch/8085.html www.ece.ncsu.edu/research/cas/ma www.cpu-world.com/Arch/8086.html www.penram.com/Microprocessor/Mic roprocessor-Architecure.asp www.intel.com
12
Principalele capitole
1.
Introducere (3 ore)
Pozitia in cadrul planului de invatamant Obiectivele cursului Cerinte Evolutia microprocesoarelor
2.
4.
Interfata intre microprocesor si lumea externa (12 ore) Magistrala Memorie, ierarhizare Porturi I/O Tratarea variabilei timp Interfata cu tastatura si elemente de afisare Interfata cu lumea analogica Comunicatii seriale
15
7.
Evolutia Microprocesoarelor
Legea lui Moore
Gordon Moore 1965: numarul de tranzistoare de pe un chip se va dubla la fiecare doi ani
Legea lui Moore a alimentat o revolutie tehnologica, pe masura ce Intel a crescut exponential numarul de tranzistoare integrate in procesoarele sale pentru a spori performantele si a eficientiza consumul de energie.
17
Momente importante
Momente importante
19
Momente importante
Momente importante
21
Momente importante
Momente importante
Momente importante
Momente importante
Momente importante
26
27
Un mare volum din programele destinate microcalculatoarelor este scris prin utilizarea limbajelor de nivel inalt.
Cel mai bun mod de imbunatatire a performantelor microcalculatoarelor: cresterea eficientei de executie pentru astfel de limbaje.
Prapastie semantica intre modul in care limbajul de nivel inalt este vazut de catre programator si modul de implementare a acestui limbaj pe masina tinta.
28
Memorie: In limbajele de nivel inalt memoria este privita drept constand dintr-un set de variabile carora li s-au asociat nume, set care nu reflecta relatii de tipul: vecinatatea variabilelor, pozitia lor relativa etc.
Dar: Masina fizica are memoria organizata ca o matrice liniara cu locatii de dimensiuni egale, fiecarei locatii asociindu-i-se o adresa.
29
Limbajele de nivel inalt fac diferentierea neta intre cod si date, diferentiere inexistenta in memoria masinii reale.
Alte caracteristici ale masinii care nu sunt luate in considerare de limbajele de nivel inalt: registrele UCP aritmetica binara intreruperi.
31
Clasificari Arhitecturale
(1)
Diferentele intre clasele de arhitecturi constau in volumul de prelucrari efectuate prin program si prin intermediul echipamentului la executia unui program scris in limbaj de nivel inalt.
32
Clasificari Arhitecturale
(2)
Unele masini necesita volume importante de translatari din limbajul de nivel inalt in cel apropiat masinii, ca urmare a nivelului foarte scazut al limbajului masina, caz in care un mare volum de prelucrari se efectueaza de catre software. Alte masini, avand functii de nivel inalt implementate in arhitecturi hardware, necesita un proces de compilare mai simplu.
33
34
Dezavantaje:
dificultatile de depanare numarul erorilor sintactice detectate la executie este mic este necesara verificarea sintactica a tuturor programelor, chiar si a celor corecte masina nu poate executa decat programe scrise in limbajul propriu
Arhitecturi Reduse
Orientate catre imbunatatirea performantelor la rularea programelor de nivel inalt. Implementarea directa in hardware a unui mic numar de instructiuni simple, a caror executie este optimizata. Principalele dificultati sunt solutionate la nivelul compilatorului. Procesoare cu set redus de instructiuni (RISC- Reduced Instruction Set Computers) 36
Rezultatul:
simplificarea procesului de compilare.
Avantaj:
posibilitatea de implementare directa in hardware a unor functii specifice limbajelor de nivel inalt.
Complexitatea crescanda a procesorului poate indeparta rezultatul proiectarii de situatia optima, reducerea vitezei de executie a instructiunilor simple.
37
Caracteristicile arhitecturale cu cele mai puternice influente asupra eficientei de executie a programelor scrise in limbaje de nivel inalt:
tipurile de date modurile de adresare setul de instructiuni
39
40
Cadru Procedura A
41
Programarea recursiva impune ca fiecarei apelari de proceduri sa i se ofere propria copie de parametri si variabile definite in cadrul procedurii. In felul acesta, apelarea procedurii rezulta in alocarea unei noi regiuni de memorie, numita cadru (frame), care contine variabilele locale ale lui A, parametrii sai, adresa de revenire si orice alta informatie necesara adresarii variabilelor exterioare lui A, dar vizibile din procedura A.
42
Registrul 0
Parametri procedura
Variabile locale
43
Cadru Procedura B
Cadru Procedura C
44
Manipularea datelor - scopul principal al unui program Toate limbajele de nivel inalt ofera metode flexibile de definire a structurilor complexe de date In majoritatea cazurilor, programul este in buna masura definit de indata ce s-au proiectat structurile de date ce urmeaza a fi manipulate.
45
Principial, toate microprocesoarele sunt capabile a manipula cu rezonabila eficienta structurile de date definite in limbajele de nivel inalt, dar prapastia semantica despre care s-a vorbit mai inainte conduce la mari deosebiri intre solutiile practice adoptate. Un microprocesor ofera suport pentru un anumit tip de date doar daca este capabil a manipula operanzi apartinind acelui tip. Pentru asigurarea suportului pentru tipuri de date diverse doua caracteristici ale microprocesorului sunt de regula intrebuintate:
a) instructiuni care executa operatii asupra datelor reprezentate conform formatului asociat tipului considerat; moduri de adresare care permit accesul simplu la operanzi de tipul considerat
46
b)
Importanta acestor parametri este demonstrata de faptul ca un criteriu tipic de clasificare a microprocesoarelor se bazeaza pe lungimea cuvantului. Se vorbeste de microprocesor de 8 biti, 16 biti, 32 biti, 64 biti, numerele 8, 16, 32, 64 referindu-se la lungimea cuvantului de date manipulat.
47
Prima definitie se refera la traseul extern al datelor A doua se refera la traseul intern
48
Cresterea dimensiunii operandului nu este singura consecinta a disponibilitatii unei dimensiuni mai mari a cuvantului. Posibilitatea de a manipula seturi mai mari de biti conduce, de obicei, la introducerea de noi tipuri de instructiuni.
Microprocesoarele cu dimensiuni mai mari de cuvant nu sunt numai mai rapide decit cele cu cuvinte de dimensiuni mai mici, dar ele tind sa posede un mai bogat repertoriu de tipuri de date, sprijinite cu seturi de instructiuni si moduri de adresare adecvate.
50
Toate microprocesoarele au un subsistem al memoriei organizat ca o matrice liniara de elemente de baza de memorare, fiecare din ele asociat cu o anumita adresa. Dimensiunea elementului de baza de memorare este rezultatul compromisului intre doua cerinte disjuncte: a)reprezentarea compacta a datelor b)acces eficient la datele stocate in memorie
Adresarea bitilor
Necesitatea unei reprezentari compacte a datelor conduce la selectarea unei dimensiuni mici a elementului de baza de memorare.
51
Situatia extrema: Bitul - cea mai mica unitate adresabila a memoriei. Penalizari asupra performantei si costului (necesitatea ca bitii sa ajunga la unitatea centrala pe linii fizice diferite)
Alternativa: emularea adresarii la nivel de bit pe o masina care utilizeaza elemente de baza de memorare de dimensiuni mai mari (mecanism de deplasare - mascare [barrel-shifter] care extrage campul necesar intr-un singur ciclu) Dezavantajele adresarii la nivel de bit au determinat proiectantii de microprocesoare sa utilizeze elemente 52 de baza de memorie de dimensiuni mai mari.
Se accepta ca dimensiunea celei mai mici entitati de memorie adresabila sa fie cuvantul de 8 biti (octetul) Toate adresele emise de catre CPU sunt adrese de octeti.
Pentru accesul la date cu dimensiunea mai mare de un octet, CPU emite adresa primului octet, insotita de semnale de comanda indicand dimensiunea datelor, dimensiune care poate merge pana la cea a cuvantului de date extern.
Pentru microprocesoarele uzuale, sunt accesibile 53 intr-un singur ciclu de memorie:
(2)
Adresarea la nivel de octet si organizarea cu lungime fixa a cuvantului nu pot solutiona problema accesului la date ce traverseaza frontiera unui cuvant.
54
Cuvinte aliniate
Cuvant nealiniat Dword aliniat Dwords nealiniate
(1)
Bitul - cea mai naturala reprezentare interna a variabilelor booleene, but is it practical?
Camp de biti (bit field) - sir contiguu de biti in memorie, fara a exista vreo interpretare speciala asociata continutului sirului
Masinile care ofera suport pentru acest tip de date dispun de instructiuni:
pentru copierea unui camp de biti intr-o locatie de memorie sau intr-un registru de aliniere a campului la una din frontierele locatiei in care acesta se afla de extindere, atunci cand este cazul, a semnului valorii asociate 56 campului de biti.
(2)
Doua forme:
reprezentarea in complement fata de doi
reprezentarea binara pura
58
Caractere
Cele mai importante tipuri de date manipulate de programe sunt (INCA!) texte si numere. Codul ASCII (American Standard Code for Communication Interchange) Sirul de caractere (string), echivalent cu un vector de octeti Lungimea sirului poate fi fixa sau variabila Cand este variabila se impune utilizarea unui caracter special pentru a indica terminarea sirului sau asocierea cu un contor indicand numarul de caractere al sirului. Dimensiunea sirurilor nu permite pastrarea lor in registrele unitatii centrale de prelucrare manipulate 59 in memorie.
BCD (de la binary - coded decimal) = numere zecimale in codificare binara. Stocarea in memorie a formatelor BCD in doua formate:
BCD impachetat (packed BCD) BCD neimpachetat (unpacked BCD).
Packed BCD Hi 1001 0111 Lo 0001 0011 Continu t 19 37 Unpacked BCD Hi 0000 0000 0000 Lo 0001 1001 0011 Contin ut 1 9 3
0000
0111
60
Matrice (1)
Microprocesoarele nu ofera instructiuni pentru manipularea datelor structurate in matrice (arrays), insa ele poseda moduri de adresare create special in scopul inlesnirii prelucrarii acestor structuri de date. (0,0) (1,0)
61
Matrice (2)
Alocarea din figura se poate generaliza. Se considera o matrice cu n indici. Adresa a a elementului matricei caracterizat de setul de indici d0,d1,...,dn-1 este data de
a b s( di mx 1 d n1 )
i 0 x i
n2
n2
Unde b - adresa primului octet din zona de memorie alocata matricii. s - dimensiunea in octeti a elementului matricii. mi - numarul de valori posibile ale indicelui i (altfel spus : mi-1 este cea mai mare valoare pe care o poate lua indicele 62 i).
Matrice (3)
Evaluarea adresei unui element se simplifica in masura considerabila cand se considera o matrice unidimensionala de elemente standard, caci numarul de inmultiri se reduce la una singura, iar unul din factori, dimensiunea in octeti a elementului, este o putere a lui 2 (0,1,2,3,). In consecinta, evaluarea adresei de acces la un element se reduce la o deplasare si o adunare. Unele microprocesoare poseda moduri speciale de adresare care permit efectuarea operatiilor descrise mai sus.
63
Matrice (4)
La o prima examinare, evaluarea parantezei din expresia lui a este o operatie complicata, cel putin din punctul de vedere al programarii. Evaluarea se poate face in maniera recursiva : k0 = 0 ki = ki-1 * mi-1 + di-1 , i = 1,2,...,n Se poate observa ca valoarea lui ki reprezinta numarul de elemente precedente celui adresat. Se mai observa ca valoarea maxima a indicelui di-1 este mi-1 - 1. Cunoasterea valorilor ki-1,mi-1,di-1 necesare pasului i al iteratiei permite si testarea validitatii indicelui di-1. evaluarea lui ki presupune testarea lui di-1 si apoi evaluarea propriu-zisa, fapt folosit de unele microprocesoare pentru a implementa, intr-o singura instructiune , testarea incadrarii in gama corecta a indicelui si evaluarea lui ki.
64
Inregistrari
65
Moduri de Adresare
Instrument principal pentru a reprezenta in memoria masinii imaginea datelor asa cum este aceasta vazuta de programatorul in limbaj de nivel inalt. Permit construirea si utilizarea de structuri complexe, multidimensionale de date, in timp ce echipamentul poate trata doar matrice lineare cu elemente de dimensiune fixa. 66
Oricare mod se obtine ca o combinatie intre un numar relativ mic de obiecte si functii de baza. Obiectele sunt constituite din registre deplasamente (displacement) offseturi.
67
Registre
Situate in
unitatea centrala de prelucrare (CPU) unitatea de aritmetica in virgula mobila (FPU) unitatea de gestiune a memoriei (MMU)
= camp, adesea optional, al unei instructiuni, dedicat pastrarii unei informatii ce se va utiliza in determinarea adresei la care se afla operandul in discutie. Utilizari ale campului imediat: operand imediat (immediate operand): continutul campului imediat este chiar operandul la care se face referire; adresa imediata (immediate address): continutul campului imediat constituie adresa operandului la care se face referire; offset/deplasament: campul imediat contine un intreg (cu semn pentru offset), care se utilizeaza in conjunctie cu continutul unui registru pentru a produce 69 adresa operandului la care se face referire.
Moduri de Adresare
(2)
Adunarea
Toate modurile de adresare, cu exceptia celor mai simple, necesita adunarea a doua sau mai multe valori. Caz particular: incrementarea/decrementarea.
Adresarea indirecta
Functie al carei argument, de regula rezultat al unor calcule, foloseste pentru a determina - prin adresarea memoriei - operandul la care se face referire. Modurile complexe de adresare pot folosi de mai multe ori functia de adresare indirecta pentru a obtine adresa finala a operandului.
Deplasarea
Utilizata la executarea operatiei de indexare. Indexarea produce offsetul unui element din matricea liniara, avand ca baza de plecare indicii elementului.
70
Notatii
g - numele sau numarul unui registru, accesibil programatorului in limbaj de asamblare ; M[x] - functia de adresare indirecta, aplicata valorii x. Rezultatul ei este informatia memorata la adresa x in memoria principala ; G[g] - valoarea stocata in registrul g a.sh.b - valoarea rezultata din deplasarea lui a la stanga cu b pozitii binare ; d - valoarea deplasamentului, memorata intr-un camp al instructiunii.
71
Cel mai simplu mod de adresare este cel care nu necesita aplicarea nici uneia din functiile de baza pentru a obtine valoarea operandului. In aceasta clasa singurul mod de adresare este cel direct prin registru
Caracterizare:
G [g]
72
Caracterizare:
M [G [g]]
Adresarea indirecta prin registru este folositoare pentru accesul la elementele structurilor complexe de date, altfel inaccesibile doar cu unicul mod de adresare permis de masina. Calculul adresei, disponibila - in final - in registrul in discutie , necesita o secventa de instructiuni al caror rezultat este adresa elementului solicitat.
73
G[g]
M[G[g]]
74
Postincrementare
Memorie
g (N)
+
G[g]
Predecrementare
Memorie
g (N)
G[g]-N
Acest mod se poate obtine prin aplicarea unei adresari indirecte suplimentare Caracterizare:
M [M [G [g]]]
In cazul particular in care adresarea indirecta cu postincrementare foloseste ca registru contorul programului se obtine adresarea directa a operandului, mod de adresare existent in toate microprocesoarele.
78
Adresa operandului este memorata ca un camp al instructiunii. Dupa citirea codului instructiunii (realizata prin modul de adresare cu postincrementare) contorul programului indica urmatorul camp al instructiunii. Adresarea indirecta cu postincrementare permite accesul la operand si actualizarea contorului programului. Intrucat microprocesoarele de 8 si 16 biti au lungimea cuvintului de adresa mai mare decat lungimea cuvintului de date, sunt necesare mai multe cicluri de acces la memorie pentru citirea adresei operandului. Adresarea directa specifica adresa operandului ca parte componenta a instructiunii, care se stabileste in momentul compilarii si nu mai poate fi schimbata in timpul executiei 79 programului.
Limbajele de nivel inalt care folosesc recursivitatea nu pot folosi adresarea directa ca urmare a dinamicii adreselor in procesul de recursivitate.
Cu exceptia variabilelor globale, celelalte variabile au adrese alocate in timpul rularii pentru programele recursive, adrese care nu se pot insera in codul instructiunii. Utilizarea adreselor stocate in codul instructiunii este legata de operatiile de salt sau apeluri de subrutine , deci nu de specificarea de variabile propriu - zise.
80
S-a denumit registru baza registrul al carui continut se aduna cu cel al unui obiect manipulat de catre modul de adresare, cu scopul determinarii adresei operandului.
Modul de adresare bazat si cu deplasament (base displacement indirect addressing) calculeaza adresa operandului prin insumarea continutului registrului baza specificat cu valoarea unui camp al instructiunii, numit deplasament
81
Memorie
g (N)
G[g]
M[G[g]]
Adresarea Dublu Indirecta Bazata si cu Deplasament (Base Displacement Indirect Indirect Addressing)
M [ M[G[g]+d]]
Utilizabil pentru adresarea variabilelor la care referirea se face prin intermediul unui indicator.
Registrul baza este intotdeauna utilizat pentru a indica adresa de inceput a cadrului -> deplasamentul corespunde pozitiei indicatorului variabil in interiorul cadrului. Dubla adresare indirecta este folosita intai pentru a obtine valoarea indicatorului si, apoi, valoarea operandului propriu-zis.
O alta aplicatie tipica a modului de adresare descris mai sus este realizarea accesului la parametrii procedurii transferate prin referire. In astfel de aplicatii in interiorul procedurii se 83 stocheaza nu valoarea ci adresa parametrului.
M[ G[g1] + G[g2].Sh.N]
Cele mai simple structuri cu care opereaza limbajele de nivel inalt sunt matricele liniare de scalari.
Scalarii se reprezinta prin campuri de memorie de 8, 16, 32 sau 64 biti. Calcularea deplasamentului unui element in cadrul matricei liniare se obtine prin deplasarea la stanga a numarului ce reprezinta indicele (indexul) unui element cu 0, 1, 2 sau, respectiv 3 pozitii binare, presupunand ca valoarea initiala a indicelui este 0. Modul de adresare indirecta indexata bazata este folosit pentru accesul la un element al unei matrice unidimensionale de scalari, stocata intr-o zona de memorie a carei adresa de inceput este continuta in registrul baza.
84
Se obtine din modul de adresare indirecta indexata bazata prin adaugarea unei operatii de incrementare a continutului unuia din cele doua registre, operatie efectuata dupa extragerea operandului.
Deci: continutul registrului g2 se deplaseaza la stanga cu 0, 1 sau 2 pozitii binare; rezultatul se aduna cu continutul registrului g1, obtinindu-se adresa operandului; in fine, continutul registrului g1 se incrementeaza cu valoarea N1, egala cu 1, 2, 4 sau, respectiv, 8.
85
86
M [ G[g1] + d + G[g2]. sh.N ] Adresarea indirecta indexata bazata si cu deplasament este o metoda mai buna de acces la elementele unei matrice unidimensionale de scalari, atat fata de metoda de adresare indirecta bazata cu deplasament, cat si fata de cea de adresare indirecta indexata bazata. Daca g1 contine indicatorul cadrului local , indicele elementului matricei este continut de g2, iar d indica deplasamentul in interiorul cadrului al adresei de inceput a zonei de memorie ce contine elementele matricei, modul de adresare indirecta indexata bazata si cu deplasament permite accesul intr-o singura instructiune al oricarui element al matricei locale unidimensionale de scalari. 87
Adresarea Indirecta Indexata Indirect cu Postincrementare (Postincrement Indirect Indexed Indirect Addressing)
M [ G[g1] + G[g2].sh.N1 ] G [g1] : = G [g1] + N Se folosesc doua registre : registrul baza g1 si registrul index g2. Continutul lui g1 permite adresarea si citirea continutului unei locatii de memorie. Acest continut se aduna la rezultatul deplasarii spre stanga cu N2 pozitii binare a continutului registrului g2 ( N2 = 0,1 sau 2). In felul acesta se obtine adresa operandului. In final , continutul registrului g1 este incrementat cu N1 unitati ; valoarea lui N1 depinde de dimensiunea adresei. Evident , nu exista legatura intre N1 si N2. 88
Adresarea Indirecta Indexata Indirect Bazata cu Deplasament (Base Displacement Indirect Indexed Indirect Addressing)
M [ M [ G[g1] + d ] + G [g2].sh. N ]
89
Adresarea Indirecta cu Deplasament Indirect Bazata si cu Deplasament (Base Displacement Indirect Displacement Indirect Addressing)
M [ M [G[g] + d1 ] + d2 ] Permite accesul intr-o singura instructiune la scalari nelocali. Indicatorul cadrului local este incarcat in g. d1 - deplasamentul ( in cadrul campului de afisare al cadrului curent ) indicatorului spre cadrul in care se afla variabila la care se face referire. d2 - deplasamentul in interiorul cadrului a scalarului referit. Un alt fel de utilizare permite accesul la un camp al unei inregistrari locale la care referirea se face cu ajutorul unui indicator. In acest caz d1 este deplasamentul indicatorului in interiorul cadrului, iar d2 este deplasamentul (fata de inceputul zonei ce contine inregistrarea, inceput specificat prin indicatorul obtinut 90 prin M [ G[g] + d1]]) al campului la care se face referire.
Adresare Indirecta Indexata cu Deplasament Indirect Bazata si cu Deplasament (Base Displacement Indirect Displacement Indexed Indirect Addressing)
M [ M [ G[g1] + d1 ] + d2 + G[g2].sh.N ] Permite accesul la matrice unidimensionale nelocale de scalari , fapt datorat adaugarii indexarii la modul de adresare indirecta cu deplasament indirect bazata si cu deplasament. In g1 se incarca indicatorul cadrului local. d1 - deplasamentul indicatorului (din campul de afisare ) catre cadrul ce contine matricea de interes.
92
Practica a demonstrat utilitatea registrelor in imbunatatirea performantelor microprocesoarelor Exemplu: arhitectura procesoarelor RISC, unde se intalnesc zeci sau chiar sute de registre in componenta CPU.
93
DAR
continuturile registrelor (asa numitul context) trebuie salvate la aparitia unei intreruperi sau capcane sau atunci cand, in regim de multiprogramare, are loc comutarea programului curent.
94
In consecinta, un set numeros de registre conduce la timpi mai lungi de tratare a intreruperii sau de planificare a taskurilor
95
( 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 96 lor in secventa de operatii
Reverse Polish
Se foloseste notatia numita "reverse polish", conform careia un operator se aplica celor doi operanzi aflati imediat la stanga sa. Cu aceasta notatie, expresia din exemplul dat devine :
( A + B ) * ( (C + D) / ( E - F ) )
Evaluarea Expresiilor
B A A + AB+
98
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 varful stivei, cu exceptia instructiunilor de transfer de date, care citesc/inscriu registrul din varful stivei in/din memorie. Intrucat stiva poate creste peste capacitatea de memorare oferita de registre, partea inferioara a stivei este pastrata in memorie.
99
existenta unor mecanisme pentru tratarea situatiilor cand varful stivei depaseste partea continuta in registre (register overflow: toate registrele incarcate, apare necesitatea inscrierii unui nou operand in stiva) sau
cand varful stivei coboara sub partea ce ar putea fi continuta in registre (register underflow: toate registrele vide, apare necesitatea citirii unui operand din stiva). 100
101
Masini cu Acumulator
(1)
Majoritatea microprocesoarelor din prima generatie sunt masini cu acumulator, care foloseau un registru sau un mic numar de registre pentru prelucrarea datelor. Un registru, numit acumulator, contine unul din operanzi si, in acelasi timp, este folosit pentru a stoca rezultatul operatiei.
102
Masini cu Acumulator
(2)
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 (dynamic allocation) a adreselor in memorie ale unor variabile. Functia de baza a acumulatorului: varf al stivei de evaluare, intrucat el constituie un operand al tuturor instructiunilor de prelucrare.
103
(1)
Arhitecturile cu registre index au reprezentat un progres notabil fata de cele cu acumulator, intrucat 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. 104
(2)
Adresa operandului se determina adunand continutul registrului baza cu cel al registrului index si cu un offset continut intr-un camp al instructiunii.
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 camp pentru specificarea registrului index (in situatia ca microprocesorul dispune de mai multe astfel de registre). 105
Numeroase microprocesoare dispun de un set de registre interne care se pot utiliza pentru toate functiile posibile, intrucat toate instructiunile pot folosi orice registru, indiferent de numele acestuia. Se spune ca aceste masini au un set ortogonal de instructiuni si un fisier de registre.
106
Fiecarui registru ii poate reveni una din urmatoarele functii: acumulator: este utilizat pentru evaluarea de expresii; index/baza: orice registru poate fi desemnat ca registru baza sau registru index, utilizat la determinarea adresei operandului 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 de ex., contorul programului.
107
Intreruperi
Intreruperea este produsa de un eveniment exterior CPU, adesea de o operatie de intrare/iesire sau de expirarea unei perioade de timp. Efectul intreruperii: suspendarea executiei programului aflat in rulare transferarea controlului unei rutine dedicate tratarii intreruperii (interrupt handler - IH) IH are sarcina de a efectua actiunile cerute de evenimentul extern care a generat intreruperea
108
Tipuri de Intreruperi
intreruperi vectorizate;
intreruperi nemascabile; intreruperi nevectorizate; intreruperi cu relansare.
109
Intreruperi Vectorizate
Intrucat 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). Se utilizeaza magistrala externa a microprocesorului.
Evenimentul care a generat intreruperea determina furnizarea catre CPU a unui 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 general intreruperile vectorizate sunt mascabile 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 110 intrerupere
Intreruperi Nemascabile
O astfel de cerere de intrerupere suspenda executia programului aflat in rulaj indiferent de functia executata de acesta. Exemple tipice de evenimente:
tendinta de a iesi din parametrii de functionare normala a sursei de alimentare 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, intrucat ea se cunoaste.
111
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
112
Intreruperi cu Relansare
Suspendarea executiei unui program se face, de regula, la terminarea instructiunii curente, pentru a se reduce la minimum posibil informatiile ce se salveaza in conjunctie cu programul intrerupt. Sunt cazuri cand intreruperea este declansata de o situatie care impiedica insasi terminarea executiei corecte a unei instructiuni, caz in care cererea de intrerupere trebuie servita inainte de terminarea instructiunii Solutie: proiectarea instructiunilor astfel incat sa fie posibila intotdeauna repornirea executiei lor, indiferent de momentul la care a survenit intreruperea.
113
Timpul de Latenta
Timpul cerut de servirea unei cereri de intrerupere depinde de operatiile necesitate de evenimentul extern care a cauzat intreruperea, precum si de intarzierea intre activarea cererii si inceputul activitatii rutinei de testare. Aceasta intirziere este o 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.
114
Prioritati
Interrupt Logic
I S R
I R R
CAS2-CAS0
Cascade Logic
IRQ7
SP/
PIC
I M R
116
INTA/ 8284 INTR INT 8086 ALE CLK Address latch 74F373
Magistrala de Adrese / Date
82C59A Master
Magistrala CAS
IR0 IR1
6
INT INT
IR2 IR7
82C59A Slave
IR0 IR7 8
82C59A Slave
8 IR0 IR7
Vcc
MN/MX#
DEN/
DT / R#
Magistrala de Adrese
OE/
G/
DIR
Magistrala de Date
117
Magistrala de Control
INT CAS0
CS/ A0
D0-7
INTA/
INT CAS0
INT
M7 M6 M5 M4 M3 M2 M1 M0
GND
GND
Vcc
118
Capcane (Traps)
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 (intreruperi software). Capcanele sunt 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.
119
Tipuri de Capcane
a) b)
c)
120
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: tentativa de a executa o instructiune inexistenta tentativa de a executa, dintr-un regim neprivilegiat, o instructiune rezervata regimului privilegiat capcanele in conjunctie cu gestiunea memoriei externe 121
Evenimentele care reprezinta sau nu o conditie de exceptie sau anormala, in functie de actiunile specifice efectuate de catre program. 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 cand configuratia hardware include 122 procesorul matematic.
Nu se folosesc, 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. Sunt astfel organizate incat sa fie posibila activarea lor la aparitia unor capcane. Operatiei ii sunt dedicate instructiuni speciale, numite adesea apeluri de sistem (system-call instructions), data fiind menirea lor principala de activare a rutinelor sistemului de operare. Cand se executa o astfel de instructiune se activeaza capcana corespunzatoare. Prin asocierea unui parametru, aceeasi instructiune poate activa capcane diferite
123
Manipularea Capcanelor
Actiunile cerute de manipularea capcanelor sunt similare cu cele executate la aparitia unei intreruperi:
se salveaza in stiva contorul programului si indicatorii de conditie 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.
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.
124
Prioritati
Aparitia simultana de intreruperi si capcane ridica probleme legate de selectarea celei careia sa i se acorde atentie.
Ca si intreruperile, capcanele sunt servite, de regula, la terminarea instructiunii curente. Unele capcane (cum este page fault trap) trebuie servite imediat, intrerupand executia instructiunii curente. 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 sunt folosite pentru detectarea erorilor si starilor anormale, deci necesita atentie imediata; intreruperile nemascabile pot intrerupe rutinele de tratare a capcanelor si a intreruperilor. 125
Instrumente de Depanare
Depanarea este un proces dificil, care se simplifica prin fragmentarea programelor in blocuri mai mici, mai usor de stapanit. In sprijinul depanatorului se pot oferi urmatoarele seturi de instrumente:
a) executie pas cu pas; b) puncte de suspendare a executiei (breakpoints); c) memorarea traseului programului (program trace).
126
Primul instrument permite rularea programului instructiune cu instructiune, executia fiind stopata la sfarsitul fiecarei instructiuni.
Prin examinarea starii CPU si a locatiilor de memorie se poate determina eventuala abatere a programului de la comportarea dorita.
127
Punctele de suspendare a executiei permit suspendarea executiei unui program dupa executia unei anumite instructiuni. Permit executia unor blocuri mai mari de program inainte de suspendarea executiei la un anumit punct cu scopul testarii rezultatelor intermediare.
128
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 sunt prevazute cu mecanismele hardware pentru trace.
129
Capcana de Traseu
Majoritatea microprocesoarelor sunt prevazute cu o capcana speciala, numita trace trap - capcana de traseu. Ea permite atat executia pas cu pas, cat si realizarea de trasee ale programului. Capcana se activeaza (dezactiveaza) prin intermediul unui indicator de conditie special, accesibil prin program. Cand 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 130 executata.
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. Utilitatea punctul de suspendare a executiei (breakpoint): aceasta facilitate permite inserarea in program a unor "comenzi" de suspendare.
131
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. Instructiunea a carei executie ar trebui sa suspende rularea programului este stocata intr-o zona speciala de memorie si este inlocuita prin instructiunea breakpoint. Cand contorul programului indica locatia in care se afla instructiunea breakpoint, aceasta este executata, fapt ce rezulta in activarea rutinei asociate de tratare.
132
Mecanismul de suspendare software a executiei permite utilizatorului sa intrerupa executia unui program doar cu ajutorul unei instructiuni particulare. 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.
133
Cand 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 atat software, cat si hardware. Numarul primelor este limitat doar de dimensiunea zonei de salvare, in timp ce numarul de puncte de suspendare hardware este limitat de numarul de registre breakpoint din MMU
134
Concluzii
Caracteristicile arhitecturale ce fac obiectul acestui capitol nu sunt 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 sunt indispensabile in implementarea functiilor complexe ale sistemelor de operare, cum sunt gestiunea memoriei, protectia, multiprelucrarea. 135