Documente Academic
Documente Profesional
Documente Cultură
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
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
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
Unitatea de Control
119
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.
Capitolul 5
120
Combinaii de intrare Cin I2 ... S12,C12 S22,C22 ... Sn2,Cn2 ... ... ... ...
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.
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.
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
Start S Latch RS R Q Q
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.
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
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
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.
...
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
secveniere
control
Registru microinstruciuni
(a)
(c)
secveniere control
(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
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
Ieire
etaj 1
Registru de memorare
etaj 4
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
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
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.
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
SI
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
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
RTI-2
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
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
Capitolul 5 IN
140
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
<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
SP
SP
x:
5. 18b. Coninutul stivei i indicarea adresei vrfului stivei pentru exemplul din figura 5.18a.
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
Revenire
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.
Fereastra 1
Intrare P1
Intrare P2
Fereastra 4
Revenire
Intrare P4
Local P3
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.