Sunteți pe pagina 1din 31

CAPITOLUL 5 UNITATEA DE CONTROL A UCP

Coninut:
5.1. Funciile principale ale unitii de control a UCP 5.2. Control cablat 5.2.1. Metoda tabelului de tranziie a strilor 5.2.2. Metoda sincronizrii prin numrtoare de secvene 5.3. Controlul microprogramat 5.3.1. Metode de optimizare a UC microprogramate 5.4. Paralelism n execuia instruciunilor prin tehnici pipeline 5.5. ntreruperi i excepii 5.6. Rolul memoriei stiv 5.7. Utilizarea ferestrelor de registre

Obiective educaionale:
a. Analiza funciilor principale ale unitii de control i a modului de interpretare i execuie a instruciunilor main b. Explicarea metodelor de proiectare i implementare a unitilor de control c. Analiza comparativ a avantajelor i dezavantajelor modurilor diverse de implementare d. Explicarea fundamentelor privind implementarea paralelismului la nivelul instruciunii prin tehnicile de tip pipeline e. Descrierea i clasificarea sistemului de ntreruperi al microprocesoarelor f. Analiza modului de implementare i utilizare a memoriei stiv

Capitolul 5

116

5.1. FUNCIILE PRINCIPALE ALE UNITII DE CONTROL A UCP


Structura calculatorului, cu componentele de baz descrise de von Neumann, rmne, n general, valabil i astzi. Partea cea mai important a calculatorului este Unitatea Central de Procesare (UCP), sau procesorul, n a crei structur am deosebit n capitolul 1 unitile de prelucrare a datelor i de control, astfel c ntr-un calculator, procesorul conine totul cu excepia memoriei i a sub-sistemului de intrare - ieire. Funcional, putem spune c UCP este format dintro parte de calcul (unitate de prelucrare a datelor, sau cale de date) i o parte de control (cale de control). Calea de date este un ansamblu de uniti funcionale capabile s regseasc datele i s le prelucreze. Ea cuprinde: unitatea / unitile aritmetice i logice, registrele de uz general i cile de comunicare (magistrale interne UCP) dintre acestea. Rolul unitii de control a unui procesor ce recunoate un set de instruciuni, este s aduc instruciunile codificate binar din memoria principal (extern procesorului) i s transmit semnale de control ctre unitatea de prelucrare (calea de date), i de asemenea ctre memorie i sub-sistemul de I/O, n scopul executrii instruciunilor. Semnalele de control selecteaz funciile ce trebuiesc executate n calea de date la momente discrete de timp i conduc datele de la / la unitile funcionale potrivite. Momentele de timp individuale sunt definite de ctre impulsurile ce provin de la circuitul de ceas al UCP. Conform semnalelor emise, unitatea de control (UC) face, periodic, o reconfigurare din punct de vedere logic a unitii de prelucrare, astfel nct aceasta s execute un set impus de (micro)operaii. Pentru execuia corect a unui program UC are doua funcii principale: secvenierea instruciunilor i interpretarea acestora. (a) Secvenierea instruciunilor se refer la maniera n care controlul procesorului este transferat de la o instruciune la alta, prin ordinea de generare a adreselor ctre memoria principal a calculatorului. Instruciunile sunt selectate pentru execuie ntr-o anumit ordine, dictat de UC prin interpretarea informaiei codificate n cadrul instruciunilor i pe baza unor semnale recepionate de UC de la calea de date sau din exteriorul procesorului. Semnalele din exteriorul procesorului sunt asincrone cu programul executat. n principiu, fiecare instruciune ar putea conine adresa urmtoarei instruciuni ce trebuie adus din memorie. Cele mai multe instruciuni dintr-un program au un succesor unic; astfel c dac o instruciune I i este stocat n memorie ntr-o locaie de adres A, iar I are ca unic succesor instruciunea I i +1 , atunci este natural s se stocheze I i +1 n locaia de adres A+1 ce urmeaz imediat dup A. Adresa instruciunii I i este coninut ntr-un registru de adresare a instruciunilor, iar adresa instruciunii I i +1 poate fi obinut pentru cazul de mai sus prin incrementare. Din aceast cauz vom numi registrul de adresare al instruciunilor contor de program, notat pe scurt PC. Contorul de program este un indicator al adresei instruciunii curente. Adresa instruciunii I i +1 se calculeaz prin operaia: PC PC + c (5.1)

unde c reprezint numrul de cuvinte de memorie pe care se ntinde instruciunea I i . n programe exist de asemenea instruciuni de ramificare, sau se pot produce situaii independente de program, care impun UC s fac trecerea ctre instruciuni aflate la adrese neconsecutive. UC trebuie s controleze modul n care se fac aceste salturi, care pot fi necondiionate, condiionate (prin testarea unor indicatori de condiii), sau pot fi salturi pentru transferul controlului ctre un alt program sau subprogram (proceduri, ntreruperi, excepii). n cazul unei ramificri, registrul de adresare PC se ncarc direct cu adresa la care se face saltul. Dup aceasta funcionarea PC se face conform relaiei (5.1) pn la urmtoarea instruciune de ramificare.

Unitatea de Control

117

(b) Interpretarea instruciunilor se refer la modul n care UC decodific codul fiecrei instruciuni i la modalitatea de generare a semnalelor de control ctre calea de date, pentru a comanda execuia instruciunilor. Comportarea UC din punctul de vedere al semnalelor de control generate (ca funcie i ca succesiune n timp) pentru comanda operaiilor se poate descrie pe baza unor tabele de tranziie a strilor, organigrame, limbaje de descriere, dar i pe baza unor combinaii ale metodelor amintite. Fiecrei instruciuni interpretate de UC, i corespunde o succesiune de funcii logice de ieire din UC, conform algoritmului dorit de proiectantul UC. Tipurile de semnale de intrare i ieire dintr-o unitate de control tipic pot fi descrise cu ajutorul figurii 5.1.

Csin

Unitate de Control Cout Cin

Csout

Intrare Date

Cale de date

Ieire Date

Figura 5.1. Semnale de intrare i ieire al unitii de control la interfaa cu calea de date i cu alte sub-sisteme

Cele 4 grupuri de semnale de control indicate n figura 5.1. au urmtoarele funcii: 1. Cout - sunt semnale ce controleaz direct funcionarea cii de date. Generarea acestor semnale reprezint principal sarcin a UC. 2. Cin - sunt semnale ce permit cii de date s influeneze funcionarea unitii de control n sensul modificrii secvenei de comenzi Cout generat. De exemplu, semnalele Cin pot indica prezena unor condiii neobinuite n unitatea de prelucrare a datelor, cum ar fi depirea capacitii de reprezentare ca urmare a unei operaii aritmetice. 3. Csout - aceste semnale sunt transmise la alte uniti de control, (ale altor procesoare de uz general sau specific) i pot indica condiii de stare, i semnale de sincronizare, cum ar fi "busy / ocupat", cerere de cedare, sau acceptare a cedrii controlului magistralelor sistemului, sau semnale de informare c o operaie cerut anterior s-a terminat. 4. Csin - Semnale primite de la alte uniti de control, de exemplu de la un controller supervizor. De obicei includ semnale de start i stop i informaii de sincronizare, funciile fiind similare cu cele ale Csout. Grupurile de semnale Csin i Csout sunt n primul rnd folosite pentru a sincroniza unitatea de control cu operaiile altor uniti de control. Organizarea intern aleas pentru UC i aspectele specifice de implementare folosite la proiectarea unitii, influeneaz n mod direct viteza cu care lucreaz UC, costurile de proiectare i construcie i suprafaa ocupat pe circuitul integrat de ctre aceasta unitate. Acest ultim aspect indic faptul c la microprocesoare, metodele de proiectare ale UC influeneaz ntreaga arhitectur a UCP prin constrngerile impuse datorit suprafeei limitate a chip-ului de siliciu.

Capitolul 5

118

Orice proiect de unitate de control pornete de la descrierea setului de instruciuni recunoscute i de la descrierea proiectului cii de date. Exist dou metode de proiectare i implementare a UC: cablat i microprogramat. 1. Unitatea de control cablat este un automat secvenial proiectat i construit pentru generarea unui set specific i ntr-o secven fix de semnale de control. Odat ce UC a fost construit, algoritmul de control nu mai poate fi modificat dect prin reproiectarea ntregii structuri. La controlul cablat, scopurile principale urmrite la proiectarea automatului se refer la minimizarea numrului de componente utilizate i maximizarea vitezei de operare. 2. La unitatea de control microprogramat semnalele de control sunt incluse n cuvinte binare succesive (microinstruciuni) stocate ntr-o memorie de mare vitez, inclusa n UC, numit memorie de control. Implementarea algoritmului de control se face prin programarea coninutului memoriei de control. Fiecrei instruciuni recunoscute de procesor i corespunde o secven de microoperaii generate prin citirea unei secvene de microinstruciuni din memoria de control (secven de microinstruciuni numit microprogram). Microprogramele coninute n memoria de control formeaz un interpretor al setului de instruciuni recunoscut de procesor. Tehnica cablat are cteva avantaje: dimensiuni mici ale UC vitez mare de operare Tehnica microprogramat are i ea cteva avantaje: un set de instruciuni recunoscut poate fi uor schimbat prin schimbarea microprogramelor i nu prin reproiectarea ntregii UC permite o metoda sistematica de proiectare a UC dac este nevoie, permite modificarea dinamic (n timpul rulrii programelor) a setului de instruciuni recunoscut de UC prin utilizarea unei memorii de control cu scriere-citire

5.2. CONTROL CABLAT


Unitatea de control este un automat secvenial proiectat special pentru a recunoate un anumit set de instruciuni, respectiv pentru a genera set corespunztor (pre-fixat) de semnale de control. Cu ct setul de instruciuni este mai complex, cu att proiectarea i optimizarea proiectului este mai dificil. De aceea acest tip de control este folosit pentru procesoare care recunosc un set regulat i relativ redus de instruciuni (de obicei instruciuni cu format de lungime fix). Unitatea de control trebuie s lanseze semnalele de comand pentru aducerea instruciunilor din memoria principal, s decodifice codul fiecrei instruciuni i ca urmare s genereze toate semnalele de control ctre calea de date pentru execuia complet a instruciunii. Cu ct unitatea de control a procesorului recunoate un set mai mare i mai eterogen (lungimi diferite, cmpuri diferite n funcie de modurile de adresare etc.) de instruciuni, cu att complexitatea unitii de control crete. Ca schem de principiu, descris n figura 5.2., unitatea de control cablat este un automat ce cuprinde un registru de memorare a strii curente, registrul de instruciuni, care memoreaz codul operaiei i logic de control (de obicei combinaional). n schema simplificat din figur nu s-a inut cont de faptul c unitatea de control cuprinde i registre de adresare a memoriei principale i nu s-au desenat semnalele de control i sincronizare pentru registrele interne ale unitii de control. Registrul de instruciuni pstreaz codul operaiei instruciunii curente pe toat durata execuiei instruciunii. Execuia poate fi descris prin mai multe stri ale automatului, stare urmtoare fiind generat de logica de control conform algoritmului cablat i conform reaciilor de la calea de date. Starea urmtoare se ncarc n registrul de stare sincron cu impulsul de ceas. Complexitatea logicii de control este proporional cu numrul de intrri (bii pentru cod instruciune, reacie cale de date i cod al strii curente) i de numrul maxim de semnale de control de ieire.

Unitatea de Control

119

Unitatea de control Magistrale ctre memoria principal

Logic de control

Cale de date

Registru de instruciuni

Registru stare

Figura 5.2. Unitate de control cablat, cu o structur simplificat i relaia cu calea de date i memoria principal.

Pentru o structur cablat, n [Patterson96] se consider c numrul de linii de intrare este 21 iar numrul de ieiri 40 i se calculeaz dimensiunea logicii de control, dac ar fi implementat cu ajutorul unui circuit ROM, deci fr minimizare. Dimensiunea rezult 221 40 bii = 2M 5 8 bii, adic 10 MB de ROM. Rezultatul indic obligativitatea minimizrii logicii de control, din cauza dimensiunii exagerate a unitii de control, dei n exemplu s-a considerat un numr relativ mic de intrri i ieiri. Metodele de proiectare ale unitilor de control cablate sunt metodele folosite pentru implementarea cablat a oricrui automat secvenial. Metodele moderne de proiectare asistat de calculator includ limbajele de descriere hardware, care permit automatizarea diferitelor faze ale proiectri [Toacse96]. Pentru nelegerea metodelor de proiectare a acestor uniti de control de dimensiuni relativ mici vom descrie pe scurt dou metode.

5.2.1. Metoda tabelului de tranziie a strilor


Este o metod standard de descriere i proiectare a automatelor secveniale i poate ncorpora tehnici sistematice de minimizare a porilor i bistabililor. Tabelul de tranziie a strilor cuprinde toate strile automatului de control i corespondena cu strile urmtoare i cu semnalele de control generate, n funcie de combinaia semnalelor de intrare n automat. n figura 5.3. se prezint un exemplu general de tabel, n care s-au notat cu Cin variabilele de intrare ale UC. Liniile tabelului corespund setului de stri interne {Si} ale mainii. O stare intern este determinat de informaia stocat n unitate n momente discrete de timp (perioade de ceas / clock). Informaia ce corespunde liniei strii Si i coloanei I j (combinaia I j a semnalelor de intrare Cin n UC) are forma S ij , Cij , unde S ij reprezint starea urmtoare a unitii de control, iar Cij reprezint setul de semnale de ieire corespunztor (Cout), semnale activate prin aplicarea setului I j la intrrile unitii de control cnd aceasta este n starea Si.

Capitolul 5

120

Stri interne S1 S2 ... Sn

I1 S11,C11 S21,C21 ... Sn1,Cn1

Combinaii de intrare Cin I2 ... S12,C12 S22,C22 ... Sn2,Cn2 ... ... ... ...

Im S1m,C1m S2m,C2m ... Snm,Cnm

Figura 5.3. Exemplu general de tranziie al strilor. Pentru fiecare stare Si a automatului la aplicarea unui set de intrri I j (pe coloan) se indic combinaia ( S ij , Cij ) ntre stare urmtoare n care va trece automatul i setul de semnale de control generate n starea actual.

Aceast metod, dei sugestiv, este destul de greoaie n cazul n care UC are multe stri i multe combinaii ale semnalelor de intrare. La fel ca i la urmtoarea metod amintit aici, la descrierea prin tabel de tranziie a strilor modul de codificare al fiecrei stri este deosebit de important din punctul de vedere al minimizrii funciilor rezultate. Pentru aceasta se folosesc programe de proiectare asistat, care ajut la o codificare optim a strilor automatului i apoi la minimizarea circuitelor unitii de control.

T1 T2 Clock Secveniator cu contor modulo n CLC Tn Cout

Cin

Figura 5.4. Exemplu de implementare cablat a unei uniti de control cu ajutorul unui secveniator modulo n i a logicii combinaionale. Modul de defazare n timp a semnalelor Ti se poate vedea n figura 5.5b.

5.2.2. Metoda sincronizrii prin numrtoare de secvene


Aceasta metod utilizeaz circuite de generare a unor impulsuri succesive (faze) de sincronizare, circuite realizate cu numrtoare i circuite de decodificare. Fiecrei faze i corespunde un set de semnale de control, numrul de faze fiind egal cu numrul maxim de stri ale UC. Vom numi aceste circuite secventiatoare. Un secveniator modulo n poate conine de exemplu un numrtor modulo n a crui ieire este conectat la un decodificator 1:n sincronizat cu numrtorul. Semnalele de control de la ieirea UC vor fi activate pe baza acestor semnale de sincronizare (decalate n timp) cu ajutorul unei logici combinaionale (figura 5.4.).

Unitatea de Control

121

Structura intern a unui circuit secveniator ar putea arta ca n figura 5.5. Pentru un semnal de ceas (Clock) continuu, numrtorul cicleaz continuu prin cele n stri. Asta presupune c numrtorul are cel puin m celule, iar n este mai mic sau egal cu 2m. Cele m ieiri ale numrtorului sunt apoi decodificate de ctre decodificatorul 1:n care este validat prin intrarea sa de Validare doar pe palierul pozitiv al impulsurilor de ceas. Decodificatorul genereaz semnale de impuls {Ti} la liniile de ieire (i = 1,n). Succesiunea {Ti} mparte timpul cerut pentru un ciclu complet de numrare n n pri egale, semnalele Ti fiind numite semnale de faz. Posibilitatea utilizrii secveniatoarelor cu contoare modulo n, de tipul amintit mai sus, rezult i din faptul ca multe circuite digitale sunt proiectate s realizeze un numr relativ mic de aciuni, n mod repetat, funcionare ce poate fi descris ca o organigram constnd dintr-o singur bucl coninnd n pai. Daca cei n pai succesivi corespund operaiilor elementare ce se efectueaz la execuia unei instruciuni ntr-un procesor, este util ca unitatea care controleaz aceste operaii s fie capabil s modifice operaiile realizate ntr-un pas oarecare i, n funcie de semnalele primite pe intrare de ctre UC i n funcie de starea i n care se gsete UC. De aceea n figura 5.4 s-au adugat i semnalele de intrare Cin.
T1 T2 Tn

Validare Clock Decodificator 1:n

Start S Latch RS R Q Q

CLK Reset Numrtor modulo n

End

Reset

Figura 5.5a. Exemplu de structur de secveniator construit cu pe baza unui numrtor modulo n ale crui ieiri sunt decodificate sincron cu impulsul de ceas (clock)

Implementarea logicii combinaionale a automatelor UC se poate face n jurul unor celule de circuit tip PLA sau cu circuite proiectate complet pentru o anumit structura UC. n mainile reale, circuitele UC nu pot fi implementate cu un singur PLA, pentru c dimensiunea acestuia rezult foarte mare. De aceea un tabel mare este mprit n mai multe PLA-uri ale cror ieiri sunt multiplexate pentru a alege controlul corect. De asemenea, numrul de stri n diagrama cu stri finite poate avea influen mare asupra dimensiunii PLA. Ideea este s se dea numere similare pentru stri ce realizeaz operaii similare. Diferena ntre modelul biilor pentru astfel de stri se face de exemplu numai printr-un singur bit. Exist programe CAD care ajut rezolvarea acestei probleme de atribuire a valorilor strilor.

Capitolul 5

122

T1 T2 T3

Tn

Figura 5.5b. Diagrama semnalelor de faz Ti generate de secveniatorul modulo n din figura 5.5a.

5.3. CONTROLUL MICROPROGRAMAT


Acest mod de construcie a Unitii de Control a fost enunat n 1951 de ctre Maurice Wilkes [Hayes88]. Soluia sa a fost s transforme UC ntr-un calculator n miniatur, ce are dou tabele n memoria de control. Primul dintre tabele specific modul de control a cii de date, iar al doilea determin ordinea de generare (secvenierea) semnalelor de control pentru operaiile elementare. Soluia a fost numita de Wilkes "microprogramare" i de aici alte denumiri derivate: microinstruciune, microcod, microprogram, etc. Microinstruciunile specific toate semnalele de control pentru calea de date plus posibilitatea de a decide condiional care microinstruciune va fi urmtoarea executat (figura 5.6). Aa cum sugereaz i numele "microprogramare", o dat ce calea de date i memoria pentru microinstruciuni, sunt proiectate (i construite), controlul devine n special o problem de programare care const n scrierea unui interpretor pentru setul de instruciuni. Microprogramarea permite astfel schimbarea unui set de instruciuni prin schimbarea coninutului memoriei de control (n care se stocheaz "tabelelor" amintite de Wilkes), fr ca, de cele mai multe ori, s fie necesar i schimbarea structurii hardware. Structura microprogramului este asemntoare cu diagrama de stri, n care pentru fiecare stare din diagram corespunde o microinstruciune. Fiecare bit dintr-o microinstruciune reprezint o comand elementar care fie merge direct la o resurs comandat (registru, sau CLC), fie este prelucrat mpreun cu alte informaii (pentru decodificare i sincronizare) pentru ca apoi s se comande resursa fizic. Fiecare cod de instruciune citit i decodificat, va trebui s produc saltul la o adresa din memoria de control unde se gsete microprogramul asociat execuiei acelei instruciuni. O posibilitate de efectuare a acestui salt, este chiar folosirea informaiei din op-code (codul operaiei) ca index ntr-un tabel cu adrese de start de microprograme. O alt posibilitate, care crete eficiena utilizrii memoriei de control, este convertirea codului instruciunii curente ntr-un alt cod care se constituie n index de adres. La realizarea unei UC sub forma microprogramat, principalul scop este reducerea costurilor generale de proiectare i construcie a UC, de reducere a dimensiunilor microprogramelor i a dimensiunii microinstruciunilor. n mod normal, instruciunile care cer cel mai mare timp pentru execuie sunt optimizate ca vitez, iar celelalte instruciuni sunt optimizate ca spaiu ocupat n memoria de control. Avantajele microprogramrii, identificate de Wilkes n 1953, rmn valabile i astzi: microprogramarea permite schimbarea uoar a algoritmului de control. Aceast calitate este util n faza de dezvoltare cnd simpla schimbare a unui 0 n 1 n memoria de control, salveaz uneori reproiectarea componentelor hardware. prin emularea altui set de instruciuni, n microcod, se simplific compatibilitatea software. reduce costurile n cazul adugrii unei instruciuni mai complexe la o microarhitectura standard.

Unitatea de Control

123

flexibilitate - construcia hardware poate ncepe nainte ca setul de instruciuni i microcodul s fie complet scris, pentru c specificarea controlului este doar o problema de software.
Unitatea de control Magistrale ctre memoria principal

Memorie de control

Cale de date

Contor de instruciuni

Microsecveniator (logic de selecie adres)

Registru de instruciuni

Figura 5.6. O unitate de control microprogramat simplificat. Deosebirile fa de figura 5.2, cu UC cablat, se refer n primul rnd la modul n care se calculeaz intrrile n logica de control (microadresa pentru microinstruciune). n plus logica de control este implementat cu ajutorul unei memorii de control , de obicei de tip ROM, care specific semnalele de control i semnalele de secveniere.

Dezavantajul microcodului este viteza redus de lucru, pentru c microprogramarea este dependent de tehnologia de realizare a memoriilor. Din punct de vedere istoric conceptul microprogramrii (1953) a fost cu un pas naintea tehnologiei timpului i a rmas aproximativ 10 ani doar o posibilitate virtual de implementare. Wilkes a construit totui unitatea de control a calculatorului numit EDSAC 2 utiliznd controlul microprogramat, n 1958, cu o memorie de control ROM construit din miezuri magnetice. De abia n 1964 firma IBM a folosit microprogramarea la familia IBM 360. S-a realizat chiar emularea lui unei maini anterioare IBM 7090 cu ajutorul noii maini IBM 360, care a demonstrat c maina hardware diferit poate rula aceleai programe uneori chiar mai rapid dect pe maina original. Pentru operaia de emulare un calculator microprogramabil C1 poate fi utilizat pentru a executa programe scrise n limbajul main L2 al unui alt calculator, C2, prin plasarea unui emulator pentru L2 n memoria de control a lui C1. C1 este deci capabil s emuleze pe C2. Maina pe care se face emularea este denumita main gazd (host-machine), iar maina care este simulat, main int (target machine). Prin emulare se poate face astfel o testare pe maina gazd a unui procesor nainte ca acesta s fie realizat fizic. Cele mai multe din calculatoarele incluse astzi n categoria CISC folosesc implementarea microprogramat a algoritmului de control al UC. Principiul structurii de control microprogramate poate fi descris prin schema bloc din figura 5.7. Aa cum s-a descris n primul paragraf al acestui capitol unitatea de procesare a datelor este comandat pentru a executa funcii asupra unei structuri de date i ca urmare pot fi generate semnale ce caracterizeaz operaia efectuata (indicatori de condiii). Comanda funciilor i interpretarea efectului produs se face aici cu un automat construit ca o structur de control

Capitolul 5

124

microprogramat. Orice operaie apelat printr-o instruciune (recunoscut prin cmpul cod al operaiei) a mainii, presupune o secven de pai ce poate cuprinde transferuri ntre registre interne, sau registre interne i registre de memorie. Fiecare din aceti pai, realizeaz o microoperaie, care se efectueaz prin activarea unor semnale asociate registrelor respective. Execuia unei instruciuni main este deci compus dintr-o secven de microoperaii comandat de un microprogram. Microprogramul este memorat de obicei ntr-un ROM de control.
Tabel (informaie) de secveiere Intrri de la calea de date Registrul de instruciuni (codul operaiei) Logic de selecie microadres microadres Memorie de microprograme Tabel (informaie) de control

secveniere Comenzi (Cout)

Figura 5.7. Schema bloc de principiu a unei structuri de control microprogramate. Informaiile de secveniere i control incluse n microinstruciunile din memoria de microprograme au fost denumite tabele ca n enunul structurii microprogramate a lui Wilkes.

Logica de selecie a adresei (microadresei) memoriei de control (sau de microprograme), calculeaz adresa urmtoarei microinstruciuni pe baza informaiei din registrul de instruciuni (n care se stocheaz codul operaiei instruciunii), pe baza unor informaii externe ce provin de la calea de date, sau pe baza informaiei de secveniere (de reacie) coninut n corpul microinstruciunii curente. Fiecare locaie adresabil a memoriei de control este privit ca o microinstruciune. Atunci cnd locaia este adresat ea va activa un anumit set de linii de control i linii de adres de secveniere. Un exemplu de microinstruciune, cu exemplificarea unor cmpuri specifice se prezint n figura 5.8.
Destinaie Operaie ALU Adr. sursa 1 Adr. sursa 2 Divers Cond Adresa urmtoare

Figura 5.8. Exemplu de microinstruciune cu mai multe cmpuri de control i secveniere. n afara operaiei comandate pentru ALU se specific codul adres pentru registrele surs i destinaie, eventuali bii pentru testarea de condiii (Cond.) i informaii diverse (Divers) de control. Cmpul de secveniere (adresa urmtoare) se d de obicei ca adres relativ fa de adresa microinstruciunii curente sau la secvene liniare indic doar necesitatea incrementrii micro-contorului de program.

Cea mai simpl secven de comand a unei ci de date este o secven liniar, n care starea urmtoare a acestui automat simplu ar putea generat de un numrtor cu incrementare. n mod obinuit adresa generat pe baza codului operaiei instruciunii este o adres de start a unui microprogram din memoria de control. Microprogramul poate fi rulat secvenial, dar unitatea de control trebuie s aib i capacitatea de a rspunde la semnale externe, sau condiii, prin efectuarea de salturi, deci de ntrerupere a secvenei liniare de microinstruciuni. Salturile sunt efectuate pe baza testrii semnalelor de la calea de date i pe baza informaiei de secveniere. Circuitul de

Unitatea de Control

125

generare a adresei urmtoare din microprogram este numit microsecveniator. Astfel c adresarea unei microinstruciuni se poate face: secvenial, similar cu adresarea la nivel macro a instruciunilor prin contorul de program (PC), micro-adresa fiind generat de un micro-contor de program (PC); salturi condiionate, prin testarea de ctre microinstruciuni a reaciilor de la calea de date; salturi absolute prin specificatori de micro-adrese urmtoare(secveniere), saltul fiind de obicei relativ la adresa microinstruciunii curente.

5.3.1. Metode de optimizare a UC microprogramate


n scopul creterii vitezei de lucru a UC microprogramate i de reducere a dimensiunilor memoriei de control principalele metode folosite sunt: a. reducerea limii microinstruciunilor b. utilizarea structurilor de tip pipeline la nivelul microprogramului c. utilizarea mai multor niveluri ierarhice de memorii de control a) Reducerea limii microinstruciunilor Adesea, microinstruciunile sunt clasificate n microinstruciuni orizontale i verticale, n funcie de numrul de resurse hardware ale mainii controlate simultan de o microinstruciune. Microinstruciunile orizontale controleaz foarte multe resurse hardware care funcioneaz n paralel. O singur microinstruciune orizontal ar putea s controleze funcionarea simultan i independent a uneia sau mai multor uniti ALU, accesul la memoria principal, generarea condiionat a adresei urmtoare, accesul la diverse registre de lucru, bistabili de stare etc. O asemenea microinstruciune are ns un numr mare de bii (tipic peste 64 de bii). Microinstruciunile verticale controleaz simultan un numr mic de resurse hardware i comand operaii simple, de tipul ncrcare, adunare, memorare, salt etc. Acest tip de microinstruciune se aseamn n principiu cu instruciunile n limbaj main, care conin un cod al operaiei i unul sau mai muli operanzi. De aceea microprogramarea vertical mai este numit microprogramare software, iar prin comparaie microprogramarea cu instruciuni orizontale este numit microprogramare hardware. Aceeai main poate fi controlat cu microprograme lungi i lente, scrise cu microinstruciuni verticale, sau cu microprograme scurte i rapide, scrise cu microinstruciuni orizontale.

...

Cmp A (3 bii)

...

Cmp B (2 bii)

...

Microinstruciune vertical

Decodificator 1:8

Decodificator 1:4

...
A0 A1 A7 B0 B1 B2 B3 4 resurse comandate de cmpul codat B 8 resurse comandate de cmpul codat A

Figura 5.9. Exemplu de microinstruciune vertical ce utilizeaz codarea informaiei de control n dou cmpuri binare. Cmpul A poate comanda simultan una singur din resursele A0 - A7 prin semnalul de la ieirea decodificatorului.

Capitolul 5

126

Lungimea unei microinstruciuni depinde de gradul de codificare al informaiei coninute. La o microinstruciune fr codificare, fiecare bit controleaz o singur resurs sau micro-operaie. La o microinstruciune cu codificare (de exemplu n figura 5.9), cmpuri binare controleaz resurse mutual exclusive. Prin codificare, un cmp al microinstruciunii va putea activa n acelai timp numai un singur semnal de control. De aceea dou semnale de control sunt compatibile pentru codificare i pot fi incluse n acelai cmp de control numai dac sunt mutual exclusive (nu este necesar s fie activate simultan de o microinstruciune). Pot exista ns mai mult dect dou semnale compatibile pentru fiecare cmp ce folosete codarea controlului. Concluzionnd putem spune c microinstruciunile orizontale au caracteristicile: format lung, capacitate de a exprima un grad mare de paralelism (multe comenzi simultane), codare redus a informaiei de control. Microinstruciunile verticale au ca principale caracteristici; format scurt, capacitate mic de control al microoperaiilor paralele, codare puternic a informaiei de control. b) Utilizarea structurilor pipeline, pentru operaii n paralel Dei execuia microinstruciunii se desfaoar conform unei secvene ce cuprinde fazele de citire, decodificare i execuie, detaliile de implementare pot fi diferite de la o soluie de implementare la alta. Gradul de suprapunere al operaiilor de execuie pentru microinstruciunea curent respectiv de acces (gsire i citire) a microinstruciunii urmtoare este dependent de structura hardware a UC. Dac metoda folosit pentru execuia microprogramelor este serial, citirea microinstruciunii urmtoare nu ncepe pn cnd nu se termin execuia microinstruciunii curente. Durata unui ciclu de microinstruciune (CMI) va fi suma dintre timpul de acces, TA, la memoria de control i timpul de execuie, TE, al microoperaiilor ce controleaz resursele hardware ale calculatorului: CMI = TA + TE (5.2) n acest fel, dac se consider valori medii pentru TA i TE se poate calcula durata medie de execuie a unui microprogram cu M microinstruciuni ca M*(TA+TE). n relaia de mai sus timpul de acces (TA) se refer la timopul necesar din momentul lansrii microadresei pn cnd microinstruciunea poate fi citit la ieirea memoriei de control. Timpul de execuie (TE) este timpul minim ct semnalele de control trebuie s rmn active pentru ca operaia de control s se desfoare corect. Avantajul modului serial de lucru al UC (figura 5.10a i b) este dat de simplitatea hardware a unitii i ca urmare de costul redus. n plus UC microprogramat serial nu trebuie s controleze simultan execuia i citirea i nu pune probleme n cazul apariiei microinstruciunilor de salt condiionat. Prin adugarea unui etaj suplimentar n UC (etaj constituit dintr-un registru de microinstruciuni) citirea microinstruciunii urmtoare este realizat n paralel cu execuia microinstruciunii curente. Aceast structur de tip pipeline (band de operaii, sau conduct de operaii) are avantajul unei viteze de lucru mai mari, pentru c execuia microinstruciunii curente ncepe imediat dup terminarea execuiei celei precedente. n aceast implementare valoarea CMI va fi dat de maximul dintre timpul de acces la memoria de control i timpul de execuie: CMI = max(TA,TE). Durata minim a unui microprogram de M microinstruciuni este n acest caz TA+M*TE. Ca dezavantaj, n afara de circuitele suplimentare, reprezentate n principal de registrul pentru memorarea microinstruciunii curente (registrul pipeline), la UC microprogramat din figura 5.10 c i d se pune i problema salturilor condiionate. n acest caz este nevoie de un mecanism de anticipare a adresei urmtoarei microinstruciuni. Dac anticiparea este corect, n majoritatea cazurilor, nu se va pierde din vitez. n cazul unei anticipri greite se va pierde ns cel puin un ciclu pentru citirea corect a microinstruciunii ce urmeaz.

Unitatea de Control

127

Instruciuni

Instruciuni

Microsecveniator

Microsecveniator

Memorie de control (microprograme)

Memorie de control (microprograme)

secveniere

control

Registru microinstruciuni

(a)

(c)
secveniere control

Numr microinstruciune I(n+2) I(n+1) I(n) TA TE Timp TA TE TA TE

Numr microinstruciune I(n+2) I(n+1) I(n) TA TA TE Timp TA TE TE

(b)

(d)

Figura 5.10. Structura bloc a unitii de control i distribuirea n timp a execuiei microinstruciunilor. (a) structura bloc cu funcionare serial, (b) sincronizarea n timp a execuiei a trei microinstruciuni succesive, (c) structura bloc cu registru pipeline de microinstruciuni, (d) sincronizarea n timp a execuiei a trei microinstruciuni succesive.

c) Organizarea pe mai multe niveluri a memoriei de control Memoria de control poate fi organizat pe unul sau pe dou niveluri. Memoria structurat pe dou niveluri folosete noiunile de microinstruciune i microprogram pentru nivelul superior i nanoinstruciune, respectiv nanoprogram pentru nivelul inferior. Aa cum o instruciune este executat prin rularea unui microprogram (la un singur nivel de memorie de control), fiecare microinstruciune este executat prin rularea unui nanoprogram asociat. Tehnica nanoprogramrii este echivalent conceptual cu microprogramarea, iar structurarea memoriei de control pe dou niveluri (vezi figura 5.11) ofer o flexibilitate mai mare n proiectarea microinstruciunilor de la nivelul superior. n calculatoarele microprogramate convenionale (de exemplu seria Intel 80x86), fiecare instruciune adus din memoria principal (MP) este interpretat de un microprogram stocat ntr-o singura memorie de control. n unele maini ns, microinstruciunile nu emit direct semnalele ce controleaz resursele hardware. Semnalele de ieire sunt folosite pentru a accesa, printr-un

Capitolul 5

128

nanosecveniator o memorie suplimentar de control numit memorie de nanocontrol. Nanoinstruciunile coninute n aceast din urm memorie controleaz direct resursele hardware.
Ordine

nS

nMC MC

nRI

RI

Secveniere

Comenzi resurse hard interne UCP

Secveniere

Figura 5.11. Organizarea memoriei de control pe dou niveluri. Notaii folosite: S / nS = microsecveniator / nanosecveniator; RI/nRI = micro / nano registru de instruciuni, MC / nMC = memorie de microprogram / nanoprogram.

Memoria ne microcontrol (MC) conine microprograme cu microinstruciuni verticale, interpretate de nanoinstruciuni orizontale ce se gsesc n memoria de nanocontrol (nMC). Mai multe microinstruciuni (ce fac parte din microprograme diferite) pot fi interpretate de acelai nanoprogram. Rezult astfel o dimensiune mai mic, pe ansamblu, a memoriei de control. Un alt avantaj este flexibilitatea mai mare a operaiei de proiectare a arhitecturii, ce rezult din slbirea legturilor dintre instruciuni i hardware, prin dou niveluri intermediare de control, n loc de unul. Dezavantajul principal al nanoprogramrii este reducerea vitezei datorit accesului suplimentar la memoria nMC i a structurii ceva mai complexe a organizrii unitii de control. Posibilitatea optimizrii mrimii totale a memoriei de control prin nanoprogramare a fost folosit la seria de microprocesoare Motorola 680x0. De exemplu MC 68000 conine o memorie de microprogram de 640 x 10 bii respectiv o memorie de nanocontrol de 280 x 70 bii, adic n total circa 26 kbii. O proiectare microprogramat clasic ar necesita peste 45 kbii.

Unitatea de Control

129

5.4. PARALELISM N EXECUIA INSTRUCIUNILOR PRIN TEHNICI PIPELINE1


Tehnica pipeline este o tehnic de introducere a paralelismului n execuia instruciunilor. Aceasta se face prin mprirea ciclului de execuie al unei instruciuni n mai multe faze de prelucrare, iar execuia paralel a mai multor instruciuni indic c fiecare dintre aceste instruciuni se afl n alt faz de prelucrare. Tehnica de tip pipeline poate fi aplicat att pentru execuia instruciunilor ct i pentru circuitele aritmetice de prelucrare. Aici ne vom referi doar la execuia paralel a instruciunilor prin tehnica pipeline. Vom folosi n continuare termenul de conduct, care este sugestiv i de asemenea scurt, pentru a exprima cuvntul din limba englez pipeline (vezi i nota din josul paginii). O conduct este similar unei linii de asamblare / montaj din industrie. Fiecare pas din conduct completeaz o parte din operaiile necesare n execuia instruciunii. La fel ca ntr-o linie de asamblare pentru autovehicule, munca care trebuie fcut ntr-o instruciune este spart n pri mai mici, fiecare din aceste pri necesitnd o fraciune din timpul necesar pentru a termina complet execuia instruciunii. Fiecare din aceti pai este numit un etaj al conductei sau segment al conductei. Etajele sunt conectate unul dup cellalt pentru a realiza o conduct (band) de instruciuni ce intr la un capt i ies prelucrate la cellalt capt. Pentru c toate segmentele conductei sunt legate ntre ele, toate segmentele trebuie s fie gata pentru a avansa (pentru a furniza informaia ctre urmtorul etaj) n acelai timp. Timpul necesar pentru deplasarea unei instruciuni cu un pas n interiorul conductei constituie un ciclu main al conductei. Lungimea acestui ciclu este determinat de timpul cerut pentru prelucrarea n cel mai lent segment din conduct, pentru c toate segmentele avanseaz n acelai moment. Un ciclu main al conductei este egal cu unul sau mai multe cicluri de ceas, dar obiectivul oricrei maini ce implementeaz aceast tehnic este s se ajung la o medie de o instruciune executat pe ciclu de ceas. Tehnica de tip pipeline conduce la o reducere a timpului de execuie mediu pentru o instruciune. Cea mai simpl cale de a nelege principiul conductei este s imaginm fiecare etaj ca fiind format dintr-un registru urmat de un circuit combinaional de prelucrare. (vezi figura 5.12 cu reprezentarea bloc a unei conducte cu 4 etaje / faze).
Clock

Intrare R1 CLC1 R2 CLC2 R3 CLC3 R4 CLC4

Ieire

etaj 1

Registru de memorare

Circuit de prelucrare (Circuit Logic Combinaional

etaj 4

Figura 5.12. Structur de tip conduct (pipeline) cu patru etaje.

Registrele stocheaz datele de intrare pentru combinaionale pe durata necesar ca sub-operaia corespunztoare segmentului s fie terminat i rezultatele s apar corect la ieirea circuitului
1

Pipeline = band de execuie/ conduct de execuie / linie de asamblare

Capitolul 5

130

combinaional. Aceste ieiri ale etajului se aplic la intrrile unui registru dintr-un alt etaj similar i aa mai departe. Dac ncrcarea registrelor cu datele de la etajul anterior se face sincron cu un impuls de ceas, perioada ceasului trebuie s fie suficient de mare astfel ca cel mai lent dintre etaje s termine prelucrarea. Revenind la conducta pentru instruciuni, vom presupune c este format din patru etaje, a cror notaie i funcie este: Etaj 1 Etaj 2 Etaj 3 Etaj 4 IF (Instruction Fetch) - aducere instruciune din memoria principal ID (Instruction Decode) - decodificare instruciune OF (Operand Fetch) - aducere operanzi EX (Execution) - execuie operaie.

Funcionarea unei conducte este explicat adeseori cu ajutorul unei diagrame timp-spaiu cum este cea din figura 5.13, corespunztoare unei conducte cu 4 etaje cu notaiile propuse mai sus. Axa orizontal reprezint timpul n multiplii de impulsuri de ceas iar axa vertical d numrul segmentului. 1 I1 2 I2 I1 3 I3 I2 I1 4 I4 I3 I2 I1 5 I5 I4 I3 I2 6 I6 I5 I4 I3 7 8 9
Impulsuri de ceas

Etaj:

IF ID OF EX

I6 I5 I4

I6 I5

I6

Figura 5.13 Diagrama timp-spaiu pentru o conduct cu 4 etaje (IF, ID, OF, EX) corespunztor unui ciclu instruciune. S-a presupus introducerea n conducta de execuie a 6 instruciuni, notate de la I1 la I6.

Dac se consider o conduct cu k etaje i n instruciuni de executat, vom ncerca s deducem creterea n vitez pentru structura de tip pipeline. Dac timpul de ciclu al conductei este notat cu TCLK va fi nevoie de un timp egal cu k TCLK ca s umplem conducta (sau altfel spus ca prima instruciune s treac prin toate etajele) i de timpul suplimentar de execuie a celorlalte n-1 instruciuni, adic (n 1) TCLK . Timpul total pentru execuia celor n instruciuni ntr-o conduct cu k etaje va fi: TP = (k + n 1) TCLK (5.3)

Considerm de asemenea cazul unei uniti de execuie a instruciunilor fr folosirea tehnicii pipeline. Fie un timp notat Tmediu necesar pentru execuia fiecrei instruciuni. Pentru un program cu n instruciuni, fr pipeline (suprapunere) timpul mediu total de execuie va fi egal cu: T = n Tmediu (5.4) Creterea n vitez datorit folosirii conductei poate fi calculat ca raport ntre cele dou valori de timp: n Tmediu S= (5.5) (k + n 1) TCLK Pe msur ce numrul instruciunilor crete este valabil relaia n >> k 1 , iar creterea n vitez

Unitatea de Control

131

tinde ctre o valoare maxim egal cu:


T (5.6) S = mediu TCLK Dac presupunem c timpul mediu de execuie al unei instruciuni ( Tmediu ) este acelai cu timpul

mediu de execuie al unei instruciuni n unitatea construit ca pipeline (adic k TCLK ), creterea n vitez tinde ctre k, numrul de etaje al conductei. Aceasta este doar o limit teoretic, pentru c pe msura creterii numrului de etaje diferenele ntre Tmediu i k TCLK se mresc. Mai mult, cu ct crete numrul de etaje cu att mai greu este s echilibreze timpii de execuie pe fiecare etaj. n plus apar probleme de care nu s-a inut cont n relaia calculului de cretere n vitez: salturile n program i dependena de date i resurse hardware inter-instruciuni. Aceste din urm elemente creeaz ceea ce se numete hazardul structurii de tip conduct. n general exist trei probleme mari care pot face ca o conduct de instruciuni s nu funcioneze normal: 1. Conflicte de resurse produse de accesul la aceleai resurse din dou etaje diferite ale conductei. De exemplu accesul simultan al dou etaje la memoria principal, unul din accese pentru aducerea codului unei instruciuni, iar cellalt pentru accesarea operanzilor. Aceste conflicte se rezolv prin mrirea numrului de uniti funcionale (de exemplu ALU multiple) i prin utilizarea de spaii separate de memorie pentru date i instruciuni. (hazard structural) 2. Dependena datelor se refer la instruciuni care folosesc ca operanzi rezultate ale instruciunilor anterioare din conduct, dar acestea nc nu au fost executate, iar rezultatul nu este disponibil. (hazard de date). Hazardul de date se nltur fie prin metode hardware (bypass) fie prin reordonarea instruciunilor din program. 3. Ramificrile produc probleme pentru c dac se face saltul stiva trebuie golit i nceput procesul de execuie al instruciunilor de la adresa de salt (hazard de control). Problemele hazardului de control se rezolv prin predicia salturilor, sau prin instruciuni de salt ntrziat, la care se execut ntotdeauna cteva dintre instruciunile ce urmeaz dup instruciunea de salt condiionat, n aa fel conducta s rmn plin pn la execuia instruciunii de salt i aflarea adresei urmtoare de instruciune.

5.5. NTRERUPERI I EXCEPII


n timpul rulrii programelor pot aprea unele evenimente neobinuite (de excepie). Aceste evenimente pot conduce la suspendarea temporar a programului aflat curent n execuie; n acest interval de ntrerupere a rulrii programului se va executa, de obicei, o rutin de tratare a evenimentelor ce au ntrerupt programul. Toate aceste evenimente produse de condiii neobinuite / neateptate pentru programul curent n execuie sunt numite la modul general "ntreruperi" pentru c ele produc ntreruperea programului si devierea / saltul ctre o rutin special de tratare a evenimentului "ntreruptor". Putem clasifica aceste evenimente "ntreruptoare" n: 1. cereri de ntrerupere: evenimente generate din exteriorul UCP, asincrone cu programul rulat, care cer tratare. Aceste cereri de ntrerupere pot proveni: 1.a de la echipamente periferice care cer servicii de la UCP (cerere de transfer de date, sau informri cu privire la starea perifericului), sau 1.b de la circuite specializate pentru supravegherea funcionrii normale a componentelor hardware (eroare de paritate la citirea memoriei, eroare de paritate pe magistral,

Capitolul 5

132

cderea iminent a tensiunii de alimentare etc.); Evenimentele ce produc acest tip de ntrerupere a programelor sunt numite i ntreruperi hardware. 2. excepii: evenimente neobinuite sincrone cu programul (produse la rularea programului), care cer tratare. De obicei indic situaii de excepie cum ar fi: 2.a 2.b 2.c 2.d ntlnirea unor instruciuni de control ilegale n programul utilizator, ncercarea de violentare a sistemului de protecie a informaiilor din memorie, condiii aritmetice speciale (depiri, mprire la zero), accesul la segmente (sau pagini virtuale) de memorie nerezidente n memoria principal. Excepiile produc devieri, ("traps") sau ntreruperi software.

Efectul general al unei ntreruperi, att pentru ntreruperea hardware ct i pentru ntreruperea software este o deviere ctre o rutin de tratare a ntreruperii (rutin de servire a ntreruperii). Indiferent de sursa ce a generat ntreruperea cele dou tipuri sunt servite n mod asemntor, prin saltul la o rutin de tratare a evenimentului ntreruptor sau de excepie. n literatura actual, termenii de "ntrerupere" i "cerere de ntrerupere" sunt folosii, n general, pentru evenimente ce produc cereri asincrone cu programul curent rulat. Excepiile - sincrone cu programul rulat - produc devieri, care la rndul lor pot fi clasificate n mai multe tipuri. De exemplu, dup modul de manifestare i tratare a excepiilor, Intel mparte aceste excepii n urmtoarele categorii: devieri ('traps'). O deviere poate fi recunoscut doar dup terminarea ciclului instruciune curent (recunoscut doar nainte de nceperea ciclului de execuie al unei instruciuni ce urmeaz imediat dup instruciunea n care s-a detectat excepia). Dup tratare devierile produc reluarea programului ntrerupt ncepnd cu instruciunea urmtoare. erori ('faults') . Sunt excepii ce sunt detectate fie nainte de nceputul execuiei instruciunii, fie in timpul execuiei acestora. Dac erorile se detecteaz n timpul execuiei unei instruciuni, dup tratarea erorii reluarea programului se va face ncepnd cu instruciunea ntrerupt. esecuri - terminari anormale ('abort'). Produc abandonarea procesului, iar rutina de tratare afieaz mesaje stresante pentru utilizator. Eecurile sunt utilizate pentru a trata erori severe cum sunt valori ilegale si / sau inconsecvente n tabelele sistemului sau erori de hardware. Din cele expuse de mai sus se observ c indiferent dac evenimentul ce produce ntreruperea provine de la circuitele calculatorului (hardware), sau de la rularea instruciunilor programului (software), tratarea evenimentului se face n mod asemntor: cnd UCP recunoate o eroare sau o condiie neobinuit, el oprete obligatoriu rularea programului aflat n execuie, i produce saltul la o rutin care va trata corespunztor condiia aprut. cnd UCP recepioneaz o cerere de ntrerupere, el oprete rularea programului aflat n execuie (presupunem c sunt permise i ntreruperile mascabile) i produce saltul la o rutin de tratare corespunztoare a cererii de ntrerupere Conform clasificrii de mai sus, cererile de ntrerupere (asincrone) sunt ntreruperile generate hardware (prin semnal electric). O ntrerupere generat hardware se produce ca rspuns la activarea unui pin de intrare n UCP. Dup modul de servire al cererilor de ntrerupere, exista dou tipuri de intrri n microprocesor (vezi i figura 5.14):

Unitatea de Control

133

cerere de ntrerupere este mascabil (notat INTR n figura 5.14), la care se poate bloca (masca) aciunea de recunoatere a acesteia de ctre UCP. Ca urmare a mascrii programul rulat de UCP nu va fi ntrerupt, iar semnalul de cerere de ntrerupere va fi neglijat; cerere de ntrerupere nemascabil (notat NMI n figura 5.14). Acest tip de ntrerupere este obligatoriu, va fi recunoscut necondiionat de UCP i ca urmare va produce deviere ctre o rutin de tratare. Figura 5.14. prezint schematic logica de intrare n microprocesor, pentru ntreruperile mascabile i nemascabile. La intrarea de ntreruperi mascabile se conecteaz de obicei linii de semnal de la dispozitivele de I/O. Electric acest lucru este posibil pentru c la majoritatea microprocesoarelor intrarea este activ pe nivel logic JOS fiind destinat ieirilor cu colector n gol de la dispozitive. Intrarea INTR permite dispozitivelor externe s ntrerup execuia unui program. Pentru a asigura recunoaterea cererii, intrarea INTR trebuie s fie meninuta la nivel activ pn cnd procesorul confirm ntreruperea prin realizarea unei secvene de confirmare a acceptrii ntreruperii. Intrarea INTR este eantionat la sfritul execuiei fiecrei instruciuni. n plus, ntreruperile mascabile trebuie sa fie validate prin software (instruciuni ce produc setarea indicatorului de control a ntreruperilor mascabile - reprezentat ca un bistabil n figur) pentru a putea fi recunoscute. Semnalul INTR poate fi furnizat direct de un dispozitiv periferic, sau este furnizat de circuite specializate pentru controlul si arbitrarea mai multor semnale externe de cerere de ntrerupere (controller programabil de ntreruperi).
Microprocesor
SAU

Intrare ntrerupere nemascabil (NMI)

Comand ntrerupere (deviere) Validare INTR Invalidare INTR

SI

Intrare ntrerupere mascabil (INTR) S CLOCK Q

Indicator pentru mascarea ntreruperilor

Figura 5.14. Reprezentare a modului de recunoatere pentru cererile de ntreruperi mascabile i nemascabile

Intrarea NMI (pentru cerere de ntrerupere ne-mascabil) este folosit de obicei de circuitele externe UCP care supravegheaz buna funcionare a sistemului hardware. Ele pot semnala de exemplu erori de paritate la transferul datelor, erori de memorie, creterea peste limite a temperaturii interne, cderea iminent a tensiunii de alimentare etc. Activarea intrrii NMI face ca procesorul s ntrerup programul la sfritul ciclului instruciune curent i s execute automat o rutin de servire care corespunde, de obicei, unei locaii fixe din memoria principal (ntrerupere ne-vectorizat). Procesorul nu va servi cereri succesive NMI pn cnd tratarea cererii curente nu este terminat.

Capitolul 5

134

Dac mecanismul hardware de recunoatere a unei ntreruperi nu este complicat, n cazul excepiilor produse de rularea instruciunilor lucrurile sunt un pic mai complexe. Cauzele excepiilor sunt diverse i ele se manifest n diferite moduri. De exemplu, cauzele aritmetice, cum ar fi depirea domeniului de reprezentare de rezultatul unei adunri, pot fi tratate i rezolvate relativ uor. Dar dac cuvntul binar adus ca i cod al instruciunii nu reprezint nici un cod recunoscut de procesor evenimentul va produce sigur abandonarea programului. Codul nerecunoscut este tratat ca "instruciune ilegal" i el poate aprea fie din cauza erorilor umane fie datorit erorilor hardware ale mainii. Tratarea acestei excepii trebuie fcut nu numai pentru a informa utilizatorul despre evenimentul produs, dar i pentru a nchide execuia acelui program. Cea mai defavorabil soluie este bineneles blocarea calculatorului. Pentru cazul depirilor, unele calculatoatoare au instruciuni speciale de test pentru overflow (ex. BOV Branch if OVerflow). Este ns complet neconvenabil ca fiecare instruciune aritmetic s fie urmat de un test. n cazul instruciunilor ilegale nu este posibil s se testeze condiia, pentru c trebuiesc luate imediat msuri. Calculatoarele timpurii, care nu aveau un sub-sistem de ntreruperi, s-ar fi oprit n cazul unor asemenea condiii, dar asta n-ar fi fcut dect s mping problema mai jos cu un nivel, ctre operatorul de serviciu, care trebuia s rezolve problema. La mainile actuale, de mare vitez, este de dorit s se acioneze imediat pentru a se elimina timpul pierdut de calculator. Se presupune c de obicei condiia ce a produs eroarea i deci ntreruperea este neleas, tratat i apoi se va continua cu sarcina ntrerupt dac este posibil. Dac eroarea este fatal sarcina curent este abandonat i se va trece la execuia unei alte sarcini de lucru. Descriem n continuare cteva din condiiile care pot deveni surse de deviere a programului rulat. Condiii aritmetice. Aceste excepii sunt date de condiii aritmetice neobinuite cum sunt depirile (overflow i underflow), ncercare de mprire la zero etc. Dei utilizatorul poate testa aceste condiii cu instruciuni de test, este preferabil s existe o monitorizare continu, hardware prin circuite specializate, a acestor condiii. Acest procedeu este mai eficient din punctul de vedere al timpului de execuie pentru c nu trebuie executate instruciuni suplimentare dect n cazul cnd se produc condiiile testate. De multe ori se permite utilizatorului (uneori n faza de compilare) s specifice ce trebuie fcut, separat, pentru fiecare din tipurile de evenimente provenite din condiii aritmetice. Dac nu se indic nici o specificaie, aciunea implicit este de obicei abandonarea sarcinii (abort). Instructiuni ilegale. O deviere datoarat unei instruciuni ilegale (instruciune de control nepermis utilizatorului, sau cod ne-recunoscut) este de obicei fatal, adic termin execuia programului utilizator pentru c se presupune c exist o eroare n program, sau o eroare sever de hardware. La abandonare utilizatorul este informat despre eroare i despre starea programului utilizator (coninutul registrelor i a memoriei). Protecie. Cele mai multe sisteme de calcul au n memorie la un moment dat mai mult dect un program pentru ca exist mai mult dect un proces ce se execut. (de exemplu mai multe programe lansate n execuie pe un calculator uni-procesor utilizat prin partajarea timpului2). De aceea cele mai multe sisteme prevd un anumit sistem de protecie. Protecia memoriei se refer la capabilitatea calculatorului de a marca acele zone de memorie care sunt disponibile unui program particular i s detecteze referinele interzise la acele zone. O zon de memorie nedisponibil pentru programul aflat n rulare este numit regiune protejat a memoriei. O ncercare a programului utilizator de a scrie ntr-o regiune de memorie protejat este n mod clar o eroare de programare (intenionat sau nu) i produce o deviere (trap). n mod normal acest eveniment de excepie este fatal, la fel ca i devierile pentru instruciuni ilegale. Erori ale mainii. n mod ideal, calculatorul nu face niciodat erori, dar n practic, pot fi acceptate dou feluri de erori hardware. O eroare catastrofal se produce cnd eroarea de hardware este att de serioas nct oprete funcionarea unui subsistem major. Asemenea erori sunt evidente
time sharing = partajarea timpului procesor pentru execuia mai multor programe. Fiecrui program i se aloc un interval de timp conform unui mecanism de planificare implementat de sistemul de operare.
2

Unitatea de Control

135

imediat i sunt relativ uor de rezolvat pentru tehnicianul de service. Totui, cea mai frecvent form de erori se produce ocazional, iar erorile pot s nu fie repetitive, chiar n aceleai condiii. Aceste erori nu se produc foarte des ci probabil doar la intervale mari, de ore sau zile. De aceea sunt dificil de localizat, deci dificil de depanat. Totui unele erori sunt detectate automat de hardware; iar detecia unei erori produce o deviere (trap) i astfel sistemul de operare poate decide ce trebuie fcut. Rutina de monitorizare a sistemului de operare poate repeta aciunea pentru a vedea dac se produce fr eroare a doua oar. Daca repetarea se face cu succes, controlul poate fi returnat programului utilizator i nu trebuie s ne mai facem probleme cu privire la acea eroare. Dac eroarea se produce repetat, programul utilizator va fi abandonat (aborted) i se va afia un mesaj informativ adecvat pentru utilizator. De obicei dispozitivele de memorie au unele echipamente de detecie a erorilor, tipic pentru generarea i detecia bitului de paritate. Paritatea permite doar detectarea erorilor izolate, dar erorile multiple n acelai grup de bii pot s treac nedetectate. Unitatea central de procesare rspunde la o cerere de ntrerupere (hardware sau software) i trateaz evenimentul ce a produs ntreruperea n pai succesivi care pot fi rezumai astfel: 1. UCP identific sursa ce a produs ntreruperea. Aceast identificare se poate face fie printr-o informaie furnizat de evenimentul ntreruptor (informaie numit de obicei vector de ntrerupere) fie prin testarea coninutului unor registre interne pre-definite sau a unor zone pre-definite din memoria principal. Uneori, n cazul cererilor de ntrerupere hardware exist intrri separate de ntrerupere la care se conecteaz dispozitive de I/O, identificarea fiind fcut automat prin identificarea intrrii de cerere de ntrerupere activat. 2. Pe baza informaiei de identificare UCP calculeaz adresa unde se gsete rutina de tratare a ntreruperii. 3. Se salveaz informaia de stare a programului ce va fi ntrerupt (n primul rnd coninutul contorului de program) ntr-o memorie de tip stiv. Se face saltul la rutina de tratare prin ncrcarea PC cu adresa de nceput a rutinei de tratare. 4. Se execut rutina de tratare a ntreruperii. 5. Se face revenire la programul ntrerupt prin restaurarea informaiei de stare. De observat c dup ce rutina de tratare a fost executat, ea va face revenire la programul ntrerupt (printr-o instruciune special de tip return from interrupt3) i se va continua cu execuia acestuia. Este important ca rutina de tratare s salveze coninutul registrelor interne pe care urmeaz s le modifice, ca s poat reface coninutul acestora nainte de revenirea la programul ntrerupt. Dac rutina de tratare nu este scris n acest mod este foarte posibil ca programul ntrerupt s nu mai funcioneze corect. Pentru a se realiza operaia de revenire la programul ntrerupt este necesar s se tie locaia ultimei instruciuni executate din programul ntrerupt. De aceea n momentul saltului la o rutin de tratare, sistemul de ntreruperi al UCP salveaz automat adresa urmtoarei instruciuni (adresa de ntoarcere). Salvarea i restaurarea contorului de program (PC) cu aceast adres sunt automate i nu cad n sarcina programului ntrerupt. Vom numi "vector de stare" informaia salvat n momentul devierii; ea cuprinde de obicei nu numai adresa locaiei urmtoarei instruciuni, dar i coninutul registrelor de stare i control ai UCP. Informaia vectorului de stare, mpreun cu coninutul spaiului de memorie alocat programului utilizator, furnizeaz o descriere complet a strii procesului la momentul devierii, numita context de lucru al procesului. Procesul poate fi repornit prin restaurarea acestei informaii n registrele potrivite i n locaiile de memorie. Cu privire la identificarea evenimentului ce a produs ntreruperea, unele procesoare produc saltul ctre o adres diferit pentru fiecare tip diferit de condiie / ntrerupere (ntreruperi vectorizate). Altele produc saltul la aceeai adres i stocheaz informaia pentru identificarea i tratarea ntreruperii la anumite adrese prestabilite din registrele procesorului sau din memorie
3

return from interrupt = ntoarcere din rutina de tratare a ntreruperii

Capitolul 5

136

(ntreruperi nevectorizate). n oricare din cazuri, efectul este acelai, prin saltul la un program diferit (program care deviaz cursul normal al programului ntrerupt i care este numit "rutin de tratare"), cunoscndu-se care este condiia care a produs aceasta devierea. Existena mecanismului de deviere, implementat n aa numitul "subsistem de ntreruperi" prezent n toate tipurile de procesoare, face sarcinile de programare ale utilizatorului mai simple. n cazul ntreruperilor vectorizate identificarea se face pe baza unui vector de ntrerupere. Cu ajutorul acestuia UCP calculeaz o adres pointer ntr-un tabel al vectorilor de ntrerupere unde UCP gsete adresa de nceput a rutinei de tratare a ntreruperii (RTI) respective. Modul de calcul al adresei pointer i modul de construcie al tabelei vectorilor de ntrerupere este diferit de la microprocesor la microprocesor dei principiul este asemntor. Ca exemplificare al modului de determinare al adresei RTI se propune exemplul din figura 5.15. Se presupune pentru simplificare c la acest sistem pot exista doar patru dispozitive ce pot lansa cerere de ntrerupere, deci vectorul de ntrerupere (notat VI) poate fi codificat cu doi bii. Memoria este adresabil pe octet, iar adresele au lrgimea de 16 bii. La recunoaterea unei cereri de ntrerupere UCP citete VI de 2 bii i l salveaz n PC pe poziiile binare cu ponderile 23 i 22 iar n acelai timp ceilali 14 bii ai PC sunt poziionai la zero.
Adresa (hex): 0000 Contor de program (16 bii) 0000 0000 0000 VI00 VI=01 VI=10 0008 VI=11 000C Salt la adresa RTI-2 VI=00 0004 Salt la adresa RTI-1 Memoria principal Salt la adresa RTI-0

Tabela vectorilor de ntrerupere

Salt la adresa RTI-3

RTI-2

Rutina de tratare ntrerupere cu VI=10

Figura 5.15. Exemplificare privind calculul adresei rutinei de tratare a ntreruperilor (RTI) pentru un sistem cu doar patru cereri de ntrerupere posibile. Cu VI s-a notat vectorul de ntrerupere furnizat de dispozitivul ntreruptor.

Unitatea de Control

137

n acest fel fiecare intrare n tabela vectorilor de ntrerupere din memoria principal corespunde la 4 octei unde se poate nscrie o instruciune de salt ctre RTI specific. n figur s-a indicat prin linie punctat saltul la rutina de tratare a cererii de ntrerupere cu vector de ntrerupere egal cu 10. La unele microprocesoare ntre adresele pointer de intrare n tabela vectorilor de ntrerupere poate exista o distan de 8 adrese n aa fel nct o eventual RTI foarte scurt s poat fi introdus aici. Mai mult tabela poate fi stocate oriunde n memoria principal i nu doar ncepnd cu adresa zero, ca n exemplificarea din figur. De observat c mecanismul de salt la RTI face o adresare indirect prin locaie de memorie. Avantajul determinrii adresei rutinei de tratare, prin acest mod indirect (relativ lent) este dat de faptul c rutinele de tratare pot fi stocate la orice adres n memoria principal. De observat c o soluie rigid care ar stoca rutinele de tratare la adrese pre-fixate din memoria principal, pe lng faptul c ar impune nite restricii n alocarea memoriei, ar fi foarte puin flexibil, fiind aproape imposibil de rescris o anumit rutin de tratare, dac aceasta are lungime mai mare dect spaiul alocat iniial.
Exemplul 1 pentru ntreruperi vectorizate n cazul microprocesorului Z80 (mod 2 de lucru al sistemului de ntreruperi), dac procesorul recunoate cererea de ntrerupere, lanseaz pe magistrala de control semnale de acceptare a cererii de ntrerupere (M1+IORQ n figura 5.16).
M1+ IORQ Dispozitiv I/O INT VI (LSB) (MSB)
8 8

MP Adres pointer n tabel ARTI

Z 80

ARTI:

Rutina de Tratare

Figura 5.16. Exemplu simplificat pentru salt la rutina de tratare a unei ntreruperii, n cazul procesorului Z80, n modul 2 de ntreruperi. I = registru de ntreruperi (pstreaz octetul mai semnificativ - MSB - al adreselor din tabelul vectorilor de ntrerupere); VI=vector de ntrerupere, furnizat de dispozitivul de intrare/ieire (I/O) cruia i s-a acceptat cererea de ntrerupere; ARTI=adresa rutinei de tratare a ntreruperii (este o adres pe 16 bii, iar memoria Z80 e organizat pe octet; de aceea pentru a citi ARTI se citesc doi octei ncepnd de la adresa pointer construit).

Capitolul 5

138

Ca urmare a acestei acceptri, dispozitivul ntreruptor va pune pe magistrala de date o informaie de identificare de 8 bii pe care o vom numi vector de ntrerupere (VI). Vectorul de ntrerupere formeaz octetul mai puin semnificativ al unei adrese pointer de 16 bii. Octetul mai semnificativ al adresei pointer se citete dintr-un registru special utilizat pentru ntreruperi (I), intern microprocesorului. Adresa pointer este adresa din memoria principal (din tabelul vectorilor de ntrerupere) unde se gsete adresa de salt ctre rutina de tratare a ntreruperii. Pot exista maximum 255 de intrri n tabela vectorilor de ntrerupere.
Exemplul 2 pentru ntreruperi vectorizate La procesorul I8086 (i seria I80x86 n mod real) toate adresele rutinelor de tratare a ntreruperilor se pstreaza ntr-o tabel a vectorilor de ntrerupere (TVI) care n modul ne-protejat de lucru se gsete ncepnd cu adresa 0 din memoria principal. La procesoarele Intel memoria este segmentat, aa nct adresa de 20 de bii se formeaz din dou componente: adresa de baz a segmentului de cod (coninut ntr-un registru segment numit CS) i adresa n cadrul segmentului (coninut pentru programe n registrul IP). Fiecare dispozitiv ntreruptor sau eveniment de excepie, va furniza un vector de ntrerupere pe 8 bii (Intel numete "tip" acest vector) cu ajutorul cruia se calculeaz adresa pointer (P) de intrare n tabela TVI. n tabel se pstreaz adresele rutinelor de tratare n felul urmtor: ncepnd cu adresa cea mai mic dintr-un grup de 4 octei se gsesc valorile ce se vor nscrie n registrele de 16 bii IP (mai nti octetul LSB i apoi MSB) i respectiv CS (LSB, iar la adresa cea mai mare MSB). Relaiile de calcul de adresare n TVI, respectiv transferurile ce se efectueaz sunt: P = 4 * (VI) - pointer care va conine adresa de intrare n TVI IP TVI(P+1,P) CS TVI(P+3,P+2) n acest fel ntreruperea 0 ncepe de la adresa 0, ntreruperea 1 de la adresa 4, iar ntreruperea 255 ncepnd de la adresa 1020 (n zecimal).

Pentru toate evenimentele care pot produce ntrerupere, este deosebit de important viteza cu care sistemul rspunde la cerere. Timpul care se scurge nainte ca o ntrerupere s fie tratat depinde de mai muli factori. Sursa de ntrerupere trebuie s ia n considerare aceasta ntrziere. Toi factorii urmtori pot afecta timpul scurs pn la recunoaterea i tratarea unei ntreruperi: dac ntreruperile mascabile sunt invalidate, o cerere INTR nu va fi recunoscut pn cnd ntreruperile nu sunt re-validate (prin indicatorul de ntreruperi). dac se servete o ntrerupere nemascabil, o nou cerere de ntrerupere nemascabil nu va fi recunoscut pn cnd procesorul nu execut instruciunea de revenire din rutina de tratare a ntreruperii (return from interrupt). salvarea registrelor de indicatori i a altor registre consum timp. de obicei instruciunile sunt nentreruptibile. O cerere de ntrerupere poate fi recunoscut doar la sfritul ciclului instruciune curent. Exist i excepii de la aceast regul, care se refer la ntreruperi software de tip faults (erori) i instruciuni cu prefix de repetare a execuiei. Acestea din urm pot fi de obicei ntrerupte dup fiecare execuie. dac mai mult de o ntrerupere sau excepie ateapt terminarea unei instruciuni, procesorul le servete pe rnd, n ordinea prioritii. n general, cea mai mare prioritate din list o au excepiile, sincrone cu programul (nu se ncadreaz aici excepiile (trap) folosite pentru a depana un program). Urmeaz apoi cererile de ntrerupere nemascabile. Cea mai mic prioritate o au ntreruperile mascabile.

Unitatea de Control

139

5.6. ROLUL MEMORIEI STIV


Memoria stiv (stack memory) este o memorie special ce lucreaz pe principiul LIFO (Last In First Out = ultimul intrat - primul ieit). Aa cum s-a vzut anterior, subsistemul de ntreruperi, este responsabil pentru salvarea i restaurarea automat din stiv a informaiilor vectorului de stare pentru programul ntrerupt. Memoria stiv este utilizat ca memorie de stocare temporar nu numai de sistemul de ntreruperi, ci i de ctre tehnicile de apelare a procedurilor (subrutinelor), sau poate fi folosit de programe pentru stocarea temporar-i regsirea rapid a datelor. De obicei prin stiv se transmit i alte informaii, cum ar fi transmiterea parametrilor ctre proceduri. O prim metod de implementare a memoriei stiv (avantajoas din punctul de vedere al vitezei, dar problematic din punctul de vedere al capacitii de memorare), const n folosirea unor registre interne ale UCP, (registre cu posibilitatea de deplasare stnga / dreapta a informaiei). Acest tip de memorie stiv este numit stiva construit hardware. A doua metod utilizat la majoritatea microprocesoarelor este implementarea memoriei stiv n cadrul memoriei principale, ntr-o zon a crei dimensiune poate fi satisfctore pentru orice aplicaie (stiva software). Numele de stiv sugereaz modul de funcionare al acestei zone de memorare. Astfel fiecare cuvnt nou introdus n stiv se aeaz peste anterioarele cuvinte, iar atunci cnd se dorete extragerea articolelor din stiv se ncepe de la vrful stivei (ultimul articol introdus). Stiva hardware, reprezentat schematic n figura 5.17, este implementat de obicei cu ajutorul unui set de registre de deplasare (R1 - RN), interne UCP. Vrful stivei (VS) se va gsi ntotdeauna n celulele registrelor de pe primul rang binar (c1i, unde i = 1, N ), celule cuplate la intrrile seriale (I1 - IN). Pentru scriere n stiv (PUSH), se face deplasare sus-jos a coninutului registrelor (informaia din vrful stivei trece pe urmtoarea poziie binar din registre (c2i), iar n vrful stivei apare ultimul articol nscris. La extragere din stiv (POP) informaia din vrful stivei este citit la ieirile Y1-YN i se face deplasare n sens "jos-sus" a informaiei, pentru fiecare din registrele din figur. Capacitatea de memorare a stivei este limitat la un numr de cuvinte egal cu numrul de celule inclus n fiecare registru component (M n figura 5.17). Numrul de registre folosite determin dimensiunea n bii a fiecrui cuvnt. De obicei stiva hardware are o adncime maxim de 4 cuvinte, iar la microprocesoarele unde este implementat ofer o vitez mare de salvare / restaurare a informaiilor stocate la apelul procedurilor, sau la saltul ctre rutine de tratare a ntreruperilor. Ultimul rnd de celule ce pot stoca informaie n stiv formeaz Baza Stivei (BS). Dac n stiva hardware se introduc mai multe cuvinte dect capacitatea acesteia informaia cea mai veche introdus n stiv se pierde. Cele mai multe dintre microprocesoarele ce au implementat mecanismul pentru stiv hardware pot administra i o stiv software. n cazul implementrii stivei n memoria principal, informaia nu mai este deplasat sus sau jos, iar gestiunea informaiilor din stiv este realizat cu ajutorul unui registru ce memoreaz ntotdeauna informaia de adresare a vrfului stivei. Acest registru este numit registru Indicator de Stiv (SP - Stack Pointer). Stiva construit software, n memoria principal, nu are dimensiuni fixe, acestea putnd fi stabilite de programator. Chiar dac dimensiunea mare este un avantaj, faptul c scrierea sau citirea din stiv nseamn acces la memoria principal, extern UCP, conduce la o vitez de lucru mai mic dect la stiva hardware. La nscrierea unui articol n stiv se spune c stiva crete. Creterea stivei nseamn i reactualizarea coninutului registrului SP care va conine ntotdeauna adresa vrfului stivei, deci a ultimului cuvnt introdus n stiv, sau adresa primului articol ce a rmas n vrful stivei dup o extragere din stiv.

Capitolul 5 IN

140

I2 I1 VS c11 P U S H c21 c21 c41

Y1 c12 c22 c32 c42

Y2 c1N c2N c3N c4N

YN

P O P

BS cM1 R1

cM2 R2

cMN RN

Figura 5.17. Implementarea hardware a stivei, cu ajutorul unui set de registre cu deplasare serial bidirecional.

n lumea microprocesoarelor exist dou convenii pentru creterea stivei: cretere ctre adrese mici (convenia Intel) i cretere ctre adrese mari (convenia Motorola). Aici vom considera creterea stivei doar ctre adrese mici, ceea ce nseamn c ori de cte ori se introduce un nou articol n stiv acesta va avea adres mai mic dect anteriorul cuvnt nscris i c la scriere registrul SP se decrementeaz. Dac memoria este organizat pe octet (fiecare octet are o adres specific), la scriere, micorarea valorii de adres coninut n SP const n scderea din valoarea iniial a lui SP a unui numr egal cu numrul de octei nscrii n stiv. n cazul extragerii cuvintelor din stiv operaiile sunt inverse, coninutul registrului SP fiind incrementat Valoarea iniial a coninutului lui SP se numete adresa de baz a stivei (baza stivei) i aceasta se fixeaz la lansarea programului n execuie conform directivelor introduse de utilizator n programul surs. Transferul ntre UCP i stiva construit n memoria principal se poate face n dou moduri:
automat (de ctre unitatea de control) la ntreruperea unui program prin ncrcarea n VS a adresei de revenire i a altor informaii de stare. ntreruperea poate s constea ntr-un salt la o rutin de tratare de ntrerupere, sau ntr-un salt la o procedur. prin instruciuni speciale pentru transfer cu stiva (numite PUSH i POP ca n figura 5.17, sau MOV - mut n stiv). La fiecare ncrcare sau extragere din stiv se actualizeaz SP.

Dup cum s-a menionat la nceputul paragrafului memoria stiv este folosit pentru salvare i restaurare automat nu numai de ctre sistemul de ntreruperi dar i de apelurile de proceduri. O procedur este o secven de instruciuni apelat ntr-un punct al alteia, executat, dup care are loc revenirea n secvena apelant, la adresa imediat urmtoare celei n care s-a fcut apelarea. Rutinele de tratare a ntreruperilor produc o secven similar de aciuni, dar apelarea nu se face prin instruciuni de tip CALL, ci ca urmare a recunoaterii unui eveniment extern, numit cerere de ntrerupere. La unele microprocesoare exist n plus instruciuni numite "ntreruperi software", care de asemenea folosesc stiva i care se apeleaz prin furnizarea codului instruciunii i a unei valori (tip) de identificare. De exemplu la Intel instruciunea se scrie "INT tip" Atunci cnd se face apel la o procedur, unitatea de control trebuie s fac salvarea valorii

Unitatea de Control

141

curente (adresa de revenire) coninut n registrului contor de program. Pentru prezentarea lucrului cu memoria stiv de mai jos este deocamdat neimportant dac informaia salvat provine dintr-un registru numit contor de program (PC), sau dac n afar de registrul contor (IP - Instruction Pointer la Intel), n stiv se mai salveaz i coninutul unui registru de adres de segment, cum se ntmpl la Intel 8086 pentru proceduri far. Dup salvare urmeaz ncrcarea PC cu adresa la care se face saltul (adresa unde ncepe procedura). Procedura se termin cu o instruciune de salt de tip RETURN prin care se produce ncrcarea automat a PC cu adresa de revenire la programul ntrerupt. Alte salvri /restaurri ale variabilelor contextului ntrerupt se pot efectua n cadrul procedurii, prin intermediul unor instruciuni de nscriere (push) / extragere (pop) din stiv. Pentru a se urmri coninutul memoriei stiv la apelul procedurilor n figura 5.18a se prezint un exemplu de apel de proceduri, P1 din programul principal PP i P2 din procedura P1. n cadrul fiecreia dintre rutine s-au notat cu IN instruciuni oarecare ale programelor (cu excepia instruciunilor de tip call, ret, int, push, pop etc., care afecteaz i coninutul stivei); cu litere mici i dou puncte s-au notat adresele, <t> reprezint momente de timp succesive (ordinea corespunde cu indicele folosit).

PP

P1 b: PUSH R1 PUSH R2 PUSH R3 IN <t1> IN . CALL c <t3> d: IN . . POP R3 POP R2 POP R1 RET

P2

IN IN <t0> <t4> IN . CALL b a: IN

<t2> c:

IN IN IN RET

END
Figura 5.18a. Exemplu de apel a dou proceduri notate cu P1 i P2. Pe figur s-au notat momentele de timp la care n figura 5.18b se analizeaz coninutul memoriei stiv.

n figura 5.18b s-a prezentat poziia vrfului stivei la momente de timp succesive. Se observ c s-a notat baza stivei (adresa iniial a vrfului stivei cu x). De asemenea s-au notat cu aH si aL, octeii mai semnificativ (High), respectiv mai puin semnificativ (Low) ai adresei a. n procedura P1 s-au fcut i salvri ale coninutului unor registre (presupuse cu dimensiune jumtate

Capitolul 5

142

fa de adres, n numr de bii). Restaurarea coninutului acestora trebuie fcut n ordine invers salvrii n stiv, datorit modului de lucru al acesteia.
timp t0 t1 t2 SP t3 t4 adres Memorie

x-7: x-6:

dL dH R3 R2 R1 aL aH VS iniial

SP

SP

x-5: x-4: x-3: x-2: x-1:

SP

SP

x:

5. 18b. Coninutul stivei i indicarea adresei vrfului stivei pentru exemplul din figura 5.18a.

5.7. UTILIZAREA FERESTRELOR DE REGISTRE


Dac n paragrafele anterioare s-a considerat accepiunea clasic a salvrii i restaurrii informaiei la o schimbare de context, pentru procesoarele RISC au aprut noi metode de salvare a vectorului de stare al unui program ntrerupt i de asemenea metode noi pentru transferul parametrilor ctre proceduri. Ideea de baz este s se nlture accesul repetat la o memorie stiv extern pentru salvarea / restaurarea informaiilor. Schimbarea de context presupus de un apel de procedur duce la o mare risip de timp, pentru c presupune salvri sau restaurri din memoria stiv construit n memoria principal. La fiecare apelare de procedur variabilele locale programului apelant trebuie salvate din registre n memorie pentru ca registrele s poat fi utilizate la programul apelat. n plus, la apelarea procedurilor trebuie transferai i parametrii ctre procedur. La revenire trebuie restaurate variabilele programului printe (ncrcate din nou n registre) iar rezultatele trebuie trecute ctre programul printe. Din aceast cauz soluia este s se introduc un set mare de registre interne procesorului, n care s se poat pstra informaia necesar schimbrii contextului, inclusiv pentru transmiterea de parametrii i returnarea de valori din proceduri. Mai mult, o banc de registre local permite adresarea cu un numr mai mic de bii, dect n cazul stivei externe, pentru c dimensiunea acestei bnci este n general mic. Astfel strategia este s se pstreze informaia ct mai mult n registre locale i s se minimizeze operaiile de transfer registre - memorie. Exist dou abordri pentru rezolvarea acestei probleme. Prima este o abordare software i se bazeaz pe un compilator care maximizeaz utilizarea registrelor n operaiile necesare de transfer. Compilatorul va ncerca s aloce registre pentru acele variabile care sunt utilizate n cea mai mare perioad a timpului de execuie. Aceast abordare cere utilizarea unor algoritmi sofisticai de analiz a programului. Abordarea hardware se refer pur i simplu la implementarea mai multor registre interne astfel ca s se poat menine ct mai multe variabile n memoria local. Abordarea hardware a fost propus pentru prima oar pentru procesorul RISC1 proiectat i implementat n anii 70 ai secolului trecut la University of California at Berkeley. La acest procesor s-a utilizat un set mare de registre interne UCP. Setul conine 138 de

Unitatea de Control

143

registre de 32 de bii ce au fost aranjate n 8 ferestre a cte 22 de registre cu suprapunere parial a cte 6 registre vecine. Se folosesc de asemenea 10 registre globale, pentru toate procedurile active. Fiecare fereastr a fost mprit astfel nct 6 registre pot fi utilizate pentru transmiterea parametrilor la apelarea procedurilor. Pentru selecia grupului de 6 registre se modific doar un registru pointer. Pentru efectuarea unei apelri (call) sau reveniri (return) se modific doar registrul pointer. Numrul mare de registre este necesar pentru a minimiza numrul de transferuri cu exteriorul procesorului. Prin aceast tehnic a ferestrelor de registre, cu suprapunere parial apelarea procedurilor poate fi efectuat foarte rapid. Viteza este avantajoas n special la aplicaii n timp real unde este necesar un rspuns foarte rapid. Totui exist i dezavantaje, pentru c dac apelul procedurilor cere mai mult de ase variabile unul dintre registre trebuie s adreseze un vector stocat n memoria extern. Aceste date trebuie ncrcate nainte de orice prelucrare iar tehnica ferestrelor de registre pierde mult din performana propus. Dac se utilizeaz toate ferestrele suprapuse sistemul poate rezolva situaia prin urmrirea utilizrii ferestrelor i salvarea n memoria extern fie a unei ferestre fie a ntregului set de registre. Acest eveniment poate face ca avantajul ferestrelor de registre locale s fie anulat, mai ales dac la schimbarea de context trebuie salvate toate cele 138 de registre, pentru c crete timpul de rspuns. Principiul ferestrelor de registre presupune c fiecare fereastr are acelai numr de registre, pentru fiecare procedur apelant alocndu-se o fereastr. Un apel de procedur va face doar o comutare a setului de registre utilizat de procesor n loc de a salva registrele n memorie. Ferestrele procedurilor adiacente se suprapun pentru a permite transferarea parametrilor. Conceptul este explicat n figura 5.19.
nivel i Registre de intrare Registre locale Registre de ieire nivel i+1

Apel procedur Registre de intrare Registre locale Registre de ieire

Revenire

Figura 5.19. Explicativ la suprapunerea ferestrelor de registre

La fiecare moment de timp doar o fereastr de registre este vizibil i adresabil, ca i cum nu ar exista dect acel numr limitat de registre. Fereastra este mprit n trei zone de lungime fix. Registrele de intrare pstreaz parametrii primii de la programul (printe) ce a apelat procedura i de asemenea pstreaz rezultatele ce vor fi returnate printelui. Registrele locale sunt utilizate pentru variabile locale, aa cum sunt atribuite de compilator. Registrele de ieire sunt utilizate pentru a schimba parametrii i rezultate cu urmtorul nivel inferior (procedur apelat din procedura curent). Registrele de ieire de pe un nivel sunt fizic aceleai cu registrele de intrare de

Capitolul 5

144

pe nivelul inferior. Aceast suprapunere permite transmiterea parametrilor fr un transfer suplimentar de date ntre programele apelant i apelat. Pentru a permite orict de multe apelri de proceduri numrul de ferestre ar trebui s fie nelimitat. Aceast situaie este rezolvat prin organizarea ferestrelor ca un tampon circular, ultima fereastr fiind suprapus cu prima, ferestrele de registre pstrnd doar cele mai recente proceduri apelate. Cele apelate anterior i care nu au loc n registrele locale sunt salvate n memoria principal i apoi retaurate de acolo. Pentru exemplificare vom presupune un set de patru ferestre de registre organizate ca un tampon circular n figura 5.20. n exemplu s-a presupus c procedura P1 (ca printe) a apelat P2 (ca fiu), astfel c registrul pointer al ferestrei curente (PFC) a ajuns la fereastra 2, care este fereastra procedurii active la momentul actual. Se pot face n continuare apelri de genul P2 apeleaz (ca printe) P3 (fiu) i P3 apeleaz P4, cu actualizarea registrului PFC. Adresa registrelor n corpul instruciunilor procesorului cu ferestre de registre constituie deplasament fa de acest pointer (PFC), astfel c numrul de bii alocai adresrii registrelor este determinat doar de dimensiunea fiecrei ferestre.

Pointer fereastr salvat

Fereastra 1

Intrare P1

Local P1 Apel procedur

Intrare P2

Fereastra 4

Revenire

Intrare P4

Local P3

Intrare P3 Pointer fereastr curent

Fereastra 3

Figura 5.20. Ferestre suprapuse de registre cu organizare circular i indicarea sensului de apel al procedurilor respectiv revenire din procedur.

Pointerul pentru fereastra salvat identific cea mai recent fereastr salvat n memoria principal. Astfel dac procedura P4 ar apela o alt procedur, de exemplu P5, registrul de ieire al ferestrei 4 (identic cu registrul de intrare al ferestrei 1) ar ncerca s scrie parametrii ctre procedura P5 peste registrele de intrare alocate procedurii P1. Astfel c atunci cnd PFC este incrementat (modulo 4 pentru acest exemplu) el devine egal cu pointerul ferestrei salvate ceea ce va produce o ntrerupere (excepie) iar fereastra procedurii P1 este salvat n memoria extern. La revenire, dac prin depirea capacitii numrului de ferestre a fost necesar salvarea n memoria principal, apare o nou ntrerupere, care va restaura informaia corespunztoare procedurii P1. Ori de cte ori se face apelare, registrul PFC se incrementeaz, iar la revenire (return) se decrementeaz.

Fereastra 2

Local P4

Local P2

Unitatea de Control

145

Un bun exemplu al acestei abordri este procesorul SPARC. Procesorul SPARC4 are o arhitectur RISC pe 32 de bii dezvoltat de firma Sun Microsystems. Arhitectura de baz este conform modelului RISC Berkeley i utilizeaz ferestre de registre pentru a mbunti comutarea de context i transmiterea parametrilor. Se utilizeaz o banc de 120 de registre de 32 de bii mprit n 7 ferestre de registre plus un set de opt registre disponibile global (16 registre 7 ferestre =112 registre plus cele 8 globale). Fiecare fereastr conine 24 de registre mprite n trei seciuni pentru a furniza 8 registre de intrare, 8 registre locale i 8 registre de ieire. Cele 8 registre de ieire furnizeaz cele 8 intrri pentru urmtoarea fereastr. Dac se selecteaz o nou fereastr n timpul unei schimbri de context sau ca urmare a apelrii unei proceduri, datele sunt copiate n registrele de ieire, care constituie registre de intrare pentru procedura noului context de lucru. Ferestrele sunt suprapuse formnd un lan continuu (circular) ultima fereastr avnd registre comune cu prima fereastr. La revenire, informaia returnat la rutina apelant este pus n registrele de intrare i se execut return.

SPARC = Scalable Processor ARChitecture

S-ar putea să vă placă și