Sunteți pe pagina 1din 168

ARHITECTURA CALCULATOARELOR (STRUCTURI SI ARHITECTURI MULTIPROCESOR) Anul III seria 2009-10 Precedene: Urmarea acestui curs presupune promovarea

cursului de STRUCTURA SI ARHITECTURA CALCULATOARELOR. Metoda de evaluare a cunotinelor: evaluarea continua la CURS si LABORATOR Condiii de promovare: Nota minima la laborator 5 Nota minima la examen 5 Ponderea: 50% nota de la laborator i toate laboratoarele efectuate. 50% nota de la examen. Referatele prezentate la curs se noteaz. Ponderea acestei note este egala cu media notelor obinute la laborator. Cap.8. UNITATEA DE MEMORIE Memoria este partea sistemelor de calcul care se utilizeaz pentru pstrarea i regsirea ulterioar a datelor i instruciunilor. Operaiile principale n care este implicat memoria sunt urmtoarele: Preluarea datelor de intrare n memorie; Pstrarea datelor pentru a putea fi prelucrate de ctre UCP; Pstrarea datelor de ieire pentru a putea fi preluate de echipamentele de ieire; Transmiterea datelor din memorie la ieire. Sistemele de memorie influeneaz n mod critic performanele calculatoarelor. Deoarece n memorie sunt pstrate att datele ct i instruciunile, sistemul de memorie trebuie s satisfac cererile simultane pentru prelucrarea datelor, execuia instruciunilor i transferul ntre memorie i exterior. Exist o mare varietate de tipuri, tehnologii, organizri, performane i costuri ale memoriilor utilizate n sistemele de calcul. Nici una din acestea nu este optim pentru satisfacerea tuturor cerinelor. Ca o consecin, sistemele de calcul sunt echipate cu o ierarhie de subsisteme de memorie, unele interne sistemului (accesibile direct de UCP), iar altele externe (accesibile de ctre UCP printr-un modul de I/E). 8.1. Caracteristicile sistemelor de memorie Cele mai importante caracteristici sunt urmtoarele: - Amplasarea. Sistemele de calcul dispun de memorii interne i externe. Memoria intern este considerat de cele mai multe ori ca memorie principal. Exist ns i alte forme de memorie intern. UCP necesit o memorie local proprie, sub forma registrelor. Unitatea de comand i control din cadrul UCP poate necesita de

asemenea o memorie proprie, n cazul unitilor de comand microprogramate. Memoria extern const din dispozitivele periferice, ca discuri sau benzi magnetice, care sunt accesibile de ctre UCP prin controlere (module) de I/E. - Capacitatea. Se exprim prin octei (bytes) care formeaz sistemul de memorie (Koctei, Moctei, Goctei). - Unitatea transferabil. Pentru memoria intern, unitatea transferabil este egal cu numrul liniilor de date ctre i de la modulul de memorie, deci cu numrul de bii transferai simultan. Unitatea transferabil nu trebuie s fie egal neaprat cu un cuvnt de memorie. Pentru memoria extern, datele sunt transferate de multe ori n uniti mai mari dect un cuvnt, numite blocuri. - Metoda de acces. Exist urmtoarele tipuri de acces la unitile de date: 1. Acces secvenial. Memoria este organizat n uniti de date, numite nregistrri. Accesul trebuie realizat ntr-o secven liniar. Se utilizeaz informaii de adresare memorate pentru separarea nregistrrilor i pentru a permite regsirea informaiilor. Timpul de acces la o nregistrare oarecare este variabil i depinde de poziia nregistrrii n cadrul fiierului. Unitile de band sunt echipamente cu acces secvenial. 2. Acces direct. Blocurile sau nregistrrile individuale au o adres unic pe baza amplasrii fizice a acestora. Timpul de acces este de asemenea variabil i depinde de poziia nregistrrii accesat anterior. Unitile de discuri fixe sunt echipamente cu acces direct. 3. Acces aleator. Fiecare locaie adresabil a memoriei are un mecanism de adresare ncorporat. Timpul de acces a fiecrei locaii este independent de secvenele acceselor anterioare i este constant. Fiecare locaie poate fi, deci, selectat aleator i poate fi adresat i accesat direct. Memoria principal este cu acces aleatoriu (RAM). 4. Acces asociativ. Memoria asociativ este un tip de memorie cu acces aleator, care permite compararea unor bii dintr-un cuvnt cu o anumit valoare specificat i efectuarea acestei comparri n mod simultan pentru toate cuvintele. Deci, un cuvnt este regsit pe baza unei pri a coninutului acestuia i nu pe baza adresei (memorie adresabil prin coninut). Fiecare locaie are propriul mecanism de adresare, iar timpul de regsire este constant, independent de locaie sau de secvenele acceselor anterioare. - Tipul memoriei. Cele mai utilizate tipuri de memorii sunt memoriile semiconductoare i memoriile magnetice. - Metoda de scriere a informaiilor ntr-o memorie poate fi reversibil sau permanent. Memoriile la care citirea i scrierea pot fi efectuate n timpul funcionrii sunt numite memorii cu citire-scriere. Toate memoriile utilizate pentru memorare temporar sunt de acest tip. Memoriile semiconductoare cu citire-scriere sunt numite de obicei memorii cu acces aleator (RAM), ceea ce reprezint o folosire improprie a termenului, deoarece exist i alte tipuri de memorii care sunt cu acces aleator. Memoriile al cror coninut nu poate fi modificat sunt numite memorii

numai cu citire (ROM - Read-Only Memory). O memorie ROM este astfel o memorie care nu se poate terge. Aceasta este citit utiliznd metode de acces aleator ca cele pentru o memorie RAM. Memoriile ROM sunt utilizate pe scar larg pentru memorarea programelor de control cum sunt microprogramele. Alte aplicaii cuprind programe de sistem sau subrutine de bibliotec pentru funcii utilizate frecvent. Discurile compacte, cum sunt discurile CD-ROM, reprezint o clas de memorie secundar ROM care utilizeaz un mecanism de citire-scriere optic. O memorie semiconductoare ROM este fabricat ca i orice alt capsul de circuit integrat, datele fiind nscrise n timpul procesului de fabricaie. Aceasta are dezavantajul c procesul de includere a datelor are un cost fix relativ ridicat, ceea ce este acceptabil numai la fabricarea un numr mare de circuite de acelai tip. Atunci cnd este necesar doar un numr redus de memorii ROM cu un anumit coninut, o alternativ mai puin costisitoare este memoria PROM (Programmable Read-Only Memory). In cazul memoriei PROM, procesul de scriere este executat prin semnale electrice de ctre furnizor sau utilizator ntrun moment ulterior fabricaiei circuitului. Procesul de scriere, numit "programare", este executat off-line utiliznd un echipament special. Memoria PROM asigur flexibilitate la un cost moderat, dar are dezavantajul c nu poate fi tears. O alt variant a memoriei ROM este memoria EPROM (Erasable Programmable Read-Only Memory). Aceasta este citit i nscris electric, ca i memoria PROM, ns naintea unei operaii de scriere toate celulele de memorare trebuie terse pentru a avea aceeai stare iniial prin expunerea capsulei la o radiaie ultraviolet. Acest proces de tergere poate fi executat n mod repetat. O form mai atractiv de memorie ROM este memoria EEPROM (Electrically Erasable Programmable Read-Only Memory). Aceast memorie poate fi nscris n orice moment fr a-i terge coninutul. Operaia de scriere trebuie efectuat pe blocuri i necesit un timp considerabil mai lung dect operaia de citire. Memoria EEPROM are avantajul c poate fi actualizat online, utiliznd semnale obinuite de control, adrese i date. Acest tip de memorie este potrivit pentru pstrarea programelor de control i ca un nlocuitor al memoriei secundare n anumite aplicaii. La anumite tehnologii de memorie, informaiile memorate se pierd dup o perioad de timp dac acestea nu sunt refcute. Pierderea informaiilor memorate poate avea loc n urmtoarele cazuri: citirea distructiv, memorarea dinamic i volatilitatea. La anumite memorii metoda de citire distruge informaiile memorate; acest fenomen este numit citire distructiv (DRO Destructive Readout). Memoriile la care citirea nu afecteaz informaiile memorate sunt caracterizate prin citire nedistructiv (NDRO -Non-Destructive Readout). La memoriile DRO fiecare operaie de citire trebuie urmat de o operaie de scriere care reface starea original a memoriei. Aceast refacere

este efectuat automat utiliznd un registru buffer. Operaia de citire transfer cuvntul din locaia adresat ntr-un registrul buffer. Coninutul bufferului este rescris apoi n locaia original. Anumite memorii au proprietatea c informaia memorat are tendina s se modifice dup un anumit timp, datorit unui proces fizic. De exemplu, la anumite memorii semiconductoare o sarcin electric dintr-un condensator reprezint valoarea binar 1, iar absena sarcinii reprezint valoarea binar 0. In timp, condensatorul tinde s se descarce, determinnd pierderea informaiei. Pentru a evita acest lucru sarcina este refcut printr-un proces numit remprosptare. Memoriile care necesit o remprosptare periodic sunt numite memorii dinamice, spre deosebire de memoriile statice, care nu necesit remprosptare. Majoritatea memoriilor care utilizeaz tehnici de memorare magnetic sau optic sunt statice. O memorie dinamic este remprosptat n acelai mod n care sunt refcute informaiile ntr-o memorie cu citire distructiv. Coninutul fiecrei locaii este citit periodic n registre buffer, iar apoi este rescris sub form amplificat n locaia original. Coninutul unei memorii poate fi distrus de asemenea prin deconectarea sau defectarea sursei sale de alimentare. O memorie este volatil dac lipsa tensiunii de alimentare distruge informaiile memorate. Memoriile RAM semiconductoare dinamice i statice sunt volatile, n timp ce memoriile ROM i variantele lor sunt nevolatile. Majoritatea memoriilor secundare magnetice i optice sunt nevolatile. 8.2. Indicatori de performan ai memoriilor Din punctul de vedere al utilizatorului, cele mai importante caracteristici ale unei memorii sunt capacitatea i performana. Performana unei memorii este determinat n principal de viteza cu care informaiile pot fi citite din memorie sau scrise n memorie. Cei mai importani indicatori de performan utilizai sunt timpul de acces, durata ciclului, rata de transfer i fiabilitatea 1. Timpul de acces al unei memorii cu acces aleator, notat cu t A , este timpul necesar pentru a executa o operaie de citire sau scriere pentru o cantitate fix de informaie, de exemplu, un cuvnt. Acest timp este calculat din momentul n care memoria primete o cerere de citire sau scriere pn n momentul n care datele sunt disponibile pentru utilizare sau sunt memorate. Timpul de acces pentru citire nu este ntotdeauna egal cu timpul de acces pentru scriere. Pentru o memorie cu acces non-aleator, timpul de acces este timpul necesar pentru a poziiona mecanismul de citire-scriere la locaia dorit. 2. Durata ciclului, notat cu t M , se refer n primul rnd la memoriile cu acces aleatoriu. Durata ciclului const din timpul de acces la care se adaug timpul suplimentar necesar nainte de a putea ncepe un al doilea acces. Anumite memorii cu citire distructiv nu pot iniia un nou acces nainte de a fi executat o operaie de refacere sau remprosptare. De aceea, timpul minim care trebuie s treac ntre nceperea a dou operaii de acces consecutive

poate fi mai mare dect timpul de acces t A . 3. Rata de transfer, notat cu rM , este cantitatea maxim de informaii care pot fi transferate n sau din memorie n unitatea de timp. Aceast rat este msurat n bii pe secund sau cuvinte pe secund. Dac w este numrul de bii care pot fi transferai simultan cu memoria, rata de transfer este rM = w / t M bii/s. Dac t M = t A , atunci rM = w / t A . 4. Fiabilitatea este msurat prin timpul mediu ntre defecte (MTBF -Mean Time Between Failures). In general, memoriile fr pri n micare au o fiabilitate mult mai ridicat dect memoriile care implic o deplasare mecanic, precum discurile magnetice. Chiar i la memoriile fr pri n micare, apar probleme de fiabilitate, n particular atunci cnd se utilizeaz densiti de memorare sau rate de transfer foarte ridicate. Codurile detectoare de erori i codurile corectoare de erori pot crete fiabilitatea oricrui tip de memorie.

8.3. Ierarhia de memorii Principalele caracteristici de care trebuie s se in cont la realizarea unui sistem de memorie sunt capacitatea i performanele memoriei, n special timpul de acces. Pe lng acestea, trebuie s se ia n considerare i costul memoriei. Aceste caracteristici sunt contradictorii. De exemplu, exist n general urmtoarele relaii ntre capacitatea, timpul de acces i costul pe bit al diferitelor tehnologii utilizate pentru implementarea sistemelor de memorie: - O capacitate mai mare implic un timp de acces mai mare; - O capacitate mai mare implic un cost pe bit mai mic; - Un timp de acces mai mic implic un cost pe bit mai mare. Pe de o parte, trebuie utilizate tehnologii de memorie care asigur o capacitate ridicat, pentru c o asemenea capacitate este necesar i deoarece costul pe bit al acestor tehnologii este mai redus. Pe de alt parte, pentru a satisface cerinele de performan, trebuie utilizate memorii cu un timp de acces redus, care au un cost ridicat i o capacitate relativ redus. Aceste cerine contradictorii se pot asigura dac se utilizeaz n cadrul unui sistem de calcul mai multe componente i tehnologii de memorie, care formeaz o ierarhie de memorii. La ierarhizarea memoriei s-a inut seama de modul n care opereaz programele. Astfel, prin analize statistice ale unor programe tipice s-a constatat c n orice interval de timp dat referinele la memorie tind s se restrng n zone locale ale memoriei. Aceast proprietate este cunoscut sub numele de localitate a referinelor. Exist trei concepte asociate cu localitatea referinelor: localitatea spaial, temporal i secvenial. Aceste concepte sunt definite n continuare. - Localitatea spaial. De multe ori, un program utilizeaz date i instruciuni ale cror adrese sunt apropiate unele de altele n spaiul de adrese. De exemplu, referinele la elementele unui tablou apar ntotdeauna n cadrul unei anumite zone limitate din spaiul de adrese. Similar, dac UCP face referire

la o instruciune I de un cuvnt, memorat la o adres dat A , instruciunea cea mai probabil de a fi refereniat n continuare de ctre UCP este cea imediat urmtoare dup I , a crei adres este A + 1. - Localitatea temporal. Datele sau instruciunile referite recent au o probabilitate ridicat de a fi referite din nou n viitorul apropiat. De exemplu, un grup de instruciuni dintr-o bucl iterativ sau o subrutin pot fi executate n mod repetat, rezultnd o frecven ridicat a referinelor la adresele acestora. - Localitatea secvenial. Majoritatea instruciunilor dintr-un program sunt executate ntr-o ordine secvenial. Instruciunile care pot determina execuia ntr-o ordine diferit de cea secvenial sunt salturile sau apelurile de proceduri. Acestea reprezint ns doar ntre 20% i 30% din totalul instruciunilor. Pentru acest motiv ntre 70% i 80% din instruciuni sunt executate n aceeai ordine n care ele sunt pstrate n memorie. O ierarhie tipic este ilustrat n figura 8.1. In mod uzual, se poate considera c diferitele uniti de memorie dintr-un sistem tipic formeaz o ierarhie de memorii ( M 1, M 2 ,..., M n ) , dup cum se arat n figura 8.1. Nivelul cel mai nalt, M 1 este reprezentat de unitatea de memorie cea mai rapid, cu dimensiunea cea mai redus i cu costul cel mai ridicat, fiind amplasat cel mai aproape de procesor.

Fig.8.1 Urmtorul nivel, M 2 , este mai lent, are dimensiuni mai mari i un cost mai redus dect nivelul M 1 , fiind amplasat mai departe de procesor. Acelai lucru este valabil pentru nivelele M 3 pn la M n . In general, pe msur ce nivelul crete, viteza i deci costul pe bit cresc n mod proporional, ceea ce tinde s micoreze capacitatea memoriei de la acel nivel. Componentele sistemului de memorie pot fi plasate n patru grupe,

prezentate n continuare. Registrele UCP. Registrele de vitez ridicat ale UCP sunt utilizate ca memorie de lucru pentru pstrarea temporar a instruciunilor i datelor. Ele formeaz de obicei un set de registre cu scop general pentru pstrarea datelor. Fiecare registru poate fi accesat pentru citire sau scriere ntr-un singur ciclu de ceas. Memoria principal (primar). Aceast memorie extern rapid pstreaz programe i date care sunt n uz curent. Locaiile memoriei principale sunt adresate direct prin instruciunile de ncrcare i memorare ale UCP. Cu toate c se utilizeaz o tehnologie similar cu cea a setului de registre al UCP, accesul este mai lent din cauza faptului c memoria principal este separat fizic de UCP. Capacitatea memoriei principale poate ajunge n prezent la uniti sau zeci de Goctei, iar timpii de acces tipici sunt de cteva cicluri de ceas. Memoria secundar. Acest tip de memorie are o capacitate mult mai mare dar, n acelai timp, este mult mai lent dect memoria principal. Memoria secundar pstreaz programe i date care nu sunt solicitate n mod constant de UCP. Este utilizat de asemenea atunci cnd capacitatea memoriei principale este depit. Informaia din memoria secundar este accesat indirect prin programe de intrare/ieire care transfer informaii ntre memoria principal i cea secundar. Tehnologiile reprezentative pentru memoria secundar sunt discurile magnetice fixe i discurile optice, ambele avnd mecanisme de acces electromecanice relativ lente. Capacitile de memorare de zeci sau sute de Goctei sunt obinuite, iar timpii de acces se msoar n milisecunde. Memoria cache. Majoritatea calculatoarelor i procesoarelor au un alt nivel de memorie (uneori mai multe asemenea nivele) numit memorie cache. Logic memoriile cache sunt poziionate ntre registrele UCP i memoria principal. Capacitatea de memorare a memoriei cache este mai mic dect cea a memoriei principale, dar poate fi accesat mai rapid dect aceasta. Deoarece o parte a acesteia sau ntreaga memorie cache se poate afla n aceeai capsul cu UCP, timp de acces de unul la trei cicluri de ceas. Memoriile cache sunt componente eseniale ale calculatoarelor cu performane ridicate. Spre deosebire de celelalte trei tipuri de memorii, memoriile cache sunt de obicei transparente programatorului. Figura 8.2 prezint unele exemple de ierarhii de memorie cu dou, trei i patru nivele. Ierarhia cu dou nivele din figura 8.2(a) este tipic pentru calculatoarele din generaiile anterioare. La ierarhia din figura 8.2(b) este adugat o memorie cache numit memorie cache divizat, deoarece aceasta are zone separate pentru memorarea instruciunilor (Cache I) i a datelor (Cache D). Al treilea exemplu din figura 8.2(c) are dou nivele de memorii cache, ambele de tip nedivizat.

Fig.8.2 8.4 Memoria principal semiconductoare Memoria principal semiconductoare este de obicei o memorie cu acces aleator (RAM). Acest tip de memorie se distinge prin faptul c fiecare locaie de memorare poate fi accesat independent, cu un timp de acces fix care este independent de poziia locaiei accesate. 8.4.1. Celula de memorie i unitatea de memorie O unitate de memorie este compus dintr-un anumit numr de celule de memorie. Dei, pentru realizarea celulelor de memorie, se utilizeaz o diversitate de tehnologii, toate celulele de memorie semiconductoare prezint urmtoarele proprieti: Au dou stri stabile (sau semi-stabile), care pot fi utilizate pentru a reprezenta valorile binare 0 i 1. Pot fi nscrise (cel puin o dat) prin setarea strii. Pot fi citite prin sesizarea strii. O schem bloc a unei celule care memoreaz un bit de informaie este prezentat n figura 8.3. Linia de selecie realizeaz selectarea (validarea) celulei. Linia R/W (Read/Write) stabilete dac trebuie efectuat o operaie de citire sau de scriere asupra celulei selectate. Atunci cnd linia R/W este 0, se efectueaz o operaie de citire, care determin trecerea datei memorate printrun amplificator de detecie (sense amplifier) i transmiterea acesteia pe linia de ieire. Intr-un mod similar, atunci cnd linia R/W este 1, se efectueaz o

operaie de scriere, care determin ca data de pe linia de intrare s fie memorat n celul.

Fig.8.3 O celul de memorie poate fi construit, n funcie de tehnologia utilizat, dintr-un numr de unul pn la ase tranzistoare. Restricia principal la proiectarea unei celule este dimensiunea sa. Obiectivul este ca dimensiunea celulei s fie ct mai redus, astfel nct s poat fi mpachetate mai multe celule n spaiul disponibil din cadrul unei capsule. Exist dou tipuri de memorii cu acces aleator, statice (SRAM) i dinamice (DRAM). Att memoriile statice ct i cele dinamice sunt volatile, deci informaia memorat este pierdut atunci cnd alimentarea cu energie este ntrerupt. Memoriile statice constau din celule asemntoare cu bistabilele utilizate n proiectarea logic. Celulele memoriilor SRAM difer de bistabile n principal prin metodele utilizate pentru adresarea celulelor i transferul datelor. Memoriile statice rein datele atunci cnd un cuvnt este citit din acestea. De aceea aceste memorii au proprietatea c citirea este nedistructiv. Intr-o celul de memorie DRAM, strile 1 i 0 corespund prezenei sau absenei unei sarcini memorate ntr-un condensator controlat de un circuit de comutare, de obicei un tranzistor. Condensatorul unei celule DRAM trebuie rencrcat periodic. Operaia de rencrcare a condensatoarelor este numit remprosptare. Deci, o memorie DRAM trebuie s conin un circuit de remprosptare i s alterneze operaiile de remprosptare cu accesele normale la memorie. Datele coninute n memoriile dinamice trebuie s fie rescrise n locaia corespunztoare de memorie dup fiecare operaie de citire. De aceea, memoriile dinamice sunt caracterizate prin proprietatea c citirea este distructiv. Deoarece o celul de memorie DRAM poate fi construit utiliznd un singur tranzistor, n timp ce o celul de memorie SRAM necesit pn la ase tranzistoare, la memoriile dinamice se obine o densitate de memorare mai ridicat. In consecin, o memorie RAM dinamic este mai puin costisitoare dect o memorie RAM static corespunztoare. Pe de alt parte, o memorie RAM dinamic necesit un circuit de remprosptare. Pentru memorii de dimensiuni mari, costul circuitului de remprosptare este compensat de costul mai redus al memoriilor DRAM. Un alt aspect este c memoriile RAM statice

sunt mai rapide dect memoriile RAM dinamice. O unitate de memorie este o matrice de celule de memorie. Structura intern a unei uniti de memorie de m cuvinte cu n bii pe cuvnt const din m n celule de memorie. Intr-o unitate de memorie, fiecare celul poate fi adresat individual sau un grup de celule pot fi adresate simultan. De obicei, un sistem de calcul are o dimensiune fix a cuvntului. Dac un cuvnt are n bii, atunci trebuie adresate simultan n celule de memorie, ceea ce permite ca celulele s aib o linie de selecie comun. O unitate de memorie avnd patru cuvinte de 2 bii este ilustrat n figura 8.4. Oricare cuvnt poate fi selectat cu ajutorul liniilor de adres A1 i A0 . Operaia care trebuie executat asupra cuvntului selectat este determinat de linia R / W . De exemplu, dac liniile de adres A1 i A0 sunt setate la 1, i respectiv 0, este selectat cuvntul 2. Dac linia R / W este setat la 1, atunci datele de pe liniile de intrare X 1 i X 0 sunt memorate n celulele C2,1 , respectiv

C2,0 . Similar, dac linia R / W este setat la 0, datele din celulele C2,1 i C2,0 sunt transmise pe liniile de ieire Z1 , respectiv Z 0 .

Fig.8.4 8.4.2. Organizarea memoriilor Fiecare circuit integrat de memorie conine o matrice de celule de

memorie. Se utilizeaz mai multe organizri ale celulelor de memorie i a logicii funcionale dintr-o capsul de memorie semiconductoare. Vom prezenta n continuare dou metode de organizare: 1D i 2D. In figura 8.5 este prezentat o memorie cu organizare 1D. Matricea de memorie este compus dintr-un numr mare de locaii adresabile, fiecare din acestea memornd un cuvnt de w bii. Cuvntul este cea mai mic unitate adresabil. Aceast memorie funcioneaz dup cum urmeaz. Mai nti, adresa locaiei care trebuie accesat este transferat prin magistrala de adrese, care are m linii, n bufferul de adrese al memoriei. Adresa este apoi decodificat de ctre decodificatorul de adres DCD, care selecteaz locaia cerut din matricea de memorie. O linie de control indic tipul accesului care trebuie executat. Dac este cerut o operaie de citire, coninutul locaiei adresate este transferat de la matricea de memorie n bufferul de date i de aici pe magistrala de date. Dac este cerut o operaie de scriere cuvntul, care trebuie memorat, este transferat de pe magistrala de date n locaia selectat din unitatea de memorie. Deoarece, de obicei, nu este necesar sau de dorit s se permit citirea i scrierea simultan, magistralele de date (de intrare i de ieire) sunt combinate adesea ntr-o singur magistral bidirecional de date.

Figura 8.5 Pe fiecare linie conectat la matricea de memorie, exist de obicei un driver cu rol de amplificator de semnal. In figura 8.5 putem observa mai multe seturi de drivere pentru liniile de date i de adrese. Driverele, decodificatoarele i circuitele de control formeaz circuitele de acces ale memoriei i acestea pot avea un impact semnificativ asupra dimensiunii i costului memoriei.

Fig.8.6 Cea mai obinuit organizare de memorie este organizarea bidimensional (2D) sau linie-coloan prezentat n figura 8.6, unde, pentru simplitate, circuitele de date i de control sunt omise. Cuvntul de adres de m bii este divizat n dou pri, X i Y , constnd din m x , respectiv m y bii. Celulele sunt aranjate ntr-o matrice rectangular de
N x , linii i

N y coloane, astfel c numrul total de

celule este N x N y . Organizarea 2D necesit un numr mult mai redus de circuite de acces dect organizarea 1D pentru aceeai capacitate de memorare. De asemenea, n locul unui singur decodificator de adres foarte complex, sunt suficiente, n cazul organizrii 2D, dou decodificatoare de adres mult mai simple. In plus, organizarea 2D favorizeaz structurile bidimensionale permise de tehnologia VLSI. Un circuit integrat de memorie RAM conine n mod tipic toate circuitele de acces, incluznd decodificatoare de adres, drivere i circuite de control.

8.5 Memoria stiv Memoria stiv este o list liniar de date elementare, n care inserarea, eliminarea i accesul la elementele de date se efectueaz la un singur capt al acesteia. Stiva poate fi considerat o list de tip LIFO (Last-In, First-Out). In funcie de modul de implementare, stiva poate fi de mai multe tipuri: - Stiv software, organizat n memoria intern; - Stiv cablat (hardware); - Stiv parial cablat. Indiferent de modul de implementare, o stiv trebuie s permit efectuarea urmtoarelor operaii: - Introducere (inserare): PUSH; - Extragere (eliminare): POP; - Acces la elementul din vrful stivei. 8.5.1. Tipuri de memorii stiv 8.5.1.1 Stiva implementat n memorie Stiva poate fi simulat n memoria intern a calculatorului, utilizndu-se adresarea convenional. Gestionarea stivei se poate realiza prin software, existnd instruciuni speciale i registre dedicate pentru operaiile cu stiva (figura 8.7)

Fig.8.7 Stiva poate fi definit cu ajutorul a dou registre ale procesorului. Registrul BP indic baza stivei, iar registrul SP indic vrful stivei. Adresa de baz a stivei rmne fix, n timp ce adresa care indic vrful stivei se modific la fiecare operaie de introducere i eliminare din stiv. Instruciunile speciale de lucru cu stiva modific automat coninutul registrului SP. De obicei, stivele cresc spre adrese mici, elementul din vrful stivei avnd adresa cea mai mic, dar exist i stive care cresc spre adrese mari. Presupunnd c stiva crete spre adrese mici, iar SP indic elementul din vrful stivei, instruciunea de introducere a unui element n stiv decrementeaz registrul SP i copiaz elementul respectiv n stiv. Instruciunea de extragere a unui element din vrful stivei copiaz acest element ntr-un registru de memorie i incrementeaz registrul SP.

In cazul stivei simulate n memorie, pe lng operaiile obinuite cu stiva, se pot citi sau modifica elemente oarecare din stiv, prin adresarea lor relativ fa de registrul de baz al stivei (BP). 8.5.1.2. Stiva cablat Spre deosebire de stiva simulat n memorie, la care vrful stivei se deplaseaz n timp ce informaiile din stiv rmn fixe, n cazul stivei cablate exist un vrf fix i informaiile din stiv sunt translatate la fiecare operaie de introducere sau eliminare din stiv. Stivele cablate pot avea un registru de stare asociat, care indic dac stiva este goal (EMPTY) sau plin (FULL). La ncercarea de extragere a unui element din stiva goal se poate activa un semnal de eroare UNDERFLOW, iar la ncercarea de introducere a unui element n stiva plin se poate activa un alt semnal, OVERFLOW. Stivele cablate au avantajul unei viteze ridicate de efectuare a operaiilor,dar dimensiunea acestora este limitat. 8.5.1.3. Stiva parial cablat

Fig. 8.8 Dac dimensiunea stivei cablate este redus, pentru cazurile de depire de capacitate a stivei cablate, este indicat completarea acesteia cu o stiv simulat n memoria intern, (Figura 8.8). 8.6 Memoria cache 8.6.1 Principii Deoarece accesul la memoria principal necesit un timp considerabil mai mare comparativ cu viteza global a unui procesor, este important s se proiecteze un sistem de memorie cu un timp de acces ct mai redus. O posibilitate de a crete viteza global a sistemului de memorie este de a se reduce numrul de accesuri la memoria principal. Acest deziderat poate fi realizat prin instalarea unei memorii rapide de mici dimensiuni care s conin, n fiecare moment, o parte din program. In acest mod, datorit proprietii de localitate a referinelor, numrul referinelor la memoria principal va fi redus n mod considerabil. O asemenea memorie rapid, utilizat temporar pentru

pstrarea unei poriuni a datelor i instruciunilor n vederea utilizrii imediate, este cunoscut sub numele de memorie cache. Deoarece memoria cache are un pre ridicat, un sistem de calcul poate avea doar o memorie cache cu o dimensiune limitat. Pentru acest motiv, un sistem de calcul conine o memorie principal mai lent i de dimensiuni relativ mari, mpreun cu o memorie cache mai rapid i de dimensiuni mai mici. Memoria cache este amplasat ntre memoria principal i UCP i conine copii ale anumitor blocuri ale memoriei principale. Astfel, atunci cnd UCP solicit un cuvnt i acest cuvnt se afl n memoria cache rapid, nu va mai fi necesar accesul la memoria principal. Dei dimensiunea memoriei cache este doar o mic parte din dimensiunea memoriei principale, datorit proprietii de localitate a referinelor, o mare parte din cererile de acces la memorie vor fi satisfcute de memoria cache. Performana unui sistem poate fi mbuntit n mod semnificativ dac memoria cache este amplasat n acelai circuit integrat cu procesorul. In acest caz, ieirile memoriei cache pot fi conectate la UAL i la registre prin legturi scurte, reducnd timpul de acces. Aceasta este soluia adoptat la majoritatea procesoarelor actuale. 8.6.2. Organizarea memoriei cache Figura 8.9 prezint componentele principale ale unei memorii cache. Cuvintele de memorie sunt pstrate ntr-o memorie de date i sunt grupate n pagini de dimensiuni reduse, numite blocuri sau linii. Coninutul memoriei de date este copia unui set de blocuri ale memoriei principale. Fiecare bloc al memoriei cache este marcat cu adresa sa de bloc, numit marcaj (tag). Colecia adreselor de marcaj asignate momentan memoriei cache, adrese care pot fi necontigue, este pstrat ntr-o memorie special, numit memorie de marcaje sau director.

Fig. 8.9 Pentru a mbunti performanele unui calculator, timpul necesar pentru testarea adreselor de marcaj i accesarea memoriei cache de date trebuie s fie mai redus dect timpul necesar pentru accesarea memoriei principale. Figura 8.10 prezint dou moduri de plasare a unei memorii cache ntr-un sistem de calcul. In organizarea din figura 8.10(a), numit organizare "lookaside", memoria cache i memoria principal sunt conectate direct la magistrala

sistem. UCP iniiaz un acces la memorie prin plasarea unei adrese Ai pe magistrala de adrese la nceputul unui ciclu de citire sau de scriere. Memoria cache M 1 compar adresa Ai , cu adresele de marcaj plasate momentan n memoria sa de marcaje. Dac se gsete o potrivire n memoria cache, deci, apare un succes, accesul este terminat printr-o operaie de citire sau de scriere

Fig. 8.10 executat cu memoria cache, care nu implic memoria principal M 2 . Dac nu se gsete o potrivire cu adresa Ai n memoria cache, deci, apare un eec, atunci accesul dorit este terminat printr-o operaie de citire sau de scriere executat cu memoria principal. Ca rspuns la un eec, este transferat un bloc de date B j care conine adresa destinaie Ai de la M 2 la M 1 . Acest transfer este rapid, datorit dimensiunii reduse a blocului i a metodelor de acces rapide la memoria RAM, cum este modul pagin. Memoria cache implementeaz o anumit strategie de nlocuire pentru a determina unde s se plaseze noul bloc. Atunci cnd este necesar, blocul memoriei cache nlocuit de B j este salvat n
M 2 . De notat c, n cazul eecurilor la accesul memoriei cache, chiar dac acestea sunt puin frecvente, transferurile de blocuri ntre M 1 i M 2 ocup magistrala sistem, care nu va fi disponibil pentru alte operaii, cum sunt transferurile de I/E. In figura 8.10(b) se prezint o alt organizare, care este mai rapid, dar mai costisitoare; aceasta este numit organizare "look-through". UCP comunic

cu memoria cache printr-o magistral separat (local) care este izolat de magistrala sistem. In acest mod magistrala sistem este disponibil pentru utilizarea de ctre alte uniti, cum sunt controlere de I/E, care pot comunica cu memoria principal. Prin urmare, accesurile la memoria cache i accesurile la memoria principal care nu implic UCP se pot desfura concurent. UCP transmite o cerere la memoria principal numai dup un eec la accesul n memoria cache. Magistrala local care conecteaz M 1 i M 2 poate avea o lime mai mare dect magistrala sistem, crescnd astfel viteza transferurilor ntre memoria cache i cea principal. Dezavantajul principal al organizrii "look-through", pe lng costul su mai ridicat, const n faptul c este necesar un timp mai lung pentru ca memoria principal s rspund la cererea UCP atunci cnd apare un eec la accesul memoriei cache. 8.6.3 Funcionarea memoriei cache Atunci cnd UCP genereaz o cerere de citire pentru un cuvnt din memorie, cererea este trimis mai nti la memoria cache pentru a verifica dac acest cuvnt se afl deja n aceast memorie. In cazul n care cuvntul nu este gsit n memoria cache (deci, apare un eec la citire), cuvntul solicitat este furnizat de memoria principal. O copie a cuvntului este depus n memoria cache pentru referinele viitoare de ctre UCP. In cazul n care cuvntul este gsit n memoria cache (deci, apare un succes la citire), cuvntul este furnizat de memoria cache. Astfel, n aceast situaie, nu este necesar accesul la memoria principal. Prin aceasta, viteza sistemului crete considerabil. Figura 8.11 ilustreaz execuia unei operaii de citire pentru un sistem simplu de memorie cache. In acest exemplu, se presupune o dimensiune a blocului (liniei) memoriei cache de 4 octei. Fiecare adres de memorie are dimensiunea de 12 bii, astfel nct cei 10 bii de ordin superior formeaz marcajul sau adresa blocului, iar cei 2 bii de ordin inferior definesc un deplasament n cadrul blocului. Atunci cnd un bloc este adus n memoria cache de date, marcajul acestuia este plasat n memoria cache de marcaje. Figura 8.11 prezint coninutul a dou blocuri aduse n memoria cache de date; de observat locaiile acelorai blocuri din memoria principal. Pentru citirea cuvntului indicat de sgeat, adresa acestuia Ai = 1100 0101 0110 este transmis la M 1 care compar partea de marcaj a adresei Ai cu marcajele sale memorate i gsete o potrivire. Marcajul memorat adreseaz blocul corespunztor din memoria de date, iar deplasamentul de 2 bii este utilizat pentru identificarea cuvntului destinaie din cadrul blocului, care este apoi transmis la UCP. Atunci cnd UCP genereaz o cerere de scriere pentru un cuvnt n memorie, cererea este trimis mai nti la memoria cache pentru a verifica dac locaia acestui cuvnt se afl n memoria cache. In cazul n care locaia cuvntului nu este gsit n memoria cache (deci, apare un eec la scriere), se ncarc o copie a cuvntului din memoria principal n memoria cache. Apoi, se

execut o operaie de scriere. De asemenea, n cazul n care cuvntul este gsit n memoria cache (deci, apare un succes la scriere), se execut o operaie de scriere direct n memoria cache.

Fig. 8.11 Execuia unei operaii de scriere pentru memoria cache din exemplul precedent este ilustrat n figura 8.12. Partea de marcaj a adresei destinaie Ai este transmis la M 1 mpreun cu cuvntul de date care trebuie memorat. Atunci cnd apare un succes, noua dat, n acest caz 55h, este memorat n locaia de la adresa Ai n memoria de date din M 1 modificnd astfel vechea dat FFh.

Fig. 8.12 Apare acum o nou problem, deoarece data din M 1 cu adresa Ai difer de data din M 2 cu aceeai adres. O inconsisten temporar de acest tip este acceptabil ct timp nici un dispozitiv (un alt procesor sau un dispozitiv de I/E)

nu ncearc citirea datei vechi. Prevenirea utilizrii improprii a datei vechi reprezint problema coerenei memoriilor cache sau a consistenei memoriilor cache. Aceasta este o problem de baz la sistemele multiprocesor unde mai multe procesoare partajeaz accesul la aceeai memorie principal, dar fiecare dispune de propria memorie cache. Aceast problem apare de asemenea n sistemele uniprocesor atunci cnd este prezent un controler sau procesor de I/E care are un acces direct la memoria principal, independent de UCP. Inconsistenele din memoriile cache pot fi minimizate prin implementarea unei strategii care actualizeaz n mod sistematic datele din M 2 ca rspuns la modificrile efectuate asupra datelor corespunztoare din M 1 . Pentru executarea unei operaii de scriere, exist dou strategii care pot fi utilizate: "write-back" i "write-through". - In cazul strategiei "write-back", numit i "copy-back", fiecrui cuvnt din memoria cache i se asociaz un bit, numit bit de modificare (dirty bit) sau bit de inconsisten, care arat dac acest cuvnt a fost modificat n timpul n care se afla n memoria cache. Toate modificrile asupra unui cuvnt sunt efectuate n memoria cache. Atunci cnd un cuvnt trebuie eliminat din memoria cache, se testeaz bitul de modificare al cuvntului; dac bitul este setat, cuvntul este scris n memoria principal n forma sa actualizat. Avantajul strategiei "writeback" este c, att timp ct un cuvnt rmne n memoria cache, acesta poate fi modificat de mai multe ori, iar pentru UCP nu are importan dac cuvntul din memoria principal nu a fost actualizat. Dezavantajul acestei strategii este c memoria cache i memoria principal pot fi temporar inconsistente. Aceasta creeaz dificulti dac mai multe procesoare cu memorii cache independente partajeaz aceeai memorie principal, deoarece datele lor pot deveni inconsistente. Strategia "write-back" complic de asemenea recuperarea n cazul defectelor de sistem i, dei trebuie asociat un singur bit suplimentar cu fiecare cuvnt, aceasta complic ntr-o oarecare msur proiectarea sistemului. - In cazul strategiei "write-through", cuvntul este modificat att n memoria cache, ct i n memoria principal la fiecare ciclu de scriere. Avantajele acestei strategii constau n faptul c este uor de implementat i memoria principal are ntotdeauna date consistente cu memoria cache. Pe de alt parte, aceast strategie are dezavantajul c ncetinete UCP, deoarece toate operaiile de scriere necesit accesuri ulterioare la memoria principal. Totui, numai o fraciune redus, probabil 10%, din toate accesurile la memorie sunt operaii de scriere. Anumite procesoare permit utilizarea ambelor strategii de scriere, astfel nct utilizatorul poate selecta strategia cea mai avantajoas pentru un program particular. 8.6.4. Maparea adreselor O caracteristic de baz a memoriei cache este funcia de mapare (de translatare), care atribuie locaii din memoria cache blocurilor din memoria principal. Se utilizeaz trei tipuri de mapare a adreselor:

1. Mapare asociativ; 2. Mapare direct; 3. Mapare cu seturi asociative. Pentru a ilustra aceste trei tipuri de mapare ale adreselor, presupunem c memoria principal are o capacitate de 64 K cuvinte de cte 16 bii fiecare, fapt care nseamn c magistrala de adrese are 16 bii. De asemenea, presupunem c memoria cache care poate pstra maxim 256 de cuvinte. Considerm c UCP genereaz o cerere de citire. Cererea de scriere este gestionat ntr-un mod similar. Vom urmri acum strategiile celor trei tipuri de mapare. 8.6.4.1. Memorie cache cu maparea asociativ In cazul unei memorii cache cu mapare asociativ (numit i memorie cache cu asociativitate total), adresa i coninutul sunt memorate ca i cuvinte separate n memoria cache. Ca rezultat, un cuvnt de memorie poate fi memorat n orice locaie a memoriei cache, ceea ce face ca acest tip de memorie cache s fie cel mai flexibil. Figura 8.13 prezint organizarea unei memorii cache cu mapare asociativ pentru sistemul considerat. De observat c, indiferent de adresele lor absolute din memoria principal, cuvintele sunt memorate n locaii arbitrare.

Fig. 8.13 Deoarece o celul de memorie asociativ are un cost mult mai mare dect o celul de memorie RAM, doar adresele cuvintelor sunt memorate n partea asociativ, n timp ce datele sunt memorate n partea de memorie RAM a memoriei cache. Aceast soluie nu va crete timpul de acces al memoriei cache n mod semnificativ, dar va conduce la un cost semnificativ mai redus. Astfel, atunci cnd UCP genereaz o adres pentru referina la memorie, aceasta este transferat n registrul argument i este comparat, n paralel, cu cmpurile de adres ale tuturor cuvintelor aflate n memoria cache. Dac s-a gsit locaia cu o adres care se potrivete, datele corespunztoare pot fi accesate din memoria RAM.

Dezavantajul principal al maprii asociative este c necesit o memorie asociativ de dimensiuni mari, care este foarte costisitoare. 8.6.4.2. Memorie cache cu maparea direct Pentru implementarea maprii directe sunt necesare numai memorii RAM. Memoria cache M 1 este mprit ntr-un numr de regiuni numite seturi, fiecare din acestea memornd un bloc de n cuvinte consecutive. Memoria principal M 2 este divizat similar n blocuri. In cazul maprii directe, fiecare bloc din M 2 este mapat ntr-un set specific din M 1 . Figura 8.14 reprezint arhitectura unei memorii cache cu mapare direct. Considerm, pentru simplificare, c un set al memoriei cache, ca i un bloc al memoriei principale, conine un singur cuvnt. Pentru implementarea maprii directe, adresele de memorie de 16 bii sunt divizate n dou pri: cei 8 bii de ordin inferior ai adresei din memoria principal formeaz un cmp de index, care identific setul unic al memoriei cache, unde se poate memora blocul de memorie. Ceilali 8 bii de ordin superior ai adresei din memoria principal rmai, formeaz un cmp de marcaj (tag). Aceast arhitectur const din trei componente principale: o memorie de date, o memorie de marcaje i un circuit de comparare. Memoria de date pstreaz cuvintele de date ale memoriei cache. Memoria de marcaje pstreaz marcajele asociate cu cuvintele de date i are cte o intrare pentru fiecare cuvnt al memoriei de date. Comparatorul activeaz linia de potrivire, indicnd existena cuvntului adresat n memoria cache. La adresa specificat de index, este memorat un marcaj n memoria de marcaje i un bloc de memorie n memoria de date. Dac marcajul adresei de memorie cerute se potrivete cu marcajul din memoria cache, cuvntul din

Fig. 8.14 memoria de date este transmis la UCP. In caz contrar, se acceseaz memoria principal, iar cuvntul corespunztor este ncrcat i transmis la UCP. Cuvntul

adresat, mpreun cu partea de marcaj a adresei acestuia, nlocuiete de asemenea cuvntul i marcajul cu indexul corespunztor din memoria cache. Un exemplu care ilustreaz funcionarea unei memorii cache cu mapare direct este prezentat n figura 8.15. Vom considera memoria principal prezentat n figura 8.13.

Fig.8.15 In acest exemplu, o adres de memorie const din 16 bii, iar memoria cache conine 256 de cuvinte. Cei 8 bii mai puin semnificativi ai adresei constituie cmpul de index, iar cei 8 bii rmai constituie cmpul de marcaj. Biii de index determin adresa unui cuvnt n memoriile de marcaje i de date. Fiecare cuvnt din memoria de marcaje are 8 bii, iar fiecare cuvnt din memoria de date are 16 bii. Dac UCP solicit citirea cuvntului de memorie de la adresa 0900h este atunci indexul va fi 00 iar marcajul 09. Astfel la adresa 00 din memoria de marcaje se gsete valoarea 09 care corespunde cu marcajul cuvntului solicitat deci a fost nregistrat un succes la cutare i coninutul memoriei de date de la adresa 00 (care este 3800h) este preluat de UCP. Dac apoi, UCP solicit citirea coninutului adresei 0100h, indexul (00h) se potrivete, dar marcajul (01h) este diferit, deci a fost nregistrat un insucces la cutare i n consecin este accesat memoria principal, iar cuvntul de date 1234h (vezi figura 8.13) este transferat la UCP. Cuvintele din memoria de marcaje i memoria de date de la indexul 00h sunt nlocuite apoi cu 01h, respectiv 1234h. In cazul real n care fiecare bloc conine mai multe cuvinte de memorie de, pe lng marcaj i index, utilizeaz n plus un deplasament care precizeaz poziia cuvntului solicitat n cadrul blocului. Avantajul maprii directe fa de maparea asociativ const n faptul c necesit un numr mai redus de bii pentru fiecare cuvnt din memoria cache i nu necesit memorie asociativ. Dezavantajul principal este c performanele pot fi reduse considerabil dac dou sau mai multe cuvinte avnd acelai index, dar marcaje diferite, sunt accesate n mod frecvent. De exemplu, cuvintele de memorie de la adresele 0100h i 0200h trebuie plasate ambele n memoria cache la indexul 00h, astfel nct se pierde un timp important pentru

interschimbarea lor. Aceasta ncetinete sistemul, anulnd efectul memoriei cache. Totui, considernd proprietatea de localitate a referinelor, probabilitatea de a avea dou cuvinte cu acelai index este redus. 8.6.4.3. Maparea cu seturi asociative (k-way set associative) O metod mai general de mapare a adreselor pentru memoriile cache este numit mapare cu seturi asociative. In timp ce la maparea direct fiecare set, identificat de un anumit index, memoreaz un singur bloc, la maparea cu seturi asociative fiecare set memoreaz un numr de k blocuri. Fiecare set este o mic memorie asociativ, astfel nct maparea adreselor din cadrul fiecrui set este asociativ. In practic sunt utilizate doar valori mici ale parametrului k, cum ar fi de exemplu k=2, sau k=4. De exemplu, o memorie cache cu seturi asociative cu k blocuri de memorie, numit set asociativ cu k ci, poate memora k blocuri de date avnd acelai index, mpreun cu marcajele lor. In figura 8.19 se prezint o arhitectur pentru o memorie cache cu seturi asociative cu k blocuri de memorie.

Fig. 8.16 Considerm din nou c un set conine un singur cuvnt. Fiecare bloc de memorie are aceeai structur ca i o memorie cache cu mapare direct. Pentru a determina dac un cuvnt adresat se afl n memoria cache, marcajul acestuia este comparat n paralel (asociativ) cu marcajele datelor din toate blocurile de memorie. O potrivire n oricare din blocurile de memorie valideaz semnalul de potrivire pentru a indica existena cuvntului n memoria cache. Dac apare o potrivire, cuvntul corespunztor de date este transferat la UCP. In caz contrar, cuvntul de date este ncrcat din memoria principal i este transmis la UCP. Cuvntul de date, mpreun cu marcajul acestuia, este

depus apoi ntr-unul din blocurile de memorie.

Fig. 8.17 Un exemplu ilustrnd funcionarea memoriei cache cu seturi asociative este prezentat n figura 8.17. Aceast figur prezint o memorie cache cu seturi asociative cu dou ci. Coninutul adresei 0900h (vezi figura 8.13) este depus n memoria cache la indexul 00h i marcajul 09h. Dac UCP solicit accesarea cuvntului de la adresa 0100h, indexul (00h) se potrivete, dar marcajul este acum diferit. De aceea, este accesat coninutul memoriei principale, iar valoarea 1234h este transferat la UCP. Acest cuvnt de date i marcajul acestuia (01h) sunt memorate n al doilea bloc al memoriei cache. Atunci cnd nu exist spaiu pentru un anumit index n memoria cache, unul din cele dou cuvinte de date stocate la acel index va fi nlocuit conform unei strategii de nlocuire predefinite. 8.6.5. Strategii de nlocuire Atunci cnd nu mai exist spaiu n memoria cache, trebuie s se utilizeze o strategie pentru a nlocui un cuvnt cu data din memorie care este accesat n acel moment. In general, exist trei strategii principale pentru a determina cuvntul care va fi eliminat din memoria cache. Acestea sunt strategiile de nlocuire aleatoare, nlocuirea cuvntului cel mai puin frecvent utilizat i nlocuirea cuvntului cel mai puin recent utilizat. nlocuire aleatoare. Aceast metod alege un cuvnt n mod aleator i nlocuiete acel cuvnt cu data nou accesat. Aceast metod este uor de implementat prin hardware i este mai rapid dect alte metode. Dezavantajul este c acele cuvinte care sunt cel mai probabil de a fi utilizate din nou au aceeai ans de a fi eliminate ca i cuvintele care probabil nu vor fi utilizate din nou. Acest dezavantaj se micoreaz pe msur ce dimensiunea memoriei cache crete. Cel mai puin frecvent utilizat (LFU - Least Frequently Used). Aceast metod nlocuiete datele care sunt cel mai puin utilizate. Metoda presupune c

datele care nu sunt referite frecvent sunt mai puin necesare. Pentru fiecare cuvnt, se pstreaz un contor al numrului total de utilizri ale cuvntului de la ncrcarea acestuia n memoria cache. Cuvntul cu valoarea cea mai mic a contorului este cuvntul care va fi eliminat. Avantajul acestei metode este c un cuvnt utilizat frecvent are o probabilitate mai mare de a rmne n memoria cache dect un cuvnt care nu a fost utilizat frecvent. Un dezavantaj este c acele cuvinte care au fost ncrcate recent n memoria cache au o valoare mic a contorului, n ciuda faptului c este probabil ca ele s fie utilizate din nou. Un alt dezavantaj este c implementarea acestei metode prin hardware este mai dificil i deci mai costisitoare. Cel mai puin recent utilizat (LRU - Least Recently Used). Aceast metod are performana cea mai bun raportat la cost comparativ cu celelalte tehnici, fiind implementat adesea n sistemele reale. Ideea acestei metode de nlocuire const n faptul c un cuvnt, care nu a fost utilizat pentru o perioad lung de timp, are o ans mai redus de a fi utilizat n viitorul apropiat, conform proprietii de localitate temporal. Astfel, aceast metod reine cuvintele din memoria cache care au probabilitatea cea mai mare de a fi utilizate din nou. In acest scop, se utilizeaz un mecanism pentru a pstra evidena acelor cuvinte care au fost accesate cel mai recent. Cuvntul care va fi eliminat este cuvntul care nu a fost utilizat pentru perioada cea mai lung de timp. O posibilitate de a implementa un asemenea mecanism este de a asigna un contor fiecrui cuvnt din memoria cache. De fiecare dat cnd este accesat memoria cache, contorul fiecrui cuvnt este incrementat, iar contorul cuvntului care a fost accesat este resetat la zero. In acest fel, cuvntul cu contorul cel mai mare este cel care a fost utilizat cel mai puin recent.

8.7. Memoria virtual 8.7.1. Principii Memoria virtual permite sistemului de calcul utilizarea unei memorii cu o dimensiune mult mai mare dect dimensiunea real fizic a memoriei principale. Intr-un sistem de memorie virtual, memoria principal i cea secundar se prezint pentru un program al utilizatorului ca o memorie unic, de dimensiuni mari i adresabil direct. Inaintea apariiei memoriei virtuale, dac spaiul de adrese al unui program depea dimensiunea memoriei principale disponibile, programatorul era responsabil pentru mprirea programului n fragmente mai mici, astfel nct fiecare fragment s poat fi ncrcat n memoria principal. Toate aceste fragmente erau pstrate n memoria secundar, de exemplu, pe disc, fiind ncrcate n memoria principal pe msur ce erau necesare. Acest proces necesita cunoaterea locului n care fragmentele trebuiau stocate pe disc, cunoaterea operaiilor de intrare/ieire necesare pentru accesul fragmentelor i pstrarea evidenei ntregului proces de fragmentare. Acesta reprezenta un proces foarte complex, ceea ce complica i mai mult programarea unui calculator. Conceptul memoriei virtuale a fost creat n principal pentru a elibera programatorul de aceast sarcin. Memoria virtual permite utilizatorului s scrie programe care depesc limitele fizice ale memoriei principale. De asemenea, memoria virtual permite multiprogramarea, prin care memoria principal este partajat ntre mai muli utilizatori ntr-un mod dinamic. In cazul multiprogramrii, poriuni ale mai multor programe sunt plasate n memoria principal n acelai timp, iar procesorul i mparte timpul de execuie ntre aceste programe. Procesorul execut un program pentru o perioad scurt de timp (numit o cuant sau diviziune de timp), iar apoi comut la un alt program; acest proces continu pn cnd fiecare program este terminat. Atunci cnd se utilizeaz memoria virtual, sistemul de memorie este adresat printr-un set V de adrese logice sau virtuale, fiind numite astfel deoarece, la execuia programului, ele sunt translatate, n adrese ale memoriei fizice. La o alt execuie a programului adresele fizice pot fi altele. Un set de adrese fizice sau reale R identific locaiile de memorare fizic din fiecare unitate de memorie. Adresele virtuale sunt generate de obicei n timpul compilrii i sunt translatate de procesor n adrese fizice n timpul execuiei. Un mecanism eficient pentru implementarea translatrii adreselor, de forma f : V R , este esenial pentru un sistem de memorie virtual. Cele dou metode principale pentru implementarea unei memorii virtuale sunt paginarea i segmentarea.
8.7.2. Translatarea adreselor Setul de locaii abstracte pe care le poate adresa un program reprezint spaiul de adrese virtuale V al programului. Adresele virtuale pot fi specificate

explicit sau implicit de identificatorii pe care programatorul i asigneaz variabilelor i etichetelor de instruciuni. Pentru execuia unui program pe un anumit calculator, adresele sale virtuale trebuie translatate n spaiul de adrese reale R , definit de memoria care este prezent fizic n calculator. Acest proces este numit translatare a adreselor sau mapare a adreselor. Spaiul de adrese reale R este o secven liniar de numere 0, 1, 2, ...., n 1, corespunznd locaiilor adresabile de memorie i este distribuit pe toate nivele ierarhiei de memorii. Spaiul de adrese virtuale V este o colecie de liste, tablouri multidimensionale i alte structuri neliniare, astfel nct este mult mai complex dect R . Asignarea i translatarea adreselor poate fi efectuat n diferitele etape ale unui program i anume: De ctre programator n timpul scrierii programului; De ctre compilator n timpul compilrii programului; De ctre programul ncrctor la ncrcarea programului; De ctre sistemul hardware i/sau software de gestiune a memoriei. Specificarea explicit a adreselor reale de ctre programator a fost necesar la primele calculatoare, care nu aveau un sistem hardware sau software de gestiune a memoriei. In cazul calculatoarelor moderne, programatorii utilizeaz n mod normal doar adrese virtuale. Un sistem hardware sau software specializat determin n mod automat adresele reale cerute de execuia programului. Translatarea adreselor se numete static dac compilatorul transform identificatorii simbolici ai unui program n adrese fizice, sau translatarea adreselor este efectuat atunci cnd programul este ncrcat pentru prima dat pentru execuie. Translatarea adreselor este dinamic dac spaiul adreselor virtuale este modificat n timpul execuiei programului i n consecin convertirea acestora n adrese fizice este, de asemenea, efectuat n timpul execuiei. Pentru translatarea adreselor n timpul execuiei se utilizeaz uniti de gestiune a memoriei (MMU - Memory Management Unit) implementate prin hardware. Un program executabil cuprinde un set de blocuri de instruciuni i de date, fiecare din acestea fiind o secven de cuvinte sau octei care trebuie memorai n locaii consecutive de memorie n timpul execuiei. Considernd c se utilizeaz adrese de cuvinte, un cuvnt C dintr-un bloc are propria adres real Ar , utilizat de UCP pentru accesul la acest cuvnt. Adresa virtual a cuvntului C este specificat prin adresa de baz B a blocului care conine cuvntul, mpreun cu adresa relativ sau deplasamentul D (numit i offset) al cuvntului din cadrul blocului, dup cum se arat n figura 8.18. Adresa efectiv, real este: Ar = B + D Adesea B furnizeaz biii de ordin superior ai adresei efective, n timp ce D furnizeaz biii de ordin inferior. In acest caz, adresa real este format simplu prin concatenarea adresei de baz B i a deplasamentului D, un proces

care nu crete n mod semnificativ timpul pentru generarea adresei.


Adresa reala Ar B B+1 . . B+i

B+m-1

Fig. 8.18 Un mod simplu de implementare a translatrii adreselor este de a pstra adresele de baz ale blocurilor ntr-o tabel de adrese ale memoriei controlat de sistemul de gestiune a memoriei. Tabela poate fi pstrat n memorie, n registrele UCP, sau n ambele. Logica de generare a adreselor utilizat de UCP const n calcularea adresei reale Ar prin combinarea deplasamentului D cu adresa de baz corespunztoare Bi . Blocurile pot fi relocate cu uurin n memorie prin manipularea adreselor de baz ale acestora. Figura 8.19 ilustreaz relocarea blocurilor utiliznd modificarea adreselor de baz. Presupunem c dou blocuri sunt alocate n memoria principal dup cum se arat n figura 8.19(a). Se dorete ncrcarea unui al treilea bloc K 3 n memoria principal, dar nu este disponibil un spaiu liber contiguu cu o dimensiune suficient. O soluie la aceast problem este de a se muta blocul K 2 , dup cum se arat n figura 8.19(b), prin asignarea acestuia a unei noi adrese de baz B2 i rencrcarea blocului n memorie. Astfel, se creaz un spaiu n care poate fi ncrcat blocul K 3 , prin asignarea acestuia a unei adrese de baz corespunztoare.

Fig. 8.19 In cazul alocrii dinamice a adreselor, unitatea de gestiune a memoriei

trebuie s evite depirea limitelor unui bloc n special la scriere. O metod obinuit pentru realizarea acestui deziderat este specificarea adresei maxime Li , numit adres limit, pe care o poate accesa blocul. O alt posibilitate este de a se specifica dimensiunea blocului. Adresa de baz Bi i adresa limit Li , sunt memorate n tabela de adrese ale memoriei. Fiecare adres real Ar generat de bloc este comparat cu Bi i Li ; accesul la memorie este efectuat dac i numai dac este satisfcut urmtoarea condiie: Bi Ar Li Figura 8.20 indic modul n care unitatea de gestiune a memoriei efectueaz translatarea adreselor. Adresa de intrare Av este o adres virtual constnd dintr-o adres de baz virtual Bv, concatenat cu un deplasament D . Adresa de baz real Br = f ( Bv ) asignat adresei virtuale Bv este memorat ntr-o tabel de adrese a memoriei principale. Aceast tabel poate avea dimensiuni mari. Pentru creterea vitezei procesului de translatare, o parte a tabelei de adrese ale memoriei este plasat ntr-o memorie de vitez ridicat din UCP, numit buffer de translatare (TLB - Translation Look-aside Buffer). Intrarea n TLB este deci partea adresei de baz Bv a adresei virtuale Av , iar ieirea acestuia este adresa de baz real corespunztoare Br . Aceast adres este apoi concatenat cu partea de deplasament D din Av pentru a obine adresa real complet Ar .

Fig. 8.20 Dac adresa virtual Bv nu este gsit n bufferul de translatare TLB, atunci partea tabelei de adrese ale memoriei principale, care conine Bv este transferat mai nti din memoria extern n TLB. Deci, bufferul de translatare are rolul unei memorii cache pentru translatarea adreselor. Din acest motiv, bufferul de translatare este numit uneori memorie cache de adrese.

8.7.3. Paginarea Paginarea este tehnica de divizare a unui program (numit n continuare proces) n blocuri mai mici cu dimensiuni identice i stocarea acestor blocuri n memoria secundar sub forma unor pagini. Prin utilizarea avantajului localitii referinelor, aceste pagini pot fi ncrcate apoi n memoria principal n blocuri, de aceeai dimensiune cu paginile, numite cadre de pagin.

Adresa de baza reala a paginii

Fig. 8.21 Pentru ca aceast metod s funcioneze corect, fiecare proces trebuie s pstreze, n memoria principal, o tabel de adrese ale memoriei, numit tabel de pagini. Fiecrei adrese virtuale de pagin i corespunde o adres real a unui cadru de pagin. Figura 8.21 ilustreaz modul n care funcioneaz metoda paginrii. O adres virtual const din dou pri: o adres de baz i un deplasament. Fiecare proces are un registru de baz, care conine adresa de nceput a tabelei de pagini a procesului. Tabelele de pagini au cte o fi (entry) pentru fiecare pagin pe care o conine procesul. Aceste fie conin de obicei un cmp de prezen de un bit, un cmp de acces i un cmp de adres. Cmpul de prezen P specific dac pagina a fost ncrcat n memoria principal. Cmpul de acces specific tipul operaiilor care pot fi executate asupra paginii. Acest cmp determin dac pagina poate fi doar citit (R/O - Read Only), citit i scris (R/W - ReadAVrite), sau doar executat. Cmpul de adres specific numrul cadrului n care aste ncrcat pagina. Adresa de nceput a paginii n memoria principal este determinat nmulind numrul cadrului cu dimensiunea

cadrului. Atunci cnd se ntlnete un acces la o variabil sau o instruciune care nu este ncrcat n memorie, apare o lips de pagin (page fault), iar pagina care conine variabila sau instruciunea necesar este ncrcat n memorie. Pagina este depus ntr-un cadru liber, dac un asemenea cadru exist. Dac nu exist un cadru liber, trebuie selectat una din paginile procesului, iar noua pagin va fi memorat n locul acesteia. Criteriul pentru selectarea paginii care se va nlocui constituie strategia de nlocuire sau algoritmul de nlocuire.

Fig. 8.22 Ca un exemplu, figura 8.22 prezint coninutul tabelelor de pagini pentru dou procese, Proces 1 i Proces 2. Procesul 1 conine trei pagini, P0 , P1 i P2 , iar procesul 2 are dou pagini, P0 i P1 . Presupunem c toate paginile procesului 1 au acces numai pentru citire, iar paginile procesului 2 au acces pentru citire i scriere. Deoarece fiecare cadru are o dimensiune de 4 KB, adresa fizic de nceput a fiecrui cadru se calculeaz prin produsul dintre numrul cadrului i 4096. Astfel, dat fiind faptul c paginile P0 i P2 ale procesului 1 sunt ncrcate n cadrele 1 i 3, adresele de nceput ale acestora n memoria principal vor fi 1 * 4096=4096 (4K), respectiv 3 * 4096=12288 (12K). Procesul de conversie a adreselor virtuale n adrese fizice poate fi efectuat mai rapid prin utilizarea unui buffer de translatare TLB (Translation Look-aside Buffer) care va memora o parte dintre fiele coninute de tabela de pagini a procesului respectiv. Pentru micorarea timpului de rspuns al TLB acesta poate fi implementat printr-o memorie asociativ. Pentru o anumit adres de pagin, se caut o fis (entry) a bufferului de translatare pentru care exist o potrivire cu acest numr de pagin; aceast fi (entry) este utilizat pentru a furniza numrul corespunztor al cadrului. Dac nu se gsete o potrivire n bufferul de translatare, se va localiza tabela de pagini a procesului corespunztor n

memoria principal, care se va utiliza pentru a furniza numrul cadrului. Eficiena unui sistem de memorie virtual depinde de minimizarea numrului lipsurilor de pagin. Deoarece timpul de acces al memoriei secundare este mult mai ridicat dect timpul de acces al memoriei principale, un numr excesiv al lipsurilor de pagin poate ncetini sistemul n mod semnificativ. Atunci cnd apare o lips de pagin, trebuie identificat o pagin n memoria principal care nu este necesar n momentul respectiv, astfel nct aceasta poate fi transferat n memoria secundar. Apoi, pagina cerut poate fi ncrcat n acest cadru eliberat din memoria principal. Paginarea crete n mod substanial timpul de prelucrare necesar unui proces, deoarece vor fi necesare dou accese la disc, pe lng execuia unui algoritm de nlocuire. Exist ns o alternativ care, n unele cazuri, poate reduce numrul accesurilor la disc la unul singur. Aceast reducere este obinut prin adugarea unui bit suplimentar la fiecare pagin (bit de modificare sau bit de inconsisten). Dac o anumit pagin a fost modificat, bitul corespunztor de modificare este setat la 1. Dac bitul de modificare al unei pagini este 1 i aceast pagin a fost selectat pentru a fi eliminat din memorie, atunci vor fi necesare dou accesuri la disc. Dac bitul de modificare este 0 (aceasta nsemnnd c nu au fost modificri ale acestei pagini din momentul n care a fost ncrcat ultima dat), nu este necesar scrierea paginii pe disc. Deoarece starea original a acestei pagini se afl pe disc i nu s-au efectuat modificri ale paginii, acesta poate fi nlocuit de noua pagin solicitat. 8.7.4. Segmentarea O alt metod de implementare a memoriei virtuale este numit segmentare. In acest caz, un program este mprit n seciuni de lungime variabil numite segmente. Un segment poate corespunde unei entiti logice cum ar fi un set de date sau o funcie n cadrul unui program. Fiecare proces pstreaz o tabel de segmente n memoria principal, tabel care conine n principiu aceleai informaii ca i tabela de pagini, ns, spre deosebire de pagini, segmentele au lungimi diferite i ele pot ncepe n orice zon din memorie. Pentru acest motiv, eliminarea unui segment din memoria principal nu asigur ntotdeauna spaiu suficient pentru un alt segment. Un segment este un set de cuvinte contigue, asociate logic. Un cuvnt dintr-un segment este referit specificnd o adres de baz, numit adres de segment i un deplasament n cadrul segmentului. Un program i datele sale pot fi considerate ca o colecie de segmente nlnuite. Legturile provin din faptul c un segment de program utilizeaz, sau apeleaz, alte segmente. Avantajul principal al segmentrii const n faptul c limitele segmentelor corespund limitelor programului i ale datelor. In consecin, informaiile care sunt partajate ntre diferii utilizatori sunt organizate adesea n segmente. Din cauza independenei logice ntre segmente, un segment de program poate fi modificat i recompilat n orice moment fr a afecta alte segmente. Anumite proprieti ale programelor, ca domeniul de definiie al unei variabile sau

drepturile de acces, pot fi specificate n mod natural de ctre segmente. Aceste proprieti necesit ca accesurile la segmente s fie verificate pentru a preveni utilizarea lor neautorizat. Dezavantajul segmentrii const n utilizarea ineficient a memoriei principale. La sistemele care utilizeaz segmentarea, blocurile de dimensiuni diferite tind s prolifereze n memoria principal, lsnd ntre ele spaii neutilizabile. Acestea pot fi eliminate prin procesul de compactare a memoriei. Existena unui spaiu inutilizabil ntre zonele ocupate este numit fragmentare extern. In cazul paginrii, deoarece cadrele de pagin sunt contigue, fragmentarea extern nu apare. Comparnd paginarea i segmentarea, paginarea necesit un sistem mai simplu de alocare a memoriei dect segmentarea, deoarece paginile au aceeai dimensiune. Pe de alt parte, paginile nu au semnificaie logic, deoarece ele nu reprezint elemente de program. Administrarea memoriei virtuale poate fi simplificat prin combinarea segmentrii cu paginarea. Utiliznd aceast soluie se obine i o mai bun utilizare a memoriei principale. Totui, dac un bloc de k cuvinte este mprit n p pagini de cte n cuvinte, iar k nu este un multiplu de n, ultimul cadru de pagin cruia i este asignat blocul nu va fi ocupat complet. Existena unui spaiu inutilizabil n interiorul unui cadru de pagin ocupat parial este numit fragmentare intern. 8.7.5. Paginarea i segmentarea Paginarea i segmentarea pot fi combinate pentru a obine avantajele ambelor soluii. In acest caz, fiecare segment este mprit n pagini. Avantajul principal al divizrii unui segment n pagini este c se elimin necesitatea de a plasa segmentul ntr-o zon contigu din memoria principal. In loc de aceasta, este nevoie doar de un numr de cadre de pagin egal cu numrul paginilor n care s-a mprit segmentul. Deoarece aceste cadre de pagin nu trebuie s fie contigue, este mai uor de plasat un segment de dimensiuni mari n memoria principal. Atunci cnd paginarea este combinat cu segmentarea, o adres virtual are trei componente: un index de segment SI , un index de pagin PI i un deplasament (offset) D . Tabela de adrese ale memoriei const atunci din una sau mai multe tabele de segmente i tabele de pagini. Pentru translatarea rapid a adreselor, se pot utiliza dou buffere de translatare TLB, unul pentru tabelele de segmente i unul pentru tabelele de pagini (figura 8.23). Fiecare adres virtual Av generat de un program este translatat printrun proces n dou etape. Mai nti, se utilizeaz indexul de segment SI pentru a citi tabela curent de segmente cu scopul de a obine adresa de baz PB a tabelei de pagini necesare.

Fig. 8.23 Aceast adres de baz este combinat cu indexul de pagin PI (care este un deplasament n cadrul tabelei de pagini) pentru a genera o adres de pagin, care este utilizat apoi pentru accesul la o tabel de pagini. Rezultatul este o adres real de pagin, deci, un numr al cadrului de pagin, care poate fi combinat cu partea de deplasament D a adresei virtuale Av pentru a obine adresa real final Ar . 8.7.6. Alocarea memoriei Diferitele niveluri ierarhice ale unui sistem de memorie sunt mprite n seturi de pagini sau segmente, care pstreaz blocuri de date. Blocurile sunt transferate n mod automat ntre aceste niveluri n scopul minimizrii timpului de acces al ierarhiei de memorie. Plasarea blocurilor de informaii ntr-un sistem de memorie se numete alocarea memoriei. Metoda de selectare a prii memoriei principale M 1 n care trebuie plasat un nou bloc K constituie strategia de nlocuire. Strategiile simple de nlocuire plaseaz blocul K n memoria M 1 numai atunci cnd este disponibil o regiune neocupat cu o dimensiune suficient (alocare non-preemptiv). Alte strategii realizeaz realocarea blocurilor existente n memorie pentru a face loc blocului K (alocare preemptiv). In general, metodele de alocare ale memoriei care sunt eficiente au ca efect o rat ridicat de succes i un timp mediu de acces sczut. O alocare eficient a memoriei minimizeaz de asemenea spaiul neocupat din memoria M 1 . Atunci cnd un bloc este transferat din memoria M 2 n M 1 , sistemul de

gestiune a memoriei creaz o intrare corespunztoare n lista spaiilor ocupate. Atunci cnd un bloc nu mai este necesar n memoria M 1 , acesta este eliberat (dealocat) i regiunea pe care o ocup este transferat din lista spaiilor ocupate n lista spaiilor disponibile. Un bloc este dealocat atunci cnd un program care l utilizeaz i termin execuia sau cnd blocul este nlocuit de ctre un alt bloc. 8.7.6.1. Alocarea non-preemptiv Presupunem c un bloc K i , de ni cuvinte trebuie transferat din memoria M 2 n M 1 . Dac nici unul din blocurile care ocup deja memoria M 1 nu poate fi acaparat (nlocuit) de ctre blocul K i , atunci este necesar s se gseasc sau s se creeze o regiune disponibil de ni , sau mai multe cuvinte care permite plasarea blocului K i . Acest proces este cunoscut ca alocare non-preemptiv a memoriei. Alocarea non-preemptiv poate fi implementat mai simplu ntr-un sistem cu paginare, unde toate blocurile (paginile) au o dimensiune fixe i memoria M 1 este divizat n regiuni (cadre de pagin) de aceeai dimensiune. Harta memoriei (tabela de pagini) este parcurs pentru a gsi un cadru de pagin disponibil; dac se gsete unul, acesta este asignat blocului K i . Aceast metod simpl de alocare este motivul principal al utilizrii pe scar larg a paginrii. Dac spaiul de memorie este divizat n regiuni de lungime variabil, devine ns mai dificil s se aloce n mod eficient noi blocuri. Doi algoritmi utilizai pe scar larg pentru alocarea non-preemptiv a blocurilor de dimensiune variabil (segmente care nu sunt paginate, de exemplu) sunt primul potrivit, cel mai potrivit si cel mai nepotrivit. Primul potrivit. Aceast metod plaseaz blocul dat n prima regiune liber cu dimensiunea potrivit. Se parcurge harta memoriei n mod secvenial pn cnd se gsete o regiune disponibil R j de ni sau mai multe cuvinte, unde n , este dimensiunea blocului K i care trebuie plasat, iar apoi se aloc blocul K i regiunii R j . Principalul avantaj al acestei metode este c favorizeaz formarea unor zone libere la adresele mari de memorie prin plasarea blocurilor la adresele joase de memorie ori de cte ori este posibil. Totui, aceast metod produce zone libere care pot fi prea mici pentru a pstra un bloc. Aceast problem este cunoscut sub numele de fragmentare. Atunci cnd apare fragmentarea, pn la urm trebuie rulat un anumit algoritm de compactare pentru a colecta toate zonele libere de dimensiuni mici ntr-o zon cu dimensiunea mai mare. Aceasta poate reduce performanele. Cel mai potrivit. Aceast metod aloc regiunea disponibil cu dimensiunea cea mai mic care este suficient de mare pentru a pstra blocul dat. Se parcurge harta memoriei i se asigneaz blocul K i unei regiuni de n j ni , cuvinte astfel nct n j ni , s fie minimizat. Pentru a nu fi necesar

cutarea n ntreaga hart a memoriei, lista spaiului disponibil este sortat n ordinea cresctoare a dimensiunii regiunilor. Ca i strategia primului potrivit, i strategia celui mai potrivit produce fragmentarea memoriei. Aceast strategie poate crea un numr mare de blocuri mici care sunt inutile n majoritatea cazurilor. Comparnd algoritmii primului potrivit i celui mai potrivit, algoritmul primului potrivit are avantajul timpului de execuie mai redus. Eficiena relativ a celor doi algoritmi a fost un subiect de controverse, deoarece ambii au fost implementai cu rezultate satisfctoare. Performanele obinute ntr-un mediu particular depinde de distribuia dimensiunii blocurilor care trebuie alocate. Studiile de simulare sugereaz c, n practic, algoritmul primului potrivit tinde s aib performane mai bune dect algoritmul celui mai potrivit. Cel mai nepotrivit. Aceast metod aloc regiunea disponibil cu dimensiunea cea mai mare pentru blocul dat. Se caut n harta memoriei regiunea cea mai mare. Lista spaiului disponibil este sortat n ordinea descresctoare a dimensiunii regiunilor. Aceast metod, ca i celelalte dou metode, produce fragmentarea memoriei. Totui, spre deosebire de primele dou metode, metoda celui mai nepotrivit reduce numrul regiunilor mici, alocnd ntotdeauna regiunea cea mai mare pentru blocul dat. 8.7.6.2. Alocarea preemptiv Alocarea non-preemptiv nu poate utiliza eficient memoria n toate situaiile. Este posibil s apar refuzarea unei cereri de alocare a memoriei datorit spaiului insuficient atunci cnd memoria M 1 este doar parial ocupat. Este posibil utilizarea mult mai eficient a spaiului de memorie disponibil dac spaiul ocupat poate fi realocat pentru a face loc noilor blocuri. Realocarea poate fi efectuat utiliznd dou abordri: - Blocurile aflate deja n memoria M 1 pot fi realocate n cadrul M 1 pentru a crea un spaiu suficient de mare pentru noul bloc. - Una sau mai multe regiuni pot deveni disponibile prin dealocarea blocurilor pe care le conin. Aceast metod necesit o strategie de nlocuire pentru selectarea blocurilor care trebuie dealocate i nlocuite. Dealocarea necesit stabilirea unei distincii ntre blocurile care au fost modificate de la ncrcarea lor n memoria M 1 i blocurile care nu au fost modificate. Blocurile de instruciuni rmn nemodificate, n timp ce blocurile de date pot fi modificate. Pentru nlocuirea unui bloc care nu a fost modificat, sistemul de gestiune a memoriei poate nlocui n mod simplu blocul dealocat cu noul bloc i poate actualiza intrarea acestuia n harta memoriei. Inainte ca un bloc modificat s fie nlocuit, acesta trebuie copiat n memoria M 2 . 8.7.6.3. Strategii de nlocuire A doua abordare pentru alocarea preemptiv implic acapararea unei regiuni R ocupate de blocul K i alocarea acesteia unui nou bloc K ' . Criteriul

pentru selecia blocului K ca i bloc care va fi nlocuit constituie strategia de nlocuire. Principalul scop n alegerea unei strategii de nlocuire este de a maximiza rata de succes a memoriei mai rapide M 1 . Majoritatea strategiilor de nlocuire iau n considerare principiul localitii atunci cnd selecteaz un bloc pentru nlocuire. Principiul localitii afirm c pe o perioad dat de timp adresele generate se vor ncadra ntr-o poriune redus a spaiului adreselor virtuale i aceste adrese generate se vor modifica lent n timp. Rata de succes tinde la un maxim dac intervalele de timp dintre dou lipsuri succesive de memorie sunt maximizate. Doi algoritmi practici de nlocuire sunt FIFO (First-In, First-Out) i LRU (Least Recently Used). FIFO este una din cele mai simple strategii de nlocuire. Blocul selectat pentru nlocuire este blocul cel mai puin recent ncrcat n memoria M 1 . Avantajul strategiei FIFO este faptul c este foarte simplu de implementat. Fiecrui bloc i se asociaz un contor n lista spaiilor ocupate; contoarele asociate cu blocurile indic secvena lor de ncrcare. De fiecare dat cnd un bloc este transferat n memoria M 1 , contoarele indicnd secvena de ncrcare sunt actualizate. Prin inspectarea acestor contoare, unitatea de gestiune a memoriei poate determina cu uurin primul bloc care a fost ncrcat. Dezavantajul strategiei FIFO este c poate mri n mod semnificativ timpul necesar pentru execuia unui proces, deoarece nu ia n considerare principiul localitii referinelor i n consecin, poate nlocui cu aceeai probabilitate blocuri utilizate intens i blocuri utilizate rar. De exemplu, dac un bloc ncrcat n memorie de mai mult timp conine o variabil global care este utilizat n mod constant, acest bloc va fi unul din primele care va fi nlocuit. La urmtorul acces la variabila global, va apare o nou lips a blocului, iar blocul va trebui rencrcat, nlocuind un alt bloc. Strategia LRU (Least Recently Used) selecteaz pentru nlocuire blocul care nu a fost utilizat de cel mai mult timp. Aceast strategie se bazeaz pe presupunerea rezonabil c blocul cel mai puin recent utilizat este cel mai puin probabil de a fi utilizat n viitor. Strategia LRU evit nlocuirea blocurilor ncrcate de mai mult timp, dar frecvent utilizate, ca n cazul strategiei FIFO. Totui, strategia LRU este mai dificil de implementat dect FIFO, deoarece sistemul de gestiune a memoriei trebuie s pstreze informaii despre momentele referinelor la toate blocurile din memoria M 1 . Strategia LRU poate fi implementat prin asocierea unui contor hardware sau software cu fiecare bloc din M 1 . De fiecare dat cnd un bloc este referit, contorul acestuia este setat la o valoare pozitiv predeterminat. La intervale fixe de timp, contoarele tuturor blocurilor sunt decrementate. In orice moment, blocul cel mai puin recent utilizat este cel al crui contor conine valoarea cea mai mic.

8.8 Tipuri de memorii semiconductoare 8.8.1. Parametrii memoriilor DRAM Pentru nceput considerm un circuit de memorie DRAM real cu o capacitate de 64 Mbii. Cea mai mica unitate adresabil este octetul, astfel nct circuitul considerat reprezint o memorie DRAM de 8 M x 8 bii. Dimensiunea adreselor de memorie este 23 de bii. Circuitul utilizeaz organizarea bidimensional, adresa de 23 de bii fiind divizat n dou pri: o adres de linie de 13 bii i o adres de coloan de 10 bii. Pentru reducerea numrului de pini ai circuitului acesta utilizeaz numai 13 linii externe de adrese. Aceast soluie de proiectare implic faptul c adresele de linie i de coloan trebuiesc multiplexate pe magistrala de adrese, soluie adoptat n mod curent pentru circuitele RAM de dimensiuni mari. Procesul de multiplexare este controlat de dou linii: RAS (Row Address Stwbe) i CAS (Column Address Strobe). Mai nti, adresa de linie este transferat circuitului DRAM de ctre dispozitivul extern (master), care plaseaz adresa de linie pe magistrala de adrese a circuitului DRAM i activeaz semnalul RAS. Dispozitivul master plaseaz apoi adresa de coloan pe magistrala de adrese i activeaz semnalul CAS. Semnalul CAS indic de asemenea faptul c un cuvnt de date este pregtit pe magistrala de date (pentru operaie de scriere) sau faptul c magistrala extern este pregtit pentru a recepiona un cuvnt de date (pentru operaie de citire). Pentru a descrie performanele memoriilor DRAM se utilizeaz mai muli parametri, care pot fi definii lund n considerare modul de funcionare a unei astfel de memorii. Considernd un acces pentru citirea unei memorii DRAM, vor avea Ioc urmtoarele operaii: - Procesorul transmite adresa datei care trebuie accesat pe magistrala de adrese; - Controlerul de memorie determin adresele de linie i de coloan ale datei solicitate; - Controlerul de memorie transmite prima parte a adresei (adresa de linie) la memorie i activeaz semnalul RAS. Ca urmare, decodificatorul adresei de linie selecteaz linia corespunztoare n care este memorat data, sau citete ntreaga linie i o depune ntr-un buffer. Timpul de acces la linie tRAS (Row Access time), numit i timp de acces aleator (random access time) sau timp de acces (tA), este timpul dintre activarea semnalului RAS i prezena datei solicitate n bufferul de ieire. - Controlerul de memorie transmite a doua parte a adresei (adresa de coloan) la memorie i activeaz semnalul CAS. ntrzierea ntre semnalele RAS i CAS tRCD (RAS-to-CAS delay) reprezint perioada de timp dintre activarea semnalului RAS i activarea semnalului CAS. Ca rezultat al activrii semnalului CAS, decodificatorul adresei de coloan selecteaz coloana corespunztoare n care este stocat data solicitat. Perioada de timp care se scurge ntre momentul activrii semnalului CAS i

momentul n care data solicitat este disponibil n bufferul de ieire se noteaz cu tCAS. (Column Access time). Timpul necesar pentru a ncheia accesul la o linie deschis i a deschide urmtoarea linie este notat cu tRP (RAS Precharge) Un mod obinuit de a prezenta performana unui modul DRAM este sub forma x-y-y-y, care indic timpul de acces la primul cuvnt i la urmtoarele trei cuvinte (pentru un total de 32 de octei). Aceti parametrii poat denumirea de latene. De exemplu, dac un circuit de memorie are latenele 5-2-2-2 nseamn c primul cuvnt de memorie va necesita 5 cicluri de ceas pentru acces, n timp ce urmtoarele trei cuvinte, n cazul cnd aparin liniei deja accesate, vor necesita cte 2 cicluri de ceas fiecare. Pentru memoriile sincrone aceast notaie reprezint valorile parametrilor tCAS, tRCD, tRP i tRAS exprimate n cicluri de ceas. Unii productori prefer s indice numai latena semnalului CAS sub forma CL2 sau CL3, nsemnnd c aceasta are valoare 2, sau 3 exprimat n cicluri de ceas. De exemplu latenele unui circuit de memorie exprimate sub forma 4-4-4-12 indic faptul c tCAS=4, tRCD=4, tRP=4 i tRAS=12. 8.8.2. Tehnologii pentru memoriile DRAM 8.8.2.1. Categorii de memorii DRAM Aproape toate tipurile de memorii DRAM au aceeai ntrziere iniial pentru accesul la primul cuvnt de memorie, deoarece intern toate memoriile DRAM funcioneaz ntr-un mod similar. Diferitele tipuri de memorii DRAM utilizeaz tehnici diferite pentru executarea operaiilor secveniale dup citirea primului cuvnt de memorie, cu rezultate diferite n privina performanelor obinute. Majoritatea ctigurilor de performan se obin prin "ascunderea" operaiilor interne n diferite moduri. Iniial, au fost utilizate memorii DRAM cu interfa asincron, deoarece procesoarele erau relativ lente. Mai recent, au fost realizate interfee sincrone cu caracteristici avansate. Este posibil ca memoriile sincrone s fie nlocuite prin memorii bazate pe protocoale, cum este Rambus DRAM. O interfa asincron este cea la care este necesar o perioad minim de timp pentru a asigura ca o operaie s fie terminat. Fiecreia din operaiile interne ale unei memorii DRAM asincrone i se asigneaz intervale minime de timp, astfel nct dac apare un impuls de ceas nainte de terminarea acestui interval minim, trebuie s se atepte un nou impuls de ceas nainte ca urmtoarea operaie s poat ncepe. Din aceast cauz, memoriile asincrone au performane limitate. Utilizarea unor porturi de I/E cu un numr mai mare de bii reprezint metoda cea mai simpl i cea mai ieftin de cretere a performanelor unei memorii. Un asemenea port necesit ns pini suplimentari de I/E, ceea ce implic o dimensiune mai mare a capsulei. Similar, segmentarea adiional a matricei de memorie i utilizarea mai multor linii de I/E crete dimensiunea

circuitului. Ambele metode conduc la creterea preului memoriilor DRAM. Aceste probleme au limitat de obicei numrul liniilor de I/E la 4 sau 8, determinnd ca proiectanii s caute alte metode de cretere a performanelor. O alt categorie de memorii DRAM este cea care utilizeaz o interfa sincron. Prin implementarea unei interfee sincrone, s-au eliminat perioadele de ateptare de ctre procesor, obinndu-se de asemenea unele avantaje suplimentare. In cazul funcionrii sincrone, se memoreaz anumite informaii de la procesor n circuitele latch ale memoriei DRAM sub controlul ceasului sistem. Aceste circuite pstreaz adresele, datele i semnalele de control, ceea ce permite procesorului s execute alte operaii. Dup un numr specific de cicluri de ceas, datele devin disponibile i procesorul le poate citi de pe liniile de ieire. Un alt avantaj al unei interfee sincrone este c ceasul sistem este singurul semnal de sincronizare care trebuie furnizat memoriei DRAM. Aceasta elimin necesitatea propagrii unor semnale multiple de sincronizare. Intrrile sunt de asemenea simplificate, deoarece semnalele de control, adresele i datele pot fi memorate fr temporizrile de setare i meninere monitorizate de procesor. Avantaje similare se obin i pentru operaiile de ieire. Toate memoriile DRAM care au o interfa sincron sunt cunoscute sub numele generic SDRAM. O alt categorie este reprezentat de memoriile DRAM bazate pe protocoale. Categoriile precedente de memorii au linii separate de adrese, date i control, care limiteaz viteza la care poate funciona circuitul cu tehnologia curent. Pentru eliminarea acestui dezavantaj, au fost proiectate memorii DRAM bazate pe protocoale, care implementeaz toate aceste semnale pe aceeai magistral. Cele mai cunoscute memorii din aceast categorie sunt DRDRAM (Direct Rambus DRAM) i SLDRAM (SyncLink DRAM) 8.8.2.2. FPM DRAM (Fast page mode) Prin implementarea unor moduri speciale de acces, se pot elimina anumite operaii interne. Astfel, dac o secven de accesuri la memorie are aceeai adres de linie, este suficient s se transfere adresa de linie la circuitul DRAM o singur dat la nceputul secvenei. O metod de acces rapid de acest tip este numit mod pagin. Prin aceast metod, semnalul RAS este meninut activ, astfel nct ntreaga linie de date (sau o pagin) este meninut n bufferele interne de coloan. Reamintim c semnalul RAS are ca efect identificarea liniei n care se gsete data solicitat i ncrcarea acestea n buffere. Coninutul acestor buffere poate fi apoi accesat doar prin activarea semnalului CAS . Aceasta asigur operaii de citire mult mai rapide, deoarece timpii de setare i meninere pentru adresa de linie sunt eliminai. Memoria FPM este cu puin mai rapid dect memoria DRAM convenional. Avantajul acestei memorii este, de asemenea, consumul de putere mai redus, n principal datorit faptului c n timpul accesului n mod pagin refacerea coninutului celulelor nu este

necesar.. Temporizrile tipice pentru o memorie FPM DRAM sunt 6-3-3-3 (o ntrziere iniial de 6 cicluri de ceas, cu un acces la pagin de 3 cicluri de ceas). 8.8.2.3. EDO DRAM Memoria EDO (Extended Data Out), numit uneori Hyper Page Mode, reprezint o alt mbuntire a memoriei DRAM asincrone. In cazul memoriei EDO, o operaie de citire poate ncepe nainte de terminarea ultimului acces. Aceasta permite ca durata minim a ciclului pentru semnalul CAS s fie redus, obinndu-se astfel o cretere a vitezei n comparaie cu FPM DRAM de 5% pn la 10%. Temporizarea tipic a memoriei EDO este 5-2-2-2. 8.8.2.4. BEDO DRAM In cazul memoriei BEDO (Burst EDO), memoria EDO este combinat cu tehnologia pipeline i circuite latch speciale pentru a reduce timpul de acces. Adugarea unui mod de transfer exploziv ("burst") i utilizarea unei arhitecturi cu bancuri duale asigur o temporizare de 4-1-1-1. Modul de transfer exploziv este o mbuntire a modului pagin, deoarece dup furnizarea primei adrese urmtoarele 3 adrese sunt generate intern, eliminndu-se astfel timpul necesar furnizrii unei noi adrese de coloan. 8.8.2.5. SDRAM Toate memoriile care au o interfa sincron sunt cunoscute sub numele generic SDRAM (Synchronous DRAM). In mod tradiional memoriile DRAM au interfa asincron, fapt care nseamn c acestea rspund ct pot de repede la modificarea semnalelor de intrare. Interfaa sincron a memoriilor SDRAM determin ca aceste memorii s atepte un semnal de ceas nainte de a rspunde la semnalele de comand. In acest mod memoriile SDRAM lucreaz sincron cu magistrala procesorului. Memoria DRAM sincron este complet diferit de n ceea ce privete arhitectura sa i metodele de control fa de memoria DRAM asincron. Prima diferen este configuraia memoriei SDRAM, care utilizeaz o arhitectur cu uniti (bancuri) multiple. Modulele tipice SDRAM au 2 sau 4 bancuri pe modul, permind ca un banc s fie prencrcat n timp ce celelalte sunt citite sau scrise. Memoriile SDRAM utilizeaz o tehnologie denumit pipelining, care presupune faptul c circuitul de memorie poate accepta o nou instruciune nainte de a termina procesarea celei anterioare. Astfel, nu numai c timpii de prencrcare sunt mascai, dar pot fi accesate simultan linii multiple n fiecare banc al memoriei. In acest mod viteza de rspuns a modului de memorie crete considerabil. A doua diferen const n faptul c memoria SDRAM poate funciona n mod exploziv pentru 1 bit, 2 bii, 4 bii, 8 bii, sau o pagin complet. In mod exploziv, la fiecare tranzacie cu memoria se transfer mai multe locaii cu

adrese consecutive. Modul exploziv este avantajos deoarece instruciunile i datele sunt citite n ordine secvenial n majoritatea timpului. Printre primele memorii SDRAM putem meniona modulele de memorie PC66, care funcionau pe magistrale de 66 MHz, urmate de modulele PC100. Ulterior Intel a elaborat specificaiile pentru memoriile PC133 i PC150 care lucrau pe magistrale de 133MHz i respectiv 150 MHz. Pentru PC150 rata de transfer teoretic era de 1200 Moctei/s. Memoriile SDRAM utilizeaz module DIMM (dual in-line memory module), care au nlocuit modulele SIMM (single in-line memory module). Principala deosebire dintre cele dou tipuri de module de memorie const n faptul c, modulele DIMM au contacte distincte pe ambele pri ale plcii, n timp ce contactele modulului SIMM sunt redundante. Memoriile HSDRAM Ulterior au fost elaborate memoriile HSDRAM (High Speed SDRAM) care utilizau circuite de memorie de calitate ridicat n scopul creterii frecvenei peste cea a memoriei SDRAM convenionale. Memoriile HSDRAM puteau funciona stabil la frecvene de 150MHz sau chiar de 166MHz. Memoria HSDRAM era compatibil cu memoria SDRAM convenional, mbuntind n acelai timp performana i stabilitatea sistemelor. Memoriile ESDRAM (Enhanced SDRAM) Aceast memorie este alctuit dintr-o memorie SDRAM i o memorie cache de linie. Aceast memorie cache cu mapare direct pstreaz coninutul liniei active, elibernd deci matricea de memorie DRAM, astfel c aceasta poate accesa o alt linie n timp ce coninutul liniei precedente este transferat n bufferele de ieire. Principiul de funcionare al memoriei ESDRAM const n faptul c, n loc de a se ncerca reducerea ntrzierilor prin utilizarea unor componente mai rapide, aceste ntrzieri sunt "ascunse" prin suprapunerea anumitor operaii. Intr-o memorie SDRAM convenional, datele trebuie refcute prin rescrierea coninutului unei linii nainte de a putea activa o alt linie. Memoria ESDRAM suprapune transferul n mod exploziv al datelor din memoria cache de linie n bufferele de ieire cu operaia de reinprosptare. De obicei, o memorie ESDRAM permite activarea simultan a mai multor linii (pagini). Activarea unei noi linii, poate fi, de asemenea, suprapus cu transferul datelor din memoria cache de linie n bufferele de ieire. Rezultatul este c ntrzierea ntre semnalele RAS i CAS este eliminat sau redus. Latena semnalului CAS este de asemenea redus, deoarece citirea se efectueaz din memoria cache de linie, cu un timp de acces la coloan substanial mai redus. Spre deosebire de memoria SDRAM convenional, mprosptarea matricei de memorie DRAM poate fi executat n timpul unei operaii de citire n mod exploziv. Coninutul memoriei cache de linie nu este pierdut n timpul ciclurilor de remprosptare.

Dezavantajul memoriei ESDRAM const n costul mai ridicat, deoarece utilizeaz circuite de calitate ridicat i o matrice de celule de memorie SRAM Memoria cu canale virtuale Memoria cu canale virtuale (VCM Virtual Channel Memory) utilizeaz o memorie cache SRAM pentru a mbunti latena de acces medie. Memoria cache este implementat ca un set de registre statice rapide plasate ntre matricea DRAM i bufferele de I/E (figura 8.24). Aceste registre au porturi duale i formeaz mai multe "canale virtuale" care pot fi utilizate de diferite dispozitive pentru accesul la memorie. Registrele comunic cu matricea DRAM printr-o magistral cu lime foarte mare, ceea ce asigur o rat de transfer ridicat pentru transferurile interne de date. Spre deosebire de memoria ESDRAM

Fig. 8.24 memoria VCM utilizeaz o memorie cache complet asociativ sau asociativ pe seturi. In cazul unei memorii cache complet asociative, oricare linie DRAM dintrun banc poate fi ncrcat n oricare canal virtual. Se utilizeaz un algoritm "write-back", astfel nct datele sunt scrise ntr-un canal virtual nainte de salvarea lor n matricea DRAM. Spre deosebire de cazul memoriei ESDRAM, nu memoria nsi, ci controlerul memoriei sistemului este cel care implementeaz algoritmii de gestiune a memoriei cache i funciile acestei memorii, cum sunt cele de activare, refacere i prencrcare. Controlerul memoriei sistemului poate asigna canale virtuale multiple unor poriuni ale aceluiai banc de memorie. Fiecare canal virtual poate conine date din mai multe bancuri ale matricei DRAM. Prin pstrarea datelor n mai multe canale virtuale ntre matricea DRAM i terminalele de I/E, memoria poate pregti alte cereri de date ntr-un canal separat n timpul citirii sau scrierii datelor curente. Memoria VCM poate mbunti performanele n sistemele multitasking, la care memoria este accesat de ctre diferite dispozitive: una sau mai multe uniti centrale, un accelerator grafic, un adaptor de reea, o plac de sunet i alte dispozitive de I/E. Fiecare din aceste uniti are acces la memorie pe baza adresei, a dimensiunii blocului i a numrului de accesuri n zone contigue. Memoria VCM poate asigura un canal independent cu propriile resurse pentru

accesul la matricea de memorie. Rezult astfel ntrzieri reduse, rate de transfer ridicate i o eficien mbuntit a magistralei de memorie. Memoria FCRAM FCRAM (Fast Cycle RAM) este o tehnologie dezvoltat de firma Fujitsu Microelectronics. Fiecare banc de memorie FCRAM este subdivizat n minizone. Aceast subdiviziune mbuntete timpul de acces aleator i reduce puterea consumat comparativ cu memoria SDRAM convenional. Se utilizeaz o arhitectur pipeline cu trei etaje, care permite ca urmtorul acces aleator s nceap n timp ce data precedent este transmis la ieire. Un set de operaii care specific o adres poate fi urmat imediat de operaia urmtoare (de exemplu, operaia de prencrcare) fr a fi necesar s se atepte transmiterea datelor la ieire. Astfel, operaia de prencrcare poate fi executat automat de memorie pe msur ce operaiile sunt terminate. In acest fel, operaia de prencrcare este ascuns. Tehnologia FCRAM a fost dezvoltat pentru a mbunti n mod semnificativ performanele accesurilor aleatoare chiar i la frecvene reduse, prin reducerea ciclurilor inactive ori de cte ori este posibil. Ca rezultat, gradul de utilizare efectiv a magistralei va crete. Memoria FCRAM poate funciona cu o laten a semnalului CAS egal cu 1, valoare care nu este permis de obicei de memoria SDRAM convenional. Pe baza tehnologiei FCRAM, firma Fujitsu a dezvoltat de asemenea mai multe circuite de memorie pentru aplicaii de telefonie celular. Memoria DDR SDRAM Standardul care precizeaz caracteristicile memoriilor DDR SDRAM se numete JEDEC. Numele memoriei DDR (Double Data Rate) SDRAM provine de la tehnica transferrii datelor att pe frontul cresctor, ct i pe cel descresctor al semnalului de ceas. De exemplu, la o frecven a magistralei de 133 MHz, memoria DDR SDRAM execut transferurile de date la o frecven de 266 MHz. Aceast tehnic crete semnificativ eficiena magistralei de memorie pentru transferurile de date. Un modul de memorie DDR SDRAM cu un ceas de 133 MHz ofer o rat de transfer la vrf de 2100 MB/s, comparativ cu o rat de transfer la vrf de 1066 MB/s pentru un modul de memorie SDRAM cu aceeai frecven de ceas. Totui, acesta nu nseamn c rata de transfer medie este dublat i ea. DDR SDRAM este o arhitectur care utilizeaz prencrcarea, avnd o interfa care transfer dou cuvinte de date la pinii de I/E n fiecare ciclu de ceas. Un acces de citire sau scriere const dintr-un singur transfer de date de 2n bii, pe timpul unui ciclu de ceas, cu matricea intern DRAM i dou transferuri de date de n bii cu pinii de I/E, fiecare pe timpul unei jumti a ciclului de ceas. Pentru a realiza acest lucru magistrala intern de date are o lime dubl fa de cea a interfeei externe.

Latena semnalului CAS poate fi setat la 2 sau 2,5 cicluri de ceas. O laten a semnalului CAS de 2,5 cicluri de ceas nseamn 5 fronturi ale semnalului de ceas (cresctoare i descresctoare). Ca i memoriile SDRAM convenionale, memoria DDR SDRAM utilizeaz module DIMM (dual in-line memory module), dar acestea nu sunt compatibile cu modulele DIMM utilizate de primele. Modulele DIMM DDR au ns aceleai dimensiuni ca i modulele DIMM SDRAM, ns au un numr mai mare de pini. Caracteristicile memoriilor DDR SDRAM sunt precizate de standardul JEDEC. Memoriile DDR II SDRAM Memoriile DDR II reprezint a doua generaie de memorii DDR, numite acum DDR I. Arhitectura DDR II conine, modificri semnificative, cum sunt: mbuntiri ale ratei de transfer, o lungime fix a transferurilor n mod exploziv de 4 cicluri de date, reducerea costurilor i reducerea puterii consumate. Astfel, la memoriile DDR II, rata de transfer este mbuntit prin creterea frecvenei semnalului de ceas. Conform specificaiilor DDR II, lungimea transferurilor n mod exploziv este fixat Ia 4 cuvinte. Deci, sunt necesare 4 cicluri de date (2 cicluri de ceas) pentru toate transferurile de citire i scriere. Aceasta difer de alte memorii SDRAM, la care lungimea unui transfer poate fi de 2, 4, 8 cuvinte, sau o pagin ntreag. Unul din motivele adoptrii acestei soluii este c astfel se reduc timpii de testare a strilor. Un alt motiv l reprezint faptul c interfaa DDR II nu permite ntreruperea tranzaciilor odat ce ele au fost iniiate. Pentru o memorie SDRAM convenional sau DDR I, poate fi necesar terminarea n avans a unei tranzacii pentru a se permite efectuarea unei alte tranzacii cu prioritate mai ridicat. Deoarece lungimea tranzaciilor DDR II este mai redus, nu este necesar ntreruperea lor. Pe de alt parte, lungimea mai redus a transferurilor ar putea avea un impact negativ asupra ratei de transfer. De exemplu, ncrcarea magistralei de adrese va crete, deoarece trebuie transmise mai multe adrese. Specificaiile DDR II permit ns transmiterea comenzilor consecutive pe orice front cresctor al semnalului de ceas, ct timp acestea nu determin un conflict pe magistrala de date i nu ntrerup o comand precedent. De exemplu, pot fi iniiate comenzi consecutive de citire (care implic activarea semnalului CAS) ctre acelai banc de memorie la fiecare dou cicluri de ceas, deoarece astfel nu vor fi conflicte pe magistrala de date. Interfaa DDR II funcioneaz la 1,8 V, spre deosebire de interfaa DDR I, care funcioneaz la 2,5 V. Astfel, puterea consumat este mai redus. Aceasta permite utilizarea modulelor DDR II la calculatoarele portabile, calculatoarele PDA i telefoanele celulare. Diferena de baz dintre DDR I i DDR II const n faptul c ceasul de magistral este de dou ori mai rapid dect frecvena de lucru a celulelor de memorie, astfel nct DDR II are posibilitatea de a lucra efectiv de dou ori mai

repede dect DDR I. Ca un compromis ns latena memoriilor DDR II este considerabil mai mare. In timp ce memoriile DDR I au latene tipice de 2 sau 3 cicli de ceas, DDR II poate avea latene de 4 sa 6 cicli de ceas. Astfel, pentru a obine aceleai ntrzieri ca i DDR I, frecvena magistralei (FSB) pe care opereaz memoriile DDR II trebuie dublat. Latenele tipice pentru o memorie DDR II sunt 5-5-5-15 sau 4-4-4-12. Memoriile DDR III Una dintre cele mai importante mbuntiri ale memoriilor DDR III este abilitatea acestora de a transfera date de I/E la o vitez de opt ori mai mare dect viteza de lucru a celulelor de memorie din care este alctuit, fcnd astfel posibil creterea frecvenei magistralei. Ca o consecin a acestei mbuntiri este creterea proporional a latenelor. Latenele tipice ale unei memorii DDR III sunt 7-7-7-15. Trebuie ns neles faptul c, dei latenele sunt exprimate prin cifre mai mari (care reprezint ntrzierea exprimat n cicli de ceas) totui intervalul de timp real este egal sau chiar mai mic, deoarece perioada ciclurilor este mai mic. Tensiunea de alimentare a memoriilor DDR III este de 1.5 V, fapt care asigur scderea puterii disipate cu 30%. Memoriile Rambus DRAM La nceputul anilor '90, Firma Rambus a dezvoltat o tehnologie de memorie numit Rambus DRAM (RDRAM), care utilizeaz transmiterea unor pachete de adrese i date pe o magistral special cu tensiuni reduse. Intel a sprijinit firma Rambus pentru dezvoltarea unei variante a tehnologiei RDRAM pentru calculatoarele personale, aceast variant fiind numit Direct Rambus DRAM (DRDRAM). In timp ce magistralele actuale de memorie sunt de 64 bii, memoriile RDRAM i DRDRAM utilizeaz o magistral de 8, respectiv 16 bii. Aceast magistral, numit canal Rambus, este utilizat nu numai ca un set de conexiuni ci i ca un canal inteligent de comunicaie. Dei acest canal i portul de memorie sunt de numai 8 sau 16 bii, rata de transfer este ridicat, de pn la 500 MB/s pentru memoria RDRAM i 1,6 GB/s pentru memoria DRDRAM. Prin utilizarea mai multor canale Rambus, rata de transfer poate fi crescut. Spre deosebire de circuitele de memorie SDRAM, care sunt conectate n paralel la magistrala de 64 de bii, circuitele de memorie RDRAM sunt conectate serial pe magistrala Rambus. Elementele principale ale unui sistem de memorie Rambus sunt prezentate n figura 8.25. Aceste elemente sunt canalul Rambus, controlerul de memorie, interfaa Rambus i circuitele RDRAM.

Fig. 8. 25 Funcionarea la o vitez ridicat a canalului Rambus se obine printr-o combinaie de mai multe tehnici. Acestea cuprind: ncapsularea dens, linii de transmisie de calitate ridicat, protocol electric care utilizeaz tensiuni reduse, topologia canalului, semnale de ceas difereniale, sincronizarea precis, utilizarea unor conexiuni scurte. Magistrala Rambus funcioneaz sincron. Utilizarea memoriilor RDRAM nu este prea extins din cauza costurilor mai ridicate ale acestora n comparaie cu memoriile DDR DRAM i a faptului c tehnologia de fabricaie este proprietate a firmei Rambus. Proiectul IRAM IRAM (Intelligent RAM) este denumirea unui proiect realizat la Universitatea Berkeley, constnd dintr-un procesor i o memorie DRAM. Procesorul este realizat utiliznd tehnologia de fabricaie al memoriilor i nu cel convenional al logicii digitale. Motivul pentru plasarea procesorului n cadrul memoriei DRAM este c tehnologia DRAM, care utilizeaz structuri 3D pentru a reduce dimensiunea celulei, permite n practic o densitate de aproximativ 20 de ori mai ridicat dect a circuitelor digitale. Dezvoltarea tehnologiei IRAM se bazeaz pe mai multe observaii asupra arhitecturilor actuale ale calculatoarelor. Una dintre acestea este creterea decalajului dintre performanele procesoarelor i ale memoriilor. In timp ce performanele procesoarelor cresc cu o rat de 60% pe an, timpul de acces al memoriei DRAM se mbuntete cu o rat de doar 7% pe an. Pentru a compensa acest decalaj, se introduce de obicei o ierarhie de memorii cache. Prin aceasta, n cazul cel mai defavorabil, latena memoriei devine chiar mai ridicat. Pentru a realiza aceast ierarhie de memorii, o poriune important a spaiului din cadrul procesoarelor este dedicat memoriilor cache statice (SRAM). De exemplu, aproape jumtate din spaiul procesorului Alpha 21164 este ocupat de memorii cache. Aceste memorii conin doar copii redundante ale informaiilor, copii care nu ar fi necesare dac viteza memoriei principale ar fi suficient. In afar de aceasta, anumite aplicaii prezint o localitate redus a accesului, rezultnd performane reduse chiar cu memorii cache de dimensiuni mari. Soluia tehnologiei IRAM const n utilizarea spaiului din cadrul capsulei pentru o memorie DRAM n locul memoriilor cache SRAM. Aceast memorie poate fi tratat ca memorie principal i nu ca o memorie care conine o copie

redundant. In multe cazuri, ntreaga aplicaie poate fi ncrcat n memoria din cadrul capsulei. Primul circuit realizar de echipa de cercettori de la Universitatea Berkeley se numete V-IRAM1 i utilizeaz o arhitectur multiprocesor vectorial, care permite executarea unui numr mare de operaii n paralel.

Cap. 9. SISTEME PIPELINE Tehnica pipeline reprezint o metod de mbuntire a performanelor unui procesor sau a unei uniti aritmetice. Aceast metod permite execuia simultan a mai multor instruciuni sau operaii. Tehnica pipeline este transparent pentru programator; ea utilizeaz paralelismul prin suprapunerea fazelor de execuie ale instruciunilor sau a etapelor de execuie ale unei operaii aritmetice. Un sistem pipeline poate fi comparat cu o linie de asamblare a unui produs, n care exist posturi de lucru specializate pentru o anumit operaie, iar la captul benzii este obinut produsul final. 9.1. Structura unui sistem pipeline Tehnica pipeline descompune un proces secvenial n mai multe subprocese, care sunt executate de uniti sau etaje diferite. Un etaj execut un subproces i produce un rezultat intermediar, care reprezint o intrare pentru etajul urmtor. Rezultatul final este obinut numai dup ce toate subprocesele au trecut prin ntregul sistem pipeline. Figura 9.1 ilustreaz structura de baz a unui sistem pipeline cu m etaje.

Unitate de Control

Date de intrare

Date de ieire

R1

C1

R2

C2

Rm
m

Cm

Etaj E1

Etaj E2

Etaj Em

Fig. 9.1 Un etaj Ei const dintr-un registru de intrare sau latch Ri i un circuit de prelucrare Ci , care poate fi secvenial, combinaional sau inteligent. Registrele pstreaz rezultatele pariale pe msur ce acestea se deplaseaz prin sistemul pipeline. Un semnal comun de ceas determin ca registrele s i schimbe starea n mod sincron. In fiecare ciclu de ceas, fiecare etaj transfer rezultatele sale pariale la urmtorul etaj i calculeaz un nou set de rezultate. Perioada semnalului de ceas trebuie s fie suficient de mare pentru ca etajul cel mai lent s termine execuia operaiei sale. In plus, trebuie s existe un timp suficient pentru ca un registru s memoreze datele sale de intrare. Deci, perioada

ceasului trebuie s fie mai mare dect ntrzierea maxim a etajului cel mai lent, plus timpul necesar pentru memorarea datelor ntr-un registru. Avantajul acestei tehnici const n faptul c un sistem pipeline cu m etaje poate procesa simultan pn la m seturi independente de subprocese. Aceste subprocese se deplaseaz prin sistemul pipeline etaj cu etaj, astfel nct atunci cnd sistemul pipeline este plin, sunt executate n mod concurent m operaii separate, fiecare ntr-un etaj diferit. Mai mult, un nou rezultat final este generat la ieirea sistemului pipeline n fiecare ciclu de ceas. 9.2. Indicatori de performan ai sistemelor pipeline Prin suprapunerea fazelor de execuie ale unui proces secvenial pentru diferite taskuri de intrare (instruciuni sau operaii), se obine un timp teoretic de execuie egal cu: T pipe = m P + (n 1) P (9.1) unde m este numrul de etaje, n este numrul taskurilor de intrare, iar P este perioada ceasului. Termenul m P , numit ntrziere sau laten a sistemului pipeline, este timpul necesar pentru ca primul task de intrare s parcurg toate etajele, iar termenul (n 1) P este timpul necesar pentru urmtoarele taskuri. Dup ntrzierea necesar parcurgerii tuturor etajelor, se va genera o ieire n fiecare ciclu de ceas. Ieirile vor fi generate la intervale de timp care depind de ntrzierea introdus de etajul cel mai lent. Chiar i cu aceast limitare, prin tehnica pipeline se pot mbunti performanele n mod semnificativ fa de execuia obinuit, n care este necesar terminarea unui task nainte de nceperea execuiei unui alt task. Atunci cnd n are o valoare mare, un sistem pipeline poate genera ieirile de aproximativ m ori mai rapid fa de un sistem care nu utilizeaz aceast tehnic. Pe de alt parte, fr suprapunerea fazelor de execuie procesul secvenial anterior necesit un timp de execuie egal cu:
m

Tsec = n i
i =1

(9.2)

unde i , este ntrzierea introdus de etajul i . Perioada ceasului P trebuie s ndeplineasc urmtoarea condiie P i + t i unde t i este timpul necesar pentru memorarea rezultatului n registrul i. In cazul ideal n care toate etajele au ntrzieri egale, i = pentru i = 1,..., m , Tsec poate fi scris ca: Tsec = n m (9.3) Dac se ignor timpul necesar memorrii ntr-un registru ( ti = 0 ), atunci P= i se obine: Tsec = n m P (9.4)

Creterea vitezei de calcul ( S ) poate fi definit ca: T nmP nm S = sec = = T pipe m P + (n 1) P m + (n 1)

(9.5)

Valoarea S se apropie de m atunci cnd n . Deci, creterea maxim a vitezei unui sistem pipeline cu m etaje fa de un sistem care nu utilizeaz tehnica pipeline este aproximativ m . Cu alte cuvinte, atunci cnd n (numrul taskurilor de intrare) este foarte mare, un sistem pipeline poate genera ieirile de aproximativ m ori mai rapid fa de un sistem obinuit. Pe lng creterea de vitez, se utilizeaz adesea ali doi factori pentru determinarea performanelor unui sistem pipeline; acestea sunt eficiena i rata de transfer. Eficiena E a unui sistem pipeline cu m etaje, care reprezint creterea vitezei pe etaj, este definit ca: S nm n 1 E= = = (9.6) m (m + n 1) m m + n 1 Eficiena E , se apropie de valoarea sa maxim 1 atunci cnd n . Atunci cnd n = 1 , E va avea valoarea 1 , care este valoarea minim care se m poate obine. Rata de transfer R a unui sistem pipeline este definit ca numrul taskurilor de intrare pe care le poate prelucra n unitatea de timp. Pentru un sistem pipeline cu m etaje, rata de transfer R este definit ca: n n R= = T pipe m P + (n 1) P mprind att numrtorul ct i numitorul cu P se obine n 1 E S R= = = (9.7) m + n 1 P P m P Atunci cnd n , rata R se apropie de valoarea maxim care este un task pe ciclu de ceas. 9.3. Tipuri de sisteme pipeline Sistemele pipeline sunt mprite, de obicei, n dou categorii: de instruciuni i aritmetice. Un sistem pipeline de instruciuni este realizat pentru a mbunti performanele unui calculator prin suprapunerea eficient a fazelor de execuie ale instruciunilor. Sistemele pipeline aritmetice implementeaz anumite funcii ale unitii aritmetice i logice cum ar fi adunarea, nmulirea i mprirea n virgul mobil. Un sistem pipeline din oricare categorie poate fi proiectat n dou moduri: static sau dinamic. Un sistem pipeline static poate executa un singur tip de operaie la un moment dat. Operaia executat de un asemenea sistem poate fi modificat numai dup ce acesta este golit, deci ultimele date de intrare au trecut prin toate etajele. De exemplu, considerm un sistem pipeline static care poate executa

operaiile de adunare i nmulire. De fiecare dat cnd sistemul pipeline comut de la o operaie de nmulire la una de adunare, acesta trebuie golit i trebuie setat pentru noua operaie. Performanele sistemelor pipeline statice vor fi reduse n mod semnificativ dac tipul operaiilor se modific n mod frecvent. Un sistem pipeline dinamic poate executa mai multe tipuri de operaii la un moment dat. Pentru a executa o anumit operaie asupra unor date de intrare, datele trebuie s parcurg anumite etaje ntr-o anumit ordine. De exemplu, figura 9.2 prezint un sistem pipeline dinamic cu trei etaje, care poate executa adunarea i nmulirea n acelai timp asupra unor date diferite. Pentru execuia operaiei de nmulire, datele de intrare trebuie s parcurg etajele 1, 2 i 3; pentru execuia operaiei de adunare, datele trebuie s parcurg numai etajele 1 i 3.
Intrare Registru Etaj 1 Circuit de prelucrare

Registru Etaj 2 Circuit de prelucrare

Registru Etaj 3 Circuit de prelucrare Ieire

Fig. 9.2 Astfel, prima etap a operaiei de adunare poate fi executat asupra datelor de intrare D1 n etajul 1 i n acelai timp, ultima etap a operaiei de nmulire poate fi executat n etajul 3 asupra unor date de intrare diferite D2 . Intervalul de timp dintre aplicarea datelor D1 i D2 la intrrile sistemului pipeline trebuie s fie astfel ales nct aceste date s nu ajung n etajul 3 n acelai timp; n caz contrar, apare o coliziune. In general, n cazul sistemelor pipeline dinamice mecanismul care controleaz momentul n care datele trebuie aplicate

la intrare este mult mai complex dect n cazul sistemelor statice. 9.4. Sisteme pipeline de instruciuni 9.4.1. Principi In cazul unei arhitecturi von Neumann, procesul de execuie a instruciunilor implic mai multe faze. Mai nti, unitatea de control a procesorului ncarc instruciunea din memoria cache (sau din memoria principal). Apoi, unitatea de control decodific instruciunea pentru a determina tipul operaiei care trebuie executat. Dac operaia necesit operanzi, unitatea de control determin adresa fiecrui operand i le ncarc pe acestea din memoria cache (sau din memoria principal). Apoi, operaia este executat i, n sfrit, rezultatul este memorat n locaia specificat. Un sistem pipeline de instruciuni mbuntete performanele unui procesor prin suprapunerea prelucrrii mai multor instruciuni diferite. Aceasta se realizeaz prin divizarea procesului de execuie a instruciunilor n mai multe faze. Un sistem pipeline de instruciuni este n mod normal transparent programatorilor i este gestionat automat de ctre unitatea de control a UCP i de ctre compilatoare. In general execuia unei instruciuni se poate descompune n urmtoarele operaii simple: 1. Extragerea instruciunii (IF - Instruction Fetch): Citirea instruciunii din memoria cache (sau din memoria principal). 2. Decodificarea instruciunii (ID - Instruction Decoding): Identificarea operaiei care trebuie executat. 3. ncrcarea operanzilor (OF - Operand Fetch): Adresarea i citirea operanzilor necesari. 4. Execuia instruciunii (EX - Execution): Execuia operaiei specificate asupra operanzilor. 5. Scrierea rezultatelor (WB - Write-Back): Actualizarea operanzilor destinaie. Figura 9.4 prezint un sistem pipeline de instruciuni cu cinci etaje fiecare etaj avnd ca obiectiv executarea uneia dintre aceste operaii. Un sistem pipeline de instruciuni suprapune operaiile executate de aceste etaje asupra unor instruciuni diferite pentru a obine un timp total de execuie mult mai redus pentru o secven de instruciuni.

Registru Etaj 1 Extragere instruciune IF

Registru Etaj 2 Decodificare instruciune ID

Registru Etaj 3 ncrcare operanzi OF Registre, memorii cache, memorie principala

Registru Etaj 4 Execuie EX

Registru Etaj 5 Scriere rezultate WB

Fig. 9.4 Ca un exemplu, se consider figura 9.5, care prezint execuia unei secvene de patru instruciuni. Cicluri i1 i2 i3 i4 1 IF 2 ID IF 3 OF ID IF 4 EX OF ID IF Fig. 9.5 In timpul primului ciclu, sau perioad de ceas, instruciunea i1 este ncrcat din memorie. In cel de-al doilea ciclu, instruciunea i1 este decodificat n timp ce instruciunea i2 este ncrcat din memorie. Acest proces continu pn cnd toate instruciunile sunt executate. Ultima instruciune se termin 5 WB EX OF ID WB EX OF WB EX WB 6 7 8

dup opt cicluri de ceas. Presupunnd c perioada ceasului este de P = 2,5 ns , sunt necesare 8 2.5 = 20ns pentru a termina execuia celor patru instruciuni. Timpul total de execuie poate fi determinat i din ecuaia (9.1). Deci T pipe = m P + (n 1) P = 5 2.5 + (4 1) 2.5 = 20ns In cazul n care nu se utilizeaz execuia suprapus, timpul de execuie va fi mult mai ridicat. Utiliznd ecuaia (9.2), rezult: T sec = n m P = 4 5 2.5 = 50ns Dei prin utilizarea tehnicii pipeline crete viteza de execuie a instruciunilor, aceast tehnic poate pune anumite probleme. Unele din aceste probleme i soluiile posibile sunt prezentate n seciunile urmtoare. 9.4.2. Problema indisponibilitii instruciunilor (The fetching problem) In general, furnizarea rapid a instruciunilor pentru un sistem pipeline este costisitoare din punct de vedere al resurselor necesare. O metod simpl pentru mbuntirea gradului de utilizare al unui sistem pipeline este utilizarea bufferelor pentru memorarea instruciunilor i a datelor care vor fi transmise la intrarea sistemului. Gradul de utilizare al unui sistem pipeline este definit ca raportul ntre timpul n care etajele sistemului sunt utilizate i timpul total. Un sistem pipeline este utilizat 100% din timp dac fiecare etaj este utilizat n fiecare ciclu de ceas. In unele situaii, sistemul pipeline trebuie golit i rencrcat, de exemplu, atunci cnd apare o instruciune de salt sau o ntrerupere. Timpul necesar pentru rencrcare poate fi minimizat prin ncrcarea n avans a instruciunilor i a datelor n anumite buffere (prefetch unit), ca de exemplu, n memoria cache din cadrul procesorului, fapt care va permite transferul imediat la intrarea sistemului pipeline. Dac instruciunile i datele necesare execuiei pot fi ncrcate i memorate n buffere nainte ca acestea s fie necesare, sistemul pipeline va avea o surs continu de informaii. Se utilizeaz algoritmi de prencrcare care asigur ca instruciunile potenial necesare s fie disponibile n majoritatea timpului. Prin utilizarea acestor algoritmi, ntrzierile datorit conflictelor de acces la memorie pot fi reduse, deoarece timpul necesar pentru transferul datelor din memorie este semnificativ mai ridicat dect timpul necesar pentru transferul datelor dintr-un buffer. 9.4.3. Problema ntrzierii introduse de etaje (bottleneck problem) Aceast problem se refer la complexitatea operaiilor executate de un etaj al sistemului pipeline. Dac un etaj execut operaii mai complexe fa de alte etaje, timpul necesar pentru terminarea acestor operaii va crete. Ca urmare, perioada ceasului trebuie aleas n funcie de acest timp, ceea ce reduce performanele ntregului sistem. O soluie posibil a acestei probleme este divizarea etajului respectiv n mai multe etaje. O alt soluie este de a se realiza mai multe copii ale acestui etaj, care s execute n paralel respectiva operaie.

Problema emiterii instruciunilor (The issuing problem) Aceast problem apare atunci cnd o instruciune disponibil nu poate fi executat. Cauzele care pot genera o astfel de situaie sunt urmtoarele: - resursa necesar nu este disponibil (hazard structural); - exist o dependen de o instruciune anterioar (hazard de date); - intervenia instruciunilor de salt care modific succesiunea de execuie a instruciunilor (hazardul de control).
9.4.4. Problema hazardului structural Hazardul structural se refer la situaia n care o resurs necesar nu este disponibil pentru execuia instruciunii. Un hazard structural apare ca rezultat al conflictelor la resurse ntre instruciuni. Un tip de hazard structural care poate apare se datoreaz modului de proiectare al unitilor de execuie. Dac o unitate de execuie, care necesit mai multe cicluri de ceas, nu este de tip pipeline i nu exist mai multe uniti de acelai tip, atunci nu se pot lansa n execuie mai multe instruciuni care utilizeaz aceast unitate. Un alt tip de hazard structural care poate apare se datoreaz proiectrii setului de registre. Dac un set de registre nu are mai multe porturi de citire (scriere), atunci operaiile multiple de citire (scriere) nu pot fi executate simultan. De exemplu, n anumite situaii sunt necesare dou operaii de scriere n registre n acelai ciclu de ceas. Aceste operaii nu sunt posibile dac setul de registre are un singur port de scriere. Efectul unui hazard structural poate fi eliminat n mod simplu prin implementarea unitilor de execuie multiple i prin utilizarea unui set de registre cu porturi multiple de citire sau scriere. 9.4.5. Problema hazardului de date 9.4.5.1. Dependene de date Hazardul de date apare atunci cnd exist dependene de date ntre instruciunea curent i o instruciune precedent. In cazul unui procesor care nu utilizeaz tehnica pipeline, instruciunile sunt executate secvenial, iar execuia unei instruciuni este terminat naintea nceperii execuiei urmtoarei instruciuni. Astfel, instruciunile sunt executate n aceeai ordine n care apar n program. Situaia este diferit n cazul unui procesor care utilizeaz tehnica pipeline, la care execuia instruciunilor este suprapus. O instruciune poate fi lansat n execuie i poate fi terminat naintea terminrii instruciunii precedente. Hazardul de date, cunoscut i sub numele de problema dependenei datelor, apare ca rezultat al suprapunerii execuiei (sau schimbrii ordinii de execuie) a instruciunilor ntre care exist dependene de date. Pentru a nelege aceast problem s considerm ntr-un program apare urmtoarea secven de instruciuni: i1 : ADD R2, R3, R4 ; R2=R3+R4 i2 : ADD R5, R2, R1 ; R5=R2+R1

Instruciunea i2 depinde de i1 , deoarece utilizeaz rezultatul instruciunii i1 (coninutul registrului R2) ca o dat de intrare. In figura 9.6 este prezentat execuia celor dou instruciuni n sistemul pipeline considerat. Cicluri i1 i2 1 IF 2 ID IF 3 OF ID 4 EX OF 5 WB EX 6 WB

Fig. 9.6 Dup cum se constat instruciunea i2 ajunge n faza OF nainte ca i1 s treac prin faza WB. Aceast situaie conduce la utilizarea vechiului coninut al registrului R2 pentru calcularea unei noi valori pentru R5 i deci, la un rezultat invalid. Pentru a se obine un rezultat valid, instruciunea i2 nu trebuie s ajung n faza OF pn cnd i1 nu trece prin faza WB. In timpul execuiei problema semnalat poate fi rezolvat n dou moduri (figura 9.7): - execuia fazei OF a instruciunii i2 este ntrziat cu dou cicluri cu ceas sau - lansarea n execuie a instruciunii i2 este ntrziat cu dou cicluri de ceas. In ambele cazuri faza OF a instruciunii i2 este executat dup ce coninutul registrului R2 a fost reactualizat de faza WB a instruciunii i1 . Cicluri i1 i2 Cicluri i1 i2 1 IF 2 ID IF 2 ID 3 OF ID 3 OF 4 EX 4 EX IF Fig. 9.7 Pentru inserarea ntrzierilor, se poate aduga la sistemul pipeline un circuit suplimentar, numit circuit de interblocare (pipeline interlock). Acest circuit detecteaz dependenele ntre date i ntrzie instruciunile dependente pn la rezolvarea conflictului. O alt posibilitate const n rezolvarea acestui tip de hazard n timpul compilrii. Compilatorul detecteaz dependena ntre date i instruciuni, rearanjnd aceste instruciuni astfel nct dependena s nu creeze hazarduri pentru sistem. De exemplu, considerm cele patru instruciuni din figura 9.8. Aceste instruciuni pot fi reordonate astfel nct instruciunile i3 i i4 , care nu sunt dependente de i1 i i2 , sunt inserate ntre acestea din urm. 5 WB 5 WB ID 6 7 EX 7 EX 8 WB 8 WB

OF
6

1 IF

OF

i1 : ADD R2, R3, R4 i2 : ADD R5, R2, R1 i3 : ADD R6, R6, R7 i4 : ADD R8, R8, R7
Cicluri i1 i3 i4 i2 1 IF 2 ID IF 3 OF ID IF

; R2=R3+R4 ; R5=R2+R1 ; R6=R6+R7 ; R8=R8+R7 4 EX OF ID IF Fig. 9.8 5 WB EX OF ID 6 WB EX OF 7 8

WB EX

WB

Dac nu este posibil rearanjarea instruciunilor, pentru a se introduce ntrzieri, compilatorul insereaz instruciuni NOP (No Operation). Exist trei tipuri principale de hazarduri de date: RAW (Read After Write), WAR (Write After Read) i WAW (Write After Write). Numele hazardului indic ordinea de execuie a operaiilor pentru a se obine un rezultat valid; dac aceast ordine nu este respectat, se poate obine un rezultat invalid. Aceste hazarduri sunt explicate n continuare. Se presupune c exist dou instruciuni i1 i i2 , iar i2 trebuie executat dup i1 . RAW. Acest de hazard indic faptul c i2 trebuie s citeasc sursa de date dup ce i1 a scris aceast dat. Dac aceast ordine nu este respectat se produce un rezultat invalid deoarece locaia citit conine o dat eronat. De exemplu, n secvena urmtoare: i1 : ADD R2, R3, R4 ; R2 = R3 + R4 i2 : ADD R5, R2, R1 ; R5 = R2 + R1 se poate obine un rezultat invalid dac i2 citete registrul R2 nainte ca i1 s scrie n acest registru. WAR. Acest hazard indic faptul c i2 trebuie s scrie ntr-o anumit locaie dup ce i1 a citit data coninut n acea locaie. Dac aceast ordine nu este pstrat coninutul acelei locaii de memorie este alterat. De exemplu, n secvena: i1 : ADD R2, R3 , R4 ; R2 = R3 + R4 i2 : ADD R4, R5, R6 ; R4 = R5 + R6 se poate obine un rezultat invalid dac i2 scrie n registrul R4 nainte ca i1 s citeasc acest registru; deci, instruciunea i1 poate utiliza coninutul incorect al registrului R4. WAW. Acest hazard indic faptul c i2 trebuie s scrie ntr-o anumit locaie dup ce i1 a scris n aceeai locaie. De exemplu, n secvena: i1 : ADD R2, R3, R4 ; R2 = R3 + R4

i2 : ADD R2, R5, R6 ; R2 = R5 + R6 valoarea din registrul R2 este recalculat de ctre i2 . Dac ordinea de execuie este inversat, iar i2 scrie n registrul R2 nainte ca i1 s scrie n acest registru, R2 va conine o valoare incorect. Hazardurile de tip WAR i WAW nu pot apare atunci cnd ordinea de execuie a instruciunilor din program este pstrat. O modalitate de a mbunti arhitectura unui sistem pipeline de instruciuni este de a crete gradul de execuie concurent a instruciunilor prin execuia mai multor instruciuni independente de ctre uniti funcionale diferite, ca de exemplu, sumatoare, circuite de nmulire i circuite de mprire. In aceste condiii instruciunile pot fi executate i terminate ntr-o ordine diferit de cea din program. Pentru acest motiv, n astfel de arhitecturi sunt posibile toate tipurile de hazarduri de date. In arhitecturile actuale, dependenele ntre instruciuni (Data Dependancy) sunt verificate n mod static de compilator i/sau n mod dinamic de circuite n timpul execuiei. Prin aceasta se pstreaz ordinea de execuie a instruciunilor ntre care exist dependene, ceea ce asigur obinerea unor rezultate valide. Au fost dezvoltate numeroase tehnici statice de verificare a dependenelor pentru a se utiliza avantajul paralelismului dintr-o bucl. Aceste tehnici pot detecta majoritatea dependenelor. Totui, anumite dependene nu pot fi detectate la compilare. De exemplu, nu este posibil s se determine ntotdeauna adresele efective de memorie utilizate de instruciunile de ncrcare i memorare pentru a rezolva posibilele dependene ntre acestea. In timpul execuiei, adresele efective de memorie vor fi cunoscute i astfel dependenele ntre instruciuni pot fi determinate n mod dinamic. In general, verificarea dinamic a dependenelor are avantajul c poate detecta dependenele care sunt imposibil sau dificil de detectat la compilare. In practic, se utilizeaz adesea o verificare combinat a dependenelor (static i dinamic) pentru a se folosi avantajele ambelor metode. Dou din cele mai des utilizate tehnici pentru verificarea dinamic a dependenelor sunt metoda Tomasulo i metoda tabelei de rezultate (scoreboard). Ideea de baz a acestor metode este utilizarea unui mecanism pentru identificarea disponibilitii operanzilor i a unitilor funcionale n calculele succesive.
9.4.5.2. Metoda Tomasulo Metoda Tomasulo a fost elaborat de R. M. Tomasulo pentru a elimina efectul timpilor mari de acces la memorie la calculatorul IBM Systems/360 Model 91. Aceast metod crete gradul de execuie concurent a instruciunilor cu un efort minim din partea compilatorului sau al programatorului. Metoda Tomasulo este utilizat n mai multe variante pentru planificarea dinamic a execuiei instruciunilor la procesoarele superscalare recente. In cazul acestei metode, se asociaz fiecrui registru de date a unitii aritmetice un bit busy i

un cmp de marcaj (Tag). Bitul busy al unui anumit registru este setat atunci cnd o instruciune lansat n execuie desemneaz acest registru ca o destinaie. Acest bit este resetat atunci cnd rezultatul execuiei este scris n registru. Cmpul de marcajul al unui registru identific unitatea a crei rezultat urmeaz s fie nscris n registru. Fiecare unitate funcional din cadrul unitii aritmetice poate avea mai multe seturi de registre de intrare. In exemplul considerat n figura 9.9 acestea au dou seturi de registre (sursa_1 i sursa_2). Fiecare set este numit staie de rezervare, fiind utilizat pentru pstrarea operanzilor unei instruciuni lansate n execuie. Un cmp de marcaj este, de asemenea, asociat cu fiecare registru al unei staii de rezervare. In plus, o magistral comun de date (MCD) conecteaz ieirile unitilor funcionale cu intrrile staiilor de rezervare i cu registrele. MCD face posibil ca rezultatul unei operaii s devin disponibil pentru Fig. 9.9

toate unitile funcionale, fr nscrierea prealabil ntr-un registru. Aceasta permite furnizarea direct a unei copii a rezultatului la toate unitile funcionale care ateapt acest rezultat. Cu alte cuvinte, o instruciune aflat n curs de execuie poate avea acces la rezultatul unei instruciuni precedente nainte ca rezultatul instruciunii precedente s fie nscris n registrul destinaie. Figura 9.9 prezint o arhitectur simpl pentru aceast metod. In aceast arhitectur, exist nou uniti care comunic printr-o magistral comun de date. Aceste uniti sunt cinci registre de date, dou staii de rezervare pentru adunare A1 i A2 i dou staii de rezervare pentru nmulire M 1 i M 2 . Codurile 1 pn la 5 sunt asociate cu registrele din setul de registre, 6 i 7 sunt asociate cu staiile de rezervare pentru adunare, iar 8 i 9 sunt asociate cu staiile de rezervare pentru nmulire. Ca exemplu, considerm execuia urmtoarelor dou instruciuni:

i1 : ADD R2, R3, R4 ; R2 = R3 + R4 i2 : ADD R2, R2, R1 ; R2 = R2 + R1 Secvena ncepe cu execuia instruciunii i1 . Coninutul registrelor R3 i R4 este ncrcat n registrele sursa_1, respectiv sursa_2 ale staiei de rezervare A1 iar cmpul de marcaje al registrului R2 este setat la 6, care este eticheta staiei A1 . Dup nscrierea operanzilor instruciunii i1 n staia de rezervare pentru adunare A1 bitul busy al registrului R2 este setat la 1. In continuare, unitatea de adunare ncepe execuia operaiei specificate de i1 . Simultan, n timpul procesului de ncrcare a operanzilor pentru instruciunea i2 , devine cunoscut faptul c registrul R2 nu poate fi utilizat deoarece instruciunea i2 depinde de rezultatul instruciunii i1 . Pentru a permite nceperea execuiei instruciunii i2 ct mai rapid posibil, coninutul cmpului de marcaje al registrului R2 (care este n acest moment 6) este nscris n cmpul de marcaje al registrului sursa_1 al staiei de rezervare A2 . In acelai moment, marcajul registrului R2 este modificat la 7, ceea ce nseamn c rezultatul staiei A2 trebuie transferat n R2. De asemenea, coninutul registrului R1 este ncrcat n registrul sursa_2 al staiei de rezervare A2 . La terminarea operaiei specificate de i1 i producerea rezultatului, unitatea de adunare transmite un semnal de cerere ctre MCD pentru preluarea rezultatului. Atunci cnd MCD achit cererea, unitatea de adunare transmite rezultatul pe magistral, de unde rezultatul este transmis mpreun cu eticheta staiei A1 (cu valoarea 6) tuturor unitilor. Fiecare staie de rezervare, n timp ce ateapt datele, compar coninutul cmpului de marcaje ale registrelor sale cu eticheta de pe magistral. Dac acestea sunt identice, coninutul registrului respectiv este actualizat i bitul su busy este resetat. In acest caz, datele sunt copiate n registrul sursa_1 al staiei A2 . ncepe apoi execuia operaiei de adunare cu operanzii staiei A2 . Dup efectuarea adunrii specificate de i2 pe magistral este depus rezultatul adunrii dintre R2 i R1, mpreun cu eticheta staiei de rezervare A2 (care este 7). Acest rezultat va fi preluat de registrul R2 care conine n cmpul de marcaj valoarea 7. Dup cum rezult din exemplul precedent, conceptele principale ale metodei Tomasulo sunt staiile de rezervare, magistrala comun de date i utilizarea marcajelor. Staiile de rezervare au rolul de a atepta operanzii i astfel, elibereaz unitile funcionale de aceast sarcin. Magistrala comun de date utilizeaz staiile de rezervare furniznd acestora rezultatul unei operaii direct de la ieirea unei uniti funcionale. Marcajele asigur pstrarea dependenelor ntre operaiile succesive, favoriznd n acelai timp concurena. Dei circuitele suplimentare necesare pentru implementarea metodei Tomasulo favorizeaz execuia concurent a instruciunilor, programatorul i/sau compilatorul au o influen substanial asupra gradului de concuren. Aceasta se ilustreaz prin urmtoarele dou secvene care calculeaz expresia

(A * B) + (C + D). O posibil secven de instruciuni care rezolv aceast problem este: LOAD R1, A LOAD R2, B LOAD R3, C LOAD R4, D MUL R5, R1, R2 ; R5 = A * B ADD R5, R5, R3 ; R5 = (A * B) +C ADD R4, R5, R4 ; R4 = (A *B) + C + D O alternativ la aceast secven, care permite un grad mai mare de concuren, este urmtoarea: LOAD R1, A LOAD R2, B LOAD R3, C LOAD R4, D MUL R5, R1, R2 ; R5 = A * B ADD R4, R3, R4 ; R4 = C + D ADD R4, R5, R4 ; R4 = A * B + C + D In cea de-a doua secven, instruciunea de nmulire i prima instruciune de adunare pot fi executate simultan, ceea ce nu este posibil n cazul primei secvene. In practic, de multe ori se utilizeaz o combinaie a tehnicilor hardware i software pentru creterea gradului de concuren.

9.4.5.3. Metoda tabelei de rezultate (Scoreboard) Metoda tabelei de rezultate a fost utilizat pentru prima dat la calculatorul de nalt performan CDC 6600, la care uniti funcionale multiple permit terminarea execuiei instruciunilor ntr-o ordine diferit de cea n care apar n program. Aceast metod pstreaz informaii despre starea fiecrei instruciuni lansate n execuie, fiecare registru i fiecare unitate funcional, n anumite buffere care reprezint tabela de rezultate. Prin considerarea unui instantaneu al tabelei de rezultate, se poate determina dac trebuie s se atepte pentru noua instruciune. Dac ateptarea nu este necesar, unitatea funcional corespunztoare ncepe imediat execuia instruciunii. Dac trebuie s se atepte (de exemplu, unul din operanzii de intrare nu este nc disponibil), execuia noii instruciuni este ntrziat. O tabel de rezultate este fi format din trei tabele: starea instruciunilor, starea unitilor funcionale i starea registrelor destinaie. Figura 9.10 reprezint un instantaneu al coninutului acestor tabele pentru urmtorul program care calculeaz expresia C+D+A*B: LOAD LOAD LOAD LOAD MUL ADD ADD
Instruciune LOAD R1, A LOAD R2, B LOAD R3, C LOAD R4, D MUL R5, R1, R2 ADD R2, R3, R4 ADD R2, R2, R5

R1, A R2, B R3, C R4, D R5, R1, R2 R2, R3, R4 R2, R2, R5
Lansat Da Da Da Da Da Da Faza OF terminat Da Da Da Da Da

; R5 = A B ; R2 = C + D ; R3 = R2 + R5 = C + D + A * B
Faza EX terminat Da Da Da Da Faza WB terminat Da Da Da

Starea instruciunilor

Starea unitilor funcionale


ID Nume unitate Ocupat Unitate 1 2 3 4 LOAD/STORE nmulire Adunare_1 Adunare_2 Da Da Da Nu Registru destinaie R4 R5 R2 R1 R3 Da Da R2 R4 Da Nu Registre surs RS1 Liber Rs2 Liber

Starea registrelor destinaie


R1 ID unitate R2 3 R3 R4 1 R5 2 R6

Fig. 9.10 Tabela de stare a instruciunilor arat dac o instruciune este sau nu lansat n execuie. Dac o instruciune este lansat n execuie, tabela arat n care faz de execuie se afl instruciunea. Dup ce o instruciune este ncrcat din memorie i decodificat, se va ncerca lansarea execuiei acesteia utiliznd unitatea funcional corespunztoare. O instruciune va fi lansat n execuie dac unitatea funcional este disponibil i nu exist alt instruciune activ care utilizeaz acelai registru destinaie; n caz contrar, lansarea este ntrziat. Cu alte cuvinte, o instruciune este lansat n execuie atunci cnd nu exist hazarduri structurale i hazarduri WAW. Atunci cnd exist asemenea hazarduri, lansarea execuiei acestei instruciuni i a instruciunilor urmtoare este ntrziat pn cnd hazardurile sunt eliminate. In acest fel, instruciunile dependente sunt lansate n execuie n ordinea n care apar n program, n timp ce instruciunile independente pot fi executate ntr-o ordine diferit. Tabela de stare a unitilor funcionale arat dac o unitate funcional este ocupat sau nu. O unitate funcional ocupat nseamn c execuia unei instruciuni de ctre aceast unitate nu a fost nc terminat. Pentru o unitate ocupat, tabela identific de asemenea registrul destinaie i disponibilitatea registrelor surs. Un registru surs al unei uniti este disponibil dac nu apare ca destinaie pentru nici o alt unitate anterioar. Tabela de stare a registrelor destinaie indic destinaia registrelor care nu au fost nc nscrise. Pentru fiecare din aceste registre se identific unitatea funcional activ care va executa scrierea n registru. In timpul fazei de extragere a operanzilor, tabelele sunt monitorizate pentru a determina dac registrele surs sunt disponibile pentru a fi citite de ctre o unitate funcional activ. Dac nici unul din registrele surs nu este utilizat ca registru destinaie de ctre alte uniti funcionale active, unitatea citete operanzii din aceste registre i ncepe execuia operaiei. Dup terminarea execuiei, tabela de rezultate testeaz dac exist hazarduri WAR nainte de a permite scrierea rezultatului n registrul destinaie. Dac nu exist hazarduri WAR, tabela de rezultate indic unitii funcionale s scrie rezultatul n registrul destinaie. In figura 9.10, tabelele indic faptul c execuia primelor trei instruciuni LOAD a fost terminat i operanzii acestora au fost nscrii n registrul destinaie. Ultima instruciune LOAD a fost lansat n execuie de ctre unitatea LOAD/STORE (unitatea 1). La aceast instruciune, s-a terminat extragerea operandului, dar nu s-a nscris nc operandul n registrul R4. Unitatea de nmulire execut instruciunea MUL, iar prima instruciune ADD este transmis

unitii Adunare_1. Aceast unitate ateapt pentru ca registrul R4 s fie nscris de ctre unitatea LOAD/STORE nainte de a ncepe execuia. Acest lucru este necesar deoarece exist un hazard RAW ntre ultima instruciune LOAD i prima instruciune ADD. In acest moment, a doua instruciune ADD nu poate fi lansat n execuie, deoarece utilizeaz registrul R2 ca registru surs i destinaie. Registrul R2 este ocupat n acest moment cu prima instruciune ADD. Atunci cnd registrul R4 este nscris de unitatea LOAD/STORE, unitatea Adunare_1 va ncepe execuia. Ulterior coninutul tabelei de rezultate se modific. Dup cum se ilustreaz n figura 9.11, dac unitatea LOAD/STORE (unitatea 1) a terminat execuia (a nscris n R4 valoarea variabilei D), unitatea Adunare_1 poate termina faza de ncrcare a operanzilor i ncepe faza de execuie. Dup terminarea execuiei rezultatul poate fi nscris n registrul R2 deoarece unitatea de nmulire a terminat faza de citire a operanzilor i este acum n faza de execuie. A doua instruciune ADD va fi transmis acum unitii Adunare_2. Starea instruciunilor
Instruciune LOAD R1, A LOAD R2, B LOAD R3, C LOAD R4, D MUL R5, R1, R2 ADD R2, R3, R4 ADD R2, R2, R5 Lansat Da Da Da Da Da Da Da Faza OF terminat Da Da Da Da Da Da Faza EX terminat Da Da Da Da Da Da Faza WB terminat Da Da Da Da Da

Starea unitilor funcionale


ID unitate 1 2 3 4 Nume unitate LOAD/STOR E nmulire Adunare_1 Adunare_2 Ocupat Nu Da NU Da R5 R2 R1 R2 Da Da R2 R5 Da Nu Registre surs Registru destinaie Rd Rs Liber Rs Liber 1 2

Starea registrelor destinaie


R1 ID unitate R2 4 R3 R4 R5 2 R6

Fig. 9.11 Ct timp unitatea de nmulire nu a citit coninutul registrului R2 unitii Adunare_1 nu i se va permite scrierea rezultatului n registrul R2; aceasta deoarece exist un hazard WAR ntre instruciunea MUL i prima instruciune ADD.

Componenta principal n cazul metodei tabelei de rezultate este tabela de stare a registrelor destinaie. Aceast tabel este utilizat pentru a soluiona hazardurile de date ntre instruciuni. De fiecare dat cnd o instruciune este lansat n execuie, registrul destinaie al instruciunii este marcat ca fiind ocupat. Registrul destinaie rmne ocupat pn cnd execuia instruciunii este terminat. Atunci cnd se pregtete lansarea unei noi instruciuni, sunt testai operanzii acesteia pentru a nu exista conflicte ntre registre cu instruciunile precedente a cror execuie nu a fost terminat. 9.4.6. Problema hazardului de control Hazardul de control se refer la situaia n care o anumit instruciune, cum ar fi o instruciune de salt, modific fluxul execuiei programului. 9.4.6.1. Instruciuni de salt In orice set de instruciuni, salturile permit modificarea ordinii secveniale de execuie a instruciunilor. In general, n jur de 20 - 30% din totalul instruciunilor dintr-un program sunt salturi. Pentru acest motiv, instruciunile de salt executate de un sistem pipeline pot reduce n mod semnificativ rata de prelucrare. Ori de cte ori un salt este executat, trebuie s se ncarce o nou adres n contorul de program, ceea ce poate invalida toate instruciunile a cror execuie a nceput sau cele care au fost prencrcate ntr-un buffer. Aceast golire a etajelor pipeline la fiecare salt reduce performanele sistemului. De notat c un salt condiionat, care nu este executat permite continuarea execuiei secveniale a instruciunilor, deci aceast problem apare numai n cazul n care saltul este executat. In general, instruciunile de salt se pot clasifica n trei categorii: 1) Salturi necondiionate; 2) Salturi condiionale; 3) Bucle. Un salt necondiionat modific ntotdeauna ordinea secvenial de execuie i, n loc de a incrementa contorul de program, ncarc adresa destinaiei saltului n acesta. Un salt condiionat ncarc adresa destinaiei n contorul de program numai dac o anumit condiie, bazat pe starea unor indicatori de condiii, este ndeplinit. In caz contrar, contorul de program este incrementat ca de obicei. Cu alte cuvinte, un salt condiionat selecteaz o cale a instruciunilor pe baza unei condiii. In cazul n care condiia este ndeplinit, aceast cale ncepe de la adresa destinaiei saltului i este numit cale destinaie. In caz contrar, aceast cale ncepe de la urmtoarea instruciune i este numit cale secvenial. In sfrit, o instruciune de buclare determin de obicei saltul la nceputul buclei, care este executat de un anumit numr de ori, fix sau variabil. Dintre aceste tipuri de salturi, salturile condiionate sunt cel mai dificil de gestionat. Ca un exemplu, considerm urmtoarea secven de instruciuni:

i1 i2 (salt condiionat la ik ) i3 : ik (destinaie) ik +1

Figura 9.12 prezint execuia acestei secvene de instruciuni ntr-un sistem pipeline atunci cnd se selecteaz calea destinaie. In aceast figur, c indic penalizarea datorit saltului, reprezentnd numrul de cicluri pierdute atunci cnd este selectat calea destinaie.
C

Cicluri i1 i2 i3 i4 i5 ik ik+1

1 IF

2 ID IF

3 OF ID IF

4 EX OF ID IF

5 6 WB EX WB OF EX ID OF IF ID IF

10

11

ID IF

OF ID

EX OF

WB EX

WB

Fig. 9.12 Pentru a arta efectul penalizrii datorit saltului asupra performanelor globale ale sistemului pipeline, trebuie s se determine numrul mediu de cicluri pe instruciune. Fie t med numrul mediu de cicluri necesare pentru execuia unei instruciuni. Acest numr poate fi exprimat ca: t med = p s t s + (1 p s ) t n (9.8) unde p s indic probabilitatea ca o anumit instruciune s fie o instruciune de salt, t s reprezint numrul mediu de cicluri pentru o instruciune de salt, iar t n reprezint numrul mediu de cicluri pentru o instruciune diferit de una de salt. Numrul mediu de cicluri pentru o instruciune de salt poate fi determinat considernd dou cazuri. Dac se alege calea destinaie, sunt necesare 1 + c cicluri pentru execuie; n caz contrar, nu exist penalizare datorit saltului i este necesar un singur ciclu. Deci: t s = pd (1 + c) + (1 pd )(1) (9.9) unde pd indic probabilitatea s fie aleas calea destinaie d . Numrul mediu de cicluri pentru o instruciune diferit de una de salt este 1 ( t n = 1). Dup ntrzierea iniial, se termin execuia unei instruciuni diferite de una de salt n fiecare ciclu. Deci:

t med = p s [ pd (1 + c) + (1 p d )(1)] + (1 p s ) (1) = 1 + p s pd c (9.10) Dup analizarea a numeroase cazuri practice, Lee i Smith au artat c valoarea medie a probabilitii p s este cuprins ntre 0,1 i 0,3, iar valoarea medie a probabilitii pd este cuprins ntre 0,6 i 0,7. Presupunnd c p s = 0,2 , pd = 0,65 i c = 3 , rezult: t med = 1 + 0,2 0,65 3 = 1,39 (9.11) Cu alte cuvinte, sistemul pipeline opereaz la 100/1,39 = 72% din viteza sa maxim atunci cnd exist instruciuni de salt. Pentru a se reduce efectul salturilor asupra performanelor unui procesor, au fost propuse diferite tehnici. Cele mai cunoscute tehnici sunt predicia salturilor, ntrzierea salturilor i prencrcarea multipl. Aceste tehnici sunt prezentate n continuare.
9.4.6.2. Predicia salturilor In cazul acestei metode, se realizeaz o predicie a rezultatului unei decizii legate de execuia saltului. Pe baza acestei predicii, se alege pentru execuie calea secvenial sau calea destinaie. Dei prin alegerea cii respective se reduce adesea penalizarea datorit saltului, penalizarea poate crete n cazul unei predicii eronate. Exist dou tipuri de predicii, statice i dinamice. In cazul unei predicii statice, se decide naintea execuiei programului prencrcarea instruciunilor dintr-una din cele dou ci. De exemplu, o tehnic simpl este aceea de a presupune ntotdeauna c saltul trebuie executat. Prin aceast tehnic, la ntlnirea unei instruciuni de salt se ncarc n contorul de program adresa de destinaie a saltului. O alt tehnic este de a alege o anumit cale (secvenial sau destinaie) pentru anumite tipuri de salturi i cealalt cale pentru restul tipurilor. In cazul n care alegerea este eronat, sistemul pipeline este golit i se ncarc instruciunile corespunztoare cii corecte. In cazul prediciei dinamice, n timpul execuiei programului procesorul ia o decizie bazat pe informaiile despre salturile executate anterior. Metoda cea mai simpl este predicia dinamic utiliznd un bit, metod implementat de exemplu, la unele procesoare RISC. Aceast metod presupune asignarea unui bit de control p fiecrei instruciuni de salt. Dac la prima execuie se realizeaz saltul, p va avea valoarea 1. In caz contrar p = 0 . La urmtoarea ntlnire a acestei instruciuni se urmeaz calea anterioar. Dac predicia a fost eronat se schimb valoarea bitului de control p . Astfel la urmtoarea execuie se va urma cealalt cale. O metod mai eficient const n a se asocia un contor de n bii fiecrei instruciuni de salt. Aceast metod este numit metoda de predicie bazat pe un contor (counter based branch prediction). In cazul acestei metode, dup ce o instruciune de salt a fost executat pentru prima dat, contorul C al acesteia este setat la o valoare de prag T (10 pentru exemplul din fig. 9.13) dac a fost selectat calea destinaie, sau la valoarea T 1 (01 pentru exemplul din fig.

9.13) dac a fost selectat calea secvenial. In continuare, de fiecare dat cnd instruciunea de salt trebuie executat, dac C T , este selectat calea destinaie; n caz contrar, este selectat calea secvenial. Valoarea contorului C este actualizat dup execuia saltului. In cazul n care calea corect este calea destinaie, contorul este incrementat cu 1; n caz contrar, contorul este decrementat cu 1. Dac C ajunge !a valoarea maxim 2 n 1 , contorul nu mai este incrementat, chiar dac a fost selectat calea destinaie i predicia a fost corect. In mod similar, contorul nu este decrementat la o valoare mai mic de 0. In practic, pentru n i T se alege adesea valoarea 2. Studiile au artat c metodele de predicie cu 2 bii sunt aproape la fel de eficiente ca i metodele care utilizeaz un numr mai mare de bii. Figura 9.13 prezint strile posibile n cazul metodei de predicie cu 2 bii. O alt variant a metodei precedente este de a se modifica predicia numai atunci cnd aceasta a fost eronat de dou ori n mod consecutiv. Figura 9.14 prezint strile posibile n cazul acestei variante.

Fig. 9.13

Fig. 9.14 Este convenabil s se memoreze statisticile salturilor ntr-o tabel numit tabel de istorie a salturilor (branch history table), mpreun cu adresa instruciunii de salt i adresa destinaiei saltului. Pentru accesul rapid, majoritatea procesoarelor plaseaz tabela de istorie a salturilor ntr-o memorie cache de dimensiuni reduse, numit buffer al destinaiei salturilor (BTB - Branch

Target Buffer). De obicei, fiecare intrare a acestei memorii cache pstreaz adresa unei instruciuni de salt, adresa destinaiei saltului i statisticile de predicie (figura 9.15).

Fig. 9.15 Atunci cnd o instruciune de salt este executat pentru prima dat, procesorul aloc o intrare n BTB pentru aceast instruciune. Cererile pentru ncrcarea instruciunilor sunt trimise simultan la memoria cache de instruciuni i la BTB. Dac se gsete o potrivire n BTB, adresa anticipat a destinaiei saltului este citit din tabel. Execuia continu pe calea de instruciuni definit de adresa destinaiei saltului, toate rezultatele fiind considerate speculative pn cnd rezultatul testrii condiiei de salt devine disponibil. Atunci cnd execuia instruciunii de salt este terminat, adresa destinaiei acesteia este actualizat n BTB. Statisticile de predicie ale instruciunii de salt sunt de asemenea actualizate. Metodele de predicie statice necesit de obicei mai puine circuite, dar pot determina creterea complexitii compilatorului. Spre deosebire de acestea, metodele de predicie dinamice determin creterea complexitii circuitelor, dar necesit operaii mai simple n timpul compilrii. In general, prin utilizarea prediciei dinamice se pot obine rezultate mai bune. Predicia dinamic asigur, de asemenea, un grad mai ridicat de compatibilitate a codului obiect, deoarece deciziile sunt luate dup compilare. Pentru a determina efectul prediciei salturilor asupra performanelor, este necesar reevaluarea numrului mediu al ciclurilor de ceas pentru execuia unei instruciuni. Considerm ecuaia (9.8). Exist dou cazuri posibile: calea anticipat este corect sau incorect. In cazul n care calea este anticipat corect, penalizarea este d atunci cnd calea este cea destinaie (figura 9.16(a)) sau 0 atunci cnd calea este cea secvenial. In cazul n care calea este anticipat incorect, penalizarea este c att pentru calea destinaie, ct i pentru cea secvenial (figura 9.12 i figura 9.16(b)). De notat c n figura 9.16(a), adresa cii destinaie este obinut dup faza de decodificare. Atunci cnd se utilizeaz un buffer al destinaiei saltului, adresa destinaiei poate fi obinut n timpul sau dup faza de extragere a instruciunii.

d
Cicluri i1 i2 i3 i4 i5 ik ik+1 1 IF 2 ID IF 3 OF ID IF 4 EX OF 5 6 WB EX WB 7 8 9 10 11

IF

ID IF a

OF ID

EX OF

WB EX

WB

c
7 8 9 10 11

Cicluri i1 i2 i3 i4 i5 ik ik+1

1 IF

2 ID IF

3 OF ID IF

4 EX OF ID IF

5 6 WB EX WB OF EX ID OF IF ID IF

ID IF

OF ID

EX OF

WB EX

WB

b Fig. 9.16 Pe baza acestor observaii, avem: t s = pc [ pd (1 + d ) + (1 pd )(1)] + (1 pc )[ pd (1 + c) + (1 pd )(1 + c)] = pc (1 + pd d ) + (1 pc )(1 + c) (9.13) unde pc este probabilitatea unei predicii corecte. nlocuind acest termen n ecuaia (9.8), obinem: t med = p s [ pc (1 + pd d ) + (1 pc )(1 + c)] + 1 p s )(1) = 1 + p s c p s pc c + p s pc p d d (9.14) Presupunnd c p s = 0,2 , p d = 0,65 , pc = 0,7 , c = 3 , i d = 1 rezult t med = 1,27 (9.15) Deci, sistemul pipeline funcioneaz la 100/1,27 = 78% din viteza sa maxim atunci cnd se utilizeaz predicia salturilor. 9.4.6.3. ntrzierea salturilor ntrzierea salturilor (delayed branching) elimin sau reduce n mod semnificativ efectul penalizrii datorit salturilor. In cazul acestei metode se ncarc i se execut un anumit numr de instruciuni dup instruciunea de salt, indiferent de calea care va fi selectat pentru salt. De exemplu, un procesor cu

o ntrziere a salturilor egal cu k execut urmtoarele k instruciuni secveniale, iar apoi fie continu pe aceeai cale, fie ncepe execuia instruciunilor de la adresa destinaiei saltului. De cte ori este posibil, compilatorul ncearc s plaseze dup instruciunea de salt k instruciuni care sunt independente de instruciunea de salt. Dac nu exist suficiente instruciuni de acest tip, compilatorul va insera instruciuni NOP. Ca un exemplu, considerm urmtoarea secven: i1 : LOAD R1, A i2 : LOAD R2, B i3 : BRZ R2, i7 ; salt la i7 dac R2 = 0 i4 : LOAD R3, C i5 : ADD R4, R2, R3 ; R4 = B + C i6 : MUL R5, R1, R2 ; R5 = A * B i7 : ADD R4, R1, R2 ; R4 = A + B Presupunnd k = 2 , compilatorul modific aceast secven prin mutarea instruciunii i1 i inserarea unei instruciuni NOP dup instruciunea de salt i3 . Secvena modificat este urmtoarea: i2 : LOAD R2, B i3 : BRZ R2, i7 i1 : LOAD R1, A NOP i4 : LOAD R3, C i5 : ADD R4, R2, R3 i6 : MUL R5, R1, R2 i7 : ADD R4, R1, R2 Dup cum se observ din secvena modificat, instruciunea i1 este executat indiferent de rezultatul evalurii saltului. Pentru a nelege efectul de reducere a penalizrii prin utilizarea ntrzierii salturilor ne vom referi la figura 9.16(b). In cazul n care nu se utilizeaz metoda ntrzierii salturilor, atunci cnd predicia sugereaz ca probabil calea secvenial, se ncepe execuie instruciunilor care urmeaz dup instruciunea de salt. Dac, dup execuia instruciunii de salt de constat c predicia a fost eronat, sistemul pipeline se golete pentru a ncepe execuia instruciunilor de pe calea de destinaie. In acest caz cele trei perioade de ceas n care se ncerca execuia instruciunilor de pe calea secvenial au fost irosite. Dac pe cale secvenial sunt introduse instruciuni care sunt independente de instruciunea de salt, n cazul considerat, se continu cu execuia acestora i abia dup finalizarea acelor instruciuni, se trece la execuia instruciunilor de pe calea destinaie. In acest mod nu a fost pierdut nici un ciclu de ceas.

9.4.6.4. Prencrcarea multipl (multiple prefetching) In acest caz, procesorul extrage instruciuni din ambele ci posibile. Dup ce s-a luat decizia despre execuia saltului, calea nedorit este abandonat. Prin extragerea prealabil a instruciunilor din ambele ci posibile, se evit penalizarea datorit extragerii instruciunilor n cazul unei predicii incorecte. Pentru extragerea instruciunilor din ambele ci, se utilizeaz dou buffere. La execuia normal, primul buffer este ncrcat cu instruciuni aflate dup instruciunea de salt. Dac saltul este executat, coninutul primului buffer este invalidat i cel de-al doilea buffer se utilizeaz ca buffer primar, care a fost ncrcat cu instruciuni aflate la adresa destinaiei instruciunii de salt. Aceast metod de extragere dubl asigur un flux constant de instruciuni i date pentru sistemul pipeline i reduce ntrzierile datorate golirii i rencrcrii sistemului pipeline. In concluzie, fiecare din tehnicile prezentate anterior reduce nrutirea ratei de transfer a sistemului pipeline. Alegerea uneia din aceste tehnici pentru un sistem particular depinde de factori ca cerinele ratei de transfer i restriciile de cost. In practic, datorit acestor factori, ntr-un procesor se implementeaz de obicei o combinaie a acestor tehnici.

9.4.7. mbuntirea ratei de transfer O posibilitate de cretere a ratei de transfer a unui sistem pipeline de instruciuni este de a se utiliza paralelismul la nivelul instruciunilor (instructionlevel parallelism - ILP). Acest paralelism rezult dintr-un set de tehnici ale procesorului i compilatorului care mbuntesc performana prin executarea operaiilor independente n paralel. Sistemele bazate pe paralelismul la nivelul instruciunilor preiau un program convenional ntr-un limbaj de nivel nalt scris pentru procesoare secveniale i utilizeaz tehnici statice (ale compilatorului) i dinamice (circuite) pentru a exploata n mod automat paralelismul implicit al programului. Aceste tehnici sunt n mare msur transparente pentru programatorii de aplicaii, spre deosebire de paralelismul tradiional de tip multiprocesor, care necesit ca programatorii s rescrie programele de aplicaii. In prezent, prelucrarea paralel la nivelul instruciunilor rmne singura metod viabil pentru creterea continu a performanelor fr a rescrie n mod fundamental programele de aplicaii. Metodele obinuite pentru a exploata paralelismul la nivelul instruciunilor sunt prelucrarea superscalar, prelucrarea superpipeline i cuvintele foarte lungi de instruciuni (Very Long lnstruction Word VLIW). O metod mai nou este numit EPIC (Explicitly Parallel lnstruction Computing). Fiecare din aceste metode ncearc iniierea mai multor instruciuni n acelai ciclu de ceas. 9.4.7.1. Prelucrarea superscalar Metoda superscalar se bazeaz pe paralelismul spaial, care const n execuia concurent a mai multor operaii n uniti separate de prelucrare. Aceast metod realizeaz multiplicarea execuiei instruciunilor ntr-un ciclu de ceas prin lansarea mai multor instruciuni ctre diferite uniti funcionale. Un procesor superscalar conine uniti multiple de execuie, fiecare din acestea fiind de obicei de tip pipeline, astfel nct acestea constituie un set de sisteme pipeline de instruciuni independente. Unitatea de control a unui procesor superscalar este proiectat pentru a ncrca i a decodifica mai multe instruciuni n mod concurent. Aceasta poate lansa sau expedia pn la k instruciuni simultan ctre diferitele uniti de execuie, unde k poate avea o valoare egal cu ase sau, utiliznd tehnologia actual, mai mare. Necesitatea de a prelucra mai multe instruciuni simultan fr conflicte complic mult proiectarea unitii de control. Figura 9.17 prezint ntr-o form ideal diferenele din punct de vedere al posibilitilor de prelucrare ale instruciunilor ntre trei organizri UCP: un procesor secvenial (care nu este de tip pipeline), un procesor de tip pipeline i un procesor superscalar, fiecare dintre acestea executnd acelai ir de instruciuni I1 , I 2 , I 3 ,... . Presupunnd c fiecare instruciune necesit un numr total de cinci cicluri, putem observa c un singur sistem pipeline (k = 1) cu cinci etaje ofer o cretere a vitezei de 5 ori, n timp ce un sistem superscalar cu dou instruciuni lansate simultan (k = 2) ofer o cretere potenial a vitezei de 10 ori. La nceputul ciclului 15, procesorul

secvenial a terminat numai dou instruciuni, n timp ce procesorul de tip pipeline i cel superscalar au terminat 10, respectiv 20 de instruciuni. Mai mult, procesorul superscalar a nceput prelucrarea instruciunilor I 21 la I 30 .

Fig. 9.17 Dup cum se ilustreaz n figura 9.17, prezena a k uniti de execuie de tip pipeline cu m etaje permite unui UCP superscalar s ating factori de cretere a vitezei care se apropie de k m , comparativ cu un UCP care nu dispune de paralelism la nivelul instruciunilor. Ocuparea a k sisteme pipeline necesit ca UCP s ncarce cel puin k instruciuni n fiecare ciclu de ceas. Volumul ridicat al traficului de instruciuni de la memoria de program la UCP necesit ca sistemul s dispun de o memorie cache rapid i de dimensiuni

mari, adesea sub forma unei memorii cache de instruciuni (I-cache) pentru pstrarea programului, completat cu o memorie cache de date (D-cache) pentru pstrarea operanzilor. Pentru extragerea instruciunilor, exist de obicei un buffer sau o coad de instruciuni n cadrul UCP, care pstreaz instruciunile prencrcate i parial decodificate. Unitatea de control expediaz instruciunile din bufferul de instruciuni ctre diferitele uniti de execuie. Unitatea de control a unui procesor superscalar este responsabil pentru determinarea momentului n care poate fi executat fiecare instruciune i pentru asigurarea accesului la resursele pe care instruciunea le necesit, cum sunt operanzi din memorie, uniti de execuie i registre UCP. Pentru aceasta, unitatea de control trebuie s in cont de urmtorii factori: Tipul instruciunii: De exemplu, o instruciune de adunare n virgul mobil trebuie expediat la o unitate de execuie n virgul mobil i nu la o unitate n virgul fix. Disponibilitatea unitii de execuie: O instruciune poate fi expediat la o unitate de execuie de tip pipeline numai dac nu vor rezulta coliziuni. Dependene de date: Pentru a evita conflictele la utilizarea registrelor, trebuie satisfcute restricii privind dependenele de date ntre operanzii instruciunilor active. Dependene de control: Pentru a menine performane ridicate, sunt necesare tehnici pentru a reduce impactul instruciunilor de salt asupra eficienei sistemelor pipeline. Ordinea instruciunilor: Instruciunile trebuie s genereze rezultatele n ordinea specificat de programul care se execut. Rezultatele pot fi ns calculate intern ntr-o ordine diferit pentru a mbunti performanele UCP. Pentru pstrarea ordinii de execuie a instruciunilor ntre care exist dependene i pentru a asigura obinerea unor rezultate valide, un procesor superscalar trebuie s utilizeze un mecanism de control, care poate fi bazat pe metoda tabelei de rezultate sau metoda Tomasulo. In practic, majoritatea procesoarelor se bazeaz pe tehnica superscalar i utilizeaz metoda tabelei de rezultate. Pentru a rezolva problema salturilor ntrziate se utilizeaz diferite metode arhitecturale, cum sunt memorii cache (sau buffere) pentru destinaia saltului i execuia speculativ, Execuia speculativ implic predicia direciei unui salt dependent de date i execuia instruciunilor corespunztoare. Cu seturi multiple de registre virtuale i utiliznd metoda tabelei de rezultate, un procesor poate urmri ambele ci ale unui salt i poate alege irul corect de instruciuni. 9.4.7.2. Prelucrarea superpipeline Metoda superpipeline asigur performane ridicate prin suprapunerea execuiei unui numr mai mare de instruciuni ntr-un singur sistem pipeline de instruciuni. Un procesor superpipeline conine de obicei un sistem pipeline de instruciuni cu un numr mai mare de etaje dect un sistem pipeline obinuit. Cu alte cuvinte, procesul de execuie al unei instruciuni este divizat n etape cu

complexitate mai redus. Prin creterea numrului de etaje ale sistemului pipeline de instruciuni este posibil creterea frecvenei ceasului, deoarece aceast frecven depinde de ntrzierea introdus de etajul cel mai lent. Metoda superpipeline are anumite avantaje. O singur unitate funcional necesit un spaiu mai redus i circuite mai simple comparativ cu structurile bazate pe prelucrarea superscalar. Spaiul suplimentar care rmne disponibil permite implementarea unor circuite speciale pentru obinerea unor viteze mai ridicate, memorii cache de dimensiuni mai mari i ci de date cu un numr mai mare de linii. Majoritatea procesoarelor actuale utilizeaz metoda superpipeline. De exemplu, sistemul pipeline al familiei de procesoare cu arhitectura Intel actual const din 20 etaje, fa de 5 la procesorul Intel Pentium i 6 la procesorul Intel Pentium cu extensiile MMX. Aceasta permite familiei de procesoare cu arhitectura Intel actual s ajung la o frecven cu aproximativ 50% mai ridicat fa de procesorul Pentium cu aceeai tehnologie de fabricaie. Alte exemple de arhitecturi superpipeline sunt procesoarele MIPS R4000 i R4400. S considerm un procesor care divizeaz extragerea instruciunilor i accesul la memoria cache de date pentru a crea un sistem pipeline cu opt etaje. Cele opt etaje ale sistemului pipeline sunt ilustrate n figura 9.18.

Fig. 9.18. Faze corespunztoare celor opt etaje ale sistemului pipeline sunt descrise mai jos. 1. IF (Instruction Fetch, First Half): Logica de salt selecteaz o adres de instruciune i ncepe extragerea acestei instruciuni din memoria cache de instruciuni. In aceeai faz, bufferul de translatare (TLB) pentru instruciuni ncepe translatarea adresei virtuale ntr-o adres fizic. 2. IS (Instruction Fetch, Second Half): Extragerea instruciunii din memoria cache de instruciuni i translatarea adresei virtuale ntr-o adres fizic sunt terminate. 3. RF (Register Fetch): Instruciunea este decodificat i marcajul

memoriei cache de instruciuni este comparat cu numrul cadrului de pagin obinut din bufferul de translatare pentru instruciuni. Operanzii necesari sunt ncrcai din setul de registre. 4. EX (Instruction Execution): UAL execut operaia aritmetic sau logic pentru instruciunile care opereaz cu registrele. Pentru instruciunile de ncrcare i memorare, UAL calculeaz adresa virtual a datelor. Pentru instruciunile de salt, UAL determin dac condiia de salt este adevrat i calculeaz adresa virtual a destinaiei saltului. 5. DF (Data Fetch, First Half): Pentru instruciunile de ncrcare i memorare, ncepe extragerea datelor din memoria cache de date i translatarea adresei virtuale ntr-o adres fizic. Pentru instruciunile de salt, ncepe translatarea adresei i actualizarea TLB. Pentru instruciunile care opereaz cu registrele, nu se execut nici o operaie n timpul fazelor DF, DS i TC. 6. DS (Data Fetch, Second Half): Pentru instruciunile de ncrcare i memorare, extragerea datelor din memoria cache de date i translatarea adresei virtuale ntr-o adres fizic sunt terminate. Pentru instruciunile de salt, translatarea adresei i actualizarea TLB sunt terminate. 7. TC (Tag Check): Pentru instruciunile de ncrcare i memorare, memoria cache execut testarea marcajului. Adresa fizic din TLB este comparat cu marcajul memoriei cache pentru a determina dac exist un succes sau un eec la accesul memoriei cache. 8. WB (Write Back): Pentru instruciunile care opereaz cu registrele, rezultatul instruciunii este scris n setul de registre. Pentru instruciunile de salt, nu se execut nici o operaie n timpul acestei faze. 9.4.7.3. Cuvinte foarte lungi de instruciuni Metoda cuvintelor foarte lungi de instruciuni (Very Long lnstruction Word VLIW) utilizeaz compilatorul n mod intens pentru ca acesta s includ mai multe operaii independente ntr-un cuvnt lung de instruciune. Lungimea cuvntului de instruciune este suficient de mare pentru a furniza, n paralel, bii de control pentru mai multe uniti funcionale, n acelai mod n care o microinstruciune controleaz resurse multiple care execut microoperaii. Instruciunile VLIW ncearc s maximizeze numrul operaiilor executate n paralel i necesit a logic de decodificare simpl. Compilatorul unei arhitecturi VLIW determin paralelismul ntre operaiile de baz pentru a menine unitile funcionale ocupate ct mai mult timp. Compilatorul determin cmpurile de control ale instruciunilor VLIW i specific resursele care vor fi utilizate de procesor n fiecare ciclu de ceas. Deci, codul VLIW furnizeaz un plan explicit al modului n care procesorul va executa programul. Compilatorul creeaz acest plan de execuie n mod static n timpul compilrii, pe baza cunoaterii complete a procesorului VLIW. In timpul execuiei, unitatea de control lanseaz execuia unei instruciuni lungi n fiecare ciclu. Aceast instruciune iniiaz simultan mai multe operaii independente.

Pentru arhitecturile VLIW, programul furnizeaz informaii explicite n privina paralelismului. Compilatorul identific paralelismul din program i l comunic procesorului prin specificarea operaiilor care sunt independente unele de altele. Utiliznd aceste informaii, procesorul va cunoate, fr o testare suplimentar, care operaii pot fi lansate n execuie n acelai ciclu. Calculatoarele VLIW nu au avut un succes comercial. Totui, unele din noile arhitecturi de procesoare utilizeaz metoda VLIW pentru a obine performane superscalare. Un exemplu recent de arhitectur VLIW este MAJC (Microprocessor Architecture for Java Computing), introdus de Sun Microsystems. Prima implementare a acestei arhitecturi este procesorul MAJC-5200, introdus n anul 2000. Acesta este un procesor cu performane ridicate pentru aplicaii multimedia, integrnd dou uniti centrale de prelucrare ntr-o singur capsul. 9.4.7.4. EPIC Arhitectura EPIC (Explicitly Parallel Instruction Computing) a fost dezvoltat la Hewlett-Packard Laboratories, ncepnd cu anul 1989, pentru a permite un grad mai nalt de paralelism la nivelul instruciunilor fr o complexitate hardware inacceptabil. Arhitectura EPIC este o evoluie a arhitecturii VLIW, care a asimilat i multe concepte ale tehnicii superscalare. EPIC pune la dispoziie o filozofie pentru a construi procesoare ILP (instructionlevel parallelism), mpreun cu un set de caracteristici arhitecturale care sprijin aceast filozofie. Prima implementare comercial a unei arhitecturi EPIC este arhitectura Intel IA-64. Filozofia EPIC Unul din scopurile EPIC a fost de a pstra conceptul VLIW de construire static a planului de execuie al programului de ctre compilator, dar de a-l mbunti cu caracteristici specifice prelucrrii superscalare, care folosesc avantajele factorilor dinamici. Pentru a realiza aceste scopuri, filozofia EPIC are trei principii de baz: - Compilatorul trebuie s aib rolul cheie n construirea planului de execuie al programului, iar arhitectura trebuie s asigure suportul necesar pentru compilator. - Arhitectura trebuie s asigure faciliti care asist compilatorul n folosirea avantajelor paralelismului la nivelul instruciunilor. - Arhitectura trebuie s asigure mecanisme pentru a comunica procesorului planul de execuie al compilatorului. Aceste principii sunt explicate n continuare. Filozofia EPIC atribuie sarcina de a construi planul de execuie compilatorului. Procesoarele EPIC pun la dispoziie faciliti care asist compilatorul n construirea cu succes a planului de execuie. O cerin de baz este ca funcionarea procesoarelor EPIC s fie predictibil i controlabil din punct de vedere al compilatorului.

Esena construirii planului de execuie n timpul compilrii este de a reordona codul secvenial original pentru a profita de paralelismul aplicaiei i de a utiliza ntr-un mod optim resursele hardware, minimiznd astfel timpul de execuie. Fr un suport arhitectural corespunztor, reordonarea poate afecta corectitudinea programului. Din acest motiv, procesoarele EPIC pun la dispoziie faciliti arhitecturale care permit o reordonare extensiv a codului n timpul compilrii. Un compilator EPIC ntmpin o problem major n construirea planului de execuie la compilare, deoarece anumite tipuri de informaii pot fi cunoscute numai la execuie. De exemplu, compilatorul nu poate cunoate destinaia fiecrui salt condiionat. Adesea este imposibil de a construi o planificare static care optimizeaz toate cile din program. O ambiguitate rezult de asemenea atunci cnd compilatorul nu este capabil s determine dac dou referine la memorie vizeaz sau nu aceeai locaie. In caz afirmativ, ele trebuie executate secvenial. In caz contrar, ele pot fi planificate n orice ordine. In asemenea circumstane, compilatorul construiete i optimizeaz planul de execuie pentru cazul probabil. Totui, EPIC pune la dispoziie faciliti arhitecturale, ca de exemplu speculaia controlului i a datelor, pentru a asigura corectitudinea programului chiar i atunci cnd presupunerea este incorect. Uneori, rezult o reducere a performanei, dar aceste situaii trebuie s fie puin frecvente. Dup construirea unui plan de execuie, compilatorul trebuie s comunice acest plan procesorului. Pentru aceasta, arhitectura setului de instruciuni trebuie s fie capabil s exprime deciziile compilatorului despre momentul n care s se lanseze fiecare operaie i care resurse s fie utilizate. In particular, trebuie s fie posibil s se specifice care operaii trebuie lansate simultan. (Soluia utilizat de alte filozofii de proiectare este s se creeze un program secvenial care este prezentat procesorului i reorganizat de acesta n mod dinamic.) Atunci cnd se comunic planul de execuie procesorului, este important s se furnizeze informaii critice la momentul potrivit. Un exemplu este operaia de salt, care, dac va fi executat, necesit nceperea ncrcrii instruciunilor de la destinaia saltului cu mult naintea saltului care este lansat. In loc de a pune la dispoziie un buffer al destinaiei saltului pentru a indica adresa destinaie, filozofia EPIC const n a furniza aceste informaii procesorului, n mod explicit i la momentul corect, prin intermediul codului. Exist alte probleme care trebuie rezolvate de microarhitectura procesorului, care nu se refer direct la execuia codului, dar care afecteaz timpul de execuie. Un exemplu este gestionarea ierarhiei memoriei cache i deciziile asociate despre datele care trebuie nlocuite. Strategiile de nlocuire sunt ncorporate de obicei n circuitele memoriei cache. EPIC permite compilatorului s gestioneze i aceste mecanisme ale microarhitecturii. In concluzie, EPIC pune la dispoziie faciliti arhitecturale care permit un control prin program al mecanismelor care sunt controlate n mod normal de microarhitectur. EPIC simplific dou responsabiliti de baz ale procesorului.

- Filozofia EPIC permite eliminarea verificrii n timpul execuiei a dependenelor pentru operaiile care au fost demonstrate de compilator ca fiind independente. - EPIC permite eliminarea logicii complexe pentru lansarea operaiilor ntro ordine diferit de cea din program, bazndu-se pe ordinea de lansare specificat de compilator. EPIC mbuntete abilitatea compilatorului de a genera n mod static un plan de execuie, permind diferite forme de mutare a codului n timpul compilrii care ar fi ilegale ntr-o arhitectur convenional. Unele din facilitile arhitecturale ale EPIC sunt descrise n continuare. Operaii multiple pe instruciune (MultiOp) O instruciune MultiOp specific un set de operaii care se intenioneaz a fi lansate n execuie simultan, fiecare operaie fiind echivalentul unei instruciuni ntr-un procesor secvenial convenional. Compilatorul identific operaiile planificate pentru a fi lansate n execuie simultan i le mpacheteaz ntr-o instruciune MultiOp. Atunci cnd se lanseaz n execuie o instruciune MultiOp, nu este necesar ca procesorul s efectueze verificarea dependenei ntre operaiile sale constituente. La construirea unui plan de execuie, compilatorul trebuie sa in cont de numrul resurselor de fiecare tip disponibile n cadrul procesorului i trebuie s efectueze alocarea resurselor. Filozofia EPIC const n a comunica aceste decizii procesorului prin intermediul codului, astfel nct procesorul nu necesit executarea din nou a alocrii resurselor n timpul execuiei. O posibilitate pentru aceasta este utilizarea unui format poziional de instruciune, deci, poziia unei operaii n cadrul instruciunii MultiOp specific unitatea funcional n care operaia va fi executat. In mod alternativ, aceast informaie poate fi specificat ca parte a codului operaiei. Ordinea de lansare n execuie a instruciunilor este stabilit de compilator. Astfel, dac o operaie nu va ncerca s utilizeze un rezultat nainte ca acesta s fie generat, procesorul nu necesit interblocri sau abilitatea de a insera suspendri ale execuiei. Rezolvarea problemei salturilor Multe aplicaii necesit un numr mare de salturi. Operaiile de salt au o laten hardware care se ntinde din momentul n care ncepe execuia saltului pn n momentul n care ncepe execuia instruciunii de la destinaia saltului. In acest timp, au loc mai multe aciuni: se calculeaz o condiie de salt, se formeaz o adres destinaie, se ncarc instruciunile din calea secvenial sau calea destinaie, iar instruciunea urmtoare este decodificat i lansat n execuie. Problema fundamental const n faptul c, dei seturile convenionale de instruciuni specific un salt ca o singur operaie, aciunile sale trebuie executate de fapt n momente diferite, ceea ce crete latena saltului. Atunci cnd sunt suprapuse un numr insuficient de operaii cu execuia saltului,

rezult performane nesatisfctoare. Filozofia EPIC const n a elimina ciclurile de suspendare ale execuiei prin obinerea unei mai bune suprapuneri ntre procesarea saltului i alte calcule. In loc de a se baza numai pe circuite pentru a soluiona problema, EPIC asigur caracteristici arhitecturale care faciliteaz urmtoarele posibiliti: EPIC nu trateaz un salt ca o operaie unic. In loc de a considera un salt ca o singur operaie cu laten ridicat, EPIC separ salturile n trei operaii distincte: o operaie de pregtire pentru salt determin adresa destinaie i o furnizeaz unitii de salt; o comparaie calculeaz condiia de salt; n final, saltul efectiv marcheaz locaia din irul de instruciuni la care este transferat condiionat fluxul de control. Separarea salturilor permite compilatorului s mute operaiile de pregtire pentru salt i de comparaie n avans fa de saltul efectiv, astfel nct procesorul poate termina calculul condiiei de salt i prencrcarea instruciunilor corespunztoare pn n momentul n care se ajunge la saltul efectiv. La executarea operaiei de pregtire pentru salt, procesorul poate prencrca n mod speculativ - naintea cunoaterii condiiei de salt - instruciuni de la destinaia saltului. Dup execuia comparaiei, procesorul poate determina dac saltul va fi executat, poate elimina instruciunile ncrcate n mod speculativ care nu sunt necesare i poate iniia prencrcarea nespeculativ a instruciunilor. Aceste tehnici permit procesarea suprapus a componentelor saltului, cu utilizarea doar a mutrii statice a componentelor saltului. EPIC reduce penalizarea datorit salturilor prin eliminarea salturilor utiliznd execuia predicativ. Execuia predicativ se refer la execuia condiional a operaiilor pe baza unei intrri cu valori booleene, numit predicat, asociat cu blocul de baz coninnd operaia. Rezolvarea problemei accesului la memorie Accesurile la memorie pot, de asemenea, reduce performanele. Deoarece perioada de ceas a procesorului descrete mai rapid dect timpul de acces la memorie, timpul de acces la memorie (msurat n cicluri ale procesorului) crete. Memoriile cache de date pot reduce degradarea performanelor datorat latenei crescute a memoriei principale. Totui, memoriile cache gestionate prin hardware reduc uneori performanele chiar sub cele ale unui sistem fr o memorie cache. EPIC pune la dispoziie mecanisme arhitecturale care permit compilatoarelor s controleze n mod explicit mutarea datelor n cadrul ierarhiei memoriilor cache. Arhitecturile EPIC atribuie operaiilor de ncrcare i de memorare un specificator al memoriei cache destinaie pe care compilatorul l utilizeaz pentru a indica nivelul memoriei cache n care operaia de ncrcare sau memorare trebuie s promoveze sau s retrogradeze datele refereniate pentru a fi utilizate de urmtoarele operaii cu memoria. Specificatorul memoriei cache destinaie reduce lipsurile din memoriile cache prin controlul coninutului lor. Compilatorul poate exclude datele cu o localitate temporal insuficient din

memoria cache de un anumit nivel i poate elimina datele din aceast memorie cache dup ultima utilizare. 9.4.7.5. Comparaie ntre metodele de mbuntire a ratei de transfer O comparaie ntre metodele de mbuntire a ratei de transfer prezentate anterior indic anumite diferene interesante. De exemplu, metodele superscalar i VLIW sunt mai sensibile la conflictele ntre resurse dect metoda superpipeline. Intr-un procesor superscalar sau VLIW, o resurs trebuie duplicat pentru a reduce ansele conflictelor, n timp ce tehnica superpipeline evit orice conflicte la resurse. O arhitectur EPIC ncearc s evite conflictele la resurse prin utilizarea compilatorului. Pentru a se evita ca un procesor superpipeline s fie mai lent dect un procesor superscalar, tehnologia utilizat n procesorul superpipeline trebuie s reduc ntrzierea sistemului pipeline. De aceea, n general, procesoarele superpipeline necesit o tehnologie mai rapid de tranzistoare cum este GaAs (arseniur de galiu), n timp ce procesoarele superscalare necesit un numr mai mare de tranzistoare pentru a permite duplicarea resurselor hardware. Metoda superscalar utilizeaz adesea tehnologia CMOS, deoarece aceast tehnologie asigur o densitate ridicat a circuitelor. Tehnologia existent favorizeaz n general densitatea crescut a circuitelor fa de viteza crescut a acestora. Din punct de vedere istoric, densitatea circuitelor a crescut cu o rat mai rapid dect viteza tranzistoarelor. Acest precedent sugereaz concluzia c metoda superscalar este mai eficient din punct de vedere al costului pentru a fi implementat de industrie. Avansul tehnologic a permis tehnicilor superscalar i superpipeline s fie combinate, obinndu-se soluii eficiente. Asemenea soluii, care ncearc s profite de aspectele pozitive ale fiecrei tehnici, pot fi regsite n procesoarele existente. Pentru procesoarele superscalare i superpipeline, programul nu conine informaii explicite despre paralelismul la nivelul instruciunilor care este disponibil i de aceea acest paralelism trebuie descoperit de procesor. Pentru procesoarele VLIW i EPIC, planul de execuie al programului este construit de compilator, astfel nct programul conine informaii explicite despre paralelismul disponibil. Aceste informaii sunt comunicate procesorului, care execut planul specificat. Procesoarele superscalare i superpipeline construiesc n mod dinamic planul de execuie al programului, spre deosebire de procesoarele VLIW i EPIC, care utilizeaz compilatorul pentru a construi n mod static planul de execuie. Ca rezultat, circuitele procesoarelor superscalare i superpipeline sunt mai complexe, dar construirea n mod dinamic a planului de execuie poate ine cont de factori care pot fi determinai numai la execuie. In ultima decad, a existat o controvers ntre complexitatea i posibilitile dinamice ale procesoarelor superscalare i superpipeline, contra simplitii i limitrilor procesoarelor VLIW. Filozofia EPIC subscrie la ambele dintre aceste poziii.

Diferena este c EPIC expune aceste mecanisme la nivelul arhitectural, astfel nct compilatorul poate controla aceste mecanisme dinamice, utilizndu-le n mod selectiv dup cum este adecvat. Acest control permite compilatorului s utilizeze strategii mai eficiente pentru gestionarea acestor mecanisme dect ar permite o strategie hardware. Filozofia EPIC, mpreun cu caracteristicile arhitecturale care o sprijin, asigur mijloacele pentru a defini arhitecturi cu un grad mai ridicat de paralelism la nivelul instruciunilor i la un nivel de complexitate mai redus pentru diferite domenii de aplicaii.

9.5. Sisteme pipeline aritmetice 9.5.1. Principii Pentru mbuntirea performanelor, anumite funcii ale unitii aritmetice i logice pot fi implementate printr-un sistem pipeline. Pentru implementarea funciilor aritmetice complexe, ca adunarea, nmulirea i mprirea n virgul mobil se utilizeaz sisteme pipeline aritmetice. Aceste funcii pot fi descompuse n mai multe operaii executate n mod succesiv. Considerm, de exemplu, adunarea a dou numere normalizate n virgul mobil, X i Y . Aceast operaie poate fi executat n urmtoarele patru etape: compararea exponenilor, alinierea mantiselor (egalizarea exponenilor), adunarea mantiselor i normalizarea rezultatului. Aceste operaii necesit un sistem pipeline cu patru etaje, dup cum se arat n figura 9.19. Presupunem c X are reprezentarea normalizat n virgul mobil ( X M , X E ), unde X M este mantisa i X E este exponentul i, n mod similar, Y = (YM , YE ) . In prima etap a adunrii numerelor X = ( X M , X E ) i Y = ( YM , YE ),se compar X E i YE . Aceast operaie este executat de etajul E1 al sistemului pipeline, care are n componena sa un sumator n virgul fix. Acest etaj identific exponentul cel mai mic, de exemplu X E si stabilete exponentul comun, care n acest caz, este YE . Mantis corespunztoare X M se modific
' prin deplasarea la dreapta pentru a forma o nou mantis X M , astfel nct ' ( X M , YE ) = ( X M , X E ). Aceast operaie este executat de etajul al doilea ( E2 ) ' al sistemului pipeline. In etajul al treilea E3 sunt adunate mantisele X M i YM , care sunt acum aliniate corespunztor. Aceast adunare n virgul fix poate produce un rezultat care nu este normalizat. Rezultatul este normalizat n etajul al patrulea E4 . Pentru realizarea normalizrii se contorizeaz mai nti numrului k al cifrelor de zero de la nceputul mantisei (sau al cifrelor de unu n cazul unui numr negativ). In continuare se deplaseaz mantisa cu k poziii la stnga i se ajusteaz n mod corespunztor exponentul

Fig. 9.19

9.5.2. Sisteme pipeline aritmetice cu reacie invers Utilitatea unui sistem pipeline aritmetic poate fi mrit prin includerea cilor de reacie invers de la ieirile etajelor la intrrile primare ale sistemului pipeline. Reacia invers permite ca rezultatele calculate de anumite etaje s fie utilizate n calculele ulterioare de sistemul pipeline. Vom ilustra n continuare acest concept prin adugarea reaciei inverse la un sumator n virgul mobil de tip pipeline cu patru etaje.

Fig. 9.20 Considerm problema calculrii sumei a N numere n virgul mobil b1 , b2 ,, bN . O soluie a acestei probleme ar putea consta n adunarea perechilor consecutive de numere utiliznd un sumator pipeline i memorarea sumelor pariale temporar n registre externe. nsumarea poate fi efectuat mult mai eficient prin modificarea sumatorului dup cum se arat n figura 9.20. Astfel, a fost adugat o cale de reacie invers la ieirea etajului final E4 , permind rezultatelor sale s fie aplicate la intrarea primului etaj E1 . Operanzii de intrare ai sumatorului modificat se obin din patru surse separate: - o variabil X care este obinut, de obicei, dintr-un registru UCP sau o locaie de memorie, - o surs constant K , care poate aplica operanzi cum sunt cuvintele constnd numai din bii de 0 (cifra 0), - ieirea etajului E4 , reprezentnd rezultatul calculat de E4 n perioada de

ceas precedent, - un rezultat anterior calculat de sistemul pipeline i memorat n registrul de ieire R . Problema adunrii a N numere este soluionat de sistemul pipeline aritmetic din figura 9.20 n modul urmtor. Operanzii b1 , b2 ,, bN sunt introdui n sistemul pipeline ntr-un ir continuu prin intrarea X . Acest proces necesit o secven de operaii de ncrcare din memorie, care sunt implementate simplu dac operanzii sunt memorai n locaii contigue. In figura 9.23, b8 = bN este ultimul element care trebuie nsumat. Dup ce ultimul operand bN a fost aplicat la intrarea sistemului pipeline, structura reaciei inverse este modificat din nou pentru a permite ca cele patru sume pariale b1 + b5 , b2 + b6 , b3 + b7 i b4 + b8 s fie adunate. Modificarea necesar a structurii reaciei inverse este indicat n figura 9.22 pentru cazul N = 8. La momentul t = 9, intrrile externe n sistemul pipeline sunt invalidate prin setarea lor la zero, iar prima din cele patru sume pariale b1 + b5 de la ieirea etajului E4 este memorat n registrul R . Apoi, la momentul t = 10, noul rezultat b2 + b6 de la etajul E4 este aplicat la intrarea sistemului pipeline, mpreun cu rezultatul precedent b1 + b5 obinut din R . Astfel, n acest moment ncepe calculul b1 + b5 + b2 + b6 , care este suma jumtii operanzilor de intrare. Dup o nou ntrziere de o perioad, ncepe calculul sumei celeilalte jumti b3 + b7 + b4 + b8 .

Fig. 9.21 Atunci cnd b1 + b5 + b2 + b6 apare la ieirea etajului E4 la momentul t =

14, aceasta este memorat n R , pn cnd b3 + b7 + b4 + b8 apare la ieirea etajului E4 la momentul t = 16. In acest moment, ieirile etajului E4 i ale registrului R sunt aplicate la intrrile etajului E1 . Rezultatul final este produs patru perioade mai trziu, la momentul t = 20 n cazul N = 8.

Fig. 9.22 Pentru cazul general al N operanzi, sistemul pipeline aritmetic din figura 9.21 i 9.22 poate calcula suma a N > 4 numere n virgul mobil ntr-un timp (N+11)T unde T este perioada de ceas a sistemului pipeline, deci ntrzierea pe etaj. Deoarece un sumator comparabil care nu este de tip pipeline necesit un timp de 4NT pentru calcularea sumei, creterea vitezei obinute este 4N/(N+11), care se apropie de 4 pe msur ce N crete. Operaiile aritmetice mai complexe din seturile de instruciuni ale UCP, inclusiv majoritatea operaiilor n virgul mobil, pot fi implementate n mod eficient prin sisteme pipeline. Inmulirea n virgul fix i mobil este de asemenea adecvat pentru implementarea printr-un sistem pipeline. In figura 9.23 este prezentat un sistem pipeline de nmulire.
Adunare exponenti Inmultire mantise Normalizare

Rotunjire mantisa

Normalizare finala

Fig. 9.23 9.6. Controlul sistemelor pipeline Dup cum se tie exist dou tipuri de sisteme pipeline: statice i dinamice. Un sistem pipeline static poate executa o singur operaie la un moment dat, n timp ce un sistem pipeline dinamic poate executa mai multe operaii. Controlul secvenierii operaiilor prezentate pentru execuie unui sistem pipeline este foarte important pentru creterea eficienei acestuia. Dac se iniiaz dou operaii care necesit acelai etaj pipeline n acelai timp, apare o coliziune. In aceast seciune se prezint o metod de control pentru planificarea unui sistem pipeline. 9.6.1. Planificarea Exist mai multe metode pentru controlul planificrii sistemelor pipeline. naintea descrierii unor asemenea metode, sunt definite conceptele de tabel de rezervare i laten. Tabele de rezervare. O tabel de rezervare indic momentele n care etajele unui sistem pipeline sunt utilizate pentru o anumit funcie. Fiecare etaj este reprezentat printr-o linie n tabela de rezervare. Fiecare linie este mprit n coloane, cte una pentru fiecare ciclu de ceas. Numrul de coloane indic numrul total al unitilor de timp necesare pentru execuia unei anumite funcii. Pentru a indica faptul c un anumit etaj E este utilizat la momentul de timp ti este plasat un semn x la intersecia liniei i coloanei corespunztoare etajului i momentului de timp respectiv din tabel.

Fig. 9.24 Figura 9.24 reprezint o tabel de rezervare pentru un sistem pipeline static cu trei etaje. Momentele de timp t 0 , t1 , t 2 , t3 i t 4 indic cinci cicluri de ceas consecutive. In exemplul considerat poziia semnelor x indic faptul c, pentru a produce rezultatul scontat datele de intrare trebuie s treac succesiv prin etajele 1, 2, 2, 3 i 1. Tabela de rezervare poate fi utilizat pentru a determina diferenele de timp ntre aplicarea datelor la intrare astfel nct s nu apar coliziuni.

Latena. ntrzierea, sau numrul unitilor de timp (ciclurilor de ceas) care separ aplicarea datelor la intrare, este numit laten. Va apare o coliziune dac dou seturi de date de intrare sunt aplicate cu o laten egal cu distana ntre dou semne x ntr-o linie a tabelei de rezervare. De exemplu, n tabela din figura 9.24 exist dou semne x cu o distan 1 n a doua linie. Astfel, dac al doilea set de date este aplicat la intrare cu o laten de o unitate de timp dup primul, va apare o coliziune n etajul 2. 9.6.2. Planificarea sistemelor pipeline statice Planificarea sistemelor pipeline statice ncepe prin crearea unui set de liste a latenelor interzise pe baza tabelelor de rezervare ale funciilor. Se obin apoi vectorii de coliziune i se deseneaz diagrama strilor. Lista latenelor interzise. Fiecare tabel de rezervare cu dou sau mai multe semne x ntr-o anumit linie are una sau mai multe latene interzise, care, n cazul n care nu sunt evitate, vor determina coliziunea datelor. Lista latenelor interzise F este o list de numere ntregi care corespund acestor latene interzise. In cazul sistemelor pipeline statice, valoarea zero este considerat ntotdeauna ca o laten interzis, deoarece nu este posibil iniierea a dou taskuri n acelai timp. Un element al acestei liste se poate determina calculnd distana ntre dou semne x dintr-o anumit linie. De exemplu, lista latenelor interzise a tabelei de rezervare din figura 9.24 este (4, 1, 0). Vectori de coliziune. Un vector de coliziune este un ir de cifre binare de lungime N + 1 , unde N este latena interzis maxim din lista latenelor interzise. Vectorul de coliziune iniial, C , este creat din lista latenelor interzise n felul urmtor: fiecare element ci din C , pentru i = 1,..., N , este 1 dac i este un element al listei latenelor interzise; n caz contrar, ci este zero. Valorile zero din vectorul de coliziune indic latene permise, sau momente n care aplicarea datelor este permis. Pentru lista precedent a latenelor interzise (4, 1, 0), vectorul de coliziune este: C = c4 c 3 c 2 c1 c 0 = (1 0 0 1 1) In acest vector de coliziune, latenele 2 i 3 sunt permise, n timp ce latenele 0, 1 i 4 sunt interzise. Diagrama strilor. Diagramele de stri se utilizeaz pentru a indica diferitele stri ale unui sistem pipeline pentru un interval de timp dat. Dup crearea unei diagrame a strilor, este mai simpl deducerea unei planificri a datelor de intrare astfel nct s nu apar coliziuni. Pentru a crea diagrama strilor unui sistem pipeline, starea iniial este ntotdeauna vectorul de coliziune iniial. Dac exist valoarea 0 n poziia ci atunci aplicarea datelor este permis dup i uniti de timp (cicluri de ceas). Figura 9.25 reprezint o diagram de stri pentru sistemul pipeline din

figura 9.24. Vectorul de coliziune 10011 reprezint starea iniial. Un nou set de date poate fi aplicat la intrare dup dou sau trei cicluri de ceas ( i = 2 sau i = 3 ).

Fig. 9.25 De fiecare dat cnd este permis aplicarea unui set de date, vectorul de coliziune este deplasat la dreapta cu i poziii, n poziiile din stnga fiind introduse zerouri. Aceasta corespunde cu trecerea unui numr de i uniti de timp. Se efectueaz operaia SAU logic ntre acest nou vector i vectorul de coliziune iniial pentru a se genera un nou vector de coliziune i o nou stare. Aceast operaie este necesar deoarece aplicarea noilor date foreaz o nou constrngere asupra strii curente a sistemului pipeline. De fiecare dat cnd se genereaz un nou vector de coliziune de la un vector de coliziune existent n diagrama strilor, se traseaz un arc ntre acestea. Arcul este etichetat cu latena i . Procesul de generare a noilor vectori de coliziune continu pn cnd nu se mai pot genera noi vectori. In cadrul unei diagrame a strilor, aplicarea unui set de date cu o ntrziere de N + 1 cicluri de ceas sau mai mare va determina rentoarcerea la vectorul de coliziune iniial. Aceasta deoarece vectorul de coliziune curent este deplasat la dreapta cu N + 1 poziii i sunt introduse zerouri n stnga. Dac se efectueaz operaia SAU logic ntre un vector de coliziune egal cu zero i vectorul de coliziune iniial, rezultatul este vectorul de coliziune iniial. In exemplul considerat arcele a2 i a3 au latenele i = 3 i i 5 . Latena i 5 corespunde situaiei n care noul set de date de intrare se aplic dup 5 sau mai multe cicluri de ceas. Dup o perioad de timp mai mare sau egala cu 5 cicluri de ceas, sistemul pipeline s-a golit i este evident c aplicarea unui nou set de date gsete sistemul n faza iniial. Latena medie. Latena medie se determin pentru un anumit ciclu din diagrama strilor. Un ciclu ntr-o diagram a strilor este o secven alternant de vectori de coliziune i arce, C0 , a1, C1,..., a n , C0 , n care fiecare arc ai conecteaz vectorul de coliziune Ci 1 cu Ci i toi vectorii de coliziune sunt distinci cu excepia primului i ultimului.

Pentru simplitate, un ciclu poate fi reprezentat printr-o secven de latene ale arcelor sale. De exemplu, n figura 9.25 ciclul C0 , a1 , C1 , a 2 , C0 , unde C0 = (10011) , C1 = (10111) , a1 este un arc de la C0 la C1 , iar a2 este un arc de la C1 , la C0 , poate fi reprezentat ca ciclul C = (2,3) , unde 2 i 3 sunt latenele arcelor a1 , respectiv a2 . Un arc poate avea mai multe latene. De exemplu arcul a2 are latenele 3 i 5. Latena medie pentru un ciclu se determin prin adunarea latenelor arcelor ciclului i mprirea sumei cu numrul total de arce din ciclu. De exemplu, n figura 9.25 ciclul C = (2,3) are latena medie: (2 + 3) / 2 = 2,5 Lungimea unui ciclu este dat de numrul arcelor din care este constituit. Astfel C0 , a1 , C1 , a 2 , C0 are lungimea 2, iar ciclul C0 , a3 , C0 are lungimea 1. Latena medie minim. Un sistem pipeline poate avea mai multe latene medii asociate cu diferite cicluri. Latena medie minim este latena cu valoarea cea mai mic din acestea. De exemplu, pentru diagrama din figura 9.25, latenele medii sunt urmtoarele: (2 + 3)/2 = 2,5 din ciclul C0 , a1 , C1 , a 2 , C0 (2 + 5)/2 = 3,5 din ciclul C0 , a1 , C1 , a 2 , C0 3/1 = 3 din ciclul C0 , a3 , C0 5/1=5 din ciclul C0 , a3 , C0 Astfel, latena medie minim (LMM) este 2,5. Dei ciclul cu latena medie minim maximizeaz rata de transfer a sistemului pipeline, uneori se poate alege un ciclu mai puin eficient pentru a se reduce complexitatea implementrii circuitului de control. De exemplu, ciclul C = (2, 3), cu valoarea LMM egal cu 2,5, necesit un circuit care contorizeaz dou uniti de timp, apoi trei uniti de timp, din nou dou uniti de timp i aa mai departe. Dac ns este acceptabil s se aplice un set de date de intrare la fiecare trei uniti de timp, complexitatea circuitului va fi mai redus. De aceea, uneori este necesar determinarea latenei minime care poate fi utilizat pentru aplicarea datelor de intrare n toate situaiile. Aceast laten este numit latena minim. Pentru determinarea latenei minime se caut n diagrama strilor ciclul de lungime 1, care are latena cea mai mic. In exemplul considerat acesta este ciclul C0 , a3 , C0 cu latena 3. Astfel, latena minim pentru acest sistem pipeline este 3. 9.6.3. Planificarea sistemelor pipeline dinamice La planificarea unui sistem pipeline static, trebuie evitate doar coliziunile ntre diferitele date de intrare pentru o anumit unitate funcional. In cazul unui sistem pipeline dinamic, este posibil ca diferitele seturi de date de intrare necesitnd uniti funcionale diferite s fie prezente n sistemul pipeline n acelai timp. Pentru acest motiv, trebuie s se ia n considerare i coliziunile ntre aceste date. Ca i n cazul sistemelor pipeline statice, planificarea

sistemelor pipeline dinamice ncepe cu determinarea unui set de liste a latenelor interzise pe baza tabelelor de rezervare ale funciilor. In continuare se obin vectorii de coliziune, iar n final se deseneaz diagrama strilor.

Fig. 9.26

Listele latenelor interzise. In cazul unui sistem pipeline dinamic, numrul de liste ale latenelor interzise este egal cu ptratul numrului de uniti funcionale care partajeaz sistemul pipeline. In figura 9.26, numrul de uniti funcionale este 2, notate cu A i B ; astfel, numrul de liste ale latenelor interzise este 4, acestea fiind notate cu AA , AB , BA i BB . De exemplu, dac lista AB conine valoarea ntreag d , atunci un set de date care necesit unitatea funcional B nu poate fi aplicat la intrarea sistemului pipeline la momentul t + d , unde t reprezint momentul de timp la care setul de date necesitnd unitatea funcional A a fost aplicat la intrare. Deci,
AA = (3,0) , AB = ( 4,2,10) , BA = (2,1,0) , BB = (3,2,0) , Vectori de coliziune i matrice de coliziune. Vectorii de coliziune se determin n acelai mod ca i pentru un sistem pipeline static; 0 indic o laten permis, iar 1 indic o laten interzis. Pentru exemplul precedent, vectorii de coliziune sunt urmtorii: C AA = (01001) C BA = (00111) C AB = (10111) C BB = (01101) Vectorii de coliziune pentru unitatea funcional A formeaz matricea de coliziune M A : C M A = AA C AB Vectorii de coliziune pentru unitatea funcional B formeaz matricea de coliziune M B : C M B = BA C BB Pentru vectorii de coliziune din exemplul precedent, matricele de coliziune sunt urmtoarele:

01001 00111 MA = MB = 10111 01101 Diagrama strilor. Diagrama strilor pentru un sistem pipeline dinamic este construit n acelai mod ca i pentru un sistem pipeline static. Diagrama rezultat este mult mai complex dect diagrama strilor unui sistem pipeline static, datorit numrului mai mare de coliziuni poteniale. Ca un exemplu, considerm diagrama strilor din figura 9.27. Pentru nceput, ne referim la matricea de coliziune M A . Exist dou tipuri de coliziuni: A cu A (vectorul de sus) sau A cu B (vectorul de jos). Dac se alege prima laten permis pentru vectorul C AA (n acest caz, 1), ntreaga matrice este deplasat la dreapta cu o poziie, n poziiile din stnga fiind introduse zerouri. Apoi se execut o operaie SAU logic ntre noua matrice i matricea de coliziune iniial M A , deoarece latenele interzise originale pentru unitatea funcional A trebuie luate n considerare i n continuare.

Fig. 9.27 Dac se alege prima laten permis pentru vectorul C AB din matricea M A (n acest caz, 3), ntreaga matrice este deplasat la dreapta cu trei poziii, n poziiile din stnga fiind introduse zerouri. Apoi se execut o operaie SAU logic ntre noua matrice i matricea de coliziune iniial pentru unitatea funcional B , deoarece coliziunile originale pentru unitatea funcional B sunt nc posibile i trebuie luate n considerare. Operaia de deplasare i operaia SAU logic continu pn cnd se iau n considerare toate latenele posibile i diagrama strilor va fi complet.

Cap. 10. Arhitectura Intel (IA-32) 10.1. Procesoarele Intel Firma Intel a fost cea care a proiectat primul procesor, n anul 1969. Acesta a fost procesorul 4004, de 4 bii. Au urmat apoi procesoarele de 8 bii 8080 i 8085. Primul procesor al familiei 80x86, numit i familia cu arhitectura Intel (IA - Intel Architecture) a fost ns procesorul I8086, care a aprut n 1978, fiind urmat n scurt timp de o versiune mai ieftin pentru sisteme mai simple, procesorul I8088. Programele scrise pentru aceste procesoare puteau fi executate fr modificri i pe ultimele procesoare ale familiei 80x86. 10.2. Prezentare general a procesoarelor Intel I8086 i I8088 Procesorul I8086 are registre de 16 bii, o magistral extern de date de 16 bii i o magistral de adrese de 20 de bii, astfel c spaiul de adresare este de maxim 1 Mocteti. Procesorul I8088 este identic, cu excepia faptului c magistrala extern de date este de 8 bii. Aceste procesoare au introdus conceptul de segmentare a memoriei: memoria este mprit n zone numite segmente de maxim 64 Koctei, iar cele patru registre de segment pot pstra adresele de baz ale segmentelor active. Aceste procesoare pot funciona numai n modul real, care este un mod uniproces, n care se execut un singur proces (program sau task) la un moment dat. Din punct de vedere al programatorului, cele dou procesoare sunt identice, cu excepia faptului c I8086 va prelucra datele ntr-un mod mai eficient dac acestea sunt aliniate la adrese de cuvnt (adrese pare). I80186 i I80188 Procesoarele I80186 i I80188 sunt versiuni mbuntite ale procesoarelor I8086, respectiv I8088. Au fost adugate noi instruciuni i anumite instruciuni vechi au fost optimizate pentru creterea vitezei. Aceste procesoare conin n aceeai capsul i circuite suplimentare: un generator de tact, un controler DMA cu dou canale, trei numrtoare/temporizatoare programabile i un controler de ntreruperi, care poate gestiona patru surse externe de ntrerupere. 10.3. Procesorul I80286 Procesorul I80286 are dou moduri de lucru: modul real i modul protejat. Setul de instruciuni al procesorului I8086 a fost lrgit cu instruciuni specifice modului de lucru protejat, ce ofer suportul necesar implementrii unor sisteme de operare multitasking, cum este OS/2. Intr-un asemenea sistem de operare, unitatea central de prelucrare servete pe rnd mai multe taskuri, (procese), astfel nct utilizatorul are impresia c sunt ruleaz mai multe programe simultan. I80286 are magistrala de date de 16 bii la fel ca i I8086, dar n schimb are magistrala de adrese de 24 de bii, cu care poate adresa n mod direct un

spaiu de memorie de 16 Moctei. De asemenea, are n compunere o unitate de gestiune a memoriei, prin intermediul creia poate adresa o memorie virtual de 1Gocteti. La fel ca i I8086, poate adresa un spaiu de I/E de 64 Kporturi de 8 bii sau 32 Kporturi de 16 bii. I80286 lucreaz n conjuncie cu coprocesorul matematic I80287, care, spre deosebire de I8087, poate asigura asisten procesorului I80286, n ce privete efectuarea calculelor matematice i n modul protejat. I80286 este procesorul n jurul cruia au fost realizate calculatoarele IBM AT sau compatibile, folosind o magistral de tip ISA - Industrial Standard Architeclure. 10.3.1 Arhitectura intern a procesorului I80286 Procesorul I80286 este compus din 4 uniti independente care lucreaz n paralel: - unitatea de interfa cu magistrala - BU (Bus Unit); - unitatea instruciunilor - IU (Instruction Unit); - unitatea de execuie - EU (Execution Unit); - unitatea de adresare - AU (Adress Unit).

Fig. 10.1 Unitatea de interfa cu magistrala (BU) controleaz toate operaiile pe care procesorul le efectueaz pe magistral, genernd adresele datelor ce trebuie citite sau memorate i semnalele de control pentru memorie i porturile de l/E. BU transfer date ntre memorie sau porturi i procesor, la cererea unitii de execuie. Dac BU nu are o astfel de cerere din partea unitii de execuie, va aduce din memorie urmtoarea instruciune n secven, pe care o plaseaz ntr-o coad de instruciuni. Aceasta presupune c instruciunile se execut n secven, una dup alta, n ordinea n care apar n memorie. Dac survine o ruptur n secven (de exemplu o instruciune de salt), coada de instruciuni este resetat i se rencepe citirea instruciunilor cu anticipaie de la noua adres. Coada de

instruciuni este o memorie intern de 6 octei, care memoreaz codurile instruciunilor nainte de a fi utilizate de unitatea instruciunilor. Acest mecanism de citire cu anticipaie a instruciunilor permite eliminarea timpilor mori de citire din memorie a instruciunii urmtoare. Unitatea instruciunilor (IU) primete instruciuni din coada de instruciuni, le decodific, i le plaseaz ntr-o alt coad, cu lungimea de 3 octei, numit coada instruciunilor decodificate. Unitatea de execuie (EU) execut instruciunile preluate din coada de instruciuni decodificate i face apel la unitatea de interfa cu magistrala (BU), pentru toate transferurile de date cu memoria sau cu porturile de I/E. Unitatea de execuie conine o unitate aritmetico-logic -Arithmetical Logical Unit, destinat efecturii calculelor aritmetice i logice care intervin n execuia instruciunilor. UAL efectueaz calculele manevrnd regitrii generali i operanzi; instruciunilor, i totodat gestioneaz indicatorii de condiie i stare coninui n registrul indicatorilor de condiie i stare. Unitatea de adresare (AU) asigur gestiunea memoriei, mecanismele de protecie a memoriei i translatarea adreselor virtuale (logice) n adrese fizice, care sunt apoi utilizate de unitatea de interfa cu magistrala. Procesorului I80286 are o arhitectur de tip pipeline cele 4 uniti lucrnd n paralel, astfel c, spre exemplu, n timp ce unitatea de execuie este ocupat cu execuia instruciunii curente, unitatea de interfa cu magistrala ncarc instruciunea urmtoare, sau transfer n memorie rezultatul instruciunii executate anterior. In acelai timp, unitatea instruciunilor decodific urmtoarea instruciune de executat, pe care o pune n coada de instruciuni decodificate, pentru a fi preluat de unitatea de execuie. 10.3.2. Registrele procesorului I80286 Procesorul I80286 conine 15 regitri interni de 16 bii. Aceti regitri pot fi grupai n 5 categorii astfel: - regitri generali; - regitri indicatori de adres i index; - regitri de segment; - registrul pointerului de instruciuni; - regitri de control i stare; Regitri generali AX, BX, CX, DX sunt utilizai n majoritatea instruciunilor aritmetice i logice i pot fi folosii att ca regitri pe 16 bii, ct i ca regitri pe 8 bii. De exemplu, registrul AX, pe 16 bii, este compus din registrul AH ce conine cei 8 bii mai semnificativi din AX i din registrul AL, ce conine cei mai puin semnificativi 8 bii din AX.

Figura 10.2. Regitri procesorului I80286


.

Regitri SP i BP sunt denumii regitri indicatori de adres (sau pointer) i sunt folosii numai ca regitri pe 16 bii. Registrul SP conine deplasamentul n octei al vrfului stivei, fa de nceputul segmentului de stiv curent. De cele mai multe ori i registrul BP conine un deplasament n segmentul de stiv curent. Registrele BX i BP mai sunt denumite uneori i registre baz, fiind desemnate s conin adresa de baz a unei structuri de date din memorie, cum ar fi adresa de baz a unui tablou. Registrele index SI i DI sunt registre numai pe 16 bii i conin de regul un index, care se incrementeaz sau se decrementeaz pe msur ce se examineaz o structur de date. Sunt folosite n special de instruciunile de prelucrare a irurilor de caractere. Spaiul de memorie adresabil de I80286 este mprit n segmente logice cu dimensiunea maxim de 64 Kocteti. In general, programele sunt constituite din mai multe segmente (module) de cod, date, sau stiv, numai o parte din acestea fiind utilizate la un moment dat. Procesorul I80286 permite unui program s aib acces la 4 segmente simultan. Registrele de segment sunt utilizate pentru a identifica cele 4 segmente curente, fiecare registru fiind specializat pentru un anumit tip de segmente. Registrele de segment sunt: - CS - registru de segment de cod - DS - registru de segment de date - SS - registru de segment de stiv - ES - registru de segment de date suplimentare Toate registrele de segment au 16 bii. Registrele de segment sunt accesibile prin program. Coninutul registrelor de segment este interpretat diferit n funcie de modul de lucru al procesorului: real sau virtual. In modul de lucru real, care este modul de lucru compatibil I8086, registrele de segment conin cei mai semnificativi 16 bii ai adresei de baz a segmentelor de memorie. Pentru a face acces la o dat din memorie, procesorul trebuie s cunoasc adresa de baz a segmentului n care se afl data ce se dorete a fi accesat (adresa primului octet din segment), precum i adresa relativ n segment a datei respective, sau un deplasament (offset), ce reprezint distana n octei fa de nceputul segmentului. Astfel, n modul real, CS conine cei mai semnificativi 16 bii ai adresei de baz a segmentului de cod curent, DS conine cei mai semnificativi 16 bii ai adresei de baz a segmentului de date curent .a.m.d. Segmentele de cod ale unui program conin instruciunile programului.

Segmentele de date (referite de DS i ES) conin date sau variabile pentru programul ce se execut. Segmentele de stiv, referite prin intermediul registrului de segment SS, conin zone de memorie organizate pe principiul stivei. In modul de lucru protejat, registrele de segment conin un index ntr-o tabel de descriptori a segmentelor. Acest index indic ctre o intrare (fi) a unui segment. O intrare n aceast tabel conine un descriptor de segment, care cuprinde: - adresa de baz a segmentului; - dimensiunea segmentului; - drepturile de acces la segmentul respectiv etc. In concluzie, registrul de segment indic o intrare ntr-o tabel de descriptori a segmentelor, unde se gsete adresa de baz a segmentului n care se dorete a se efectua accesul. Din aceast cauz, n modul de lucru protejat, registrele de segment mai sunt denumite i selectori de segment, deoarece selecteaz un segment dintr-o tabel ce descrie mai multe segmente. Registrul pointer de instruciuni - IP - este un registru de 16 bii, care conine adresa relativ n raport cu nceputul segmentului de cod curent, a urmtoarei instruciuni ce trebuie executat. Registrul IP este transparent la nivelul programatorului, el fiind actualizat automat dup citirea instruciunii curente, astfel nct s indice deplasamentul urmtoarei instruciuni de executat. Registrul indicatorilor de stare i control - F - conine indicatorii de stare i control ai procesorului. Indicatorii de stare, n numr de 6, sunt poziionai de unitatea aritmetico-logic n urma execuiei unei instruciuni i reflect anumite stri ale rezultatului unei operaii aritmetice sau logice. Unele instruciuni ale procesorului testeaz aceti indicatori i, n funcie de cum sunt poziionai (n 0 sau n 1), se execut anumite aciuni specifice. 10.3.3. Modurile de lucru ale procesorului I80286 Modul de lucru real este modul compatibil I8086, asigurnd posibilitatea rulrii pe sisteme cu I80286 a programelor dezvoltate anterior pe procesoarele 8086/8088. Singurul avantaj este faptul c n modul real viteza de lucru este mai mare. In modul de lucru real memoria este adresat folosind un pointer de 32 de bii, format din dou componente. - un selector de segment de 16 bii, care indic segmentul de memorie dorit, aflat ntr-unul din registrele de segment, i - un deplasament (offset) de 16 bii, care indic octetul dorit n cadrul segmentului. Memoria fizic adresabil n modul real este de 1Moctet, I80286 folosind pentru adresarea memoriei numai liniile de adres A0-A19 i ignornd liniile A20A23, care sunt inute n zero. Memoria de 1Moctet este mprit n mai multe segmente logice, un segment logic fiind format din locaii adiacente de memorie, i avnd dimensiunea maxim de 64 Kocteti. Fiecrui segment i corespunde o

adres de baz, care este adresa locaiei de nceput a segmentului. Toate segmentele ncep la o adres multiplu de 16. Segmentele pot fi adiacente, disjuncte, parial sau total suprapuse. O locaie fizic poate s aparin unuia sau mai multor segmente. Adresa fizic pe 20 de bii a unei locaii de memorie se calculeaz nmulind selectorul de segment, aflat ntr-unui din registrele de segment, cu 16 (ceea ce nseamn de fapt deplasarea cu 4 poziii spre stnga), la care se adun deplasamentul (figura 10.3). Deci, coninutul registrului de segment este interpretat ca fiind cei mai semnificativi 16 bii ai adresei de baz a segmentului.

Fig. 10.3 Instruciunile unui program se gsesc ntr-unul din segmentele de cod ale programului. Adresa fizic a instruciunii care urmeaz s se execute, se obine folosind registrul CS, ce conine adresa de baz a segmentului de cod curent i registrul IP ca deplasament n segmentul de cod indicat de CS. Modul de lucru protejat ofer mecanisme de management i protecie a memoriei i un set de instruciuni asociate, procesorul I80286 lucrnd n acest mod la ntreaga sa capacitate. Pentru a intra n modul de lucru protejat, trebuie setat un anumit bit din registrul denumit MSW (Machine Status Word) Revenirea n modul real se face numai prin iniializarea procesorului. In modul de lucru protejat se poate adresa un spaiu de memorie de 16Moctei, utiliznd liniile de adres A0-A23, utilizatorul avnd la dispoziie i un spaiu de memorie virtual de 1Goctei/task. Pentru adresarea memoriei, se utilizeaz un pointer de 32 de bii, constituit dintr-un selector de 16 bii i un offset de 16 bii. Selectorul reprezint un index (deplasament) ntr-o tabel, de unde se obine adresa de baz, pe 24 de bii, a segmentului. La aceast adres de baz se adun offset-ul, obinndu-se adresa fizic pe 24 de bii. 10.3.4. Gestiunea i protecia memoriei la procesorul I80286. In modul de lucru protejat, programatorii folosesc acelai set de instruciuni (mai puin cteva instruciuni specifice modului protejat), moduri de adresare i tipuri de date ca i n modul real. Ceea ce deosebete fundamental modul protejat de modul real sunt facilitile legate de managementul memoriei, protecie i multitasking, care constituie suportul dezvoltrii i implementrii unor sisteme de operare evoluate. Mecanismul de memorie virtual d iluzia programatorului c memoria principal (care poate fi adresat n mod direct de procesor) este foarte mare. Practic, memoria calculatorului nu mai este "vzut" ca fiind organizat pe dou nivele: memorie principal i memorie secundar. ntreaga memorie a calculatorului este organizat astfel pe un singur nivel, numindu-se memorie virtual.

Programatorul folosete pentru adresarea memoriei adrese virtuale, o adres virtual specificnd o locaie din memoria virtual. Totalitatea adreselor virtuale formeaz spaiul de adrese virtual. Spaiul de adrese virtual este mprit n segmente de lungime variabil. Pentru a adresa o locaie n spaiul de adres virtual, se folosesc dou componente: o component care specific segmentul din memoria virtual i o component care specific deplasamentul n segment al locaiei respective. Dac segmentul referit nu se afl n memoria principal, se genereaz o ntrerupere a activitii i se va aduce segmentul respectiv din memoria secundar n memoria principal, dup care se revine din ntrerupere, accesnd locaia respectiv. Deci, prin acest mecanism de adresare virtual, programatorul este degrevat de sarcina gestiunii memoriei. El nu trebuie s tie dac un segment se afl n memoria principal sau n memoria secundar, dac se afl n memoria secundar s aduc segmentul n memoria principal etc, aceste sarcini fiind preluate de sistemul de operare, programatorul avnd la dispoziie un spaiu de adres virtual mult mai mare dect spaiul adreselor fizice (dimensiunea memoriei principale), dar cu care poate lucra la fel ca i cnd ar dispune de o memorie principal foarte mare. Pentru a ine evidena segmentelor, se construiete o tabel a segmentelor n memoria principal, n care sunt trecute toate informaiile despre fiecare segment din memoria virtual: adresa de baz, dimensiunea segmentului, dac este sau nu rezident n memoria principal, drepturi de acces etc. ncrcarea unui segment din memoria secundar n memoria principal se face n locul unui alt segment sau al mai multor segmente, care vor fi scoase din memoria principal i transferate n memoria secundar, conform unui anumit algoritm. De exemplu, va fi scos din memoria principal segmentul (sau segmentele) cel mai puin recent utilizat, sau o alt strategie poate propune scoaterea segmentului cel mai puin utilizat (cu numrul cel mai mic de accese la segment). Noiunea de protecie a memoriei desemneaz totalitatea controalelor efectuate de sistemul de operare n scopul asigurrii utilizrii corecte a informaiei, mpiedicnd propagarea erorilor de programare, ce pot duce la alterarea, distrugerea sau pierderea informaiei. Pentru implementarea mecanismelor de protecie, fiecare task se execut cu un anumit nivel de privilegiu. Procesorul I80286 recunoate 4 niveluri de privilegiu i nu permite ca un task cu un anumit nivel de privilegiu s acceseze date la un nivel mai privilegiat. Aceasta permite detectarea anumitor erori, uurnd dezvoltarea i ntreinerea programelor. Conceptul de task este de asemenea important n gestiunea memoriei Task-ul se definete la nivel de execuie, ca reprezentnd execuia unui program legat de contextul fiecrui utilizator. De exemplu, dac mai muli utilizatori din sistem utilizeaz acelai program de editare, se va crea pentru fiecare utilizator un task separat, fiecare task cu propriul su context. Fiecrui task i se ataeaz un spaiu de adresare, numit spaiu de adresare local. In

acelai timp, toate taskurile trebuie s poat avea acces la serviciile sistemului de operare, la biblioteci etc. Se definete astfel un spaiu de adresare global, care este partajabil de ctre toate taskurile. In modul de lucru protejat, taskurile lucreaz numai cu adrese virtuale, neavnd acces la adresele fizice generate de procesor. O adres care apare ntr-un program are dou componente: un selector de segment de 16 bii i un deplasament de 16 bii. Aceast adres (sau pointer) de 32 de bii se transform diferit n adres fizic n funcie de modul de lucru al procesorului, real sau protejat. In modul de lucru protejat selectorul de segment are urmtoare structur :

Fig.10.4 Cmpul RPL - Requested Priviledge Level - specific nivelul de prioritate al selectorului. Bitul TI specific spaiul de adresare local dac Tl=1, sau spaiul de adresare global dac TI=0. Biii 3-15 ai selectorului specific un index n tabela local de descriptori a segmentelor dac Tl=1, sau un index n tabela global de descriptori dac TI=0. Este permis astfel accesul la 8192 (213) segmente locale i 8192 segmente globale. innd cont de faptul c un segment are dimensiunea maxim de 64 Kocteti, rezult o capacitate de adresare virtual de 1Goctet pe task (2x213x64 Kocteti). Indexul reprezint, astfel, un pointer ntr-o tabel din memorie, unde se gsete adresa de baz pe 24 de bii a segmentului n care se dorete accesul. Mecanismul de protecie, implementat hard, poate localiza, izola i preveni un numr mare de erori de program. Toate testele referitoare la protecie se realizeaz n paralel cu execuia programului, ceea ce nu afecteaz performanele sistemului. Se poate pstra astfel funcionarea corect a sistemului, atunci cnd anumite programe ncearc s efectueze unele operaii interzise. Principalele tipuri de protecie implementate de I80286 sunt: - izolarea software-ului de sistem de software-ul de aplicaie al utilizatorului, - izolarea utilizatorilor ntre ei, - verificarea accesului la fiecare din obiectele definite n mod protejat (segmente, nivele, taskuri, etc.). Primul tip de protecie se realizeaz prin utilizarea a 4 niveluri de prioritate, nucleul sistemului de operare i programele de sistem executndu-se pe cele mai prioritare niveluri, n timp ce programele utilizatorilor se vor executa pe nivelurile mai puin prioritare. O eroare de program a unui utilizator nu va afecta, astfel, sistemul de operare. Prin izolarea utilizatorilor ntre ei, se previne situaia cnd o eroare a unui program utilizator poate afecta buna funcionare a altui program utilizator, erori care sunt greu de depistat. In ce privete al treilea tip de protecie, procesorul I80286 face o verificare

a folosirii corespunztoare a obiectelor la fiecare acces la memorie. De exemplu, segmentele de date nu pot fi executate, segmentele de cod nu pot fi modificate etc. Informaia utilizat de mecanismul de protecie se refer la: - tipul segmentului; - atributele segmentului (sau drepturile de acces); - nivelul de prioritate; - limita segmentului. Mecanismul de protecie acioneaz de dou ori: - la ncrcarea registrului de segment care va selecta un segment i - la fiecare acces n segmentul selectat. La ncrcarea registrelor de segment se testeaz dac descriptorul este valid (indexul din registrul de segment nu pointeaz n afara tabelei cu descriptori), dac descriptorul este accesibil de pe nivelul de prioritate de pe care se execut programul, dac segmentul indicat de descriptor este prezent n memorie, dac tipul segmentului corespunde cu registrul de segment. In cazul unui acces n cadrul segmentului referit de un registru de segment, se verific dac nu s-a depit limita segmentului i dac accesul corespunde tipului de segment. De exemplu, ntr-un segment de date cu atributul read only sau n segmentele de cod nu este permis scrierea. Orice violare a unei protecii va determina apariia unei excepii. Excepiile, ca i ntreruperile, sunt modaliti de transfer al controlului, dar care apar ca rezultat direct al execuiei instruciunilor programului, spre deosebire de ntreruperi care apar independent de execuia normal sau anormal a programului curent. O excepie apare n condiiile n care execuia unei instruciuni nu se poate termina normal. Dei cauzele lor difer, ntreruperile i excepiile utilizeaz acelai mod de transfer al controlului. Tot o manifestare a mecanismului de protecie este i separarea spaiilor de adres ntre utilizatori. Fiecare task utilizator are o tabel local cu descriptori, coninutul tabelei locale curente fiind schimbat la fiecare comutare de task. 10.5.5. ntreruperile procesorului I80286 ntreruperile sunt modaliti de transfer al controlului. La apariia unei ntreruperi, procesorul ntrerupe execuia programului curent i execut n continuare rutina de tratare a ntreruperii respective, pn cnd ntlnete instruciunea IRET, care este instruciunea de revenire din ntrerupere. Dup execuia instruciunii IRET, procesorul reia execuia programului ntrerupt de la instruciunea imediat urmtoare instruciunii ce se executa n momentul apariiei ntreruperii. Fiecare rutin de ntrerupere are asociat o adres, care este adresa primei instruciuni din cadrul rutinei de tratare a ntreruperii. Orice rutin de ntrerupere se termin cu instruciunea IRET. Adresele tuturor rutinelor de tratare a ntreruperilor sunt trecute ntr-o

tabel din memorie. In modul real sunt rezervai pentru aceast tabel primii 1024 de octei din memorie (de la 00000H la 003FFH ), ce memoreaz o tabel cu 256 de intrri, numit tabela vectorilor de ntrerupere. Deci, n modul real sunt disponibile 256 de ntreruperi, fiecare intrare n tabel (de 4 octei) coninnd adresa rutinei de tratare a ntreruperii corespondente. In modul de lucru protejat, sunt disponibile de asemenea 256 de ntreruperi, dar rutinele de tratare a ntreruperilor sunt accesate prin intermediul porilor. Adresele rutinelor de ntrerupere sunt trecute ntr-o tabel, numit tabela descriptorilor de ntrerupere - IDT (Interrupt Descriptor Table ), accesat prin intermediul registrului IDTR - Interrupt Descriptor Table Regisler, ce conine adresa de baz i limita tabelei IDT. Fiecare intrare n tabela IDT va conine 8 octei, ci sunt necesari pentru un descriptor de poart, dimensiunea tabelei fiind ajustat cu ajutorul cmpului Limit din IDTR. In cazul apariiei unei ntreruperi n modul real, procesorul ntrerupe programul curent, salveaz registrele n stiv, servete ntreruperea, dup care restaureaz registrele din stiv, continund programul ntrerupt. In modul protejat, nu este suficient s se salveze numai registrele, ci se salveaz ntreaga stare a taskului (registrele plus alte informaii ) ntr-un segment de sistem, numit segment de stare a taskului - TSS (Task State Segment). Mai precis, la sosirea unei ntreruperi (interne sau externe) n modul real, procesorul efectueaz urmtoarele: - salveaz n stiv registrul indicatorilor de condiie i stare, CS-ul i IPul instruciunii urmtoare, n aceast ordine; - reseteaz indicatorul de stare IF. Dac IF- Interrupt Flag este poziionat pe 1 procesorul recunoate cererile de ntrerupere extern; - se execut instruciunile din rutina de ntrerupere, pn cnd se ntlnete instruciunea IRET; - la ntlnirea instruciunii IRET se revine din ntrerupere, restaurnd din stiv IP, CS i registrul indicatorilor de condiie i stare. Stiva trebuie s se gseasc n aceeai stare ca la apariia ntreruperii. Este indicat ca la nceputul unei rutine de ntrerupere s se salveze registrele procesorului n stiv, urmnd a fi restaurate nainte de execuia instruciunii IRET. Procesorul I80286 are trei tipuri de ntreruperi: - ntreruperi hardware; - ntreruperi software; - excepii. ntreruperile hardware se mai numesc i ntreruperi externe, ntreruperile software i excepiile fiind numite i ntreruperi interne. ntreruperile hardware sunt generate de dispozitive hardware i pot fi la rndul lor de dou tipuri: - ntreruperi mascabile i - ntreruperi nemascabile. ntreruperile hardware mascabile sunt generate prin aplicarea unui "1" logic

pe intrarea (pinul) INTR a procesorului. Procesorul va ntrerupe programul curent i va executa o rutin de tratare a ntreruperii, numai dac indicatorul IF din registrul indicatorilor de condiie i stare este 1. Dac IF=0, procesorul continu nestingherit execuia programului curent. Indicatorul IF poate fi poziionat n 0 sau 1 prin program. Prin invalidarea ntreruperilor externe mascabile, poziionnd IF n zero, se previne ntreruperea unor secvene critice de program, care nu pot, fi ntrerupte. Dac ntreruperile externe sunt validate, dup execuia instruciunii curente, procesorul va efectua recunoaterea ntreruperii, pentru a afla adresa rutinei de tratare a ntreruperii. Majoritatea dispozitivelor periferice (imprimanta, hard disk, tastatur etc.) folosesc mecanismul de ntrerupere al procesorului. De exemplu, tastatura va ntrerupe procesorul atunci cnd este apsat o tast. Prin rutina de ntrerupere corespunztoare tastaturii, procesorul va prelua codul tastei apsate, dup care continu programul ntrerupt. Deoarece exist mai multe dispozitive hardware care pot genera ntreruperi n acelai timp, este necesar existena unui dispozitiv, numit controler de ntreruperi, care permite dispozitivelor hardware s ntrerup procesorul conform unei ordine de prioritate. Dac exist mai multe cereri de ntrerupere din partea unor dispozitive hardware, controler de ntreruperi va pune 1 pe linia INTR, ntrerupnd procesorul, dup care, atunci cnd procesorul efectueaz recunoaterea ntreruperii, va depune pe magistrala de date vectorul de ntrerupere al dispozitivului hardware cel mai prioritar. Dup citirea vectorului de ntrerupere de pe magistrala de date, procesorul va prelua din intrarea n tabela vectorilor de ntrerupere sau din IDT, adresa rutinei de tratare a ntreruperii corespunztoare dispozitivului hardware ce a generat ntreruperea. ntreruperile externe nemascabile sunt generate prin aplicare unui 1 logic pe intrarea NM (NeMascable Interrupt) a procesorului, aceste ntreruperi fiind asociate cu apariia unor evenimente deosebite, cum ar fi cderea tensiunii de alimentare, cnd procesorul trebuie s execute anumite aciuni de urgen. Aceste ntreruperi sunt tratate imediat ce apar, nefiind posibil invalidarea lor. Adresa rutinei de tratare a ntreruperilor nemascabile se afl n intrarea numrul 2 din tabela vectorilor de ntrerupere (sau IDT), procesorul transfernd automat controlul la aceast rutin, imediat ce recepioneaz un 1 logic pe intrarea NM1. ntreruperile software sunt generate prin execuia unei instruciuni INT n , unde n este un numr ntreg cuprins ntre 0 i 255. Dup execuia acestei instruciuni, procesorul va transfera controlul la rutina de ntrerupere a crei adres se gsete n intrarea cu numrul n , din tabela vectorilor de ntrerupere sau tabela descriptorilor de ntrerupere. De exemplu, instruciunea INT 2 va executa aceeai rutin de ntrerupere care se execut i n cazul apariiei unei ntreruperi externe nemascabile. Excepiile sunt ntreruperi generate de ctre procesor nsui. In tratarea excepiilor, procesorul nu face distincie ntre o excepie i o ntrerupere software cu numrul egal cu cel al excepiei respective. Exemple de excepii: - division by zero - procesorul genereaz automat o ntrerupere cu

numrul 0 (deci la fel ca i instruciunea INT 0), atunci cnd instruciunile de mprire DIV i IDIV ncearc s efectueze o mprire la zero. - overflow detection - dac indicatorul OF este setat n urma unei instruciuni, procesorul execut o ntrerupere cu numrul 4. - single step - procesorul execut ntreruperea numrul 1, dup fiecare instruciune executat, dac indicatorul TF este setat. TF este indicatorul de urmrire (Trap Flag) care controleaz modul de funcionare al procesorului. Dac TF este setat procesorului intr n modul de funcionare pas cu pas utilizat pentru depanare. In acest mod, dup execuia unei instruciuni se genereaz o ntrerupere intern, ceea ce d posibilitatea investigrii rezultatului execuiei instruciuni. - coprocessor non prezent - procesorul execut automat o ntrerupere cu numrul 7, dac unitatea instruciunilor detecteaz o instruciune pentru coprocesorul matematic i acesta nu este prezent. 10.4. Procesorul I80386 Procesorul I80386 a introdus n cadrul arhitecturii Intel registre de 32 de bii, utilizate att pentru pstrarea datelor ct i pentru adresare. Pentru compatibilitate cu procesoarele anterioare, aceste registre s-au obinut prin extinderea registrelor de 16 bii, fiind posibil utilizarea n continuare a vechilor registre, acestea constituind jumtatea de ordin inferior a registrelor de 32 de bii. Aceste faciliti au contribuit la creterea remarcabil a vitezei de lucru pentru procesor I80386. Extinderea magistralei de adrese la 32 de bii a dat posibilitatea procesorului I80386 s adreseze n mod direct o memorie de 4 Goctei i o memorie virtual de 64Toctei pe task. Spaiul de intrare/ieire este limitat totui la 64 Kporturi, la fel ca la procesorul I80286, n schimb pe lng porturi de 8 sau 16 bii, I80386 poate accesa i porturi de 32 bii. Procesorul 180386 are 3 moduri de lucru: real, protejat i virtual 8086. In modul real, 80386 poate adresa o memorie de 1Moctei, lucrnd ca un 8086 mult mai rapid. Modul protejat I80386 este compatibil cu modul protejat I80286, dar datorit spaiului de memorie mult mai mare (4Goctei n loc de 16Moctei), descriptorii de segmente i pori au fost puin modificai, pstrndu-se compatibilitatea. Spaiul de adres virtual, de 64Toctei, este mprit n segmente cu dimensiunea maxim de 4Goctei. Deci, n modul de lucru protejat I80386, dimensiunea maxim a unui segment nu mai este limitat la 64Kocteti. In modul de lucru virtual 8086, I80386 lucreaz ca un procesor 8086, beneficiindu-se n schimb de toate facilitile de management i protecie oferite de I80386. Procesorul I80386 a introdus de asemenea mecanismul de paginare ca metod de gestiune a memoriei virtuale, cu dimensiunea fix de 4 Koctei a paginilor de memorie. Paginarea a asigurat o eficien mai ridicat comparativ cu utilizarea segmentelor, metoda fiind complet transparent pentru programele de aplicaii, fr o reducere semnificativ a vitezei de execuie. In plus, posibilitatea

definirii segmentelor avnd dimensiunea maxim a spaiului adreselor fizice de 4 Goctei, mpreun cu paginarea, au permis introducerea modelului protejat de adresare liniar n cadrul arhitecturii, n care este necesar o singur component a adresei pentru accesul la ntregul spaiu de adresare al memoriei. Instruciunile originale au fost extinse cu noi forme care utilizeaz operanzi i adrese de 32 de bii i au fost introduse instruciuni complet noi, ca de exemplu instruciuni pentru operaii la nivel de bit. Procesorul 80386 a fost primul din cadrul familiei 80x86 care a utilizat o form mai avansat de prelucrare paralel. Arhitectura acestui procesor cuprinde un numr de ase uniti care funcioneaz n paralel. Acestea sunt urmtoarele: 1. Unitatea de interfa cu magistrala, care realizeaz accesul la memorie i la dispozitivele de l/E; 2. Unitatea de ncrcare a instruciunilor, care primete codul instruciunilor de la unitatea de interfa cu magistrala i le depune ntr-o coad de 16 octei; 3. Unitatea de decodificare a instruciunilor, care decodific codul obiect al instruciunilor i genereaz un microcod pentru execuia acestora; 4. Unitatea de execuie, care execut microcodul corespunztor fiecrei instruciuni; 5. Unitatea de segmentare, care translateaz adresele logice n adrese liniare i efectueaz testele necesare proteciei; 6. Unitatea de paginare, care translateaz adresele liniare n adrese fizice, efectueaz testele necesare proteciei paginilor de memorie i conine o memorie cache cu informaii despre pn la 32 de pagini cel mai recent accesate. 10.5. Procesorul I80486 Procesorul I80486 integreaz pe un acelai cip un procesor I80386 evoluat, un coprocesor matematic I80387 mult mai puternic i o memorie cache de 8 Koctei. Poate lucra la o frecven a ceasului ntre 25 i 50 MHz. I80486 execut multe instruciuni ale microprocesorului 80386 ntr-o singur perioad a ceasului, fiind de trei ori mai rapid dect un 80386 lucrnd la aceeai frecven. Procesorul I80486 a extins posibilitile de execuie paralel a instruciunilor, n principal prin extinderea unitilor de decodificare a instruciunilor i de execuie ale procesorului I80386 n cinci etaje de tip pipeline, fiecare etaj opernd n paralel cu celelalte asupra a cinci instruciuni aflate n diferite faze de execuie. Fiecare etaj poate termina prelucrrile pe care le efectueaz asupra unei instruciuni ntr-o perioad de ceas, astfel nct procesorul I80486 poate executa cte o instruciune n fiecare perioad de ceas. Adugarea memoriei cache a condus n mod semnificativ la creterea numrului de instruciuni care se pot executa ntr-o singur perioad de ceas. Au fost adugai de asemenea noi pini i noi instruciuni care permit realizarea unor sisteme mai complexe: sisteme multiprocesor i sisteme care conin o memorie cache de nivel 2. Astfel pe lng memoria cache de pe cip, plcile de baz ale calculatoarelor cu microprocesor I80486 au, de regul, o memorie cache de 256 Koctei, numit memorie cache secundar, care poate fi

extins n principiu la orice dimensiune.

Fig. 10.5. La aceast memorie cache secundar, n mod normal, accesul se realizeaz n dou perioade de ceas. Pentru transferarea unor cantiti mari de date ntre memorie i procesor, I80486 implementeaz un nou mod de lucru pe magistral fa de I80386, numit mod salv sau burst mode. In modul burst, transferul unei date ntre memorie i procesor se face ntr-o singur perioad de ceas, deci rata de transfer a datelor ntre memorie i procesor se dubleaz. lntr-un ciclu burst pot fi transferai pn la 16 octei consecutivi din acelai paragraf de memorie. Un paragraf este o zon de memorie de 16 octei, care ncepe la o adres multiplu de 16. In figura 10.4 este prezentat structura intern a procesorului I80486. Din memoria cache instruciunile sunt transferate n coada de instruciuni Prefetcher, care este o memorie de 32 de octei (fa de 16 octei la I80386), ce separ operanzii imediai sau deplasamentele de codul propriu-zis al instruciunii, trimindu-le ctre ALU, registre sau unitatea de segmentare, unde vor fi prelucrate. Unitatea de decodificare decodific instruciunile, aceste instruciuni decodificate fiind folosite apoi de unitatea de control, pentru a comanda registrele, ALU, unitile de segmentare i de virgul mobil. Nu toate instruciunile trebuie decodificate, ca la procesoarele anterioare din familia I80x86, unele instruciuni pot fi executate direct, procesorul I80486 fiind primul din familie care folosete anumite concepte i tehnologii RISC. Comunicaia cu unitatea de virgul mobil, ce corespunde coprocesorului I80387, se face pe o magistral intern de 64 de bii, ceea ce duce la o vitez mult mai mare de execuie a calculelor matematice, fa de cazul n care se folosete o pereche I80386/I80387, care comunic ntre ele pe o magistral extern de 32 de bii. Unitatea de segmentare este responsabil de protecia i gestiunea memoriei. In plus, I80486 are patru buffere interne pentru scriere, procesorul transfernd datele de ieire n aceste buffere, n ordine, numai atunci cnd magistrala este ocupat, dup care procesorul poate executa o alt activitate, aceste buffere fiind responsabile de livrarea datelor pe magistral, atunci cnd

aceasta devine disponibil. I80386 nu este prevzut cu aceste buffere de ieire. Au fost dezvoltate versiuni ale procesorului I80486 n care au fost incluse faciliti pentru reducerea consumului de putere, ca i alte faciliti de gestiune a sistemului. Procesorul I80386 SL a fost de fapt primul care coninea asemenea faciliti, acestea fiind extinse apoi la procesoarele I80486 SL i I80486 SL Enhanced, care au fost utilizate pentru realizarea calculatoarelor "notebook". Una din aceste faciliti este noul mod de gestiune a sistemului (System Management Mode - SMM), pentru care s-a prevzut un pin dedicat de ntrerupere. Acest mod permite operaii complexe de gestiune a sistemului (ca de exemplu gestiunea puterii consumate de diferitele subsisteme ale calculatorului), ntr-un mod transparent pentru sistemul de operare i pentru programele de aplicaii. Facilitile numite "Stop Clock" i "Auto Halt Powerdown" permit funcionarea unitii centrale la o frecven redus a tactului pentru reducerea puterii consumate, sau chiar oprirea funcionrii (cu memorarea strii).

2.6. Procesorul Pentium Procesorul Pentium a adugat o nou linie de execuie de tip pipeline a instruciunilor, pentru a se obine performane superscalare. Cele dou linii de execuie a instruciunilor, numite u i v, permit execuia a dou instruciuni pe durata unei perioade de tact. Capacitatea memoriei cache L1 a fost de asemenea dublat, fiind alocai 8 Koctei pentru instruciuni i 8 Koctei pentru date. Memoria cache pentru date utilizeaz protocolul MESI, care permite gestiunea memoriei cache att prin metoda mai eficient "write-back"', ct i prin metoda "write-through" utilizat de procesorul I80486. Procesorul Pentium utilizeaz predicia salturilor pentru a crete performanele construciilor care utilizeaz bucle de program. S-au adugat extensii pentru a crete eficiena modului virtual I8086 i pentru a permite att pagini cu dimensiunea de 4 Moctei, ct i cu dimensiunea de 4 Koctei. Registrele generale sunt tot de 32 de bii, dar s-au adugat ci interne de date de 128 i 256 de bii pentru a crete viteza transferurilor interne, iar magistrala extern de date a fost extins la 64 de bii. Procesorului i s-a adugat un controler avansat de ntreruperi (Advanced Programmable Interrupt Controller -APIC) pentru a permite realizarea sistemelor cu mai multe procesoare Pentium, fiind adugai, de asemenea, noi pini i un mod special de procesare dual pentru sistemele cu dou procesoare. 2.7. Procesoarele din familia P6 Pentium Pro Procesorul Pentium Pro este primul din cadrul familiei de procesoare P6. Acest procesor are o arhitectur superscalar mbuntit, care permite execuia a trei instruciuni ntr-o perioad de tact. Procesorul Pentium Pro, ca i urmtoarele procesoare din familia P6, se caracterizeaz prin execuia dinamic a instruciunilor, care const din analiza fluxului de date, execuia instruciunilor ntr-o alt ordine dect cea secvenial, o predicie mbuntit a salturilor i execuia speculativ. Exist trei uniti de decodificare a instruciunilor, care lucreaz n paralel pentru decodificarea codului obiect n operaii elementare numite microoperaii. Acestea sunt depuse ntr-un rezervor de instruciuni i pot fi executate ntr-o ordine diferit de cea secvenial dac nu exist dependene de date. Execuia se realizeaz de ctre cele cinci uniti paralele de execuie: dou uniti pentru numere ntregi, dou uniti pentru numere n virgul mobil i o unitate de interfa cu memoria. Unitatea de retragere (Retirement Unit) elimin din rezervorul de instruciuni microoperaiile care au fost executate, innd cont de salturile posibile. Pe lng cele dou memorii cache L1 de cte 8 Koctei, prezente i la procesorul Pentium, procesorul Pentium Pro dispune i de o memorie cache L2 de 256 Koctei, aflat n acelai circuit cu unitatea central, conectat cu aceasta printr-o magistral dedicat de 64 de bii. Memoria cache L1 are porturi duale (dou porturi de acces), iar memoria cache L2 permite pn la 4 accesuri concurente. Magistrala extern de date este orientat pe tranzacii, ceea ce nseamn c fiecare acces este tratat ca o cerere i un rspuns separat, fiind permise mai

multe cereri n timp ce se ateapt un rspuns. Aceste caracteristici de acces paralel la date, mpreun cu posibilitile de execuie paralel a instruciunilor asigur creterea gradului de utilizare a procesorului i mbuntirea performanelor. Procesorul Pentium Pro are o magistral de adrese extins la 36 de bii, astfel nct spaiul adreselor fizice este de pn la 64 Goctei. Pentium 2 Procesorul Pentium 2 se bazeaz pe arhitectura Pentium Pro, la care s-au adugat extensiile MMX (Multimedia Extensions). La acest procesor s-au utilizat noile tehnici de ncapsulare numite Slot 1 i Slot 2. In cazul acestor tehnici, n locul unui soclu se utilizeaz un conector. Memoria cache L2 a fost mutat n afara capsulei procesorului. Att memoria cache L1 pentru date, ct i memoria cache L1 pentru instruciuni au fost extinse la 16 Koctei fiecare. Dimensiunea memoriei cache L2 poate fi de 256 Koctei, 512 Koctei, 1 Moctei sau 2 Moctei (numai cu tehnica Slot 2). Procesorul cu Slot 1 utilizeaz pentru comunicaia cu memoria cache L2 o magistral care funcioneaz la o frecven egal cu jumtatea frecvenei de tact a procesorului, n timp ce n cazul procesorului cu Slot 2 aceast frecven este egal cu frecvena de tact a procesorului. Procesorul Pentium 2 utilizeaz diferite stri cu consum redus de putere, ca de exemplu AutoHALT, Stop-Grant, Sleep i Deep Sleep, pentru reducerea puterii consumate n perioadele de inactivitate. Pentium 3 Acest procesor din cadrul familiei P6 se bazeaz pe arhitecturile procesoarelor Pentium Pro i Pentium 2. Au fost adugate 70 de noi instruciuni la setul de instruciuni existent. Acestea sunt destinate att unitilor funcionale existente la procesoarele precedente, ct i noii uniti de calcul n virgul mobil de tip SIMD (Single Instruction, Multiple Data). 2.8. Microarhitectura procesoarelor din familia P6 2.8.1. Prezentare general a microarhitecturii Microarhitectura procesoarelor din familia P6 este una superscalar cu trei ci. Aceasta nseamn c, prin utilizarea tehnicilor de prelucrare paralel, procesorul poate decodifica i executa n medie trei instruciuni n fiecare ciclu de ceas. Pentru a obine aceast rat de execuie a instruciunilor, procesoarele din familia P6 utilizeaz o cale de date de tip pipeline cu 12 etaje, care permite execuia instruciunilor ntr-o ordine diferit de cea specificat n program. Figura 2.6 prezint structura acestei ci de date, care este mprit n patru uniti de prelucrare: unitatea de extragere i decodificare, unitatea de expediere i execuie, unitatea de retragere i rezervorul de instruciuni. Instruciunile i datele sunt transmise acestor uniti prin unitatea de interfa cu magistrala. Pentru a asigura furnizarea constant a instruciunilor i datelor la unitile de execuie din calea de date, microarhitectura utilizeaz dou nivele de memorie

cache. Memoria cache L1 este mprit ntr-o memorie cache de 8 Koctei pentru instruciuni i o memorie cache de 8 Koctei pentru date, ambele integrate n calea de date. Memoria cache L2 este o memorie RAM static de 256 Koctei, 512 Koctei sau 1 Moctei,

Fig. 2.6 care este conectat la calea de date printr-o magistral de 64 de bii, funcionnd la frecvena de ceas a procesorului. Procesoarele din familia P6 utilizeaz execuia dinamic a instruciunilor. Mecanismul de execuie dinamic cuprinde trei concepte: 1. Predicia salturilor; 2. Analiza dinamic a fluxului de date; 3. Execuia speculativ. Predicia salturilor este un concept ntlnit la majoritatea arhitecturilor performante de calculatoare i a procesoarelor de vitez ridicat. Acest concept permite procesorului decodificarea instruciunilor care urmeaz dup cele de salt pentru a nu goli calea de date pipeline la execuia instruciunilor de salt. Unitatea de extragere i decodificare a instruciunilor utilizeaz un algoritm de predicie optimizat pentru anticiparea direciei fluxului de instruciuni prin nivele multiple de salturi, apeluri de proceduri i reveniri din proceduri. Analiza dinamic a fluxului de date implic analiza n timp real a fluxului datelor prin procesor pentru a determina dependena datelor i a registrelor i pentru a detecta posibilitatea execuiei instruciunilor ntr-o ordine diferit de cea specificat n program. Unitatea de expediere i execuie a instruciunilor poate monitoriza simultan mai multe instruciuni i poate executa aceste instruciuni ntr-o ordine n care se optimizeaz utilizarea unitilor multiple de execuie ale microarhitecturii, meninnd n acelai timp integritatea datelor asupra crora se

opereaz. Aceast ordine de execuie asigur ocuparea unitilor de execuie chiar i atunci cnd apar dependene ntre datele instruciunilor. Execuia speculativ se refer la posibilitatea procesorului de a executa instruciuni aflate naintea instruciunii adresate de contorul de program i de a furniza rezultatele n ordinea irului iniial de instruciuni. Pentru ca execuia speculativ s fie posibil, microarhitectura familiei P6 separ expedierea i execuia instruciunilor de producerea rezultatelor. Unitatea de expediere i execuie a instruciunilor utilizeaz analiza fluxului de date pentru a executa toate instruciunile din rezervorul de instruciuni i a memora rezultatele n registre temporare. Unitatea de retragere a instruciunilor caut apoi instruciunile care au fost executate i pentru care nu mai exist dependene de date cu alte instruciuni sau predicii nerezolvate ale salturilor. Atunci cnd se gsesc instruciuni care au fost executate, unitatea de retragere a instruciunilor depune rezultatele acestor instruciuni n memorie sau n registrele microarhitecturii (cele opt registre ale procesorului i opt registre ale unitii de calcul n virgul mobil), n ordinea specificat n program i retrage aceste instruciuni din rezervorul de instruciuni. 2.8.2. Prezentare detaliat a microarhitecturii Figura 2.7 prezint o schem bloc funcional a microarhitecturii procesoarelor din familia P6.

Fig.2.7 In aceast schem, exist urmtoarele blocuri componente ale celor patru

uniti de execuie i a subsistemului de memorie din figura 2.5: 1. Subsistemul de memorie: magistrala sistem, memoria cache L2, unitatea de interfa cu magistrala, memoria cache L1 de instruciuni, memoria cache L1 de date, unitatea de interfa cu memoria i bufferul de reordonare al memoriei. 2. Unitatea de extragere i decodificare: unitatea de extragere a instruciunilor, bufferul pentru destinaia salturilor (BTB - Branch Target Buffer), decodificatorul de instruciuni, secveniatorul microcodului i tabela de pseudonime a registrelor (Register Alias Table). 3. Rezervorul de instruciuni: bufferul de reordonare. 4. Unitatea de expediere si execuie: staia de rezervare, dou uniti de calcul pentru numere ntregi, dou uniti de calcul n virgul mobil i dou uniti de generare a adreselor. 5. Unitatea de retragere a instruciunilor: unitatea de retragere i setul de registre al arhitecturii Intel. Subsistemul de memorie al microarhitecturii P6 este format din memoria principal a sistemului, memoria cache primar (L1) i memoria cache secundar (L2). Unitatea de interfa cu magistrala acceseaz memoria sistemului prin magistrala sistemului (extern). Aceast magistral de 64 de bii este o magistral orientat pe tranzacii, ceea ce nseamn c fiecare acces la magistral este tratat prin operaii separate de cerere i rspuns. In timp ce unitatea de interfa cu magistrala ateapt rspunsul la o cerere de acces la magistral, se pot emite alte cereri. Unitatea de interfa cu magistrala acceseaz memoria cache L2 printr-o magistral de 64 de bii a memoriei cache. Aceast magistral este de asemenea orientat pe tranzacii, permind pn la patru accesuri concurente la memoria cache i funcioneaz la aceeai frecven de ceas ca i procesorul. Accesul la memoria cache L1 se realizeaz prin magistrale interne, de asemenea la frecvena de ceas a procesorului. Memoria cache L1 de 8 Koctei pentru instruciuni este un set asociativ cu patru ci. Memoria cache L1 de 8 Koctei pentru date este un set asociativ cu dou ci, avnd dou porturi, i permite o operaie de ncrcare i una de memorare ntr-un ciclu. Coerena ntre memoriile cache i memoria sistemului este asigurat prin utilizarea protocolului MESI (Modified, Exclusive, Shared, Invalid). Acest protocol este utilizat pentru asigurarea coerenei ntre memoriile cache att la sistemele cu un singur procesor, ct i la cele multiprocesor. Cererile de acces la memorie de la unitile de execuie ale procesorului trec prin unitatea de interfa cu memoria i prin bufferul de reordonare al memoriei. In cazul unei lipse n memoria cache L1 pentru date, aceast memorie redirecteaz cererea ctre memoria cache L2 i apoi, n cazul unei lipse n aceast memorie, unitatea de interfa cu magistrala redirecteaz cererea ctre memoria sistemului. Cererile de acces la memoria cache L2 sau la memoria sistemului trec prin bufferul de reordonare al memoriei, care funcioneaz ca o staie de planificare i expediie. Aceast unitate pstreaz evidena tuturor cererilor de acces la memorie i poate reordona anumite cereri pentru a preveni blocajele i a mbunti rata

de transfer. De exemplu, bufferul de reordonare al memoriei permite operaii speculative de ncrcare. (Operaiile de memorare sunt executate ntotdeauna n ordinea iniial, iar operaiile speculative de memorare nu sunt permise.) Unitatea de extragere i decodificare citete un ir de instruciuni din memoria cache L1 de instruciuni i le decodific ntr-o serie de microoperaii. Acest ir de microoperaii este transmis apoi la rezervorul de instruciuni. Unitatea de extragere a instruciunilor ncarc n fiecare ciclu de ceas o linie de 32 de octei din memoria cache de instruciuni. Unitatea marcheaz nceputul i sfritul instruciunilor n cadrul liniilor memoriei cache i transmite 16 octei aliniai la decodificatorul de instruciuni. Unitatea de extragere a instruciunilor calculeaz valoarea pointerului de instruciuni, pe baza intrrilor de la bufferul pentru destinaia salturilor, a strii excepiilor i a ntreruperilor. Pentru a executa predicia salturilor, bufferul pentru destinaia salturilor, cu 512 intrri, urmrete un numr mare de instruciuni aflate naintea contorului de program. In cadrul acestor instruciuni pot fi numeroase salturi, apeluri de proceduri i reveniri din proceduri, care trebuie anticipate n mod corect. Decodificatorul de instruciuni conine trei decodificatoare: dou decodificatoare pentru instruciuni simple i un decodificator pentru instruciuni complexe. Fiecare decodificator convertete o instruciune ntr-una sau mai multe microoperaii, fiecare avnd dou surse logice i o destinaie logic. Microoperaiile sunt instruciuni primitive care sunt executate n unitile paralele de execuie ale procesorului. Multe instruciuni ale procesorului sunt convertite direct n cte o singur microoperaie de ctre decodificatoarele pentru instruciuni simple, iar anumite instruciuni sunt decodificate ntr-un numr de pn la patru microoperaii. Instruciunile mai complexe sunt decodificate n secvene programate de microoperaii obinute de la secveniatorul microcodului. Decodificatoarele de instruciuni realizeaz de asemenea decodificarea prefixelor de instruciuni i a operaiilor de ciclare. Aceste decodificatoare pot genera pn la ase microoperaii pe ciclu de ceas (cte una de ctre decodificatoarele pentru instruciuni simple i patru de ctre decodificatoarele pentru instruciuni complexe). Setul de registre al procesorului poate cauza blocaje din cauza dependenelor ntre registre. Pentru a rezolva aceast problem, procesorul dispune de 40 de registre interne, care se utilizeaz pentru calcule. Aceste registre pot pstra att valori ntregi, ct i valori n virgul mobil Pentru alocarea registrelor interne, microoperaiile de la decodificatorul de instruciuni sunt transmise la tabela de pseudonime ale registrelor, unde referinele logice la registrele procesorului sunt convertite n referine fizice la registrele interne. In etapa final a procesului de decodificare, alocatorul din cadrul tabelei de pseudonime ale registrelor adaug bii de stare la microoperaii pentru a Ie pregti n vederea execuiei ntr-o ordine diferit de cea secvenial i transmite microoperaiile rezultate la rezervorul de instruciuni. Rezervorul de instruciuni. naintea depunerii microoperaiilor n rezervorul de instruciuni (cunoscut i sub numele de buffer de reordonare), irul de

instruciuni decodificat n microoperaii se afl n aceeai ordine cu cea n care acest ir a fost transmis la decodificatorul de instruciuni. Bufferul de reordonare este o memorie asociativ organizat n 40 de registre. Bufferul conine microoperaii care ateapt pentru a fi executate, ca i microoperaii care au fost deja executate, dar ale cror rezultate nu au fost nc memorate. Unitatea de expediere i execuie poate executa microoperaiile din bufferul de reordonare n orice ordine. Unitatea de expediere i execuie planific i execut microoperaiile depuse n bufferul de reordonare innd cont de dependenele de date i de disponibilitatea resurselor i memoreaz temporar rezultatele acestor execuii speculative. Planificarea i expedierea microoperaiilor din bufferul de reordonare este realizat de staia de rezervare. Aceasta urmrete permanent bufferul de reordonare pentru a determina microoperaiile care sunt gata de execuie (cele pentru care toi operanzii surs sunt disponibili) i le expediaz pe acestea la unitile de execuie disponibile. Rezultatele execuiei unei microoperaii sunt returnate n bufferul de reordonare i sunt memorate mpreun cu microoperaia pn cnd aceasta este retras din buffer. Acest proces de planificare i expediere permite execuia ntr-o ordine oarecare, n care microoperaiile sunt expediate la unitile de execuie strict pe baza constrngerilor fluxului de date i a disponibilitii resurselor utilizate pentru execuie, fr a ine cont de ordinea iniial a instruciunilor. Execuia microoperaiilor este realizat de dou uniti n virgul fix (VF), dou uniti pentru numere n virgul mobil (VM) i o unitate de interfa cu memoria, permind planificarea a pn la cinci microoperaii ntr-un ciclu de ceas. Cele dou uniti n virgul fix pot executa n paralel dou microoperaii pentru numere ntregi. Una din unitile n virgul fix poate gestiona microoperaiile de salt. Aceast unitate poate detecta prediciile eronate ale salturilor i poate semnala bufferului pentru destinaia salturilor s iniializeze calea de date pipeline. Aceast operaie este realizat dup cum urmeaz. Decodificatorul de instruciuni marcheaz fiecare microoperaie de salt cu ambele adrese posibile: adresa de destinaie i adresa instruciunii urmtoare. Atunci cnd unitatea n virgul fix execut microoperaia de salt, aceasta este n msur s determine destinaia care a fost selectat. Dac a fost selectat destinaia anticipat, atunci microoperaiile executate speculativ sunt marcate ca fiind utilizabile i execuia continu pe calea anticipat. Dac destinaia anticipat nu a fost selectat, o unitate de execuie din cadrul unitii n virgul fix modific starea tuturor microoperaiilor de pe calea care nu a fost selectat pentru a le elimina din rezervorul de instruciuni. Unitatea respectiv transmite apoi destinaia corect a saltului la bufferul pentru destinaia salturilor, care iniializeaz calea de date pipeline de la noua adres. Unitatea de interfa cu memoria gestioneaz microoperaiile de ncrcare i de memorare. Un acces de ncrcare necesit specificarea doar a adresei de memorie, astfel nct poate fi codificat ntr-o microoperaie. Un acces de memorare

necesit specificarea att a adresei, ct i a datei, astfel nct este codificat n dou microoperaii. Partea unitii de interfa cu memoria care gestioneaz microoperaiile de memorare dispune de dou porturi, ceea ce i permite prelucrarea n paralel a celor dou microoperaii care codific accesul de memorie. Unitatea de interfa cu memoria poate executa deci n paralel att o ncrcare, ct i o memorare ntr-un ciclu de ceas. Unitatea de retragere a instruciunilor memoreaz n mod permanent rezultatele microoperaiilor executate speculativ i elimin microoperaiile din bufferul de reordonare. Ca i staia de rezervare, unitatea de retragere a instruciunilor testeaz n mod continuu starea microoperaiilor din bufferul de reordonare, cutnd acele microoperaii care au fost executate i nu au dependene cu alte microoperaii din rezervorul de instruciuni. Aceast unitate retrage apoi microoperaiile executate, n ordinea iniial specificat n program, innd cont de ntreruperi, excepii i anticipri eronate ale salturilor. Unitatea de retragere a instruciunilor poate retrage trei microoperaii pe ciclu de ceas. Pentru retragerea unei microoperaii, unitatea scrie rezultatele n registrele procesorului sau n memorie. Dup memorarea rezultatelor, microoperaia este eliminat din bufferul de reordonare. Pentium 4 Pentium 4 este, ca orice procesor ncepnd de la I80386, un produs care utilizeaz arhitectura IA-32 (Intel Architecture pe 32 de biti). Avantajul acestei arhitecturi este ca deine cea mai mare baza de programe din toate celelalte arhitecturi existente. De asemenea, este asigurata compatibilitatea n urma cu toate programele scrise pentru 80386, 80486, Pentium etc. Pentium 4 beneficiaz de facilitatea Rapid Execution Engine care permite ca unitatea aritmetic i logic (ALU) s funcioneze la o frecven dubl fa de cea a procesorului. Precizm ns ca ALU se ocupa doar de instruciunile simple, de tipul adunrilor, scderilor si nmulirilor cu puteri ale lui 2 (ADD, OR, AND etc.), i asta nseamn ca instruciunile Floating Point (FP) i cele multimedia (SSE - Streaming SIMD Extensions) se executa tot la frecvena procesorului. Pentium 4 a fost dotat cu un sistem hyper pipeline care conine 20 de etaje. Imprirea execuiei instruciunilor in buci mici, care se executa rapid si in paralel (abordare de tip RISC - Reduced Instruction Set Computing), duce la o cretere a performantei faa de cazul execuiei unor instruciuni mari (abordare CISC - Complex Instruction Set Computing). Pentru a limita pe ct posibil greelile de predicie a salturilor, ca si pentru a reduce efectul lor, Pentium 4 a fost introdus o tehnologie denumit Advanced Dynamic Execution Engine, care const n creterea dimensiunilor ferestrei de instruciuni i la creterea dimensiunii branch target buffer-ului. Rolul celor doua elemente este s menin ocupate tot timpul unitile de execuie. Fereastra de instruciuni este locul de unde motorul de execuie i alege instruciunile pe

care le va executa. Fereastra de instruciuni are acum posibilitatea de a stoca 126 de instruciuni, faa de cele 42 la Pentium 3. Deci, se pot executa, practic, speculativ nu mai puin de 126 de instruciuni. Branch target buffer-ul este un buffer n care se stocheaz informaii despre instruciunile de salt care se execut sau s-au executat deja. Aceste informaii sunt utile algoritmului de predicie a salturilor, care la Pentium 4, a fost mbuntit considerabil. Acest procesor dispune de un branch target buffer de 4 Koctei, fata de 0,5 Koctei la P 3. Pe ansamblu, Intel afirm c rata de eroare la predicie este cu 33% mai mica dect la P 3, ajungnd la 5 - 10%. Memoria cache L1 de date are 8 Koctei iar memoria cache L1 de instruciuni a fost nlocuit cu un cache pentru microoperaii denumit trace cache. Cu alte cuvinte sunt memorate n cache instruciunile gata decodificate. Memoriile cache L1 sunt asociative cu patru ci, fapt care le confer performane foarte bune. Memoria cache L2 are o mrime de 256 Koctei i este conectat la procesor printr-o magistral de 256 bii.

2.9. Gestiunea memoriei la Arhitectura Intel 2.9.1. Prezentare general a gestiunii memoriei Sistemul de gestiune a memoriei la procesoarele cu Arhitectura Intel (Pentium Pro, Pentium 2, Pentium 3, Pentium 4) este mprit n dou pri: segmentare i paginare. Segmentarea pune la dispoziie un mecanism pentru izolarea modulelor individuale de cod, de date i de stiv, astfel nct pe acelai procesor pot rula programe (sau taskuri) multiple fr o interferen ntre ele. Paginarea asigur un mecanism pentru implementarea unui sistem de memorie virtual cu pagini la cerere, la care seciuni ale mediului de execuie ale unui program sunt mapate n memoria fizic dup cum este necesar. Atunci cnd procesorul funcioneaz n modul protejat, trebuie s se utilizeze o anumit form de segmentare. Nu exist un bit de mod pentru dezactivarea segmentrii, utilizarea paginrii este ns opional. Arhitectura Intel are trei spaii de adrese: virtuale, liniare i fizice. Figura 2.8 prezint relaia dintre aceste spaii de adrese. Unitatea de segmentare translateaz o adres virtual ntr-o adres liniar. Atunci cnd paginarea nu este utilizat, adresa liniar corespunde cu adresa fizic. Dac se utilizeaz paginarea, unitatea de paginare translateaz adresa liniar ntr-o adres fizic.

Fig. 2.8 Adresa virtual sau logic (care reprezint un pointer deprtat) const dintr-un selector de segment de 16 bii i o adres efectiv (sau offset) de 32 de bii. Selectorul de segment este un identificator unic al segmentului. Pe lng alte informaii, selectorul furnizeaz un offset ntr-o tabel a descriptorilor de segment (cum este tabela descriptorilor globali, GDT, sau tabela descriptorilor locali, LDT), care conine structuri de date numite descriptori de segment. Fiecare segment are un descriptor de segment, care specific dimensiunea segmentului, drepturile de acces i nivelele de privilegiu ale segmentului, tipul segmentului i adresa primului octet al segmentului n spaiul adreselor liniare (numit adresa de baz a segmentului). Adresa efectiv este calculat prin adunarea unei anumite combinaii a componentelor de adresare. Exist trei componente de adresare: deplasament, baz i index. Deplasamentul este o valoare imediat de 8 sau 32 de bii care urmeaz dup codul instruciunii. Baza este coninutul oricrui registru general i adreseaz de multe ori nceputul zonei de variabile locale. Indexul este coninutul oricrui registru general i este utilizat adesea pentru adresarea elementelor unui tablou sau a caracterelor dintr-un ir. Indexul poate fi multiplicat cu un factor de scal (1, 2, 4 sau 8) pentru a facilita anumite tipuri de adresare, cum este adresarea tablourilor sau a structurilor. Dup cum rezult din figura 2.7, adresa efectiv este calculat astfel: Adresa efectiv = baz + (index * factor de scal) + deplasament Dup cum se arat n figura 2.8, segmentarea asigur un mecanism pentru divizarea spaiului de adrese al procesorului (numit spaiu al adreselor liniare) n spaii de adrese protejate mai mici, numite segmente. Segmentele pot fi utilizate pentru a pstra codul, datele i stiva unui program, sau pentru a pstra structurile de date ale sistemului. Dac pe un procesor ruleaz mai mult

de un program, fiecrui program i se asigneaz propriul set de segmente. Procesorul stabilete n acest caz limitele ntre aceste segmente i asigur s nu existe interferene ntre un program i execuia altui program prin scrierea n segmentele celuilalt program. Operaiile care pot fi executate asupra unui anumit tip de segment pot fi restricionate.

Fig. 2.9 Toate segmentele dintr-un sistem fac parte din spaiul adreselor liniare al procesorului. Dimensiunea unui segment poate varia de la 1 octet la dimensiunea maxim a memoriei principale, 4 Goctei (232 octei). Pentru a localiza un octet dintr-un anumit segment, trebuie furnizat o adres logic. Unitatea de segmentare adun adresa de baz a segmentului la partea de offset a adresei logice (deci, la adresa efectiv) pentru a forma o adres liniar de 32 de bii n spaiul adreselor liniare al procesorului. Dac paginarea nu este utilizat, spaiul adreselor liniare al procesorului este mapat direct n spaiul adreselor fizice al procesorului. Spaiul adreselor fizice este definit ca domeniul adreselor pe care le poate genera procesorul pe magistrala sa de adrese. La utilizarea paginrii, fiecare segment este divizat n pagini (de obicei, de cte 4 Koctei), care sunt pstrate fie n memoria principal, fie pe disc. Sistemul de operare pstreaz un director de pagini i un set de tabele de pagini pentru a ine evidena paginilor. Atunci cnd un program (sau task) ncearc s acceseze o locaie din spaiul adreselor liniare, procesorul utilizeaz directorul de pagini i tabelele de pagini pentru a translata adresa liniar ntr-o adres fizic, dup care execut operaia cerut (citire sau scriere) cu locaia de memorie. Dac pagina care trebuie accesat nu se afl n memoria fizic, procesorul ntrerupe execuia programului, aduce pagina de pe disc n memoria principal i continu apoi execuia programului.

2.9.2. Segmentarea Mecanismul de segmentare pus la dispoziie de Arhitectura Intel poate fi utilizat pentru a implementa o larg varietate de sisteme de memorie, de la modele liniare care folosesc doar n mod minimal segmentarea pentru protecia programelor, pn la modele cu segmente multiple, care utilizeaz segmentarea pentru a crea un mediu de operare robust n care pot fi executate programe multiple. Cel mai simplu model de memorie pentru un sistem este modelul liniar, n care sistemul de operare i programele de aplicaie au acces la un spaiu de adrese continuu, nesegmentat. Pentru a implementa un model liniar cu Arhitectura Intel, trebuie s se creeze cel puin doi descriptori de segment, unul pentru referinele la cod i unul pentru referinele la date. Ambele din aceste segmente sunt mapate ns n ntregul spaiu al adreselor liniare: deci, ambii descriptori de segment au aceeai adres de baz egal cu 0 i aceeai limit a segmentului de 4 Goctei. Prin setarea limitei de segment la 4 Goctei, mecanismul de segmentare este prevenit s genereze excepii pentru referinele n afara limitelor memoriei, chiar dac nu exist memorie fizic la o anumit adres. Memoria ROM (EPROM) este amplasat de obicei la sfritul spaiului adreselor fizice, deoarece procesorul ncepe execuia programului de la adresa FFFF FFFOh. Memoria RAM (DRAM) este amplasat la nceputul spaiului de adrese, deoarece adresa de baz iniial a segmentului de date dup resetarea procesorului este 0. Modelul liniar protejat este similar cu modelul liniar, cu excepia faptului c limitele segmentelor sunt setate pentru a include numai domeniul adreselor pentru care exist memorie fizic. Se va genera o excepie de protecie general la fiecare ncercare de acces la memoria inexistent. Acest model asigur un nivel minim de protecie hardware mpotriva anumitor tipuri de erori de program. Modelul cu segmente multiple utilizeaz posibilitile complete ale mecanismului de segmentare pentru a asigura protecia prin hardware a codului i datelor. In acest caz, fiecrui program i se aloc propria tabel a descriptorilor de segment i propriile segmente. Segmentele pot fi private pentru programele crora le sunt asignate, sau pot fi partajate ntre programe. Accesul la toate segmentele i la mediile de execuie ale programelor individuale rulate de sistem este controlat prin hardware. Se pot utiliza verificri ale accesului nu numai pentru protecia mpotriva referinelor la o adres n afara limitelor unui segment, dar i mpotriva execuiei operaiilor ilegale n anumite segmente. De exemplu, dac segmentele de cod sunt desemnate ca segmente care pot fi doar citite, se pot preveni prin hardware operaiile de scriere n segmentele de cod. Informaiile despre drepturile de acces create pentru segmente pot fi utilizate de asemenea pentru stabilirea unor inele sau nivele de protecie. Nivelele de protecie pot fi utilizate pentru protecia procedurilor sistemului de operare mpotriva accesului neautorizat de ctre programele de aplicaie.

2.9.3. Paginarea La funcionarea n modul protejat, Arhitectura Intel poate mapa spaiul adreselor liniare direct ntr-o memorie fizic de dimensiuni mari (de exemplu, o memorie RAM de 4 Goctei), sau indirect (utiliznd paginarea) ntr-o memorie fizic de dimensiuni mai mici i un spaiu pe disc. A doua metod de mapare a spaiului adreselor liniare este numit memorie virtual cu pagini la cerere. Atunci cnd se utilizeaz paginarea, procesorul mparte spaiul adreselor liniare n pagini de dimensiune fix (n general, de 4 Koctei) care pot fi mapate n memoria fizic i/sau un spaiu pe disc. Atunci cnd un program face referire la o adres logic din memorie, procesorul translateaz adresa ntr-o adres liniar i utilizeaz apoi mecanismul su de paginare pentru a translata adresa liniar n adresa fizic corespunztoare. Dac pagina care conine adresa liniar nu se afl n memoria fizic, procesorul genereaz o excepie de lips de pagin (page-fault exception). Aceast excepie comand sistemul de operare pentru a ncrca pagina de pe disc n memoria fizic (eventual scriind o alt pagin din memoria fizic pe disc) iar apoi relanseaz instruciunea care a generat excepia. Paginarea este diferit de segmentare prin faptul c utilizeaz pagini de dimensiune fix. Spre deosebire de segmente, care au de obicei aceeai dimensiune ca i codul sau structurile de date pe care pe pstreaz, paginile au o dimensiune fix. Dac segmentarea este singura form de translatare a adreselor care se utilizeaz, o structur de date care este prezent n memoria fizic va avea toate prile sale n memorie. Dac se utilizeaz paginarea, o structur de date poate fi parial n memorie i parial pe disc. Pentru a minimiza numrul ciclurilor de magistral necesare pentru translatarea adreselor, procesorul pstreaz cele mai recent accesate intrri ale directorului de pagini i ale tabelelor de pagini n memorii cache numite buffere de translatare (TLB - Translation Lookaside Buffer). Aceste buffere satisfac majoritatea cererilor pentru citirea directorului curent de pagini fr a fi necesar un ciclu de magistral. Cicluri suplimentare de magistral apar numai dac bufferele de translatare nu conin o intrare a unei tabele de pagini, ceea ce se ntmpl, de obicei, atunci cnd o pagin nu a fost accesat de mult timp. Informaiile pe care procesorul le utilizeaz pentru a translata adresele liniare n adrese fizice sunt coninute n patru structuri de date: - Fiierul directorilor de pagini: O tabel cu intrri de 32 de bii coninute ntr-o pagin de 4 Koctei. Intr-un astfel de fiier pot fi pstrate pn la 1024 de intrri (fie) ale directoarelor de pagini (PDE - Page Directory Entry). - Fiierul tabelelor de pagini: O tabel cu intrri de 32 de bii coninute ntro pagin de 4 Koctei. Intr-o fiier de tabele pot fi pstrate pn la 1024 de intrri (fie) ale tabelei de pagini (PTE - Page Table Entry). Tabelele de pagini nu sunt utilizate pentru paginile de 2 Moctei i 4 Moctei. Aceste pagini sunt mapate direct de la unul sau mai multe directoare de pagin. - Pagina: Un spaiu liniar de adrese de 4 Koctei, 2 Moctei sau 4 Moctei.

- Tabela pointerilor la directoarele de pagini: O tabel cu patru intrri de 64 de bii, fiecare din acestea coninnd un pointer la un director de pagini. Aceast structur de date este utilizat numai atunci cnd este validat extensia adreselor fizice (PAE - Physical Address Extension). Indicatorul PAE, valideaz o extensie a adreselor fizice la Arhitectura Intel de la 32 de bii la 36 de bii. Procesorul dispune de 4 pini suplimentari pentru biii suplimentari de adres. Aceast opiune poate fi utilizat numai atunci cnd paginarea este validat. Aceste tabele permit accesul la pagini de 4 Koctei sau 4 Moctei atunci cnd se utilizeaz adresarea fizic normal de 32 de bii i la pagini de 4 Koctei sau 2 Moctei atunci cnd se utilizeaz adresarea fizic extins de 36 de bii.

Cap. 3. Arhitecturi RISC 3.1. Introducere In general, arhitecturile calculatoarelor au evoluat progresiv spre o complexitate mai ridicat ca, de exemplu un numr mai mare de instruciuni, un numr mai mare de moduri de adresare, o putere de calcul mai ridicat a instruciunilor individuale, registre mai specializate. Calculatoarele care se ncadreaz n asemenea tendine sunt numite calculatoare cu set complex de instruciuni (CISC - Complex Instruction Set Computer). S-a constatat la un moment dat c adugarea unei instruciuni complexe la un set de instruciuni afecteaz eficiena i costul procesorului. Efectele unei asemenea instruciuni trebuie evaluate nainte ca aceasta s fie adugat la setul de instruciuni. Unele din instruciunile puse la dispoziie de procesoarele CISC sunt utilizate rareori de compilatoare. Conceptul de baz de a nu se aduga instruciuni utilizate rar la setul de instruciuni reprezint un concept inovativ al arhitecturilor de calculatoare, numit calculator cu set redus de instruciuni (RISC - Reduced Instruction Set Computer). Filozofia de proiectare a arhitecturilor RISC este de a se aduga la setul de instruciuni numai acele instruciuni care determin un ctig de performan. Caracteristicile comune ale majoritii acestor calculatoare sunt urmtoarele: - Un set de instruciuni limitat i simplu; - Un numr mare de registre generale sau memorii cache aflate n aceeai capsul cu procesorul; - Un compilator care maximizeaz utilizarea registrelor i minimizeaz astfel accesurile la memoria principal; - Accentul pus pe optimizarea sistemului pipeline de instruciuni. 3.2. Cauze ale complexitii arhitecturale crescute Exist mai multe motive ale tendinei spre o complexitate progresiv mai ridicat a arhitecturilor de calculatoare. Acestea cuprind facilitarea utilizrii limbajelor de nivel nalt, migrarea funciilor de la implementarea prin software la implementarea prin hardware i compatibilitatea n sus. Facilitarea utilizrii limbajelor de nivel nalt. Pe parcursul anilor, mediul de programare a evoluat de la programarea n limbaj de asamblare la programarea n limbaje de nivel nalt, astfel nct proiectanii au prevzut instruciuni mai puternice pentru a facilita codificarea eficient a programelor scrise n limbaje de nivel nalt. Aceste instruciuni au determinat nu numai creterea dimensiunii setului de instruciuni ci i creterea complexitii acestuia, datorit puterii de calcul relativ ridicate a instruciunilor. Migrarea funciilor de la implementarea prin software la implementarea prin hardware. O instruciune care este implementat prin hardware va fi mai eficient dect una realizat printr-o secven de instruciuni mai simple, datorit numrului mare de accesuri la memorie i a diferenei

dintre vitezele UCP i ale memoriei. Pentru a crete viteza de procesare a calculatoarelor, a avut loc un fenomen de migrare a funciilor de la implementarea prin software la cea prin firmware i de la implementarea prin firmware la cea prin hardware. (Firmware reprezint o secven de microinstruciuni.) Aceast migrare a implementrii funciilor din domeniul software n domeniul hardware crete dimensiunea setului de instruciuni, rezultnd o complexitate global crescut a calculatoarelor. Compatibilitatea n sus. Compatibilitatea n sus este utilizat adesea de ctre productori ca o strategie de marketing cu scopul de a prezenta calculatoarele lor ca fiind mai performante dect alte modele existente. Ca rezultat al acestei strategii de marketing, uneori productorii cresc numrul de instruciuni i puterea de calcul a acestora, indiferent de utilizarea efectiv a acestui set complex de instruciuni. Compatibilitatea n sus este un mod de a mbunti un sistem prin adugarea unor faciliti noi i, de obicei, mai complexe. Ca rezultat, noul set de instruciuni este un superset al celui vechi. 3.3. Avantajele arhitecturilor RISC Exist totui unele criterii care reprezint obiective universal acceptate de ctre proiectanii de calculatoare pentru toate sistemele: 1. Maximizarea vitezei de execuie sau minimizarea timpului de execuie. 2. Minimizarea costului de proiectare. O posibilitate de a ndeplini primul obiectiv const n a mbunti tehnologia componentelor, obinnd funcionarea acestora la frecvene mai ridicate. Viteza mrit poate fi obinut prin minimizarea numrului mediu al ciclurilor de ceas pe instruciune i/sau execuia simultan a mai multor instruciuni. Pentru a ndeplini ambele obiective, proiectanii arhitecturilor RISC originale s-au concentrat asupra aspectului implementrii circuitelor VLSI. Ca rezultat al unui numr mai redus de instruciuni, moduri de adresare i formate de instruciuni, s-a obinut un circuit relativ simplu i de dimensiuni reduse pentru unitatea de control. Aceast relativ reducere a dimensiunii i complexitii circuitelor VLSI conduce la anumite avantaje fa de arhitecturile CISC. Acestea sunt prezentate n continuare. Scopul principal al tehnologiei VLSI este de a implementa ntregul procesor ntr-o singur capsul. Aceasta va reduce n mod semnificativ ntrzierea major de transmitere a semnalelor de la un circuit integrat la altul. Arhitecturile cu o complexitate mai mare (set mai complex de instruciuni, mai multe moduri de adresare, formate variabile de instruciuni etc.) necesit o logic mai complex pentru ncrcarea instruciunilor, decodificare i execuie. Dac procesorul este microprogramat, este necesar un microprogram complex, rezultnd o memorie de microprogram de dimensiuni mai mari. Prin urmare, dac o arhitectur CISC este dezvoltat utiliznd tehnologia VLSI, o parte substanial a suprafeei circuitului poate fi ocupat de memoria de microprogram. Mrimea suprafeei circuitului necesar pentru unitatea de control a unei arhitecturi CISC poate varia de la 40% la 60%, n timp ce numai

10% a suprafeei este necesar n cazul unei arhitecturi RISC. Suprafaa rmas n cazul unei arhitecturi RISC poate fi utilizat pentru alte componente, cum sunt memorii cache n aceeai capsul i seturi mai mari de registre, prin care performanele procesorului pot fi mbuntite. Avantajele arhitecturilor RISC se refer la: 1. Viteza de calcul; 2. Implementarea n circuite VLSI; 3. Timpul de proiectare; 4. Facilitarea utilizrii limbajelor de nivel nalt. 1. In ceea ce privete viteza de calcul, arhitecturile RISC sunt mai potrivite pentru utilizarea sistemelor pipeline de instruciuni. Aceste arhitecturi maximizeaz rata de transfer a sistemului pipeline prin faptul c au o dimensiune uniform i o durat egal a execuiei pentru majoritatea instruciunilor. Aceste caracteristici reduc perioadele de inactivitate n cadrul sistemului pipeline. 2. Implementarea n circuite VLSI se refer la faptul c unitatea de control a arhitecturilor RISC este implementat prin hardware. Un sistem cu o unitate de control cablat va fi, n general, mai rapid dect unul microprogramat. In plus, un numr mare de registre i memoriile cache n cadrul capsulei vor reduce numrul accesurilor la memorie. Datele mai frecvent utilizate pot fi pstrate n registre. Registrele pot pstra de asemenea parametrii care trebuie transmii altor proceduri. Din cauza progresului tehnologiei VLSI, multe microprocesoare comerciale au propria memorie cache n cadrul capsulei. Aceast memorie cache are, de obicei, o dimensiune mai redus dect memoria cache de pe plac i reprezint primul nivel al memoriilor cache. Memoria cache de pe plac, care este apropiat de procesor, reprezint al doilea nivel al memoriilor cache. In general, aceste dou nivele de memorii cache mbuntesc performanele comparativ cu cazul utilizrii unui singur nivel de memorie cache. Mai mult, memoria cache din fiecare nivel poate fi organizat ca o ierarhie de memorii cache. In sfrit, uneori fiecare memorie cache din nivelele superioare este divizat n dou memorii cache: o memorie cache de instruciuni i o memorie cache de date. Procesoarele care au memorii cache separate pentru instruciuni i date sunt numite arhitecturi Harvard, dup calculatorul Harvard Mark I. Utilizarea a dou memorii cache, una pentru instruciuni i una pentru date, poate mbunti n mod considerabil timpul de acces i, n consecin, mbuntete performanele unui procesor, n special al unuia care utilizeaz n mod extensiv tehnica pipeline, cum este un procesor RISC. 3. Un alt avantaj al arhitecturilor RISC este c acestea necesit o perioad mai scurt de proiectare. Timpul necesar pentru proiectarea unei noi arhitecturi depinde de complexitatea arhitecturii. Timpul de proiectare este mai lung pentru arhitecturile complexe (CISC). In cazul unei arhitecturi RISC, timpul necesar pentru testarea i depanarea circuitelor rezultate este mai redus, deoarece nu se utilizeaz microprogramarea i dimensiunea unitii de control

este redus. In cazul unei arhitecturi mai puin complexe, posibilitatea erorilor de proiectare este mai redus. Deci, arhitecturile RISC au avantajul unor costuri de proiectare mai reduse i al unei fiabiliti de proiectare mai ridicate. 4. In sfrit, arhitecturile RISC ofer anumite caracteristici care faciliteaz n mod direct operaiile obinuite ale limbajelor de nivel nalt. Mediul de programare s-a modificat de la programarea n limbaj de asamblare la programarea n limbaje de nivel nalt, astfel nct arhitecturile trebuiau s faciliteze aceast tendin, prin instruciuni suplimentare care sunt puternice din punct de vedere funcional i apropiate semantic de caracteristicile limbajelor de nivel nalt. Totui, ncrcarea unui calculator cu un numr mare de faciliti pentru limbajele de nivel nalt poate transforma o arhitectur RISC ntr-o arhitectur CISC. De aceea, este de dorit s se investigheze frecvena utilizrii facilitilor pentru limbajele de nivel nalt prin rularea unei serii de programe benchmark scrise n limbaje de nivel nalt. Pe baza acestor observaii, sunt adugate numai acele faciliti la setul de instruciuni care sunt utilizate frecvent i produc o mbuntire a performanelor. 3.4. Utilizarea unui numr mare de registre Un grup de cercettori de la Universitatea California din Berkeley, condus de Patterson i Sequin, a studiat caracteristicile mai multor programe tipice Pascal i C i a descoperit c, dintre tipurile de instruciuni ale limbajelor de nivel nalt, apelurile de proceduri i revenirile din acestea consum cel mai mult timp. Un calculator CISC cu un set redus de registre necesit un timp ridicat pentru gestionarea apelurile de proceduri i revenirile din acestea, din cauza necesitii de a salva registrele la un apel i de a le reface la revenire, ca i din cauza necesitii de a transmite parametri i rezultate la i de la procedura apelat. Aceast problem este mai acut la procesoarele RISC, deoarece instruciunile complexe trebuie implementate prin subrutine utiliznd instruciunile disponibile. De aceea, unul din principiile de proiectare ale arhitecturilor RISC este de a pune la dispoziie un mijloc eficient de gestiune a mecanismului de apel al procedurilor i de revenire din acestea. Aceasta conduce la necesitatea existenei unui numr mare de registre care pot fi utilizate pentru mecanismul de apel i revenire. In plus, pentru mbuntirea eficienei, echipa din Berkeley a implementat conceptul ferestrelor suprapuse de registre. In cazul acestui concept, setul de registre este mprit n grupe de registre numite ferestre. Un anumit grup de registre este desemnat pentru a fi utilizat ca registre globale i este accesibil oricrei proceduri n orice moment. Pe de alt parte, fiecrei proceduri i se asigneaz o fereastr separat n cadrul setului de registre. Prima fereastr din setul de registre, baza ferestrei, este adresat de pointerul ferestrei curente (Current Window Pointer - CWP), plasat de obicei n registrul de stare al UCP. Ferestrele de registre pot fi utile pentru transmiterea eficient a parametrilor ntre procedura apelant i cea apelat prin ferestre parial suprapuse de registre. Parametrii pot fi transmii fr a modifica CWP prin plasarea acestora n partea

care se suprapune din cele dou ferestre. Prin aceast suprapunere parametrii dorii vor fi accesibili att pentru procedura apelant, ct i pentru cea apelat. Ferestrele de registre sunt utilizate att la arhitecturile CISC, ct i la cele RISC, dar unitatea de control a unei arhitecturi CISC nu permite un spaiu suficient pentru un numr mare de registre. Pentru explicarea conceptului ferestrelor suprapuse de registre, considerm un calculator RISC cu 100 de registre. Dintre aceste registre, cele ntre 0 i 9 sunt utilizate ca registre globale pentru memorarea variabilelor partajate de toate procedurile. Ori de cte ori este apelat o procedur, n plus fa de registrele globale, se aloc 20 de registre suplimentare pentru aceast procedur. Acestea cuprind 5 registre numite registre de intrare, pentru pstrarea parametrilor care sunt transmii de procedura apelant, 10 registre numite registre locale, pentru pstrarea variabilelor locale i 5 registre numite registre de ieire, pentru pstrarea parametrilor care trebuie transmii unei alte proceduri. Figura 3.1 ilustreaz registrele alocate pentru trei proceduri X, Y i Z. De notat c procedurile X i Y (Y i Z) partajeaz acelai set de registre pentru parametrii de ieire, respectiv parametrii de intrare.

Fig. 3.1 In concluzie, una din ideile principale ale arhitecturii RISC este de a simplifica toate aspectele arhitecturale ale proiectrii unui calculator, astfel nct

implementarea acestuia poate fi realizat mai eficient. Obiectivul unei arhitecturi RISC este de a include instruciuni simple i eseniale n setul de instruciuni al calculatorului. 3.5. Caracteristici ale arhitecturilor RISC In general, o arhitectur RISC are urmtoarele caracteristici: 1. Majoritatea instruciunilor acceseaz operanzii din registre, cu excepia unui numr redus dintre ele, cum sunt instruciunile LOAD i STORE, care acceseaz memoria. Cu alte cuvinte, o arhitectur RISC este un calculator de tip load/store. 2. Execuia majoritii instruciunilor necesit un singur ciclu de ceas, cu excepia unui numr redus dintre ele, cum sunt instruciunile LOAD i STORE. Totui, n prezena memoriilor cache aflate n aceeai capsul, chiar i instruciunile LOAD i STORE pot fi executate, n medie, ntr-un ciclu. 3. Unitatea de control este cablat. Deci, arhitecturile RISC nu sunt microprogramate. Codul generat de compilator este executat direct prin hardware i nu este interpretat prin microprogramare. 4. Exist un numr redus de formate ale instruciunilor (adesea mai mic dect 4). 5. UCP are un numr mare de registre. O alternativ la un numr mare de registre este amplasarea unei memorii cache n aceeai capsul. Productorii procesoarelor actuale au amplasat memoria cache n aceeai capsul cu procesorul pentru a asigura o vitez mai ridicat. Deoarece spaiul din capsula procesorului este limitat, n aceast capsul poate fi amplasat doar o memorie cache de dimensiuni reduse. Pe lng aceast memorie cache, se poate amplasa o memorie cache de dimensiuni mari n afara capsulei. In general, se utilizeaz o ierarhie de memorii cache. Toate datele de la nivelul superior (memoria cache din cadrul capsulei) sunt prezente la nivelele inferioare (memoriile cache din afara capsulei), astfel nct, dup o lips n memoria cache, memoria cache din cadrul capsulei poate fi rencrcat dintr-o memorie cache de la un nivel inferior, n locul efecturii unui acces la memoria principal. 6. Compilatorul are o complexitate ridicat. De exemplu, compilatorul trebuie s se ocupe de salturile ntrziate. Este posibil s se mbunteasc performanele sistemului pipeline prin rearanjarea automat a instruciunilor din cadrul unui program astfel nct instruciunile de salt s apar mai trziu dect se inteniona iniial. 8. Exist relativ puine instruciuni (adesea, mai puin de 150) i foarte puine moduri de adresare (adesea mai puin de 4). 9. Arhitecturile RISC faciliteaz operaiile limbajelor de nivel nalt printr-o alegere judicioas a instruciunilor i prin utilizarea compilatoarelor care optimizeaz codul. 10. Arhitecturile RISC utilizeaz sistemele pipeline de instruciuni i metode pentru rezolvarea problemei salturilor, cum sunt tehnicile de prencrcare multipl i de predicie a salturilor.

3.6. Comparaie ntre arhitecturile RISC i CISC In general, timpul necesar unui procesor pentru a realiza execuia unui program poate fi influenat de trei factori: 1. Numrul de instruciuni din program; 2. Numrul mediu de cicluri de ceas necesare pentru execuia unei instruciuni; 3. Durata ciclului de ceas. Arhitecturile CISC reduc numrul de instruciuni necesare ntr-un program prin furnizarea unor instruciuni speciale care pot executa operaii complexe. Spre deosebire de acestea, arhitecturile RISC reduc numrul mediu al ciclurilor de ceas necesare pentru execuia unei instruciuni. Att arhitecturile CISC ct i cele RISC profit de mbuntirile tehnologiei circuitelor integrate pentru a reduce durata ciclului de ceas. Arhitecturile RISC sunt calculatoare de tip load/store; acestea pot obine un nivel ridicat al concurenei prin separarea execuiei instruciunilor de ncrcare i memorare de alte instruciuni. Arhitecturile CISC nu pot obine ntotdeauna acelai nivel al concurenei din cauza setului lor de instruciuni de tip memorie-registru. Majoritatea aspectelor negative ale arhitecturilor RISC sunt direct legate de aspectele lor pozitive. Din cauza instruciunilor simple, performanele unei arhitecturi RISC depind de eficiena compilatorului. De asemenea, datorit numrului mare de registre, alocarea registrelor este mai complex, crescnd astfel complexitatea compilatorului. De aceea, principalul dezavantaj al unei arhitecturi RISC este necesitatea de a scrie un compilator eficient. In general, timpul de dezvoltare al sistemelor software pentru calculatoarele RISC este mai lung dect cel pentru calculatoarele CISC. Un alt dezavantaj este c anumite instruciuni CISC sunt echivalente cu dou sau trei instruciuni RISC, ceea ce determin ca programele RISC s fie mai lungi. Deci, considernd avantajele ambelor arhitecturi CISC i RISC, proiectarea unui procesor RISC poate fi mbuntit prin utilizarea unora din principiile CISC care au fost dezvoltate i mbuntite de-a lungul anilor. 3.7. Aplicaii ale procesoarelor RISC Sistemele RISC au fost proiectate de grupuri diferite ntr-o diversitate de moduri. Primul calculator RISC a fost minicalculatorul 801, realizat de firma IBM n 1975. Informaii despre acest calculator au fost publicate abia n 1982. Minicalculatorul 801 a fost predecesorul calculatorului IBM PC/RT (RISC Technology). In 1980, un grup de cercettori de la Universitatea California din Berkeley, condui de David Patterson, a nceput proiectarea circuitului VLSI RISC I, urmat de circuitul RISC II. Circuitul RISC I a reprezentat baza arhitecturii SPARC (Scalable Processor ARChitecture), proiectat la firma Sun Microsystems. Actualmente, circuitele SPARC sunt produse de numeroase firme, ca Fujitsu,

Bipolar Integrated Technology, LSI Logic, Texas Instruments, Matra, Philips, Weitek i altele. Arhitectura SPARC constituie baza staiilor de lucru ale firmei Sun Microsystems (de exemplu, Sun-4, SPARCstation, SPARCengineUltraAX, Ultra60). In 1982, o echip de la Universitatea Stanford, condus de John Hennessy, a proiectat un circuit numit MIPS (Microprocessor without Interlocking Pipe Stages), deci un microprocesor fr interblocarea etajelor pipeline. Pe baza acestui circuit, au fost proiectate urmtoarele procesoare: MIPS R2000, MIPS R3000, MIPS R4000, MIPS R8000, MIPS R10000 i altele. Actualmente, procesoarele MIPS sunt fabricate de firme ca Integrated Device Technology (IDT), LSI Logic, NEC, NKK, Toshiba, Philips, Siemens i Sony. In timpul anilor '80 au fost dezvoltate numeroase alte arhitecturi RISC. Unele din acestea sunt: transputerul Inmos, dezvoltat la Universitatea din Oxford; procesorul iWarp al firmei Intel, care a fost influenat de proiectul anterior i432 al Intel i de arhitectura WARP a lui Kung; proiectul R-6000 al IBM. In prima generaie, noua tehnologie RISC a fost reprezentat de proiectele IBM, coala de la Berkeley i coala de la Stanford. Tehnologia RISC a fost aplicat pentru staiile de lucru de nalt performan, iar utilitarele software erau limitate. Performanele erau egale sau puin mai bune dect cele ale calculatoarelor CISC convenionale. In urmtoarea generaie, tehnologia RISC a nceput s domine staiile de lucru inginereti i staiile grafice performante. Utilitarele software au fost mult mbuntite i au fost demonstrate avantaje decisive asupra calculatoarelor CISC. Nucleul RISC a fost integrat n controlerele de periferice pentru aplicaii dedicate. In a treia generaie, RISC a devenit o tehnologie tradiional, iar tehnicile RISC au fost aplicate pentru calculatoarele CISC. Sfera aplicaiilor s-a lrgit de la calculele tehnice la aplicaiile comerciale. Proiectanii RISC au ncercat tehnicile superscalare sau superpipeline, avnd ci de 64 de bii la memorie. Arhitecturile au fost optimizate pentru multiprocesare. In prezent, conceptele RISC sunt nglobate n procesoarele convenionale. Este uor de constatat influena procesoarelor RISC i860 i i960 ale firmei Intel asupra procesoarelor Pentium. Similar, se poate constata influena procesoarelor RISC ale firmei Motorola din seria 88000 asupra procesoarelor 680x0 i PowerPC. Un alt domeniu pentru arhitecturile RISC sunt procesoarele ncorporate (embedded processors). Aceste procesoare au posibiliti intensive de I/E, dar, de obicei, nu au interfa direct cu utilizatorul. Ele reprezint un subsistem al unui sistem mai mare. Aplicaiile acestor procesoare cuprind imprimante cu laser, aparate fax, dispozitive de comunicaie celular, aparate de uz casnic, jocuri video performante, imprimante i scannere color, terminale X i altele. Controlerele de discuri RAID {Redundant Array of Inexpensive Disks) i tehnologiile avansate de reea ca ATM (Asynchronous Transfer Mode) necesit de asemenea controlere ncorporate mai complexe. Procesoarele care sunt

destinate acestui domeniu sunt Intel i960, familia AMD 29000, unele din procesoarele SPARC, cum este SPARClite al firmei Fujitsu i anumite procesoare MIPS. O pia important pentru procesoarele RISC este cea a unitilor de extensie TV pentru aplicaii multimedia interactive. Aceste uniti trebuie s fie ieftine, s permit producia de mas i s fie de tip plug-and-play n ceea ce privete simplitatea operrii. Televiziunea de nalt definiie (HDTV - HighDefinition Television) va impune cerine crescute asupra limii de band. Unitile de extensie asigur funcii de interfa pentru reea, decompresia n timp real a imaginilor video, conversia i controlul formatului, i decriptarea. Unele din procesoarele RISC pentru acest domeniu cuprind MIPS, ARM (Advanced RISC Machine) i PowerPC. O alt pia este reprezentat de calculatoarele "palmtop". Clasa acestor calculatoare, numite i PDA (Personal Digital Assistant), impune cerine speciale asupra procesoarelor RISC. Prima dintre acestea este gestiunea inteligent a puterii consumate. Toate circuitele trebuie s fie complet statice. O alt cerin este o dimensiune redus, cu un nalt nivel de integrare. Principalii rivali pentru aceast pia sunt procesoarele AT&T 92010, ARM, NEC V-800 i modelele Hitachi SH-7000. O cerin de baz a utilizatorilor pentru calculatoarele PDA este conectivitatea - n mod ideal, conectivitate global fr fir la un cost redus. Aceasta este o extensie a pieei de pagere i telefoane celulare. Aceste uniti sunt prea mici pentru a permite conectarea unei tastaturi, astfel nct accentul a fost pus pe recunoaterea scrisului. Sunt necesare ecrane mici, dar cu rezoluie ridicat, pentru a permite vizibilitatea n toate condiiile de iluminare. Conceptele RISC sunt utilizate i n prelucrarea digital a semnalelor (DSP - Digital Signal Processing). Dezvoltrile majore sunt efectuate de Texas Instruments, AT&T i Motorola. Circuitele iniiale permiteau numai operaii n virgul fix, dar circuitele ulterioare au evoluat pentru a permite i aritmetica n virgul mobil. Dimensiunile cuvntului au crescut de la 16 la 24 i 32 de bii. Operaiile executate n aplicaiile DSP sunt simple i repetitive, ns, viteza de operare este important. Firma Motorola a dezvoltat familiile DSP 5600x i 9600x. Modelele ulterioare au fost influenate de conceptele RISC. AT&T, cu circuitul DSP32C, s-a concentrat asupra aplicaiilor de prelucrare a semnalelor i a vocii. Texas Instruments, cu familia TMS 320C0x0, are procesoare DSP care sunt cele mai apropiate de cele RISC, inclusiv procesorul TMS 320C080. In anumite aplicaii, un procesor DSP poate fi utilizat ca un accelerator. Nucleul DSP, optimizat pentru operaia de nmulire i acumulare necesar pentru filtrarea digital, este suficient de general pentru a permite de asemenea o gam larg de calcule. Procesoarele DSP au aplicaii n domeniul multimedia, pentru prelucrarea sunetelor i redarea imaginilor video n micare. Aceste procesoare sunt utilizate, de asemenea, pentru aplicaii de

modulare/demodulare (modem) i codare/decodare (codec) la calculatoarele PC.

|Cap.4. Introducere n Multithreading, Superthreading i Hyperthreading 4.1. Procese i fire de execuie Un sistem de operare execut la un moment dat o multitudine de programe. Utilizatorul poate s ruleze n acelai timp un editor de texte, un browser de Internet i un player audio. Toate aceste programe lansate n execuie poart numele de procese i acestea sunt executate ntr-o manier secvenial, concurnd pentru folosirea resurselor comune ale sistemului de calcul precum procesor, memorie sau hard-disk. Un proces este constituit din unul sau mai multe segmente de cod i segmente de date mapate ntr-un spaiu virtual de adresare. Fiecare proces deine un numr de resurse alocate de ctre sistemul de operare, cum ar fi fiiere deschise sau zone de memorie alocate dinamic. Resursele alocate procesului sunt eliberate la terminarea execuiei procesului. Un aspect fundamental al proceselor este faptul c dou procese diferite au ntotdeauna spaii de adres distincte, fiecare rulnd ca i cnd toat memoria ar fi a sa. Astfel procesele sunt izolate ntre ele i nu pot accesa n mod direct datele celorlalte procese. Sistemul de operare i sistemul hardware coopereaz pentru a realiza mecanismul de multitasking, prin care controlul UCP este comutat pe rnd ntre diverse programe. Un fir de execuie este unitatea de execuie a unui proces. Acesta poate fi vzut ca un program n execuie fr spaiu de adres propriu. Firul de execuie ruleaz n cadrul unui proces partajnd spaiul de adres al acestuia. Fiecrui fir de execuie i se asociaz o secvena de instruciuni, un set de registri CPU i o stiva. Procesul nu executa instruciuni, acesta fiind spaiu de adresare comun pentru unul sau mai multe fire de execuie. Firele de execuie sunt cele care execut instruciunile. Fiecare proces are cel puin un fir de execuie. Uneori ns apare nevoia s lucrm n paralel asupra acelorai date i atunci putem crea mai multe fire de execuie n cadrul aceluiai proces. De exemplu, n cazul editorului de texte de care s-a amintit la nceput, att utilizatorul ct i task-ul care salveaz o copie de siguran lucreaz asupra acelorai date, deci vom avea dou fire de execuie n cadrul aceleiai aplicaii. Cu toate c firele de execuie partajeaz spaiul de adres al unui proces, unele resurse sunt individuale, cum ar fi stiva, regitrii i contorul program. Aceasta permite mai multor fire de execuie din cadrul aceluiai proces s urmeze ci diferite de instruciuni. Considerm pentru nceput un program format dintr-un singur fir de execuie. In figura 4.1. se prezint funcionarea unei CPU cu un singur fir de execuie (single-thread CPU). In CPU au fost evideniate unitatea de alimentare cu instruciuni format din patru sisteme pipeline i unitatea de execuie format din apte sisteme pipeline funcionnd n paralel.

Dreptunghiurile colorate din RAM reprezint instruciunile a patru programe diferite aflate n curs de execuie. Dup cum se poate vedea, n acest moment sunt executate numai instruciunile programului rou, n timp ce celelalte programe i ateapt rndul. Dup cum se observ din aceast figur, sistemele pipeline conin o mulime de etaje goale, numite pipeline bubbles (bule), care apar deoarece, din motivele prezentate anterior, CPU nu poate asigura alimentarea continu a sistemelor pipeline.

Fig. 4.1. Evident, aceast situaie reduce eficiena procesorului. Astfel, dei unitatea de alimentare cu instruciuni, poate emite patru instruciuni n fiecare ciclu de ceas, n situaia prezentat n figura 4.1, aceasta emite doar dou instruciuni i numai ntr-un singur ciclu reuete s emit trei instruciuni. Pentru un program lansat n execuie se utilizeaz termenul de proces. Fiecrui proces i se asociaz un context de execuie. Prin context de execuie se neleg toate informaiile care descriu la un moment dat starea curent de execuie a procesului (de exemplu coninutul registrelor CPU, program counter, indicatorii de condiie, etc.). Proceselor sau firelor de execuie li se aloc pe rnd cte o cuant de timp pentru a fi executate. La momentul potrivit un anumit proces (sau fir de execuie) este eliminat din procesor, dup ce contextul sau a fost salvat i un alt proces (sau fir de execuie) este adus n procesor. Aciunea de salvare a contextului vechiului proces i ncrcarea contextului noului proces se numete comutarea contextului. Comutarea contextului pentru un proces format din mai multe fire de execuie, evident, va dura mai mult dect comutare unui singur fir de execuie, dar oricum, aceast operaie irosete un numr de cicluri de ceas.

O modalitate de a reduce numrul de comutri ale contextelor i de a asigura mai mult timp CPU pentru fiecare proces este aceea de a construi un sistem care s poat executa mai multe procese n acelai timp. Modul convenional de a realiza acest lucru este de a aduga sistemului nc un CPU, obinnd un sistem multiprocesor (SMP). Intr-un SMP sistemul de operare poate programa ca dou procese s fie executate exact n acelai timp, fiecare proces fiind executat pe un CPU diferit. Evident c nu i se permite niciunui proces s monopolizeze CPU i n acest caz fiecrui proces fiindu-i alocat o cuant de timp CPU. Rezultatul final este totui c este disponibil un timp de execuie mai mare astfel nct ntr-un, anumit interval de timp, fiecare proces ateapt mai puin pn obine acces la CPU.

Fig. 4.2 In figura 4.2 este prezentat un single-thread SMP. Dup cum se constat n acest moment sunt executate simultan programul rou i programul galben, fiecare pe cte un procesor. Dup ce cuanta de timp alocat fiecrui program expir, contextul lor este salvat, codul i datele acestora sunt eliminate din CPU i dou noi procese vor fi pregtite pentru execuie. Se observ din figura 4.2 c, dei acest sistem poate executa dou procese simultan numrul de bule (pipeline bubbles) s-a dublat, fiecare din cele dou procesoare contribuind cu la aceasta cu gradul sau de ineficien. 4.2. Multithreading i superthreading O metod de a crete performanele procesorului const n utilizarea tehnicii superthreading. Un procesor care utilizeaz aceast tehnic se numete procesor multithreaded, i un astfel de procesor este capabil ca la un moment

dat s execute mai mult de un singur fir. Figura 4.3 explic cum funcioneaz metoda superthreading.

Fig.4.3 Dup cum se observ din aceast figur, deoarece procesorul execut instruciuni din ambele fire de execuie, att unitatea de alimentare ct i unitatea de execuie au mai puine etaje neutilizate (mai puine pipeline bublles). Sgeile din stnga arat c, ntr-un anumit ciclu de ceas, etajele pipeline conin instruciuni numai dintr-un singur fir de execuie. Pentru a nelege cum funcioneaz un procesor multithreaded s analizm cum funcioneaz CPU din figura 4.3. In cazul procesoarelor prezentate anterior unitatea de alimentare cu instruciuni coninea la un moment dat un singur fir de execuie, care apoi, cnd se consuma cuanta de timp alocat, era comutat pentru a face loc altui fir de execuie. In acest caz unitatea de alimentare cu instruciuni poate furniza n fiecare ciclu de ceas patru instruciuni ctre oricare dintre cele apte uniti funcionale. Toate aceste patru instruciuni trebuie ns s provin din acelai fir de execuie. Ca efect fiecare fir de execuie este limitat la o cuant de timp, care acum const dintr-un singur ciclu de ceas. Procesoarele multithreaded pot sigura atenuarea unor probleme de laten introduse de ncrcarea operanzilor din memorie. De exemplu s consideram cazul procesorului din figura 4.3, care execut dou fire de execuie, pe cel rou i pe cel galben. Dac firul rou necesit ncrcarea unei date i aceast dat nu este prezent n memoria cache, acest fir va fi ntrziat multe cicluri de ceas

ateptnd data s soseasc. Intre timp, totui, procesorul va executa firul galben, meninnd astfel pipeline-ul plin. Dei procedeul superthreading poate reduce substanial ntrzierile datorate latenei sistemului de memorie, nu are totui efectul scontat n cazul unui paralelism redus la nivelul instruciunilor dintr-un anume fir de execuie. Dac, la un moment dat, blocul de comand reuete s gseasc n firul rou numai dou instruciuni care pot fi ncrcate n paralel n unitatea de execuie, celelalte dou etaje ale unitii de ncrcare vor rmne neutilizate. 4.3. Simultaneous multithreading Aceast problem este rezolvat de procedeul numit simultaneous multithreading (SMT) sau cum l-a denumit Intel hyper-threading. Procedeul hyper-threading elimin restricia procedeului superthreading de a ncrca ntrun anumit ciclu de ceas instruciuni care aparin numai unui singur fir de execuie. Aceast idee este prezentat n figura 4.4.

Fig. 4.4 Dup cum se poate constata att unitatea de alimentare cu instruciuni ct i unitatea funcional sunt utilizate mult mai eficient. Comparnd cu sistemul multiprocesor din figura 4.2, se constat imediat c cele dou fire de execuie care ocupau fiecare cte un procesor sunt acum comasate ntr-un singur procesor. In acest mod toate etajele unitii de alimentare cu instruciuni sunt ocupate iar unitile de execuie sunt acum mult mai eficient utilizate. De fapt procesorul hyper-hreading acioneaz ca i cum ar avea dou CPU. Evident exemplul prezentat, n care cele dou fire de execuie sunt n totalitate complementare, este pur didactic, ns ne permite s ne realizm eficiena procedeului hyper-threading.

Din punct de vedere al sistemului de operare un procesor SMT este compus din dou sau mai multe procesoare logice i firele de execuie pot fi programate s fie executate de oricare din cele dou sau mai multe procesoare logice, exact ca ntr-un sistem multiprocesor. Puterea sistemului hyper-threading const n faptul c permite maximum de flexibilitate la ncrcarea etajelor unitii de alimentare cu instruciuni, mbuntind astfel gradul de utilizare al resurselor existente. Dac comparm diagramele din figurile 4.2. i 4.4. constatm c ambele sisteme execut aceeai cantitate de munc dar sistemul hyper-threading utilizeaz mai puine resurse i are mai puini cicli de ceas pierdui n comparaie cu sistemul SMP. Pentru a nelege mai bine cum acioneaz n practic un sistem hyperthreading s considerm urmtorul exemplu: S presupunem unitatea de programare a extras toate instruciunile care pot fi executate n paralel din firul de execuie rou i c acestea sunt numai dou. Aceasta nseamn c n urmtorul ciclu de ceas vor fi ncrcate numai dou instruciuni. Trebuie s remarcm c acesta este un scenariu foarte comun deoarece cercetrile au stabilit c media instruciunilor paralele care pot fi extrase din cele mai multe coduri este de 2,5 pe ciclu. Pentru acest motiv, Pentium 4, la fel ca i multe alte procesoare au fost echipate pentru a putea furniza 3 instruciuni n fiecare ciclu de ceas. Deoarece unitatea de programare din exemplul nostru tie c ea poate furniza pn la patru instruciuni pe ciclu, va cuta instruciuni independente n alt fir de execuie. In acest mod este eliminat gtuirea care apare n procesul de alimentare cu instruciuni. 4.4. Implementarea tehnicii hyper-threading. Dei s-ar putea prea c implementarea tehnicii, hyper-threading necesit un mare numr de circuite de comand suplimentare, n realitate se pare c nu este chiar aa. Intel raporteaz c la procesorul Pentium Xeon circuitele suplimentare care implementeaz sistemul hyper-threading nu depesc 5% din suprafaa pastilei de siliciu. Pentium Xeon este capabil s execute n paralel cel mult dou fire de execuie pe dou procesoare logice. Pentru a prezenta sistemului de operare dou procesoare logice, procesorul Xeon trebuie s fie capabil s memoreze informaiile corespunztoare a dou contexte distincte, corespunztoare celor dou fire de execuie. Acest deziderat a fost realizat prin modificarea microarhitecturii resurselor; unele dintre acestea au fost replicate iar altele partiionate. Pentru a asigura independen total a contextelor pentru fiecare procesor logic exist cteva resurse care trebuie dublate. De exemplu este evident c fiecare procesor trebuie s aib propriul su registrul IP (instruction pointer). In mod similar procesorul Xeon are dou tabele de alocare a registrelor, fiecare dintre acestea innd evidena celor 8 registre pentru ntregi i a celor 8 registre pentru virgul mobil pentru fiecare din cele dou procesoare logice.

De asemenea fiecare procesor logic are propriul su TLB (Translation Look-aside Buffer ). La procesorul Xeon resursele partiionate pot fi gsite sub form de cozi care decupleaz unele de altele majoritatea etajelor pipeline-urilor.

Fig.4.5 De exemplu n figura 4.5. este prezentat una din cele trei cozi de programare (scheduling queues) ale acestui procesor. Dac aceast coad de programare are 12 instane, 6 dintre acestea sunt alocate procesorului 0 (culoarea roie), iar celelalte 5, procesorului 1 (culoarea galben), n funcie ce cerere. Acest tip de partiionare ar putea fi considerat ca fiind dinamic. Spre deosebire de aceasta cele dou cozi din partea de sus a figurii 4.5 sunt partiionate static n sensul c cele 12 instane ale cozii sunt mprite n dou, cte 6 pentru fiecare procesor logic. Cozile de programare (scheduling queues) ale procesorului Xeon sunt partiionate dinamic pentru a evita ca unul dintre procesoarele logice s le poat monopliza. Dac fiecare coad de programare nu ar limita numrul de instane pe care le poate utiliza fiecare procesor, atunci instruciunile unui fir de execuie ar putea umple coada, cellalt procesor rmnnd fr instruciuni de executat. Dac procesorul Xeon execut un singur fir toate resursele partiionate vor fi combinate astfel nct acel fir de execuie s obin performana maxim.

Cap. 5. Sisteme Multiprocesor 1.1. Taxonomia arhitecturilor de calculatoare Una dintre cele mai cunoscute taxonomii (clasificri) ale arhitecturilor de calculatoare este taxonomia lui Flynn. Michael Flynn a clasificat arhitecturile de calculatoare n patru categorii, n funcie de prezena unui singur ir sau a mai multor iruri de instruciuni i de date. Un ir de instruciuni este un set de instruciuni secveniale executate de un singur procesor, iar un ir de date este fluxul secvenial de date necesar irului de instruciuni. Cele patru categorii ale lui Flynn sunt urmtoarele: 1. SISD (Single Instruction stream, Single Data stream). Aceast categorie corespunde arhitecturii von Neumann, n care se execut n orice moment o singur instruciune. Calculatoarele SISD sunt numite i calculatoare seriale scalare. Aceste calculatoare utilizeaz un registru numit contor de program, care determin execuia serial a instruciunilor. Pe msur ce fiecare instruciune este ncrcat din memorie, contorul de program este actualizat pentru a conine adresa urmtoarei instruciuni care se va ncrca i se va executa n ordine secvenial. Exist actualmente doar un numr redus de calculatoare SISD; chiar i procesoarele din calculatoarele personale utilizeaz paralelismul n scopul creterii eficienei. In cele mai multe situaii, acestea pot executa dou sau mai multe instruciuni simultan. 2. MISD (Multiple Instruction stream, Single Data stream). In acest caz, mai multe instruciuni opereaz asupra unei singure date. Exist dou posibiliti de interpretare a structurii calculatoarelor MISD. Prima posibilitate este de a se considera o clas de calculatoare la care mai multe uniti de prelucrare distincte primesc instruciuni distincte care opereaz asupra acelorai date. Aceast clas de calculatoare este considerat ca nepractic sau imposibil de ctre unii proiectani de calculatoare i n prezent nu exist exemple de acest tip. A doua posibilitate este de a se considera o clas de calculatoare n care datele sunt trecute printr-o serie de uniti de prelucrare. Unele arhitecturile de tip pipeline, ca de exemplu procesoarele vectoriale sau arhitecturile sistolice, sunt considerate calculatoare de acest tip. Arhitecturile de tip pipeline execut o prelucrare vectorial utiliznd o serie de etaje, iar fiecare din acestea execut o anumit funcie i produce un rezultat intermediar. Motivul pentru care asemenea arhitecturi sunt clasificate ca sisteme MISD este faptul c elementele unui vector pot fi considerate ca aparinnd aceleiai date, iar fiecare etaj pipeline prelucreaz mai multe instruciuni care opereaz asupra acelui vector. 3. SIMD (Single Instruction stream, Multiple Data stream). In acest caz, o singur instruciune prelucreaz simultan date diferite. La calculatoarele de acest tip, exist mai multe uniti de prelucrare i o singur unitate de control. Calculatoarele SIMD pot executa de asemenea prelucrri vectoriale. Aceasta se realizeaz prin asignarea elementelor vectorilor unor uniti de prelucrare diferite pentru o prelucrare concurent. In aceast categorie pot fi considerate

procesoarele matriciale. 4. MIMD (Multiple Instruction stream, Multiple Data stream). Aceast categorie cuprinde calculatoare cu mai multe uniti de prelucrare n care mai multe instruciuni pot opera simultan asupra unor date diferite. Calculatoarele MIMD reprezint arhitecturile cele mai complexe, obinnd o eficien ridicat prin prelucrare concurent. In acest caz, concurena implic faptul c nu exist doar procesoare multiple care opereaz n paralel, dar i faptul c se execut procese multiple n acelai timp. Taxonomia lui Flynn s-a dovedit o metod corespunztoare pentru clasificarea arhitecturilor de calculatoare. Totui, progresele industriei de calculatoare au creat arhitecturi care nu pot fi clasificate n mod clar prin taxonomia lui Flynn. De exemplu, aceast taxonomie nu clasific n mod adecvat procesoarele vectoriale (SIMD i MISD) i arhitecturile hibride. Pentru a

Fig. 5.1 rezolva aceast problem, au fost propuse mai multe taxonomii. Figura 5.1 prezint o taxonomie care cuprinde caracteristici ale unor taxonomii propuse. Aceast taxonomie clasific arhitecturile mai recente, dar nu reprezint o caracterizare complet a arhitecturilor paralele. Dup cum se arat n figura 5.1, categoria calculatoarelor MIMD este mprit n patru tipuri de arhitecturi paralele: multiprocesoare, multicalculatoare, multi-multiprocesoare i calculatoare cu flux de date. In categoria SIMD, exist un singur tip de arhitectur, reprezentat de procesoarele matriciale. Categoria MISD este mprit n dou tipuri de arhitecturi: procesoare vectoriale de tip pipeline i matrici sistolice. Celelalte arhitecturi sunt grupate n dou categorii: calculatoare hibride i procesoare speciale. Aceste arhitecturi sunt descrise n seciunea urmtoare. 5.2. Prezentare general calculatoare a arhitecturilor de calculatoare 5.2.1. Sisteme Multiprocesor

Multiprocesorul este un calculator paralel constnd din mai multe procesoare interconectate care partajeaz un sistem de memorie. Procesoarele pot fi configurate astfel nct toate s execute cte o parte diferit a aceluiai program, sau astfel nct fiecare s execute simultan mai multe programe diferite. O schem bloc a unui multiprocesor este prezentat n figura 5.2.

Fig. 5.2. In general, un multiprocesor const din n procesoare i m module de memorie ( n > 1 , m > 0 ). Procesoarele sunt notate cu P , P2 ,..., Pn iar modulele de 1 memorie sunt notate cu M 1 , M 2 ,..., M m . Reeaua de interconectare RI conecteaz fiecare procesor la un anumit subset al modulelor de memorie. O instruciune de transfer determin transferul datelor de la un anumit procesor ctre memoria cu care este conectat procesorul. Pentru transferul datelor ntre dou procesoare, trebuie s se execute o secven programat de transferuri de date, care transfer datele ntre memorii i procesoare intermediare. Pe baza organizrii sistemului de memorie, multiprocesoarele pot fi mprite n dou grupe, cu legtur strns i cu legtur slab. In cazul unui multiprocesor cu legtur strns, un sistem central de memorie, numit memorie principal sau memorie global, asigur acelai timp de acces pentru fiecare procesor. Sistemul central de memorie poate fi implementat fie ca un singur modul de memorie, fie ca un set de module de memorie care pot fi accesate n paralel de diferite procesoare. In ultimul caz, se reduce conflictul la memorie i astfel sistemul este mai eficient. Conflictul la memorie se refer la situaia n care mai multe procesoare solicit acces la memorie ntr-un interval scurt de timp, rezultnd ntrzieri mari de acces la memorie. Pe lng sistemul central de memorie, fiecare procesor poate avea i o memorie cache de dimensiuni reduse. Aceste memorii cache ajut de asemenea la reducerea conflictelor la memorie. In cazul unui multiprocesor cu legtur slab, pentru a se reduce conflictele la memorie, sistemul de memorie este partiionat ntre procesoare, deci, fiecrui procesor i se ataeaz o memorie local. Astfel, fiecare procesor poate accesa n mod direct memoria sa local i toate memoriile locale ale celorlalte procesoare. Timpul de acces la o memorie care nu este local este ns mult mai ridicat dect cel la memoria local. Indiferent de tipul multiprocesorului, toate procesoarele acestuia utilizeaz acelai sistem de operare. Sistemul de operare asigur interaciunea dintre

procesoare i taskurile acestora. De obicei, procesoarele sunt de acelai tip; n acest caz, multiprocesorul se numete omogen. Dac procesoarele sunt de tipuri diferite, multiprocesorul se numete eterogen. Oricare din procesoare poate accesa oricare din dispozitivele de I/E. 5.2.2. Sisteme multicalculator Spre deosebire de un multiprocesor, un multicalculator poate fi considerat un calculator paralel n care fiecare procesor are o memorie local proprie. Un procesor are acces direct doar la memoria sa local i nu poate adresa memoriile locale ale altor procesoare. Aceast adresabilitate local este o caracteristic important care deosebete multicalculatoarele de multiprocesoare. O schem bloc a acestei arhitecturi este prezentat n figura 5.3.

Fig. 5.3 In figura 5.3, exist n noduri de procesare (NP) i fiecare nod const dintrun procesor i o memorie local. Reeaua de interconectare (RI) conecteaz fiecare nod de procesare la un anumit subset al celorlalte noduri de procesare. O instruciune de transfer determin transferul datelor de la un anumit nod la unul din nodurile cu care este conectat. Pentru transferul datelor ntre dou noduri care nu pot fi conectate direct prin reeaua de interconectare, datele trebuie transferate prin noduri intermediare utiliznd un mecanism cu transmitere de mesaje. Intr-un mecanism cu transmitere de mesaje, un procesor poate transmite (sau recepiona) un bloc de informaii la (sau de la) fiecare din celelalte procesoare prin canale de comunicaie. Aceste canale sunt conexiuni fizice ntre procesoare, aranjate pe baza unei topologii a reelei de interconectare. Fiecare procesor este conectat la un canal de comunicaie printr-un dispozitiv numit interfa de comunicaie. Acest dispozitiv poate transmite sau recepiona date printr-un canal de comunicaie i poate executa funcii pentru a asigura c datele sunt transmise i recepionate corect. nainte ca un bloc de informaii s fie transmis printr-un canal, blocul este mpachetat ntr-un mesaj cu un cmp al antetului la nceput i un cmp al sumei de control la sfrit. Cmpul antetului const din informaii de identificare, cuprinznd adresa surs, adresa destinaie i lungimea mesajului. Cmpul sumei de control const din mai muli bii de detecie a erorilor de transmisie. La

anumite implementri, interfaa de comunicaie este capabil de a crea i a decodifica cmpul antetului i al sumei de control. Comparnd multiprocesoarele i multicalculatoarele, primele pot fi programate mai uor dect cele din urm. Multiprocesoarele reprezint arhitectura dominant n cazul sistemelor paralele de dimensiuni reduse. In general, pe msur ce numrul de procesoare crete, multicalculatoarele devin mai economice dect multiprocesoarele. Multicalculatoarele sunt arhitecturi eficiente pentru sistemele paralele de dimensiuni mari. Aceasta se datoreaz urmtoarelor motive: - Calculele tiinifice pot fi partiionate astfel nct aproape toate operaiile pot fi executate local; - Se obine o mbuntire semnificativ a performanelor dac majoritatea referinelor la memorie sunt efectuate la memoriile locale. 5.2.3. Sisteme Multi-multiprocesoare Odat cu progresele tehnologiei VLSI, a devenit posibil construirea unor calculatoare paralele de dimensiuni mari utiliznd microprocesoare cu performane ridicate. Pentru proiectarea unor asemenea calculatoare, pot fi combinate caracteristicile multiprocesoarelor i multicalculatoarelor, ntr-o arhitectur numit multi-multiprocesor (sau multiprocesor distribuit). Deci, un multi-multiprocesor poate fi considerat un multicalculator n care fiecare nod de procesare este un multiprocesor. Figura 5.4 prezint structura general a unui multi-multiprocesor.

Fig. 5.4. Fiecare nod permite ca taskurile cu un grad relativ ridicat de interaciune s fie executate local de ctre un multiprocesor, reducnd astfel timpul necesar comunicaiei. Dac fiecare nod este un multiprocesor, complexitatea programrii paralele a unui multicalculator va fi redus. 5.2.4. Arhitecturi cu flux de date Intr-o arhitectur cu flux de date (dataflow), o instruciune este gata pentru execuie atunci cnd datele care reprezint operanzii instruciunii devin disponibile. Rezultatele instruciunilor executate anterior formeaz operanzii instruciunilor care ateapt s fie executate. Se formeaz astfel un flux de date, care declaneaz execuia instruciunilor. Astfel, nu este necesar un contor de program care exist ntr-o arhitectur von Neumann pentru a controla execuia instruciunilor.

Instruciunile unui calculator cu flux de date nu adreseaz variabile ntr-o memorie partajat global, ci ele conin valorile variabilelor utilizate. Intr-o arhitectur cu flux de date, execuia instruciunilor nu afecteaz alte instruciuni care sunt gata pentru execuie. Astfel, mai multe instruciuni pot fi executate simultan, ceea ce conduce la posibilitatea unor calcule cu un grad ridicat de concuren. Figura 5.5 prezint o schem bloc a unui calculator cu flux de date. Instruciunile, mpreun cu operanzii acestora, sunt pstrate n memoria de instruciuni i date (I&D). Ori de cte ori o instruciune este gata pentru execuie, aceasta este transferat la unul din elementele de procesare (EP) prin reeaua de arbitrare. Fiecare element de procesare este un simplu procesor cu o memorie local limitat. La recepionarea unei instruciuni, elementul de procesare execut operaia cerut i transmite rezultatul la destinaia din memorie prin intermediul reelei de distribuie.

Fig. 5.5 Arhitecturile cu flux de date pot fi clasificate n dou grupe: statice i dinamice. Intr-o arhitectur static, o instruciune este validat ori de cte ori toi operanzii necesari sunt recepionai i o alt instruciune ateapt rezultatul acestei instruciuni; n caz contrar, instruciunea rmne invalidat. Aceast constrngere poate fi impus prin utilizarea semnalelor de achitare. Intr-o arhitectur dinamic, o instruciune este validat ori de cte ori toi operanzii necesari sunt recepionai. In acest caz, pot deveni disponibile mai multe seturi de operanzi ale unei instruciuni n acelai timp. Comparativ cu arhitecturile statice cu flux de date, arhitecturile dinamice permit un grad mai ridicat de paralelism, deoarece o instruciune nu trebuie s atepte dup o alt instruciune nainte de a-i plasa rezultatul. In cazul metodei dinamice trebuie stabilit ns un mecanism pentru a distinge diferitele seturi de operanzi pentru o instruciune.

5.2.5. Procesoare matricIale Un procesor matricial (figura 5.6) const dintr-un set de noduri de procesare (NP) i un procesor scalar, care funcioneaz sub controlul unei uniti de control centralizate. Unitatea de control ncarc instruciunile din memoria principal, le decodific i apoi le transmite fie la procesorul scalar, fie la nodurile de procesare, n funcie de tipul acestora. Dac instruciunea ncrcat este o instruciune vectorial, aceasta este transmis la toate nodurile de procesare. Toate nodurile execut simultan aceeai instruciune asupra datelor diferite pstrate n memoriile lor locale. Astfel, un procesor matricial necesit un singur program pentru a controla toate nodurile de procesare din sistem i nu este necesar duplicarea codului programului la fiecare nod de procesare.

Fig. 5.6. Un procesor matricial poate fi definit, de exemplu, sub forma unei grile n care fiecare intersecie reprezint un NP, iar liniile dintre intersecii reprezint ci de comunicaie. Fiecare NP din matrice poate transmite (sau recepiona) date la (sau de la) cele patru noduri vecine. Unul dintre procesoare, reprezentnd unitatea de control, decide operaiile care trebuie executate de fiecare NP n timpul fiecrui ciclu de procesare i transferurile de date necesare ntre nodurile de procesare. Ideea principal a unui procesor matricial este de a se exploata paralelismul existent n setul de date al unei anumite probleme i nu de a se paraleliza secvena de execuie a instruciunilor pentru acea problem. Calculul paralel se realizeaz prin asignarea fiecrui procesor la o partiie a datelor. Dac setul de date este un vector, partiia va fi un element al vectorului. Matricele de procesoare mbuntesc performanele prin operarea simultan asupra tuturor partiiilor de date. Aceste procesoare pot executa operaii aritmetice sau logice asupra vectorilor. De aceea, ele se numesc i procesoare vectoriale.

5.2.6. Procesoare vectoriale de tip pipeline Un procesor vectorial de tip pipeline poate prelucra n mod eficient operanzi vectoriali (iruri continue de date). In timp ce procesoarele matriciale sunt controlate de instruciuni, procesoarele vectoriale de tip pipeline sunt controlate de iruri continue de date. Aceasta este diferena principal ntre un procesor matricial sau vectorial i un procesor vectorial de tip pipeline. Figura 5.7 prezint structura de baz a unui procesor vectorial de tip pipeline. Exist dou procesoare principale: un procesor scalar i un procesor vectorial. Procesorul scalar execut instruciunile scalare, iar procesorul vectorial execut instruciunile vectoriale utiliznd mai multe etaje de prelucrare. Unitatea de control ncarc instruciunile din memoria principal, le decodific i apoi le transmite fie la procesorul scalar, fie la procesorul vectorial realizat sub form de sistem pipeline, n funcie de tipul acestora.

Fig. 5.7 Procesoarele vectoriale de tip pipeline utilizeaz mai multe module de memorie pentru a furniza etajelor de prelucrare un ir continuu de date. Adesea se utilizeaz un compilator cu vectorizare pentru a aranja datele ntr-un ir care poate fi utilizat apoi de cele dou procesoare. 5.2.7. Matrice sistolice Pentru calculele tiinifice, adesea este necesar rezolvarea unor sisteme de ecuaii liniare de dimensiuni mari. De obicei, pentru rezolvarea unor asemenea sisteme de ecuaii se utilizeaz algebra matriceal. Datorit secvenelor lungi ale calculelor aritmetice, majoritatea operaiilor algebrice matriciale sunt executate pe calculatoare digitale cu vitez ridicat utiliznd pachete software dedicate. Un dezavantaj major al execuiei operaiilor algebrice matriciale pe calculatoare generale este timpul de execuie ridicat. De asemenea, n cazul unui calculator general memoria principal nu are o dimensiune suficient pentru a permite plasarea unor matrice foarte mari. De aceea, sunt necesare numeroase transferuri de I/E, ceea ce crete timpul de execuie. Pentru rezolvarea acestei probleme, au fost introduse arhitecturi speciale. O soluie const n utilizarea unei matrice sistolice (figura 5.8). In cazul acestei arhitecturi, exist un numr mare de elemente de procesare (EP) identice.

Fig. 5.8 Fiecare element de procesare are o memorie local limitat i, pentru a nu se limita numrul de elemente de procesare plasate ntr-o matrice, fiecare EP poate fi conectat numai cu elementele de procesare vecine prin reele de interconectare. Deci, elementele de procesare sunt aranjate ntr-o structur de tip pipeline, sub forma unei matrice liniare sau bidimensionale. Intr-o matrice sistolic elementele de date i rezultatele pariale parcurg elementele de procesare n timpul execuiei, constnd din mai multe cicluri de procesare. In fiecare ciclu de procesare, anumite elemente de procesare execut aceeai operaie relativ simpl (de exemplu, adunare sau nmulire) asupra elementelor de date i transmit aceste elemente sau rezultate pariale la alte elemente de procesare vecine. De obicei, o matrice sistolic are o form rectangular sau hexagonal, dar poate avea orice form. Utiliznd tehnologia VLSI, este posibil s se obin o putere de calcul foarte ridicat cu un sistem constnd dintr-un numr mare de procesoare identice organizate ntr-o manier structural. 5.2.8. Arhitecturi hibride Arhitecturile hibride cuprind caracteristici ale unor arhitecturi diferite pentru a obine performane mai ridicate ale calculelor paralele. In general, exist dou tipuri de paralelism care se pot utiliza: paralelism de control i paralelism de date. In cazul paralelismului de control, se execut simultan dou sau mai multe operaii de ctre procesoare diferite. Calculatoarele MIMD sunt ideale pentru implementarea paralelismului de control. Acestea sunt adecvate pentru probleme care necesit executarea simultan a unor operaii diferite asupra datelor diferite. In cazul paralelismului de date, se execut aceeai operaie asupra mai multor partiii ale datelor de ctre mai multe procesoare. Calculatoarele SIMD sunt ideale pentru implementarea paralelismului de date. Acestea sunt adecvate pentru probleme n care aceeai operaie poate fi executat simultan asupra unor poriuni diferite ale datelor. Calculatoarele MISD sunt de asemenea potrivite pentru paralelismul de date. Aceste calculatoare permit procesarea vectorilor utiliznd tehnica pipeline. In practic, cele mai mari avantaje se obin prin utilizarea paralelismului de date. Aceasta deoarece n acest caz se beneficiaz de pe urma paralelismului n mod proporional cu cantitatea datelor implicate n calcule. Totui, uneori nu este posibil s se exploateze la maxim paralelismul de date, fiind necesar utilizarea att a paralelismului de control ct i a celui de date. De exemplu, n

cazul unor programe de aplicaie rezultatele cele mai bune se pot obine atunci cnd aceste programe sunt divizate n mai multe pri care utilizeaz paralelismul de date, iar prile componente utilizeaz paralelismul prin tehnica pipeline. Un grup de procesoare culege datele i execut anumite prelucrri preliminare. Procesoarele transmit apoi rezultatele lor la al doilea grup de procesoare care execut alte calcule asupra rezultatelor. Al doilea grup transmite rezultatele obinute la al treilea grup de procesoare, care obine rezultatele finale. Deci, un calculator paralel care cuprinde att caracteristici ale arhitecturilor MIMD, ct i cele ale SIMD (sau MISD) poate rezolva n mod eficient o gam larg de probleme. 5.2.9. Reele neuronale artificiale Un exemplu de arhitectur special este o reea neuronal artificial. O asemenea reea const dintr-un numr mare de elemente de procesare (EP) care funcioneaz n paralel. Aceste reele pot rezolva ntr-un mod mai eficient unele probleme pentru care arhitecturile von Neumann sunt ineficiente, ca de exemplu emularea informaiilor naturale sau recunoaterea formelor. Arhitecturile bazate pe reele neuronale sunt capabile de nvare i sunt adaptive la schimbrile de mediu.

Fig. 5.9 Figura 5.9 prezint structura general a unei reele neuronale artificiale. Fiecare element de procesare emuleaz unele caracteristici ale neuronului biologic. Acesta are un set de intrri i una sau mai multe ieiri. Fiecrei intrri i se asigneaz o pondere numeric. Aceast pondere corespunde potenialului sinaptic al unui neuron biologic. O sinaps reprezint conexiunea dintre un neuron i un terminal al altui neuron (terminal numit axon). Transmiterea informaiilor de la un neuron la altul are loc prin intermediul sinapselor i axonilor. Intrrile unui element de procesare sunt multiplicate cu ponderile lor i sunt apoi nsumate pentru a determina nivelul de activare al neuronului. Dup determinarea nivelului de activare, se aplic o funcie de activare pentru a produce semnalul de ieire. Ieirile combinate ale unui strat (nivel) precedent devin intrrile urmtorului strat, n care acestea sunt din nou nsumate i evaluate. Acest proces este repetat pn cnd se traverseaz reeaua i se ajunge la o anumit decizie. Spre deosebire de arhitecturile von Neumann, la care elementul primar de calcul este procesorul, n cazul reelelor neuronale artificiale acest element este reprezentat de conexiunile dintre elementele de procesare. Pentru o problem

dat, trebuie s se determine valorile corecte ale ponderilor astfel nct reeaua s poat executa prelucrrile necesare. De multe ori, determinarea valorilor corespunztoare ale ponderilor se realizeaz prin ajustarea iterativ a ponderilor cu scopul de a crete performanele reelei. Regula de ajustare a ponderilor este numit regul de nvare, iar ntregul proces de obinere a ponderilor corespunztoare este numit nvare. Toate modelele de reele neuronale artificiale sunt caracterizate prin operarea paralel i interconectarea dens ntre elementele de procesare. In acelai timp, exist diferene majore ntre modelele individuale n ceea ce privete arhitectura lor, regulile de nvare i modul de interaciune cu mediul. O taxonomie general a acestor modele este prezentat n continuare. Distincia cea mai general ntre diferitele modele de reele neuronale artificiale este metoda de nvare. Dac mediul furnizeaz exemplele de nvare sub forma perechilor de vectori de intrare/ieire, metoda de nvare este numit supervizat. Aceast metod este numit i nvare cu un profesor, deoarece mediul are rolul unui profesor pentru reeaua neuronal, punnd la dispoziie exemple detaliate despre ceea ce trebuie nvat. Dac, din contr, mediul specific intrarea dar nu i ieirea, nvarea este nesupervizat. In acest caz, reeaua neuronal trebuie s descopere soluia la problema de nvare. In cazul nvrii cu ajutor (reinforcement learning), mediul furnizeaz anumite informaii de ieire, dar aceste informaii sunt sub forma evalurii unei performane a reelei neuronale i nu sub forma unor exemple de nvare. Aceast metod este numit i nvare cu un critic, spre deosebire de nvarea cu un profesor, deoarece mediul nu specific ceea ce trebuie nvat, ci numai dac ceea ce se nva este corect. O alt distincie ntre diferite modele de reele neuronale artificiale se bazeaz pe arhitectura acestora. Arhitectura se refer la tipul de prelucrare executat de neuronii artificiali i la interconexiunile dintre acetia. Modelele de reele neuronale artificiale pot fi mprite n dou grupe: deterministe i stohastice. Reelele deterministe produc ntotdeauna acelai rezultat la ieire pentru aceeai intrare, n timp ce la reelele stohastice ieirea pentru o intrare dat poate varia n funcie de o anumit distribuie a probabilitii de ieire. Modelele stohastice sunt de obicei mai dificil de analizat i simulat, dar n acelai timp ele sunt mai realiste n numeroase aplicaii. Adesea, modelele de reele neuronale artificiale sunt simulate prin program. Aceast metod este flexibil, dar este lent. Metoda cea mai eficient pentru implementarea unei reele neuronale artificiale este implementarea prin hardware. In ultimii ani, au fost dezvoltate mai multe circuite pentru reelele neuronale artificiale. In general, sunt disponibile trei tehnologii diferite pentru implementarea prin hardware a unei reele neuronale artificiale: electronic, optic i electro-optic. Tehnologia electronic poate fi mprit la rndul ei n trei tipuri de implementri: analogic, digital i hibrid. O implementare analogic reduce complexitatea circuitului, dar este mai puin precis i, de multe ori, nu permite

obinerea unui grad de precizie de 6 bii. Aceasta se datoreaz n principal nivelului redus de precizie al rezistoarelor. O implementare digital asigur o precizie mai ridicat, dar de multe ori necesit un spaiu mai mare n cadrul circuitului integrat. O implementare hibrid conine elemente analogice i digitale pentru a obine avantajele ambelor implementri. Tehnologia optic poate soluiona anumite probleme ale tehnologiei electronice, n special cele legate de conectivitatea ntre neuroni, din cauza ntrzierilor i a spaiului necesar n cadrul circuitului integrat. Prin utilizarea interconexiunilor optice, nu este necesar nici o izolaie ntre traseele semnalelor, deoarece razele de lumin pot trece unele prin altele fr a interaciona ntre ele. De asemenea, traseele semnalelor pot fi realizate tridimensional. In sfrit, ponderile pot fi memorate sub forma unor holograme. Cu toate aceste avantaje, exist numeroase probleme asociate cu tehnologia optic, n special faptul c unele caracteristici fizice ale dispozitivelor optice nu sunt compatibile cu cerinele reelelor neuronale. Intr-o implementare electro-optic, interconexiunile sunt realizate optic. Deoarece reelele neuronale artificiale sunt puternic interconectate, aceast metod devine o alternativ atractiv de implementare. 5.2.10. Procesoare bazate pe logica fuzzy Un alt exemplu de arhitectur special este reprezentat de un procesor bazat pe logica fuzzy. Logica fuzzy a fost propus de Lofti Zadeh pentru a mbunti utilizarea tehnicilor inteligenei artificiale n anumite domenii cum este recunoaterea vorbirii. In inteligena artificial, logica cu dou valori reprezint semnificaia unei propoziii ca adevrat sau fals, dar nu poate reprezenta o propoziie cu o semnificaie imprecis. In logica fuzzy, o propoziie poate fi adevrat sau fals, sau poate avea o valoare intermediar (de exemplu, foarte adevrat). Logica fuzzy se ocup de principiile formale ale raionamentului aproximativ. Aceast logic ncearc s trateze n mod eficient complexitatea procesului cognitiv uman i elimin unele dezavantaje asociate cu logica clasic binar, care nu reflect n mod corespunztor procesele cognitive umane complexe. Logica clasic binar consider clase cu limite clare, de exemplu, negru sau alb. In acest fel, un obiect este fie un membru al unei clase, fie nu. Spre deosebire de aceast logic, logica fuzzy consider clase care nu au limite clare, o msur indicnd gradul de apartenen al unui obiect la o clas. Logica fuzzy a fost aplicat n numeroase domenii, cum sunt controlul proceselor, recunoaterea imaginilor, robotic i sisteme expert. Controlul fuzzy este prima aplicaie industrial a logicii fuzzy. Un controler fuzzy poate controla sisteme care puteau fi controlate anterior numai de ctre operatori experimentai. In Japonia, s-au obinut progrese semnificative n logica fuzzy, iar aceast logic a fost aplicat unei mari varieti de produse, cum sunt sisteme de control al navigaiei pentru automobile, camere video i maini de splat. Dei implementarea prin software a logicii fuzzy asigur rezultate bune pentru

unele aplicaii, pentru implementarea aplicaiilor cu performane ridicate sunt necesare procesoare fuzzy dedicate, numite acceleratoare fuzzy.

Cap. 6. Indicatori de performan 6.1. Timpul de execuie Performana unui calculator se refer la viteza sa efectiv i la fiabilitatea sa hardware i software. De obicei, msura performanei este timpul. Calculatorul care execut aceleai operaii n timpul cel mai scurt este mai performant. Timpul de execuie al unui program este msurat n secunde. Performana este msurat n mod frecvent ca o rat (msur) a unor evenimente pe secund, astfel nct un timp mai redus indic o performan mai ridicat. Exist mai muli indicatori care msoar timpul. Unul din acetia este numit timp de rspuns. Acesta este timpul necesar terminrii unui task, cuprinznd i accesele la memorie, operaiile de intrare/ieire i operaiile executate de sistemul de operare. Utilizatorul este interesat n reducerea timpului de rspuns. Deoarece n cazul multiprogramrii UCP execut un alt program n timp ce ateapt pentru o operaie de I/E i nu minimizeaz neaprat timpul de rspuns al unui program, este necesar o distincie ntre cele dou activiti. Aceast distincie este indicat de timpul UCP, care este timpul n care UCP execut efectiv un program, fr a cuprinde timpul de ateptare pentru operaiile de I/E i timpul n care UCP execut alte programe. Timpul UCP poate fi divizat n timpul UCP pentru execuia programului utilizator, numit timpul UCP al utilizatorului i timpul UCP pentru execuia funciilor apelate de program din sistemul de operare, numit timpul UCP al sistemului. Adesea se dorete compararea performanelor a dou calculatoare diferite, de exemplu X i Y . Calculatorul X este mai rapid dect Y dac timpul de execuie al lui X este mai redus dect cel al lui Y pentru taskul dat. In particular, calculatorul X este cu n% mai rapid dect Y " nseamn c: t E (Y ) n =1+ (6.1) tE ( X ) 100 unde t E este timpul de execuie. Se poate defini performana P a unui calculator ca fiind inversul timpului de execuie t E . In acest caz se poate scrie urmtoarea relaie: t E (Y ) P ( X ) n = =1+ (6.2) 100 t E ( X ) P(Y ) Creterea performanei n va fi: t (Y ) t E ( X ) P( X ) P(Y ) n= 100 = E (6.3) 100 P(Y ) tE ( X ) Deci creterea performanei este diferena dintre performana calculatorului mai rapid i a celui mai lent, mprit la performana calculatorului mai lent.

Exemplul 6.1 Dac un calculator A execut un program n 12 secunde i un alt calculator B execut acelai program n 15 secunde, creterea performanei calculatorului A fa de calculatorul B poate fi exprimat astfel: calculatorul A este cu 25% mai rapid dect calculatorul B . In general, performana nu se poate caracteriza printr-o singur metric. Aceasta deoarece performana unui calculator depinde de interaciunile dintre diferitele componente ale sale i datorit faptului c diferii utilizatori sunt interesai de diferite aspecte ale posibilitilor calculatorului. Se prezint n continuare unii indicatori de performan ai calculatoarelor. 6.2. Timpul UCP Calculatoarele numerice utilizeaz un ceas cu o rat constant. Ceasul este definit prin durata ciclului de ceas (de exemplu, 2,5 ns) sau prin frecvena (rata) ceasului (de exemplu, 400 MHz). Pentru un program, timpul UCP ( tUCP ) poate fi exprimat n dou moduri: tUCP = CUCP tC (6.6) unde CUCP este numrul ciclurilor de ceas ale UCP necesare pentru execuia programului, iar tC este durata ciclului de ceas. Timpul UCP se mai poate scrie sub forma: C (6.7) tUCP = UCP f unde f este frecvena ceasului. Pe lng numrul ciclurilor de ceas necesare pentru execuia unui program, se poate considera i numrul de instruciuni executate N , informaie care se regsete n contorul de instruciuni. Dac pentru un program se cunoate numrul ciclurilor de ceas i contorul de instruciuni, se poate calcula numrul mediu al ciclurilor de ceas pe instruciune (CPI) C CPI = UCP (6.8) N Din relaia de mai sus, numrul ciclurilor de ceas ale UCP poate fi definit ca produsul dintre CPI i contorul de instruciuni. Aceasta permite definirea timpului UCP astfel: tUCP = N CPI tC (6.9) sau N CPI tUCP = (6.10) f innd seama de unitile de msur din relaia (6.9) se obine Instructiuni Cicluri.de.ceas Secunde Secunde tUCP = = (6.11) Pr ogram Instructiune Cicluri.de.ceas Pr ogram Dup cum arat aceast ecuaie, performana UCP depinde de trei

caracteristici: contorul de instruciuni, numrul ciclurilor de ceas pe instruciune i frecvena ceasului (sau rata). Aceste caracteristici nu se pot modifica independent unele de altele, deoarece tehnologiile de baz implicate n modificarea fiecrei caracteristici sunt de asemenea interdependente. Uneori este util s se calculeze numrul total al ciclurilor de ceas ale UCP astfel:
CUCP = (CPI i I i )
i =1 n

(6.12)

unde CPI i , reprezint numrul mediu al ciclurilor de ceas pentru instruciunea i , iar I i , reprezint numrul de execuii ale instruciunii i ntr-un program. Timpul UCP poate fi exprimat atunci ca:
tUCP = tC (CPI i I i )
i =1 n

(6.13)

iar numrul total al ciclurilor pe instruciune ca:


n I n (6.14) = CPI i i = (CPI i Fi ) N i =1 N i =1 unde Fi reprezint frecvena instruciunii i . Modificarea setului de instruciuni pentru a reduce contorul de instruciuni, de exemplu, poate conduce la o structur cu o durat mai mare a ciclului de ceas, care reduce efectul mbuntirii contorului de instruciuni. Atunci cnd se compar dou calculatoare, trebuie s se considere toate cele trei componente pentru a determina performana relativ.

(CPI i I i )
i =1

CPI =

Exemplul 6.2 Considerm un calculator la care toate operaiile sunt executate cu registrele, pentru transferul cu memoria existnd numai instruciuni de ncrcare (load) i de memorare (store). Reamintim c asemenea calculatoare sunt numite calculatoare load/store. In tabelul 6.1 se indic frecvena diferitelor tipuri de instruciuni i numrul ciclurilor de ceas pentru acestea. Tabelul 6.1. Un exemplu cu frecvenele de utilizare ale instruciunilor.
Tip instruciune UAL Load Store Salt Frecvena 50% 20% 10% 20% Cicluri de ceas 1 2 2 2

Presupunem c 20% din instruciunile UAL utilizeaz direct un operand ncrcat din memorie, operand care nu este utilizat ulterior. Propunem adugarea unor instruciuni UAL care au un operand surs n memorie. Aceste noi instruciuni care opereaz cu registrele i memoria

necesit dou cicluri de ceas. Presupunem c setul extins de instruciuni crete cu 1 numrul ciclurilor de ceas pentru executarea salturilor, dar nu afecteaz durata ciclului de ceas. ntrebarea care se pune este dac modificarea efectuat crete performana UCP. Soluie Dac ignorm aspectele legate de sistemul de operare, putem utiliza ca indicator de performan timpul UCP. Valoarea CPI iniial se calculeaz prin ecuaia (6.14): CPI init = (0,5 1 + 0,2 2 + 0,1 2 + 0,2 2) = 1,5 Performana iniial este (din ecuaia 6.9): tUCPinit = N init CPI init tCinit = 1,5 N init tCinit 20% din instruciunile UAL devin instruciuni care opereaz cu registrele i memoria. Exist cu (0,2*0,5) mai puine operaii UAL (din numrul total de instruciuni), cu (0,2*0,5) mai puine instruciuni de ncrcare i (0,2*0,5) noi instruciuni UAL cu registrele i memoria. Salturile necesit 3 cicluri de ceas n loc de 2. Noul contor de instruciuni este cu (0,2*0,5) mai mic dect cel vechi. Noua valoare pentru CPI va fi: [0,5 (0,2 0,5)] 1 + [0,2 (0,2 0,5)] 2 + 0,1 2 + 0,2 3 + (0.2 0,5) 2 CPI init = 1 (0,2 0,5) = 1,777 Deoarece durata ciclului de ceas este nemodificat, performana noului UCP va fi: tUCPnou = (0,9 N init ) 1,777 tCinit = 1,6 N init tCinit Cu aceste considerente, rspunsul la ntrebarea anterioar este negativ: prin adugarea noilor instruciuni timpul UCP crete, deoarece aceste instruciuni nu compenseaz creterea timpului de execuie a salturilor. 6.3. MIPS Cel mai important indicator de performan este timpul de execuie al programelor reale. Conform unor autori, acesta este singurul indicator de performan consecvent i fiabil. Totui, s-au adoptat diferii indicatori populari de performan pentru msurarea standard a performanei calculatoarelor. Una din alternativele la timpul de execuie este indicatorul numit MIPS (Millions of Instructions per Second). MIPS reprezint viteza unui calculator prin indicarea numrului de "instruciuni medii" pe care le poate executa pe secund. Pentru un program dat, MIPS este definit astfel: N (6.15) MIPS = t E 10 6 unde N este contorul de instruciuni. Exprimnd timpul de execuie (timpul UCP) din ecuaia (6.10), obinem:

f (6.16) CPI 106 Aceast form este convenabil, deoarece frecvena ceasului este fix pentru un calculator, iar CPI este de obicei un numr mai mic, spre deosebire de contorul de instruciuni sau timpul de execuie. Din ecuaia (6.15), timpul de execuie poate fi exprimat n funcie de indicatorul MIPS astfel: N tE = (6.17) MIPS 10 6 Atunci cnd un calculator poate executa peste un miliard de instruciuni pe secund, se poate utiliza indicatorul BIPS (Billions of Instructions Per Second) (sau GIPS). Acest indicator poate fi definit n mod similar cu indicatorul MIPS. Indicatorul MIPS are avantajul c este uor de neles, mai ales de ctre utilizatori, iar o valoare mai mare a acestui indicator nseamn un calculator mai rapid. Totui, exist anumite probleme atunci cnd MIPS este utilizat ca o msur pentru comparaie. - MIPS este dependent de setul de instruciuni, ceea ce face dificil compararea valorilor acestui indicator la calculatoarele cu seturi diferite de instruciuni. - MIPS variaz pentru programe diferite ale aceluiai calculator. - MIPS poate varia invers proporional cu performana. Un exemplu al ultimului caz este valoarea MIPS a unui calculator cu un coprocesor opional pentru calcule n virgul mobil. Programele care utilizeaz coprocesorul necesit un timp mai redus pentru execuie dect programele care emuleaz instruciunile de calcul n virgul mobil, dar au o valoare MIPS mai redus. Emularea se realizeaz prin instruciuni mai simple, rezultnd o valoare MIPS mai mare, dar trebuie s se execute un numr mai mare de instruciuni, ceea ce crete timpul total de execuie. Asemenea anomalii pot apare i n cazul compilatoarelor care efectueaz optimizarea codului. MIPS =

Exemplul 6.3 Presupunem c se realizeaz un compilator cu optimizarea codului pentru calculatorul load/store din exemplul anterior. Compilatorul elimin 50% din instruciunile UAL, dar nu poate reduce numrul instruciunilor de ncrcare, de memorare i de salt. Presupunnd un ceas cu o frecven de 400 MHz (durata ciclului de 2,5 ns), care este valoarea MIPS pentru codul neoptimizat i pentru cel optimizat ? Soluie Din exemplul anterior, CPI neopt = 1,5 , astfel nct:
400 10 6 MIPS neopt = = 266,6 1,5 10 6 Performana codului neoptimizat este:

tUCPneopt = N neopt CPI neopt tC = N neopt 1,5 2,5 10 9 = 3,75 10 9 N neopt

Pentru codul optimizat, deoarece jumtate din instruciunile UAL sunt eliminate (0,5/2), iar contorul de instruciuni este redus prin eliminarea acestor instruciuni, CPI va fi: (0,5 / 2) 1 + 0,2 2 + 0,1 2 + 0,2 2 CPI opt = = 1,66 1 (0,5 / 2) Deci 400 10 6 MIPS opt = = 240 1,66 10 6 Performana codului optimizat este tUCPopt = (0,75 N neopt ) 1,66 2,5 10 9 = 3,112 10 9 N neopt Codul optimizat este cu 17% mai rapid, dar valoarea MIPS corespunztoare este mai redus. 6.4. MFLOPS Dei valoarea MIPS este un indicator al vitezei unui calculator, aceasta nu reprezint o metric adecvat pentru calculatoarele care execut calcule tiinifice i inginereti, ca de exemplu procesoarele vectoriale. Pentru asemenea calculatoare este important s se msoare numrul operaiilor de calcul n virgul mobil pe care le pot executa pe secund. Aceast valoare este exprimat prin indicatorul MFLOPS (Millions of Floating-Point Operations per Second) sau GFLOPS (Billions of Floating-Point Operations per Second). Formula de calcul pentru indicatorul MFLOPS este simpla definiie a acronimului acestuia: NVM MFLOPS = (1.18) t E 10 6 unde NVM este numrul de operaii n virgul mobil din program, iar t E este timpul de execuie. Valoarea MFLOPS este dependent de calculator i de program. Una din problemele legate de acest indicator const n faptul c setul operaiilor de calcul n virgul mobil difer de la un calculator la altul. O alt problem este c valoarea MFLOPS se modific nu numai n funcie de combinaia operaiilor ntregi i a operaiilor n virgul mobil, dar i n funcie de combinaia operaiilor n virgul mobil mai rapide i mai lente. De exemplu, un program care conine numai adunri n virgul mobil va avea o valoare MFLOPS mai ridicat dect un program care conine numai mpriri n virgul mobil. Soluia la ambele probleme este de a se utiliza operaii normalizate n virgul mobil. Tabelul 6.2 indic modul n care autorii unui program de test (benchmark) numit Livermore Loops calculeaz numrul de operaii normalizate n virgul mobil pentru un

program n funcie de operaiile reale din codul surs. Operaiile reale n virgul mobil conduc la valoarea nativ pentru MFLOPS, iar operaiile normalizate n virgul mobil conduc la valoarea normalizat pentru MFLOPS. Tabelul 6.2. Operaii reale i normalizate n virgul mobil (VM).
Operaii reale n VM ADD, SUB, COMP, MULT DIV, SQRT EXP, SIN,... Operaii normalizate n VM 1 4 8

Indicatorii MIPS i MFLOPS sunt utili pentru compararea calculatoarelor din aceeai familie. Aceti indicatori nu pot fi utilizai pentru compararea calculatoarelor cu seturi diferite de instruciuni i cu cicluri de ceas diferite. Aceasta deoarece un program se poate translata ntr-un numr diferit de instruciuni la diferite calculatoare. 6.5. Ali indicatori de performan Pe lng timpul de execuie, MIPS i MFLOPS, adesea se utilizeaz i ali indicatori pentru o caracterizare mai complet a sistemului. Dintre aceti indicatori se amintesc urmtorii: - numrul de Rata (throughput) unui procesor indic numrul de programe (taskuri sau cereri) pe care le poate executa procesorul n unitatea de timp. - Utilizarea unui procesor se refer la fraciunea de timp n care procesorul este ocupat cu execuia programelor. Acest indicator reprezint raportul ntre timpul n care procesorul este ocupat i timpul total de rspuns ntr-o perioad dat. - Rata de transfer a memoriei indic numrul cuvintelor de memorie care pot fi accesate n unitatea de timp. - Timpul de acces al memoriei este intervalul de timp mediu necesar procesorului pentru accesul la memorie, exprimat n nanosecunde. 6.6. Programe de evaluare a performanelor Una dintre cele mai utilizate msuri ale performanei unui calculator este timpul executrii unui set reprezentativ de programe pe acel calculator Acest timp poate fi timpul total de execuie al programelor din set, media aritmetic sau geometric a timpilor de execuie, sau o alt metric similar Pentru evaluarea performanei se poate utiliza un set de programe reale care sunt reprezentative pentru un anumit mediu de calcul. Asemenea programe sunt numite programe benchmark i acestea sunt rulate de utilizator pe calculatorul care se evalueaz. Cele mai adecvate tipuri de programe care pot fi utilizate pentru evaluare sunt aplicaiile reale. Acestea pot fi aplicaii folosite de utilizatori n mod curent sau aplicaii tipice. De exemplu, n medii inginereti se poate utiliza un set de programe de evaluare care conine mai multe aplicaii tipice inginereti sau

tiinifice. 6.6.1. Compararea i sintetizarea performanelor Dup selectarea programelor care se vor utiliza pentru evaluare, problema care se pune este modul n care se poate sintetiza performana unui grup de programe de evaluare. Tabelul 6.3 ilustreaz o situaie n care compararea performanei a dou calculatoare este dificil. Tabelul 6.3. Timpii de execuie a dou programe pe dou calculatoare diferite.
Calculator A Program 1 (s) Program 2 (s) Timp total (s) 1 1000 1001 Calculator B 10 100 110

Pentru programul 1, calculatorul A este de 10 ori mai rapid dect calculatorul B. Pentru programul 2, calculatorul B este de 10 ori mai rapid dect calculatorul A. Utiliznd aceste msurtori, nu se poate defini performana relativ a calculatoarelor A i B. Metoda cea mai simpl de a sintetiza performana relativ este de a se utiliza timpul total de execuie a celor dou programe. Astfel, calculatorul B este de 1001/110 = 9,1 ori mai rapid dect A pentru programele 1 i 2. Media aritmetic ( MA ) a timpilor de execuie este: 1 n MA = t Ei (6.19) n i =1 unde t Ei este timpul de execuie al programului i din totalul de n programe din set. O medie mai redus indic un timp mediu de execuie mai redus i deci o performan mai ridicat. Media aritmetic indic timpul de execuie presupunnd c numrul de execuii ale tuturor programelor de evaluare dintr-un set este acelai. In caz contrar, se poate asigna fiecrui program o pondere pi pentru a indica frecvena de execuie a programelor din set. Rezult astfel media aritmetic ponderat. O metod posibil de determinare a mediei ponderate este de a se alege ponderile astfel nct pe un calculator de referin timpii de execuie ponderai ai fiecrui program s fie egali. O alt metod de a prezenta performanele unui calculator este de a se normaliza timpii de execuie fa de un calculator de referin, iar apoi de a se considera media timpilor de execuie normalizai. Totui, dac se calculeaz media aritmetic a valorilor timpilor de execuie, rezultatul va depinde de alegerea calculatorului utilizat ca referin. De exemplu, timpii de execuie din tabelul 6.4 sunt normalizai fa de ambele calculatoare A i B, calculndu-se media aritmetic a acestora.

Tabelul 6.4. Timpii de execuie a dou programe pe calculatoarele A i B, normalizai fa de ambele calculatoare, media aritmetic i media geometric a timpilor de execuie.
Timp de execuie Timp de execuie pe A pe B Normalizat fa de A Normalizat fa de B

A Program 1 Program 2 Medie aritmetic Medie geometric 1 1000 500,5 31,6 10 100 55 31,6 1 1 1 1

B 10 0,1 5,05 1

A 0,1 10 5,05 1

B 1 1 1 1

Atunci cnd timpii de execuie sunt normalizai fa de calculatorul A, media aritmetic indic faptul c A este mai rapid fa de B cu un factor de 5,05. Atunci cnd timpii de execuie sunt normalizai fa de calculatorul B, media aritmetic indic faptul c B este mai rapid fa de A cu un factor de 5,05. Numai unul din aceste rezultate poate fi corect. Dificultatea provine din utilizarea mediei aritmetice a timpilor de execuie. In locul utilizrii mediei aritmetice, timpii de execuie normalizai trebuie combinai prin media geometric ( MG ). Formula pentru media geometric este:
MG = n t Ei
i =1 n

(6.20)

unde t Ei este timpul de execuie normalizat fa de calculatorul de referin pentru programul i din totalul de n programe din setul de evaluare. Media geometric este independent de seria datelor utilizate pentru normalizare, deoarece are urmtoarea proprietate: X MG ( X i ) = MG i (6.21) Y MG (Yi ) i ceea ce nseamn c raportul mediilor geometrice a dou valori este acelai cu media geometric a raportului valorilor. Deci, media geometric produce acelai rezultat indiferent dac timpii de execuie sunt normalizai fa de calculatorul A sau fa de calculatorul B, dup cum se observ din tabelul 6.4. Atunci cnd timpii de execuie sunt normalizai, se poate utiliza numai media geometric pentru a se combina rezultatele normalizate. Avantajul mediei geometrice const n faptul c este independent de timpii de execuie a programelor individuale i nu are importan care calculator este utilizat pentru normalizare. Totui, dezavantajul utilizrii mediei geometrice a timpilor de execuie este c aceast medie nu anticipeaz timpul de execuie. Mediile geometrice din tabelul 6.4 sugereaz faptul c pentru programele 1 i 2 performanele calculatoarelor A i B sunt aceleai. Media aritmetic a timpilor de execuie sugereaz faptul c B este de 9,1 ori mai rapid dect A.

6.6.2. Evoluia programelor de evaluare a performanelor Dei actualmente pare evident c soluia cea mai bun este de a se dezvolta un set de aplicaii reale care pot fi utilizate ca programe standard de evaluare, acesta a reprezentat o sarcin dificil pn relativ recent. Diferenele ntre sistemele de operare i standardele limbajelor au reprezentat motive pentru care a fost dificil scrierea programelor complexe care puteau fi mutate de pe un calculator pe altul prin simpla recompilare. Dup elaborarea metricilor MIPS i MFLOPS, urmtoarea etap a fost dezvoltarea programelor artificiale sau sintetice de evaluare. Scopul era de a se crea un singur program de evaluare n care frecvenele de execuie ale instruciunilor sunt aceleai cu frecvenele de execuie dintr-un set complex de programe de evaluare. Whetstone i Dhrystone au fost cele mai populare programe sintetice de evaluare. Programul sintetic Whetstone a fost creat pe baza msurtorilor efectuate asupra aplicaiilor tiinifice i inginereti scrise n limbajul ALGOL. Acest program a fost rescris ulterior n limbajul FORTRAN i a fost utilizat pe scar larg pentru caracterizarea programelor tiinifice. Programul Dhrystone, care a fost inspirat de ctre programul Whetstone, a fost creat mai recent pentru evaluarea programelor de sistem, fiind bazat pe un set publicat de msurtori ale frecvenelor de execuie ale instruciunilor. Dhrystone a fost scris iniial n limbajul Ada i a fost convertit ulterior n limbajul C, dup care a devenit foarte popular. Deoarece programele sintetice de evaluare nu sunt programe reale, ele nu reflect de obicei comportamentul programelor reale. In plus, optimizrile executate de ctre compilator sau prin hardware pot amplifica performanele acestor programe, cu mult peste ceea ce se poate obine prin aceleai optimizri pentru programele reale. De exemplu, compilatoarele care execut optimizri pot elimina cu uurin 25% din codul programului Dhrystone. Programele "kernel" de evaluare sunt fragmente de dimensiuni mici, dar solicitante din punct de vedere al timpului de execuie, extrase din programe reale. Acestea au fost elaborate n primul rnd pentru evaluarea calculatoarelor performante, n special a supercalculatoarelor. Exemplele cele mai cunoscute sunt Livermore Loops i Linpack. Programul Livermore Loops const dintr-o serie de 21 de bucle de dimensiuni mici. Programul Linpack const dintr-o parte a unui pachet de subrutine pentru algebra liniar. Programele "kernel" pot fi utilizate mai ales pentru a izola performanele caracteristicilor individuale ale unui calculator i pentru a explica motivele diferenelor ntre performanele programelor reale. Aceste programe sunt utilizate n special pentru caracterizarea performanelor aplicaiilor tiinifice. O etap important n evaluarea performanelor a fost reprezentat de formarea grupului SPEC (Standard Performance Evaluation Corporation) n anul 1988. SPEC este o corporaie non-profit care elaboreaz i menine seturi standardizate de programe de evaluare bazate pe programe reale. Seturile de

programe de evaluare conin codul surs al acestora i utilitare pentru generarea rapoartelor de performan, fiind testate n mod extensiv naintea publicrii pentru a asigura portabilitatea acestora. Primul set de programe de evaluare (numit SPEC89) a fost publicat n anul 1989. Acest set coninea ase programe de evaluare pentru calcule cu numere n virgul mobil i patru programe pentru calcule cu numere ntregi. Pe baza evalurii, se calcula o singur metric, numit SPECMark, utiliznd media geometric a timpilor de execuie normalizai fa de calculatorul VAX-11/780. Aceast metric favoriza calculatoarele cu performane ridicate ale operaiilor n virgul mobil. In anul 1992 a fost introdus un nou set de programe (numit SPEC92). In acest set au fost incluse noi programe de evaluare, fiind prevzute metrici separate (numite SPECINT i SPECFP) pentru evaluarea calculelor cu numere ntregi, respectiv a calculelor cu numere n virgul mobil. Actualmente, organizaia SPEC este format din trei grupuri, fiecare elabornd propriile programe de evaluare. - Open Systems Group (OSG): Programe la nivel de componente i de sistem, pentru mediile UNIX / Windows / VMS. - High Performance Group (HPG): Programe pentru calcule numerice de nalt performan. - Graphics Performance Characterization Group (GPCG): Programe pentru subsisteme grafice, OpenGL i XWindows. 6.6.3. CPU95 Setul de programe de evaluare CPU95 a fost introdus de ctre organizaia SPEC n anul 1995 pentru nlocuirea setului mai vechi CPU92. Acest set a fost dezvoltat de grupul OSG, care cuprinde peste 30 de productori de calculatoare, integratori de sistem, editori i consultani. Aceste programe msoar performana UCP, a sistemului de memorie i generrii codului de ctre compilator. Ele au fost elaborate iniial pentru sistemul UNIX, dar au fost apoi modificate i pentru alte sisteme de operare. Procentajul de timp necesar executrii funciilor sistemului de operare i a operaiilor de I/E este n general neglijabil. Setul de programe CPU95 este compus din dou colecii: - CINT95: programe de calcul cu numere ntregi, reprezentnd programe de sistem i programe de aplicaii comerciale; - CFP95: programe de calcul cu numere n virgul mobil, reprezentnd programe de aplicaii numerice i tiinifice. Programele de evaluare a UCP pot fi utilizate pentru dou tipuri de msurtori: - Msurarea vitezei de execuie; - Msurarea ratei.

Msurarea vitezei de execuie Rezultatul fiecrui program de evaluare, numit "raport SPEC", este exprimat ca raportul ntre timpul necesar executrii programului o singur dat i un timp de referin fix. Pentru setul CPU95, s-a ales ca i calculator de referin calculatorul Sun SPARCstation 10/40 cu 128 MB de memorie. Diferitele raporturi SPEC pentru un anumit calculator pot varia considerabil. Utilizatorii trebuie s considere acele programe de evaluare care aproximeaz cel mai bine aplicaiile lor. SPEC a definit de asemenea urmtoarele valori medii pentru msurarea vitezei de execuie cu setul CPU95: SPECint_base95: media geometric a 8 raporturi SPEC pentru colecia CINT95 atunci cnd fiecare program component este compilat cu opiuni conservative de optimizare; SPECfp_base95: media geometric a 10 raporturi SPEC pentru colecia CFP95 atunci cnd fiecare program component este compilat cu opiuni conservative de optimizare; SPECint95: media geometric a 8 raporturi SPEC pentru colecia CINT95 atunci cnd fiecare program component este compilat cu opiuni agresive de optimizare; SPECfp95: media geometric a 10 raporturi SPEC pentru colecia CFP95 atunci cnd fiecare program component este compilat cu opiuni agresive de optimizare. SPEC CPU95 cuprinde reguli de rulare i de raportare care permit obinerea att a unor rezultate neoptimizate, ct i a unor rezultate optimizate pentru coleciile CINT95 i CFP95. Rezultatele neoptimizate (numite "baseline") sunt obinute prin optimizare conservativ, iar cele optimizate sunt obinute prin optimizare agresiv. Regulile "baseline" limiteaz numrul opiunilor de optimizare care se pot utiliza la compilarea programelor de evaluare. Msurarea ratei In cazul acestor msurtori, un anumit program de evaluare este executat de mai multe ori. Aceste msurtori sunt utile mai ales pentru sistemele multiprocesor. Rezultatul unei msurtori, numit "rat SPEC", exprim numrul de aplicaii de un anumit tip care pot fi executate ntr-un timp dat. Timpul de referin SPEC este de o zi (24 de ore). Timpii de execuie sunt normalizai fa de calculatorul de referin. Ratele SPEC caracterizeaz astfel capacitatea unui sistem de a executa aplicaii intensive din punct de vedere al calculelor, cu caracteristici similare. Ca i n cazul metricii pentru viteza de execuie, SPEC a definit mai multe valori medii pentru msurarea ratei: SPECint_rate_base95: media geometric a 8 rate SPEC pentru colecia CINT95 atunci cnd fiecare program component este compilat cu opiuni conservative de optimizare;

SPECfp_rate_base95: media geometric a 10 rate SPEC pentru colecia CFP95 atunci cnd fiecare program component este compilat cu opiuni conservative de optimizare; SPECint_rate95: media geometric a 8 rate SPEC pentru colecia CINT95 atunci cnd fiecare program component este compilat cu opiuni agresive de optimizare; SPECfp_rate95: media geometric a 10 rate SPEC pentru colecia CFP95 atunci cnd fiecare program component este compilat cu opiuni agresive de optimizare. 1.3.6.4. CPU2000 CPU2000 este ultima versiune a standardului SPEC pentru evaluarea performanei unitilor centrale, publicat la sfritul anului 1999. Noul set de programe poate fi utilizat sub diferite versiuni ale sistemelor de operare UNIX i Microsoft Windows. Acest set reflect progresele nregistrate n ultimii cinci ani n tehnologia microprocesoarelor, a compilatoarelor i a aplicaiilor. Noua versiune nlocuiete versiunea SPEC CPU95, care a fost abandonat n luna iulie 2000, dat de la care SPEC nu mai public rezultate CPU95. Msurtorile performanelor obinute cu setul CPU2000 nu pot fi comparate cu cele obinute cu setul CPU95, deoarece au fost adugate noi programe de evaluare i unele existente au fost modificate. SPEC CPU2000 cuprinde dou seturi de programe "benchmark": CINT2000 pentru msurarea performanei calculelor cu numere ntregi, i CFP2000, pentru msurarea performanei calculelor cu numere n virgul mobil. mbuntirile introduse n noul set cuprind timpi de execuie mai ridicai, probleme de dimensiuni mai mari, o diversitate mai mare a aplicaiilor i platforme de dezvoltare standard care vor permite producerea unor versiuni pentru alte sisteme de operare. Similar cu versiunea SPEC CPU95, setul CPU2000 permite msurarea vitezei de execuie i msurarea ratei. Metricile pentru viteza de execuie, SPECint2000 i SPECfp2000, msoar timpul n care se execut toate programele "benchmark" din setul CINT2000, respectiv CFP2000. Metricile pentru rata de execuie, SPECint_rate2000 i SPECfp_rate2000, msoar numrul de taskuri executate de calculator ntr-un timp dat. SPEC a selectat ca i calculator de referin staia de lucru Sun Microsystems Ultra 5/10 cu un procesor SPARC de 300 MHz i 256 MB de memorie intern. Toate rezultatele sunt raportate la calculatorul de referin, pentru care valoarea SPECint2000 i SPECfp2000 este de 100. Fiecare program a fost rulat pe calculatorul Ultra 5/10 pentru a stabili un timp de referin. Tabelul 6.5 prezint valorile metricilor SPECint2000 i SPECfp2000 msurate pentru unele calculatoare. De notat c aceste valori depind de mai muli factori, ca tipul i frecvena de ceas a procesorului, tipul plcii de baz,

tehnologia i dimensiunea memoriei, etc. Din aceti factori, n tabel se indic numai tipul i frecvena de ceas a procesorului. Tabelul 6.5. Rezultate SPEC CPU2000.
Firma AMD Procesor AMD Athlon, 1,33 GHz AMD Athlon XP 1700+ AMD Athlon XP 2200+ AMD Athlon XP 2800+ Intel Pentium III, 1,4 GHz Intel Xeon, 2,0 GHz Intel Xeon, 2,8 GHz Intel Pentium 4, 1,4 GHz Intel Pentium 4, 2,0 GHz Intel Pentium 4, 2,8 GHz Intel Pentium 4, 3,06 GHz HP Intel Intel Itanium 2, 1,0 GHz Intel Pentium 4, 2,0 GHz Intel Pentium 4, 2,4 GHz Intel Pentium 4, 3,06 GHz CINT2000 438 633 738 898 648 685 879 493 744 970 1032 810 681 922 1099 516 100 CFP2000 348 561 624 782 437 672 774 524 649 938 972 1174 735 840 1077 682 100

Dell

Sun Microsystems SPARC, 1,015 GHz SPARC, 300 MHz

SPEC a considerat urmtoarele criterii n procesul de selecie a aplicaiilor care sunt utilizate ca programe "benchmark": Portabilitatea pe toate arhitecturile hardware SPEC de 32 i 64 de bii (cuprinznd arhitecturile Alpha, Intel Architecture, RxxOO, SPARC, etc); Portabilitatea pe diferite sisteme de operare, n particular UNIX i MS Windows; Programele nu trebuie s conin operaii semnificative de I/E, grafice sau de reea; Programele trebuie s ruleze ntr-o memorie RAM de 256 MB fr a utiliza memoria virtual; Nu trebuie s se utilizeze un timp mai mare de 5% din timpul total pentru prelucrarea codului care nu este furnizat de SPEC. 6.2.7. Factori de calitate In plus fa de indicatorii de performan, exist diferii factori de calitate care influeneaz de asemenea succesul unui calculator. Dintre aceti factori se amintesc generalitatea, simplitatea utilizrii, expandabilitatea, compatibilitatea i fiabilitatea. Generalitatea este un factor care determin gama aplicaiilor care pot fi

rulate pe o anumit arhitectur. Anumite arhitecturi sunt potrivite pentru aplicaii tiinifice, iar altele pentru aplicaii comerciale. Arhitectura este mai avantajoas dac permite rularea unei game largi de aplicaii. Simplitatea utilizrii este un factor care indic uurina dezvoltrii programelor pentru arhitectura respectiv. Expandabilitatea indic uurina cu care se poate extinde o arhitectur cu procesoare, memorie i dispozitive de I/E. Compatibilitatea indic n ce msur pot fi executate pe noile arhitecturi programe elaborate pentru arhitecturile precedente din aceeai familie de calculatoare. Fiabilitatea indic probabilitatea defectelor sau timpul mediu ntre defecte.

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