This is not a Wikipedia article: It is an individual user's work-in-progress page, and may be incomplete and/or unreliable. For guidance on developing this draft, see Wikipedia:So you made a userspace draft. Find sources: Google (books · news · scholar · free images · WP refs) · FENS · JSTOR · TWL |
examen smp
101)Ce Este Memoria Flash *Este memorie nevolatila.*Utilizeaza tehnologia NOR, care ii permite utilizatorului sa programeze si sa stearga informatia electric.*Programarea are loc cand electronii sunt plasati pe poarta flotanta.*Sarcina electrica este stocata in poarta flotanta *Stratul de oxid permite stregerea celulelor prin intermediul sursei.
102)Flash vs. EPROM & RAM *Diferenta esentiala: celulele Flash sunt sterse electric, spre deosebire de EPROM unde sunt sterse cu lumina ultravioleta *Memoria Flash poate fi atat stearsa, cat si reprogramata *Timpii de scriere / citire sunt mai mari decat la RAM*Flash – poate fi rescrisa de un numar finit de ori => se preteaza pentru aplicatii in care este necesara rescrierea unor date, dar nu de un numar mare de ori, de ex: lookup table cum este lista de numere de telefon stocata intr-un telefon mobil.
103)Arhitectura Memoriei Flash *Memoria Flash este disponibila in blocuri arhitecturale simetrice si asimetrice.*Arhitectura flexibila a blocurilor permite integrarea codului si a datelor intrun singur dispozitiv Flash.*Familia Flash Boot Block are blocuri asimetrice de matrice de memorie care permit stocarea codului pentru boot (ca la EEPROM) si blocuri ample eficiente pentru stocare de cod si date.*Familiile FlashFile si Intel StrataFlash au blocuri simetrice de matrice de memorie care ofera cea mai buna modalitate de gestiune a codului si a datelor.
104)Modurile de Citire *Modurile de operare standard pentru componente Flash sunt:–Read (citire)–Program (programare)–Erase (stergere).*Intel ofera trei tipuri de operatii de citire:–Citire asincrona a unui cuvant (cea mai des intalnita)–Citire asincrona a unei pagini Citire sincrona “burst”. *Citire asincrona a unui cuvant:–Accesul pentru date: la tranzitia unei adrese sau pe frontul descendent al OE/ (Output Enable) sau al CE/ (Chip Enable).–Performante acceptabile *Citire asincrona a unei pagini:–Rate de transfer inalte de date pentru sisteme de memorie fara ceas.–Datele sunt citite intern si stocate intr-un buffer de pagini de mare viteza.–Necesita un timp de acces initial ceva mai lung, accesarile ulterioare in cadrul paginii pot dura numai 20ns.*Synchronous burst:– Suporta operatii cu viteze de pana la 66MHz fara stari de asteptare.Necesita pinii aditionali CLK/, WAIT/, ADV/ (Address Valid Input).
105)Programarea si Stergerea*Programarea se face de obicei la nivel de byte sau de cuvant.*Exista si dispozitive care dispun de buffere de scriere de 32 de octeti.*Stergerea se face cu o comanda de stergere a blocului (“Block Erase”).*Timpul de stergere depinde de dimensiunea blocului si de tehnologia folosita.*Functii care ii permit dispozitivului sa faca o pauza si sa citeasca date, apoi sa reia operatia precedenta: program-suspend, program-resume, erase-suspend, eraseresume.* Arhitectura ii permite procesorului sa citeasca dintr-o partitie, in timp ce realizeaza scriere / stergere in alta partitie. Acest fapt permite executarea de cod SI programarea datelor aceluiasi dispozitiv Flash, la acelasi moment de timp.
106)Protectia Datelor*Este importanta protectia datelor nevolatile.*Unele produse Flash dipun de blocare hardware dinamica a blocurilor, astfel incat codul critic este securizat, iar blocurile celelalte pot fi programate sau sterse.*Aceasta schema permite doua niveluri de protectie:–Control software al blocarii (util pt. blocuri care se modifica frecvent)–Interactiune hardware – necesara inainte ca blocurile protejate sa poata fi modificate. 107)Securitatea *Unele dispozitive Flash dispun de doua registre OTP de 64 de biti (“One Time Programmable”), care pot fi folosite pentru cresterea securitatii datelor.*Fabricile Intel programeaza un registru OTP cu un numar unic, nemodificabil, de 64 de biti.*Al doilea registru OTP poate fi programat de catre client asa cum doreste. Odata programat, acesta poate fi blocat pentru a preveni reprogramarea sa. 108)Software Data Protection *Operatii de scriere nepotrivita pot fi generate de zgomot sau de variatii de tensiune, problema rezolvata prin facilitatea SDP (Software Data Protection), care poate fi activata de catre utilizator.*Datele pot fi scrise intr-un sector cu SDP activa sau nu. *Odata ce SDP a fost activata, toate operatiile de scriere ulterioare activarii SDP vor executa scrieri de proba inainte de a incarca sectorul cu date.*Scrierile de proba (“dummy write”) constau din incarcarea a trei valori cunoscute in trei adrese predefinite.*Aceasta secventa de 3 octeti care precede o operatie de scriere elimina posibilitatea de realizare a unei scrieri eronate. 109)Structura generala a procesorului pipeline p – perioada ceasului *tb – timpul maxim de efectuare a unei functii intr-o treapta *tl – timpul necesar latch-ului pentru acceptarea datelor de intrare * nStage (segment) – subproces in care se descompune procesul de executie *Circuitele de prelucrare prelucreaza segmente *Ele pot fi secventiale, combinationale, inteligente *Semnalul de ceas se aplica dispozitivului de memorare, astfel incat rezultatul unui segment este transmis urmatorului *Rezultatul se obtine dupa ce datele au trecut prin toate segmentele pipeline *Cel mai lung timp de prelucrare intr-un segment – bottleneck, deci tb > max (timp de prelucrare) 110)Caracterizarea performantelor *Timpul teoretic de executie ***Tpipe = m * P + (n–1) * P
Tinstr**instr – durata executiei “normale” a instructiunii **τi – timpul de executie a segmentului i
accelerare)*** S = Tsec / Tpipe = n * m / (m + n - 1) ***La limita, cand n → ∞, S → m (factorul ideal de accelerare) ***Se mai definesc :¡E – eficienta *** E = S / m = [n * m / (m + n + 1)] / m = n/(m + n – 1)***¡H – throughput (rata de transfer sau bandwidth – latimea de banda)*** H = n / Tpipe = n/[m*P + (n -1)*P] = E / P = S / (m*P) ***Daca n → ∞, H → 1 / P (un task in fiecare perioada de ceas)***Raportul cost/performanta:** PCR = (rata de transfer max) / (costul procesorului) 111)Tipuri de pipeline a. – instruction pipeline*b. – arithmetic pipeline*Fiecare tip poate fi static sau dinamic.*In procesorul pipeline static tipul de operatie se poate schimba doar dupa evacuarea din procesor a rezultatului aferent ultimului element de date intrat inaintea cererii de modificare a operatiei.*Drain *Flush 112)Structura pipeline dinamica *Exemplu: pipeline dinamic, adunarea necesita treptele 1, 3, Inmultirea: 1, 2, 3. *Atentie: introducerea datelor in pipeline necesita sincronizare cu executia interna pentru a se evita furnizarea simultana de date (+,***) treptei 3 (in care caz are loc coliziunea) → Pipeline dinamic are mecanisme de comanda mult mai complicate decat in pipeline static 113)Pipeline pentru instructiuni *In general, executia instructiunii se poate descompune in urmatoarele operatii mai simple:*IF instruction fetch (extragerea instructiunii)*ID instruction decoding (decodificarea instructiunii)*OF operand fetch (extragerea operandului)*EX execution (executia)*WB write-back (actualizarea rezultatului)*Perioada= P*Daca P = 10 ns, 4 instructiuni sunt executate in 80 ns:***Tpipe = m * P + (n–1) * P = 5 * 10 + (4–1) * 10 = 80***Tsec = n * m * P = 4 * 5 * 10 = 200 ns. 114)The fetching problem *The fetching problem. Furnizarea rapida de instructiuni la intrarea pipeline este costisitoare din punctul de vedere al ariei chipului. *O cale eficienta de rezolvare - folosirea unor buffere - creste performanta utilizarii pipeline (coeficientul de utilizare este dat de numarul de segmente utilizate permanent).Ocazional, procesorul este vidat de date si realimentat.
rapide *Rezulta necesitatea unei “prefetch unit”. *Printre efecte: se reduc si conflictele de acces la memorie. 115)Problema strangularii *Problema strangularii (bottleneck) este legata de volumul de lucru afectat unui segment.*Pentru a reduce timpul tb: * fie:*¡segmentul in discutie este subdivizat in alte subsegmente; * fie:*¡se adauga in paralel noi segmente de acelasi tip. 116)Problema emiterii instructiunii *Cazul instructiunii disponibile, dar care nu poate fi executata: structural hazard, data hazard, control hazard.*Hazard structural: resursa necesara nu este disponibila.*Hazard creat de date: exista dependenta de o instructiune anterioara.*Hazard creat de comenzi: o instructiune (ex. branch) genereaza o modificare a fluxului instructiunilor. 117)Hazard Hazard structural: *Conflict privind resursele intre instructiuni. Generat de
emisa la perioade ale ceasului. Se rezolva prin replicare; *tipul resurselor (exemplu: registrele care nu sunt multiport).*Reducerea efectelor – prin implementarea de unitati multiple de executie si registre multiport. 118)Hazard datorat datelor*Introducerea de intarzieri se face cu ajutorul “pipeline interlocks“ – hardware care detecteaza independenta unei instructiuni de precedenta si intarzie instructiunile interdependente pana la solutionarea conflictului.*O alta cale: cu ajutorul compilatorului care rearanjeaza instructiunile.*Pana acum s-au discutat probleme de hazard cu date de intrare. Sunt posibile si alte situatii, privind inscrierea rezultatelor:¡RAW read after write*¡WAR write after read ¡WAW write after write*Ipoteza: Se presupune ca i2 trebuie executata dupa executia lui i1.*RAW – discutat anterior: i2 citeste sursa inainte ca i1 sa o inscrie – rezultat incorect.*WAR: i2 inscrie o locatie inainte ca i1 sa o fi citit EX.: ***ni1 Add R2, R3, R4 ***ni2 Add R4, R3, R6 *i2 nu trebuie sa inscrie R4 inainte ca i1 sa il fi citit.*WAW ***¡i1 Add, R2, R3, R4 ***¡i2 Mul R2, R3, R6***WAR si WAW nu pot avea loc daca ordinea de executie a instructiunilor este pastrata. *Dar: o cale de crestere a eficientei – executia concurenta a mai multor instructiuni prin transmiterea simultana a mai multor instructiuni la unitati functionale independente (adder , multiplier, divider), ceea ce rezulta in schimbarea ordinii de executie a instructiunilor. 119)Dependenta de date *In arhitecturile momentului, dependenta instructiunilor de datele asupra carora actioneaza programul este verificata static (de catre compilator) si/sau dinamic, la momentul executiei, de catre hardware. *Static dependency check technologies – elaborate pentru exploatarea paralelismului intr-o bucla. Ele se bazeaza pe examinarea a prori (look ahead) a programului si detectarea dependentelor.*Unele dependente NU se pot detecta la momentul compilarii (ex: adresele de load/store). Problema se rezolva dinamic, la runtime.*Pe de alta parte, dynamic dependency check nu poate exploata complet paralelismul *Compromis compile time / runtime*Doua metode des utilizate:*¡Tomasulo *¡Scoreboard 120)Metoda Tomasulo*Arhitectura hardware este compusa din 5 registre, numite R1, R2, … , R5, un sumator (Adder) si un multiplicator (Multiplier), ultimele fiind numite unitati functionale sau statii de rezervare (reservation stations).*Sumatorului si multiplicatorului, elemente fizice, li se asociaza cate doua seturi de registre de intrare, ceea ce permite a se vorbi de doua sumatoare virtuale (A1 si A2) si doua multiplicatoare virtuale (M1 si M2) *Fiecare unitate functionala are 2 seturi de intrare (source-1, source-2). Ele sunt numite reservation station si stocheaza operanzii instructiunii emise *CDB (common data bus) conecteaza iesirile unitatilor functionale la intrari si registre Þ Forwarding technique, feed forward.*CDB face posibil ca rezultatul unei operatii sa devina disponibil pentru toate celelalte unitati functionale fara a mai trece prin registrele unitatilor care asteapta sa li se ofere copii al rezultatului.*A1, A2 – doua sumatoare virtuale*M1, M2 – doua multiplicatoare*Tag 1, 2,... 5 sunt asociate registrelor*6, 7 – sumatoarelor virtuale*8, 9 – multiplicatoarelor virtuale *Fiecarui registru i se asociaza doua campuri:*busy – bit indicand daca registrul este sau nu disponibil. Este 1 cand registrul este asignat drept destinatie, iar continutul sau nu este inca evaluat. Este resetat la terminarea inscrierii.*tag – identifica unitatea ce va scrie in registru.* Se considera secventa * I1: Add R2, R3, R4* I2: Add R2, R2, R1*a) i1 emisa catre add station A1 *¡busy bit al lui R2 - set (1) *¡source -1 incarcat cu (R3), source - 2 – cu (R4)*¡tagul lui R2 inscris cu 6 (codul lui A1)*b) A1 incepe executia lui i1*c) Simultan, i2 este incarcata in add station A2 *¡la fetch se determina ca R2 – busy *¡pentru a accelera la maximum executia, tagul lui R2 (6) este incarcat in tagul source-1 din A2*¡tagul lui R2 este schimbat in 7 (adica rez. lui A2 se transfera in R2)*continutul lui R1 este incarcat in source-2 a lui i2 *d) Inainte ca Adder A1 sa termine executia lui i1 si sa produca rezultatul, trimite un semnal de cerere catre CDB pentru a transmite rezultatul (cererile de transfer arbitrate de un arbitru).*e) Cand CDB confirma cererea, A1 trimite rez. pe magistrala. Insotit de tagul A1, semnalul este difuzat si copiat de toate elementele cu acelasi continut de tag → datele copiate in source-1 a lui A2.*f) Se executa i2 pe A2, rezultatul in R2. *Desi hardware-ul suplimentar sugerat de metoda Tomasulo permite cresterea gradului de executie concurenta, un rol important revine si compilatorului *In practica, se utilizeaza combinatii hardware – software*Se considera exemplul care urmeaza 121)Metoda Scoreboard *Schema pastreaza informatii de stare despre: instructiunile executate , unitati functionale, registre. Hardware-ul care le pastreaza se numeste „Scoreboard“. *Cand o noua instructiune este emisa pentru executie influenta ei asupra registrelor si unitatilor functionale este inscrisa in scoreboard. Un instantaneu al scoreboard arata daca noua instructiune trebuie sa astepte in vederea inceperii executiei.* NU – unitatea functionala adecvata incepe de indata executia. * DA – executia asteapta disparitia conditiei de asteptare.nScoreboard are 3 tabele: * - instruction status, - functional unit status, - destination register status. 122)Instantaneu dupa emiterea primei instructiuni Add *Instruction status table arata daca o anumita instructiune a fost sau nu emisa pentru executie. Daca da – ii arata starea.*Dupa ce a fost extrasa si decodificata, scoreboard incearca sa emita o comanda catre unitatea functionala adecvata. Conditii:¡unitatea functionala libera (structural hazard)¡nu exista o alta instructiune folosind aceleasi registre destinatie (WAW hazard)*Daca nu sunt indeplinite conditiile – executia este intarziata ► instructiunile independente se executa simultan, instructiunile sunt emise in secventa.*Functional unit status table arata starea unitatii functionale *¡Busy: instructiunea asociata nu a fost inca executata. *Pentru busy tabelul identifica registrul destinatie si disponibilitatea registrului sursa.*Destination register status table indica registrele destinatie care nu au fost inca inscrise. Pentru aceste registre se identifica unitatea functionala care le va inscrie.*Pe durata fazei de extragere a operanzilor, Scoreboard monitorizeaza tabelele pentru a determina daca registrele sursa sunt disponibile pentru citire de catre o unitate functionala activa. *Daca nici unul din registrele sursa nu este utilizat ca registru destinatie de una din unitatile functionale active, unitatea functionala citeste operanzii din aceste registre si incepe executia. *La terminarea executiei, scoreboard verifica existenta de hazard WAR inainte de a permite inscrierea rezultatului in registrele destinatie. 123)Scoreboard *In primul instantaneu: al 4-lea load in curs de executie, primele 3 terminate. Al 4- lea load nu a inscris inca R4. Multiplicatorul executa Mul, Adder-0 asteapta pe R4 (RAW hazard). Al 2-lea Add nu poate fi emis deoarece foloseste R2 ca destinatie, dar R2 este deja folosit de Add- 1.*In instantaneul urmator: Adder-1 termina inaintea multiplicatorului, scrie rezultatul in R2 si se emite a 2-a instructiune add catre Adder-2. Adder-0 este impiedicat sa scrie rezultatul in R2 pana cand multiplicatorul citeste operatorii (WAR hazard).*Destination Register Table – componenta de baza, folosind la eliminarea hazardului intre instructiuni.*La emiterea cererii de executie a instructiunii, registrul destinatie este marcat „busy“, ramanand astfel pana la terminarea executiei. Considerarea unei instructiuni pentru executie presupune verificarea existentei de conflicte de registru cu instructiuni deja aflate in executie. 124)Control Hazard *Uneori fluxul comenzilor inceteaza a mai fi secvential ►branches (salturi). n20 - 30% din program au asemenea instructiuni.*Salturile reduc eficienta structurii pipeline, ca urmare a timpului de golire-reumplere a structurii.*3 grupe de instructiuni “branch”: *¡salt neconditionat; *¡salt conditionat; *¡bucla.*Cel mai dificil de manipulat: salt conditionat *Exemplu: Secventa de instructiuni i1 i2 (salt conditionat la ik) i3 . . . ik (target) i(k+1) *tave - nr. mediu de cicluri / instr. branch *tave = pb * (nr. mediu de cicluri la o instructiune de salt) + (1 – pb) * (1) *
mediu de cicluri pe instructiune de salt este (pt – probabilitatea de a se alege “salt”):* pt * (1 + c) + (1 – pt) * (1)Se deduce ca:*tave = pb* [ pt *(1 + c) + (1 – pt)*(1)] + (1 – pb)*(1) = 1 + c * pb * pt
125)Branch prediction – Predictia privind executia instructiunii de salt Branch prediction. Rezultatul unei instructiuni branch este prezis inainte de executia instructiunii de salt. *Daca predictia este incorecta, rezulta scaderea eficientei.*Doua tipuri de predictie: statica si dinamica. 126)Branch prediction nIn cazul predictiei statice decizia este luata inainte ca programul sa ruleze, de ex. se executa salt. O alta posibilitate: decizia luata in functie de tipul saltului.*In cazul predictiei dinamice procesorul ia decizia in timpul executiei, bazat pe comportarea in trecut a instructiunii de salt. *Ex.: se pastreaza istoria ultimelor doua executii. Daca in cele doua cazuri s-a efectuat saltul – se procedeaza la fel. Daca nu – alegere aleatoare.*O abordare mai buna: asocierea la instructiunea de salt a unui contor cu n biti („counter based branch prediction“). *Dupa prima executie a instructiunii de salt contorul C este inscris cu un prag T daca s-a efectuat saltul, sau cu T – 1 in caz contrar. *Dupa aceea, la o noua instructiune se efectueaza saltul daca C => T. In caz contrar – executie secventiala. Daca s-a efectuat saltul, C este incrementat. Daca nu – se decrementeaza. *C nu se incrementeaza peste 2n – 1 si nu se decrementeaza sub 0. 127)Predictie *Se foloseste o mica memorie cache, numita „branch target buffer“ (BTB) sau „target instruction cache“ (TIC). *Elementul memorat in cache contine adresa instructiunii de salt in adresa tinta si „istoria“ utilizata de schema de predictie. *La prima executie a instructiunii de salt datele ei sunt inregistrate in BTB. *La extragerea codului, procesorul cauta in BTB. Cand exista date despre instructiunea extrasa – istoria serveste la luarea deciziei.*Predictia statica: necesita hardware modest, dar un compilator complex. *In general, predictia dinamica este mai eficienta.*Pentru evaluarea performantelor trebuie stabilit numarul de cicluri pe instructiunea de salt. *Doua posibilitati: predictie corecta sau falsa. *In cazul celei corecte, penalizarea este d cand traseul este corespunzator saltului si 0 in cazul traseului secvential. 128)Efectuarea intarziata a saltului *Delayed branching (Efectuarea intarziata a saltului). Elimina sau reduce semnificativ efectul penalizarii la efectuarea saltului. *Metoda presupune executarea unui numar de instructiuni consecutive celei de salt, indiferent de traseul ce va trebui ales.*De exemplu, un procesor cu intarziere de k instructiuni in efectuarea saltului, executa k instructiuni urmand celei de salt, dupa care *fie continua, *fie alege traseul catre o noua adresa tinta.*Compilatorul incearca sa umple cele k “compartimente” urmand instructiunii de salt cu instructiuni cu executie independenta de cea de salt. *Cand nu se poate, completarea se face cu NOP. 129)Multiple Prefetching *Procesorul extrage si executa ambele trasee*Dupa luarea deciziei, traseul inutil este ignorat.*Pentru a extrage ambele trasee se folosesc 2 tampoane. In executia normala, primul este incarcat cu instructiunea de la adresa secventiala.*Cand apare salt, continutul lui este invalidat si un al doilea buffer, incarcat cu instructiunea de la adresa target, devine bufferul principal.*Schema cu 2 tampoane asigura un flux constant de date si instructiuni si reduce intarzierile impuse de vidarea si umplerea pipeline. 130)Superscalar *Se bazeaza pe paralelism spatial (operatii multiple ruland in paralel pe hardware separate). *Executia mai multor instructiuni intr-o singura perioada de ceas se realizeaza prin emiterea de instructiuni catre unitati de executie multiple. *Un procesor superscalar contine unul sau mai multe pipeline folosind, in comun, un set de unitati functionale (add, multiply, divide, floating point, graphic). *Se foloseste un mecanism de gestiune de ex. Scoreboard sau Tomasulo. 131)Superpipeline *Cresterea de performanta - realizata prin suprapunerea executarii mai multor instructiuni intr-o structura pipeline. Aceasta are mai multe trepte decat una obisnuita ►operatii mai simple ► viteza ceasului creste.*¡Ex.: MIPS R4000: Procesor pipeline cu 8 trepte: 1 Fetch first half 2 Fetch second half 3 Register fetch 4 Instruction execute 5 Data cache access first half 6 Data cache access second half 7 Tag check 8 Write back*Mai compact decat superscalar (spatiu mai mic pe chip). 132)Very Long Instruction Word *Folosesc intens compilatorul, care inglobeaza mai multe operatii intr-o instructiune lunga. *Instructiunea este suficient de lunga pentru a putea oferi, in paralel, biti de comanda pentru numeroase unitati functionale. *Deci, masina VLIW ofera cu mult mai multe unitati functionale decat o masina conventionala si dispune de un compilator care determina paralelismul existent in executia operatiilor de baza, avand ca scop ocuparea cu maximum de eficienta a unitatilor functionale. *Compilatorul compacteaza codul secvential in instructiuni lungi. *Pe durata executiei, unitatea de comanda emite o instructiune lunga la fiecare perioada de ceas. *Instructiunea lunga initiaza simultan numeroase operatii independente. 133)Comparatie *Compararea celor trei moduri de crestere a eficientei structurilor pipeline evidentiaza diferente interesante. *¡Masinile superscalar si VLIW sunt mai sensibile la conflictul intre resurse decat superpipeline. Reducerea sanselor de conflict se realizeaza prin duplicarea unitatilor functionale. *¡Pentru ca un procesor superpipeline sa nu fie lent se cere o tehnologie speciala, cum ar fi GaAs. Procesorul superscalar necesita mai multe tranzistoare, deci se recomanda tehnologia CMOS, care permite o densitate mare a portilor. Istoria arata ca densitatea lor a crescut mai rapid decat viteza tranzistoarelor. Acest lucru recomanda superscalarul drept cel mai bun privind raportul performanta / cost.*Progresele tehnologice au permis combinarea superscalar – superpipeline, cu rezultate bune in solutionarea unor probleme de eficienta. Exemplu: Microprocesorul Alpha AXP (DEC, ulterior Compaq, ulterior HP, ulterior ???) 134)ILP – Paralelismul La Nivel De Instructiune *ILP (Instruction – Level Parallelism - Paralelismul la nivel de instructiune (PNI)) si exploatarea sa eficienta sunt cruciale pentru maximizarea vitezei limbajului de nivel inalt (HLL – high-level language) compilat.* Metodele pentru exploatarea ILP includ: *¡procesarea superscalara (SS), *¡superpipeline (SP) si *¡procesarea very long instruction word (VLIW).*In principiu, ILP poate fi vazut ca o masura a numarului mediu de instructiuni pe care un procesor adecvat, de tip SS, SP sau VLIW le poate executa in acelasi timp. *Secventierea instructiunilor pentru un procesor RISC, respectiv pentru un procesor SS sunt ilustrate in figurile 1, respectiv 2. *ILP este o functie de numarul de dependente in legatura cu alte instructiuni. *Din nefericire, o arhitectura nu este intotdeauna capabila sa sustina toate ILP disponibile. Drept urmare, o alta masura – MLP (machine level parallelism – paralelism la nivel masina) este folosita adesea ca masura a abilitatii unui procesor SS de a profita de pe urma ILP disponibile. *Pentru un raport performanta / complexitate optim, MLP si ILP trebuie sa fie echilibrate. *Limitarile de performanta fundamentale ale unui procesor SS sunt ilustrate in Fig. 3, 4 si 5. *Figura 3 prezinta cazul interdependentei adevarate a datelor intr-un mediu superscalar (se pierde un ciclu masina). *Emiterea (Issue), adica extragerea instructiunii si decodificarea sa (fetch and decode) si finalizarea (writeback – actualizarea rezultatului, care modifica starea microprocesorului) reprezinta treptele de baza ale unei instructiuni.*La microprocesoarele mai putin sofisticate, succesiunea lor este cea fireasca (“in ordine”).*La microprocesoarele mai sofisticate, acestea se desfasoara “out-of-order” (executie speculativa). Aceasta solutie permite o performanta mai buna pentru complexitatea integrarii pe scara larga (VLSI – Very Large Scale Integration). 135)In-Order si Out-of-Order *Fie un microprocesor care poate emite (issue) doua instructiuni simultan, poate executa trei instructiuni simultan si poate finaliza doua instructiuni simultan.*Fie un program cu urmatoarele caracteristici: instructiunea I1 necesita doua cicluri pentru a fi executata, instructiunile I3 si I4 sunt in conflict pentru o unitate functionala, instructiunea I5 se bazeaza pe datele generate de I4 si instructiunile I5 si I6 sunt in conflict pentru o unitate functionala. *In figura 7 este ilustrat cazul in care instructiunile sunt emise si finalizate “in-order” (in ordinea specificata in codul sursa). *In figura 8 este prezentat cazul in care instructiunile sunt emise “in-order” si finalizate “out-of-order”. *Figura 9 arata cazul instructiunilor emise si finalizate “out-of-order”. *In acest exemplu, cel mai simplu caz (II – emitere in-order si finalizare in-order) necesita 8 cicluri pentru a se executa. *Cazul mediu (IO – emitere in-order si finalizare out-of-order) necesita 7 cicluri pentru a se executa. *Cazul cel mai sofisticat (OoO – emitere out-of-order si finalizare outof- order) dureaza 6 cicluri. *Aceste valori au fost obtinute presupunand ca masina are urmatoarele caracteristici: instructiunea este prezenta in unitatea de decodificare pana cand incepe executia sa si fiecare instructiune este executata de unitatea de executie adecvata. *In cazul cel mai simplu (II), finalizarea se poate face doar dupa ce ambele perechi de instructiuni au fost executate complet, ele sunt finalizate impreuna. Aceasta abordare (II) este specifica microprocesoarelor scalare si este folosita rar la microprocesoarele superscalare. *In cazul mediu (IO), executia unei instructiuni poate incepe de indata ce resursa necesara este disponibila; finalizarea se face de indata ce executia este terminata (I2 se finalizeaza out-of-order). Aceasta abordare (IO) a fost folosita prima data la microprocesoare scalare, dar utilizarea sa majora este in microprocesoarele superscalare. 136)Stalling *Exista 3 cazuri in care emiterea unei instructiuni trebuie intarziata (stalled):*¡cand emiterea poate genera un conflict intre unitatile functionale (hazard structural)*¡cand instructiunea care urmeaza sa fie emisa depinde de instructiuni care nu au fost inca finalizate *¡cand rezultatul instructiunii care urmeaza sa fie emisa ar putea fi suprainscris de o instructiune anterioara care inca se mai executa sau de catre o instructiune care urmeaza a fi lansata in executie. *Hardware dedicat - folosit pentru intarziere (stalling) in toate cazurile de mai sus. 137)Out-of-Order *In abordarea cea mai sofisticata (OoO), procesorul este capabil sa anticipeze lucrurile dincolo de instructiunea care a fost intarziata (stalled), lucru care nu este posibil in varianta IO. *Extragerea si decodificarea dincolo de instructiunea intarziata sunt posibile prin introducerea unei resurse numita instruction window, intre treapta de decodificare si cea de executie. Instructiunile decodificate sunt plasate in instruction window (daca este suficient spatiu acolo) si sunt examinate pentru a se determina eventualele conflicte intre resurse si posibilele dependente*Termenul de instruction window (sau fereastra de executie) se refera la intregul set de instructiuni care pot fi considerate simultan pentru executie paralela, supuse fiind dependentelor de date si conflictelor de date. *De indata ce o instructiune executabila este detectata (cum ar fi I6 in Figura 9), ea este programata (scheduled) pentru executie, oricare ar fi ordinea in cadrul programului (deci Out-Of-Order) (cu conditia de a se respecta semantica programului). *Abordarea OoO introduce un tip suplimentar de hazard, cand instructiunea N+1 distruge intrarea instructiunii N (caz care trebuie supravegheat de catre hardware de control). Pana acum, aceasta abordare a fost folosita numai in microprocesoare superscalare. In acest context, joaca un rol important BHT (Branch History Table) si BTB (Branch Target Buffer). BHT ajuta la determinarea rezultatului saltului. BTB ajuta la calculul adresei tinta a saltului. O abordare inrudita, VLIW (Very Long Instruction Word), este prezentata in Figura 10 138)Comanda structurilor pipeline: planificarea *Comanda secventei de taskuri prezentate unei structuri pipeline este esentiala pentru maximizarea eficientei. Dacă se initializeaza doua taskuri care necesita simultan aceeasi treapta a structurii pipeline apare o coliziune, care perturba temporar executia. *In cele ce urmeaza se prezinta o metoda de planificare. Intr-o prima instanta se abordeaza notiunile de tabel de rezervari (reservation table) si latenta (latency).*Exista doua tipuri de pipeline: static si dinamic. *Structura statica efectueaza o singura functie la un moment dat, în timp ce procesorul pipeline dinamic poate executa mai multe functii. Tabelul de rezervari asociat unei structuri pipeline arata folosirea treptelor pentru o anumita functie. *Fiecare treapta este reprezentata printr-o înregistrare (rand) intr-un tabel. *Inregistrarea este divizata în campuri, cate unul pentru fiecare perioada de ceas. Numarul de campuri indica numarul de perioade necesare executiei unei anumite functii. 139)Lista de interdictii *Un tabel de rezervari cu mai multe campuri X intr-o inregistrare permite evidentierea uneia sau mai multor latente care, daca nu sunt interzise, produc coliziune. *Lista de interdictii F este o lista de intregi corespunzand acestor latente. in cazul structurilor pipeline statice, 0 este o latenta interzisa (nu se pot furniza simultan doua date aceluiasi procesor).*Pentru tabelul din figura lista de interdictii este * (4, 1, 0) 140)Vectori de coliziune *Vectorul de coliziune este un sir de biti de lungime N+1, unde N este latenta maxima din lista de interdictii. *Vectorul initial de coliziune C este creat pe baza listei de interdictii astfel: *fiecare element ci al lui C (i = 0... N) este 1 daca i este un element al listei de interdictii. In caz contrar ci = 0. *Zerourile din vectorul de coliziune indica latentele permise, sau momentele la care este permisa initializarea structurii pipeline.*Deci, sunt admise latente de 2 sau 3, dar nu 4, 1 sau 0. 141)Diagrama starilor *Diagramele de stare arata starea unei structuri pipeline într-o fereastra de timp. *Pe baza lor se pot crea planificari care evita coliziunile.*Starea initiala este reprezentata prin vectorul de coliziune. Daca elementul ci este nul, initializarea structurii este permisa dupa i perioade de ceas. *Exemplu (v. slide urmator): 142)Mod de generare *ai – numele arcului *Vectorul initial (10010) (0 = în pozitia 2 si 3) indica drept posibila o noua initializare dupa 2 sau 3 perioade de ceas. *Cand se efectueaza o initializare, vectorul este deplasat la dreapta cu i pozitii (cu completarea cu 0 la stanga), ceea ce corespunde trecerii a i perioade de ceas.*Noul vector participa în functia OR (SAU) cu vectorul initial, rezultand un nou vector de coliziune (caruia i se asociaza o noua stare). *Arcul grafului este marcat cu latenta i. Se continua pana ce nu se mai pot genera alti vectori de coliziune. 143)Mod de generare. Latenta medie *Orice initializare la un moment N+1 sau mai mare aduce sistemul în starea initiala, deoarece:*¡vectorul de coliziune curent este deplasat dreapta cu N+1 pozitii *¡se completeaza la stanga cu zero, *¡OR cu vectorul initial*¡rezulta vectorul initial.
este o alternanta de vectori de coliziune si arce: * C0, a1, C1, a2, ..., an, Cn * în care fiecare arc ai conecteaza vectorul Ci-1 cu Ci, iar toti vectorii, cu exceptia primului si a ultimului, sunt distincti. 144)Latenta medie minima *În exemplul dat: * C0, a1, C1, a2, C0*Ciclul se noteaza C = (2, 3) * (2 = latenta a1, 3 = latenta a2) *Latenta medie = (2 + 3) / 2 = 2.5*Latenta medie minima (MAL – Minimum average latency). Arcele pot avea mai multe latente (ex. a2: 3 sau => 5; a3: 3 sau => 5).*Latenta medie minima = min (latente medii)*Ex.: MAL = min {(C0, a1, C1, a2, C0), (C0, a1, C1, a2, C0),* (C0, a3, C0),(C0, a3, C0)} = 2.5*Ciclul cu MAL maximizeaza rata de transfer prin pipeline. *Din considerente de reducere a complexitatii implementarii se poate alege alta latenta medie.*Ex.: C(2, 3) (cu MAL = 2,5) presupune un circuit care numara 3 perioade de ceas, apoi 2, apoi 3, s.a.m.d. *Daca ar fi acceptabila solutia de a furniza o noua intrare la fiecare 3 perioade (chiar daca 3 > 2,5), complexitatea s-ar reduce. O astfel de latenta se numeste latenta minima (minimum latency). *Pentru a o determina:*se alege din diagrama starilor ciclul de lungime x cu latenta minima*se determina cel mai mic întreg al carui produs cu un întreg arbitrar nu este un element al listei de interdictii. 145)Planificarea structurilor pipeline dinamice *Ca si în cazul celor statice, se începe prin generarea unui set de liste de interdictii (set, deoarece structura dinamica permite executia simultana a mai multor functii), se folosesc tabelele de rezervare. Urmeaza obtinerea vectorilor de coliziune si, în final, diagrama de stare. *Liste de interdictii. Se considera structura *Fiind 2 functii, A si B, exista 4 liste de interdictii: AA, AB, BA, BB. De exemplu, daca lista AB contine intregul d, o intrare ce se prelucreaza cu functia B nu se poate introduce in pipeline la un moment ulterior t + d, unde t este momentul la care s-a introdus o intrare ce se prelucreaza cu functia A.*Generare *1) Se alege un punct de plecare, ex. MA * 2 tipuri de coliziune: A cu A (randul de sus) sau A cu B (cel de jos)*2) În CAA se alege prima latenta permisa (= 0), adica 1*MA este right shift cu o pozitie, se completeaza cu 0 (stanga), OR cu MA (vezi slide-ul urmator) 146)Pipeline – Procesoare aritmetice *Adesea sunt numite, generic, nonlinear pipeline*Motivul: necesitatea unor reactii. *Mai mult, acestea sunt considerate si multifunctionale sau dinamice, intrucat pot efectua mai multe tipuri de operatii.*In afara de instruction pipeline si arithmetic pipeline se mai poate vorbi de o a treia clasa, processor pipeline. Aceasta include o cascada de procesoare, fiecare din ele executand un modul specific al programului (aplicatiei). Ele sunt similare, intrucatva, matricelor sistolice. 147)Comparatie CISC – RISC *Cauze ale cresterii complexitatii arhitecturale *¡Suport pentru HLL*¡Migratia functiilor din software in hardware*¡Upward compatibility *RISC *¡minimizarea costului de dezvoltare si a pretului de vanzare *¡maximizarea vitezei (sau minimizarea timp executie) *Efectele VLSI *¡CPU in CISC: 40-60%*¡RISC: 10%*¡Large register file*¡On chip cache*¡Perioada de proiectare mai scurta *Call – Return – cele mai consumatoare de timp proiectare cu set mare de registre *Overlapping register window – Registre globale, accesibile de oriunde. Fiecarei proceduri i se asigneaza un register window separat CWP (current window pointer).*Ex: o masina cu 100 registre *0 - 9 – global*Fiecarei proceduri i se asociaza înca 20 registre:*5 – incoming*10 – local*5 – output Caracteristicile masinilor RISC:*Majoritatea instructiunilor acceseaza operanzii din registre, cu exceptia LOAD/STORE -> arhitectura Load/Store.*Majoritatea instructiunilor se executa într-un singur ciclu, exceptie LOAD/STORE. On-chip cache îmbunatateste.*Instructiunile au format fix si nu depasesc frontiera cuvantului.*Unitatea de comanda – hardwired si nu microprogramata.*Numarul mic de formate de instructiuni (de regula 4).*CPU are un fisier mare de registre.*Complexitatea compilatorului, care se ocupa de delayed branching, rearanjarea instructiunilor *Numar mic de instructiuni < 150, putine moduri de adresare < 4.*Suport pentru HLL prin alegerea judicioasa a instructiunii si folosirea compilatoarelor cu optimizare.*Folosesc pipeling si abordare adecvata pentru branches (multiple prefetch, branch prediction techniques). *RISC vs. CISC: *Timpul de executie depinde de*Numarul de instructiuni ¡Numarul mediu de perioade ceas / instructiune *¡Perioada de ceas
lung 148)Pentium – Arhitectura Interna oProcesoarele anterioare aveau o structura pipeline pentru o singura instructiune (single instruction pipeline) si puteau executa o singura intructiune intr-un ciclu de ceas. oPentium: primul procesor IA32 cu unitati de executie paralele, care pot executa mai multe instructiuni simultan.oProcesorul Pentium are structuri pipeline duale, deci poate executa pana la doua instructiuni pe ciclul de ceas.oCele doua linii de asamblare se numesc “u” si “v”si constau din urmatoarele trepte: 149)Prefetch oInstructiunile care alcatuiesc programul aflat in curs de executie sunt preluate (“prefetched”) din memoria cache pentru cod (sau prin FSB daca exista cache miss).oInstructiunile sunt distribuite in cele doua buffere de 64 de octeti asociate celor doua structuri pipeline. 150)Decode 1 oIn ambele structuri pipeline se determina codurile operatiilor (opcodes) pentru a se stabili daca cele doua instructiuni pot fi trimise ca o pereche catre urmatoarea treapta sau nu, in functie de regulile procesorului Pentium. 151)Decode 2 oSunt calculate adresele operanzilor rezidenti in memorie. 152)Complex Decode oStructura pipeline“V” nu implementeaza aceasta treapta. Toate instructiunile complexe trebuie orientate prin linia “U”.oUnitatea de Control (denumita si “Microcode Unit”) interpreteaza codul instructiunii, trateaza exceptiile, breakpoints si intreruperile. In plus, ea controleaza si structuri pipeline pentru intregi si pentru secvente FP. 153)Integer Execution oCele doua ALU realizeaza operatiile aritmetice si logice specificate de catre instructiunile din structurile pipeline. oALU corespunzatoare liniei “U” poate termina o operatie inaintea ALU corespunzatoare liniei “V”. Reciproca nu este adevarata. 154)Register Writeback oRezultatele obtinute in urma executiei instructiunii sunt incredintate setului de registre ale procesorului. 155)Descrierea Nucleului Procesorului Pentium oUnitatea FSB (Front Side Buffer) *Ofera interfata fizica intre procesorul Pentium si sistem.oData Cache*Pastreaza copii ale datelor solicitate cel mai des de catre cele doua structuri pipeline pentru intregi si de catre FPU.*Este de tip writeback cache, de 8KB, organizat ca 2-way set associative, cu dimensiunea liniei cache de 32 de octeti.*Permite acces simultan de la cele doua structuri pipeline si “snooping”.oCode Cache (Instruction Cache)*Pastreaza copii ale instructiunilor cel mai des utilizate pe care le furnizeaza structurilor pipeline de executie.*Este un cache de 8KB, organizat ca 2-way set associative, cu dimensiunea liniei cache de 32 de octeti.*Permite doua accesari simultane de la prefetcher si “snooping”.oPrefetcher *Solicita instructiuni din code cache.*Daca instructiunea solicitata nu se gaseste in cache, se realizeaza o tranzactie in rafala cu memoria prin FSB pentru a aduce instructiunea din memoria sistemului.*Sunt realizate operatii de prefetch secvential, pana cand se intalneste o instructiune branch.*Acceseaza simultan doua linii atunci cand adresa de inceput este la mijlocul unei linii cache. Astfel, un acces split-line poate aduce o instructiune care se gaseste in doua linii diferite in cadrul cache.oBranch Target Buffer (BTB)*Pentium: primul procesor IA32 care include logica de predictie a saltului (branch).*Logica este realizata cu un cache look-aside, de mare viteza, care pastreaza un istoric al executiei instructiunilor branch.*Cand o instructiune branch intra in structura pipeline, BTB foloseste adresa de la care provine instructiunea pentru a realiza o cautare.BTB miss: procesorul nu are in istoric respectiva ramificare si nu va prezice ramura respectiva drept aleasa.BTB hit: procesorul a vazut respectiva ramificare executata macar o data in trecut si va folosi istoricul BTB pentru a prezice daca ea va fi aleasa si acum sau nu.Daca s-a prezis ca ramura va fi aleasa, orice instructiune aflata deja in structura pipeline, dupa instructiunea de ramificare va fi stearsa si Prefetcher va fi instruit sa ia instructiuni de la adresa tinta prevazuta. oPrefetch Buffers*4 buffere prefetch lucreaza ca doua perechi independente, de cate 64 de octeti fiecare.*Cand sunt preluate instructiuni din cache, ele sunt plasate intr-una din perechile de buffere prefetch, iar cealalta pereche ramane idle.*Cand este prezisa o ramificare de catre BTB, perechea care era idle va contine linia cache cu adresa tinta a ramificarii. La o noua prezicere BTB, se comuta catre prima pereche.*Buffer-ul prefetch trimite o pereche de instructiuni catre decodificatorul de instructiuni. Prima instructiune este trimisa la linia “U”, a doua la linia “V”.oInstruction Decode Unit*Survine in treptele Decode 1 si Decode 2*In timpul D1, codurile operatiilor sunt decodificate in ambele structuri pipeline pentru a determina daca cele doua instructiuni pot constitui o pereche sau nu.*Daca da, cele doua instructiuni sunt trimise la treapta D2, unde sunt calculate adresele operanzilor rezidenti in memorie. oControl Unit*Denumita si Microcode Unit*Consta din: Microcode Sequencer si Microcode Control ROM.oALUoRegistre *Cele doua ALU au acces comun la setul de registre ale procesorului.oAddress Generators (Generatoare de Adresa)*Doua generatoare de adresa (cate unul pentru fiecare structura pipeline) formeaza adresa specificata de instructiunile din structura pipeline *Sunt echivalente cu Unitatea de Segmentare de la 486.oPaging Unit (Unitate de Paginare)*Daca este activata (CR0[PG]=1 si procesorul este in Protected Mode), atunci translateaza adresa liniara de la generatorul de adresa intr-o adresa fizica.*Poate trata doua adrese in acelasi moment.oFPU*Poate accepta pana la doua operatii FP pe ceas atunci cand una dintre instructiuni este de exchange.*Foloseste o structura pipeline cu 8 trepte, dintre care primele 5 sunt comune cu cele pentru instructiuni cu intregi.*Instructiunile FP nu sunt grupate cu instructiuni cu intregi, dar pot fi grupate cu instructiuni FP de exchange.*FPU poate efectua simultan operatii de adunare, impartire si inmultire. 156)FSB oDesi procesorul Pentium implementeaza o magistrala interna de adrese de 32 de biti, cele mai putin semnificative 3 linii de adresa, A[2:0] nu sunt implementate ca pini de iesire pe FSB.oCand procesorul initiaza o tranzactie pe FSB, logica externa procesorului se comporta ca si cand liniile A[2:0] sunt mereu zero. procesorul poate da ca iesire ⇨ numai adrese divizibile cu 8, adica adresa A[31:3] selecteaza un qword, fie din memorie, fie din spatiul de adrese I/O. 157)FSB – Byte Enable oProcesorul dispune de 8 pini de iesire folositi ca Byte Enable pins BE[7:0]#.oSelectia qword se realizeaza cu A[31:3] si pinii Byte Enable arata:*Care dintre cele 8 locatii de memorie din qword sunt selectate pentru read/write*Care dintre cele 8 cai de date (data paths) va fi folosita pentru a transfera date intre procesor si locatiile selectate din cadrul qword tinta. 158)FSB - Cache Miss oAtunci cand Instruction Prefetcher sau Unitatea de Executie depun o cerere de acces la memorie in code cache sau data cache, linia care contine informatia critica (ceruta) poate lipsi din cache. oIn acest caz, procesorul foloseste FSB pentru a lua linia din memorie care contine informatia critica. oDimensiunea liniei cache la procesorul Pentium este de 32 de octeti (patru qwords). 159)Tranzactia in rafala oIncepand cu 486, toate procesoarele IA32 folosesc o tranzactie in rafala pentru a trata cache miss. oIn loc sa efectueze 4 tranzactii diferite de citire din memorie, fiecare cu o faza pentru adresa si una pentru date, Pentium realizeaza o tranzactie de citire din memorie in rafala, ce consta dintr-o singura faza pentru adresa si 4 faze pentru date.oLa cache miss, procesorul adreseaza qword critic (dorit) la inceputul tranzactiei.oController-ul de memorie al sistemului ii ofera procesorului qword critic in prima faza de date, urmat de celelalte 3 qwords, intr-o ordine predefinita.oOferindu-i-se cuvantul critic, procesorul poate servi cat mai repede unitatea solicitanta.oOrdinea in care celelalte 3 cuvinte sunt transferate este determinata de adresa de inceput a qword critic. 160)Ordinea de Transfer Toggle Mode oAtunci cand o linie intreaga este transferata prin FSB, este transferata in ordinea toggle mode, qword critic fiind primul.oOrdinea de transfer a celor 4 qword se bazeaza pe pozitia qword critic in cadrul liniei. oModul toggle se bazeaza pe implementarea sistemului de memorie cu o arhitectura de memorie “interleaved”.oArhitectura interleaved: qwords sunt intercalate intre cele doua bancuri de memorie. oPe masura ce se efectueaza fiecare din cele patru accese, intotdeauna va fi accesat bancul de memorie DRAM opus.oLa momentul in care s-a terminat accesul la bancul curent, bancul celalalt este deja pregatit pentru un nou acces.oComutarea intre bancuri ofera performante bune deoarece controller-ul de memorie nu mai trebuie sa astepte expirarea intarzierii aferente chipului DRAM pentru a putea accesa un nou qword. 161)Tranzactia de Scriere in Rafala oData Cache la Pentium este de tip MESI (Modified, Excusive, Shared, Invalid). Asadar, la un moment dat, memoria cache poate contine una sau mai multe linii modificate. In anumite situatii, procesorul trebuie sa scrie o linie modificata inapoi in memorie:*La cache miss, cand trebuie adusa o linie noua, algoritmul LRU poate necesita ca o linie modificata sa fie evacuata pentru a face loc pentru noua linie. Pentru aceasta, procesorul realizeaza o tranzactie de scriere in rafala in patru faze, in ordinea toggle mode, incepand cu primul qword din linie.*Instructiunea WBINVD comanda procesorul sa scrie inapoi in memorie toate liniile care au fost modificate, apoi sa marcheaza ca nefiind valide toate liniile din cache. Pentru aceasta, procesorul realizeaza una sau mai multe serii de tranzactii de scriere in rafala pe FSB. 162)Memoria Cache – Split Cache oProcesorul 486 dispunea de memorie cache unificata pentru cod si date. Aceasta era supusa competitiei atunci cand Instruction Prefetcher si Unitatea de Executie emiteau cereri simultane catre cache.o Incepand cu procesorul Pentium, toate procesoarele IA32 implementeaza memorii cache separate pentru cod si pentru date 163)Memoria Cache pentru Cod oEste memorie cache 2-way set-associative, de 8 KB, read-only si implementeaza numai partea SI din protocolul MESI.oFiecare 4 KB contine 128 de linii cache, de cate 32 de octeti fiecare.oExista un bit pentru LRU care arata care dintre cele doua intrari este leastrecently used.oMemoria cache “vede” organizarea memoriei sistem ca reflectand propria organizare: memoria sistem este impartita in pagini, fiecare avand dimensiunea unui banc de memorie cache (4 KB).oFiecare pagina este apoi impartita in 128 de linii, fiecare cu lungimea de 32 de octeti.oAtunci cand memoriei cache i se furnizeaza o adresa fizica de memorie de 32 de biti pentru lookup, portiunea din adresa corespunzatoare numarului liniei este folosita pentru a selecta un set de doua intrari cu care sa realizeze comparatie. 164)Memoria Cache pentru Date oEste memorie cache 2-way, set-associative, de 8 KB, MESI.oFiecare cale contine 128 de linii cache de cate 32 de octeti fiecare.Fiecare set dispune de un bit pentru LRU 165)APIC Local adaugat la P54C oVersiunea P54C a fost primul procesor IA32 care a incorporat APIC Local (Advanced Programmable Interrupt Controller) in nucleul procesorului. Acesta are urmatoarele facilitati:*Permite programului in curs de executie sa trimita un mesaj de Inter- Processor Interrupt (IPI) catre APIC Local din alt procesor prin intermediul magistralei APIC.*Permite nucleului procesorului sa primeasca IPI de la un alt procesor prin magistrala APIC. 166)TAP – Test Access Port oDand comanda RUN-BIST catre TAP este initializat BIST (Built-In Self-Test) al procesorului. Semnale legate de boundary scan interface:*TDI – Test Data In – trimite date sau instructiuni catre TAP intr-un flux serial de biti.*TMS – Test Mode Select – selecteaza modul de functionare a controller-ului TAP.*TCK – Test Clock – aducerea informatiei seriale in TAP prin TDI sau din TAP prin TDO*TRST# (Test Reset) – cand este setat, forteaza controller-ul TAP in starea de test logic reset.*TDO – Test Data Out – output date sau stari din TAP, sub controlul semnalului TCK.oSemnalul Run/Scan (R/S#) este intrare pentru procesor.oCand nu este instalata facilitatea debug (debug tool), rezistorul de la semnalul Debugger Installed DBINST# determina starea de open collector. Aceasta permite ca logica de sistem Run/Scan sa furnizeze semnalul Run/Scan catre procesor.oCand debug tool este instalata, DBINST# este legat la masa si blocheaza transmiterea R/S# catre procesor, dar permite controlarea directa a intrarii R/S# si monitorizarea starii ei la intrarea SYSR/S#. 167)Modul FRC oPentium a fost primul procesor IA32 care a implementat modul FRC, iar Pentium III a fost ultimul.oDoua sau mai multe procesoare Pentium pot participa la verificarea redundantei functionale (“functional redundancy checking”).oUn procesor (master) preia instructiuni, le executa si efectueaza tranzactii FSB in mod obisnuit.oUn procesor pentru verificare (conectat la FSB master-ului) verifica corectitudinea operatiilor realizate de master. 168)Modul FRC oProcesorul Pentium selecteaza starea master / verificare pe frontul descendent al semnalului RESET testand starea intrarii FRCMC#:*0 = mod verificare *1 = mod master. 169)Descriptori de segment •Rezidenti in memorie •Rolul registrelor cache (Segment Cache Registers)•Descriptorii – grupati in tabele •Trei tipuri de tabele de descriptori: - Global Descriptor Table (GDT) - Local Descriptor Tables (LDT) - Interrupt Descriptor Table (IDT) 170)GDT •GDT poate contine:•1 Un TSS – segment stare task (Task State Segment) pentru fiecare task existent•2 Unul sau mai multi descriptori de tabele de descriptori locali (LDT)•3 Descriptori pentru codul sau date/stiva utilizate in comun de mai multe taskuri •4 Porti de apel proceduri (Procedure Call Gates), care controleaza accesul la programe •5 Porti de task (Task Gates), care permit comutarea taskurilor 171)LDT-uri •Programatorul OS defineste cate un set de segmente pentru fiecare task in parte•Pentru a selecta un LDT, se executa instructiunea LLTR •Si aici se utilizeaza memoria cache a registrelor •1 Procesorul multiplica indexul descriptorului cu 8•2 Offsetul astfel obtinut se adauga la adresa baza a GDT•3 Procesorul citeste descriptorul de 8 octeti din memorie in partea invizibila a LDTR•LDT poate contine:•Descriptori de cod, date, stiva pentru segmente de memorie locale taskului •Porti apel proceduri care permit apelul procedurilor mai privilegiate •Porti task, permitand taskului curent sa execute un alt task 172)Cand se incarca segmentul de cod? •Executia unei instructiuni “far jump” (ea incarca si EIP)•Executia unei instructiuni “far call”•O intrerupere hardware sau o exceptie software. Valorile CS si EIP sunt obtinute din IDT•Lansarea in executie a unui nou task sau reluarea executiei unui task anterior suspendat •Executia unei instructiuni “far return”. Datele sunt luate din stiva Executia instructiunii IRET. Datele – din stiva 173)Utilizarea nivelurilor de privilegiu Rolul nivelurilor de privilegiu este de a asigura ca programul aflat in executie nu poate avea acces la zone de memorie decat daca I se permite. Tentativa de acces neautorizat genereaza exceptie de tipul GP (General Protection)*Definitii pentru niveluri de provilegiu:•CPL (Current Privilege Level) – cel al programului curent •RPL (Requestor Privilege Level) – cel din registrul de segment•DPL (Descriptor Privilege Level) – cel al segmentului de cod tinta 174)Comentarii asupra termenului “Task” •Intr-un sistem de operare multitasking, OS permite procesorului sa execute fiecare program (sau task) pe durata unei “felii” de timp (time slice) de durata fixa, de cca 10 ms. •La expirarea ei (determinata de o intrerupere hardware), controlul este transmis OS.•OS suspenda executia taskului curent si obtine un “instantaneu” al starii curente a procesorului (altfel spus – efectueaza o copie a seturilor de registre ale procesorului – inclusiv MMU).•Copia, numita “contextul curent al procesorului”, este salvata in TSS (Task Segment State) curent, astfel incat executia taskului sa poata fi reluata, ulterior, de la punctul de suspendare. •Procesorul determina care task urmeaza a fi lansat in executie sau reluat de la punctul in care a fost suspendat, apoi •Comuta contextul prin inscrierea continuturilor registrelor cu informatiile din TSS al taskului ce urmeaza a primi resursele de prelucrare •Are loc lansarea (relansarea) executiei taskului de la adresa CS:EIP, dupa reinitializarea ceasului de timp real pentru o noua cuanta de 10 ms•Un task nu consta, neaparat, din doar un singur segment de cod si un segment de date, ci dintrun numar de asemenea segmente. In fond, taskuri precum MS Word sau Excel consta din mai multe grupe de programe care interactioneaza intre ele •Programele asociate unei aplicatii pot fi rezidente in acelasi segment de cod sau in segmente diferite •Procedura = termenul se refera la un program (sau rutina) in cadrul taskului curent •Proces = Procedura + Facilitati Prelucrare (Procesor) 175)Definitia CPL •In mod normal, CPL este definit drept nivelul de privilegiu al segmentului de cod din care sunt extrase instructiunile programului curent •Altfel spus, desi poate induce confuzie, CPL este DPL-ul segmentului de cod curent •Afirmatia este valida doar daca programul in curs de executie se afla intr-un segment de cod “conforming” (C = 1) 176)Definitia DPL •Orice descriptor de segment de cod contine un camp de 2 biti, numit DPL si un camp de 1 bit, numit C (conforming). Impreuna, cele doua campuri determina ce privilegiu trebuie sa aiba un program chemator pentru a face salt in sau a apela segmentul de cod descris de descriptorul in discutie 177)Segment de cod “Conforming” si “Non-Conforming” Segmentele de cod “non-conforming” sunt cu mult mai frecvente decat cele “conforming”•C = 0 – segment non-conforming. Codul unui segment (caracterizat prin CPL) non-conforming poate face salt intr-un alt segment (caracterizat prin DPL) de cod (sau il poate apela) doar daca CPL = DPL•C = 1 – segment conforming. Se poate face salt intr-un segment conforming sau se poate apela un astfel de segment doar daca programul care se face saltul sau apelul este mai putin mai privilegiat decat segmentul tinta: CPL < DPL. Mai mult, procesul executa codul din segmentul conforming la acelasi nivel de privilegiu cu al segmentului chemator. Altfel: dupa salt (apel) CPL ramane la fel ca inainte. 178)RPL •Valoarea de 16 biti din registrul CS dinaintea unui far jump sau far call ar fi putut fi fie - creata de programul curent aflat in executie; - transferata drept parametru de catre un alt program •Intelesul RPL: nivelul de privilegiu al programului care a creat continutul de 16 biti al CS Cand programul curent incearca executia unui far jump sau far call spre un alt segment de cod are loc testarea nivelurilor de privilegiu pentru a se determina daca permisia de acces este sau nu acordata •Valoarea nivelului de privilegiu impicata in compararea cu DPL al codului tinta este max(CPL, RPL)•Exemplu: - programul curent are CPL = 2 - CS se incarca cu o valoare de 16 biti care contine RPL = 3 (valoare transferata de un program cu nivelul de privilegiu 3) - se presupune ca segmentul codului tinta este de tip non-conforming cu DPL = 2 - tentativa de acces rezulta in exceptie GP, deoarece RPL <> DPL - s-a folosit RPL in loc de CPL deoarece RPL > CPL 179)Poarta de apel (Call Gate) •Ipoteze: - sistemul de operare contine un segment de privilegiu 0, care contine un numar de proceduri care trateaza cereri ale altor programe - unele din procedurile din acest segment de cod trebuie sa fie accesibile doar programelor OS mai putin privilegiate, cu nivel de privilegiu 1 sau 2 - tentativa de acces de apel a uneia din aceste proceduri de catre programe cu nivel de privilegiu 3 trebuie respinsa (produce exceptie GP) - alte proceduri din acelasi segment de cod al OS sunt proiectate pentru a manipula cereri ale programelor de aplicatii (nivel de privilegiu 3)•Problema: un anume segment de cod, cu nivelul de privilegiu 0, contine mai multe proceduri, deci toate ar trebui sa fie executate la nivelul de privilegiu 0•In mod normal, tentativa de a executa asemenea proceduri de la nivelul 3 genereaza GP – nu se poate accepta!•Daca segmentul ar fi de tip conforming, nu doar anumite, ci toate procedurile lui s-ar putea executa de la nivelul 3 – nici aceasta nu se poate accepta! 180)Call Gates •Doar instructiunile far call pot utiliza poarta de apel (Call Gate) pentru transferul controlului la proceduri cu nivel de privilegiu superior celui propriu •Instructiunile Jump pot utiliza poarta de apel pentru transferul controlului la proceduri cu nivel de privilegiu egal sau mai mare sau catre un segment de cod conforming cu nivel de privilegiu superior 181)Formatul descriptorului Call Gate - detalii •P – present. P = 1- continut valid al descriptorului •S = 0 deoarece este descriptor sistem •Octet 5, [2:0] = 100 – defineste Call Gate•X – defineste Call Gate cod 16 biti (= 0) sau 32 biti (= 1)•DWORD Count – informeaza procesorul asupra numarului de dwords care trebuie copiate din stiva apelantului in cea a chematului. Serveste la transfer de parametri prin stiva •Selector – identifica descriptorul segmentului de cod al procedurii apelate •Offset – defineste punctul de intrare in procedura apelata 182)Testarea privilegiului in cazul portilor de apel •Poarta de apel poate fi utilizata pentru transferul executiei catre un segment de cod mai privilegiat sau cu acelasi nivel de privilegiu (a doua functie, desi posibila, nu este necesara)•La executia unui apel prin poarta de apel se genereaza exceptie GP, mai putin cand ambele teste sunt trecute cu succes:*1.Max (CPL,RPL)<=DPL poarta. Altfel spus, cel mai putin privilegiat dintre CPL si RPL trebuie sa fie mai privilegiat decat poarta de apel *2.DPL al segmentului de cod tinta <= CPL. Altfel spus, codul apelat prin poarta trebuie sa fie mai privilegiat decat chematorul. 183)Testarea privilegiului in cazul JUMP prin poarta •Spre deosebire de CALL, JUMP nu poate utiliza poarta de apel pentru salt intr-un segment de cod mai privilegiat. Saltul poate fi facut intr-un segment conforming sau in non-conforming.•Reguli de satisfacut simultan la salt spre nonconforming:* 1.Max(CPL,RPL)<= DPL poarta (la fel ca 1 de la CALL)*2.DPL al cod tinta = CPL (= dat de cod non-conforming)•Reguli de satisfacut simultan la salt spre conforming:
cod conforming) 184)Comutarea automata a stivelor •O instructiune CALL salveaza automat in stiva CS si EIP ale instructiunii urmatoare lui CALL. Ultima instructiune a procedurii apelate este RET. Efectul ei: extragere din stiva a CS si EIP salvate, deci reluarea executiei procedurii chematoare de la punctul urmator apelului.•Cand se apeleaza o procedura mai privilegiata apar probleme din cauza stivei. Sar putea ca aceasta sa fie de capacitate insuficienta pentru a stoca parametrii pe care procedura apelata ar avea nevoie sa ii stocheze in stiva.•SOLUTIE: Procesorul comuta automat stiva, cea noua avand dimensiune suficienta pentru a contine CS:EIP, SS:ESP, parametrii si variabile utilizate de procedura chemata •La apelul unei proceduri (cu un privilegiu superior) printr-o poarta de apel procesorul creaza o noua stiva care primeste CS:EIP, SS:ESP si parametrii chematorului •Se examineaza segmentul de stare al taskului curent (TSS) pentru a se obtine selectorul segmentului de stiva si pointerul de stiva (ESP) al noii stive 185)Actiuni la apelarea unei proceduri prin Call Gate 1 Inainte de a efectua apelul, procedura chematoare salveaza in stiva parametrii ce se vor transfera *2 Incepe executia instructiunii CALL. Se verifica dimensiunea stivei procedurii apelate (ea va accepta SS:ESP, parametrii si CS:EIP). Exceptie la dimensiune insuficienta *3 SS:ESP al procedurii chematoare este inscris in stiva procedurii chemate (doua valori de 32 biti, 0-padded)*4 Se copiaza parametrii din stiva chematoarei in cea a apelatei (Se foloseste campul DWORD Count Din descriptorul Call Gate!)*5 In stiva procedurii apelate se stocheaza CS:EIP al procedurii chematoare *6 Procesorul incarca partea cache a registrului CS cu adresa baza a segmentului tinta si EIP cu offsetul procedurii chemate (din segmentul de cod tinta)*7 Se executa procedura apelata. Daca este nevoie, se utilizeaza parametrii transferati prin stiva.*8 In final se executa RET. Efect: se scot din stiva CS:EIP si SS:ESP, se ajusteaza stiva chematorului pentru a dealoca parametrii transferati (numarul lor este dat ca argument al RET, ex RET 7)*9 Procesorul utilizeaza CS:EIP pentru reluarea executiei procedurii chematoare 186)Segmente de date si stiva •Chiar daca segmentul de stiva contine, in esenta, date, el este tratat separat datorita modului particular in care datele sunt inscrise/citite in/din acest segment•Procesoarele ulterioare generatiei 80286 dispun de patru segmente de date, selectate prin DS, ES, FS, GS•Accesul la datele dintr-un segment este precedat de incarcarea selectorului segmentului. Datele ce se incarca in selector sunt index intr-un descriptor aflat fie in GDT, fie in LDT 187)Segmentul de stiva – Selectare si acces •Segmentul de stiva este o forma de segment de date•Descriptorul sau trebuie sa il caracterizeze drept read/writable.•Descriptorul mai indica modul de expandare: - spre adrese crescatoare (“Expand-Up”) - spre adrese descrescatoare (“Expand- Down”)•Stivele de date ale procesoarelor uzuale sunt de tipul “Expand-Down” 188)Stiva Expand-Down •In cazul transferului de parametri prin stiva de tip expand-up parametrii se afla in varful stivei. Pozitia unui parametru este data prin offset de la baza stivei la adresa (numeric mai mare) a acestuia.•Daca stiva este insuficienta ca dimensiune, ea este copiata in varful unei stive mai “incapatoare”.•Vechile adrese ale parametrilor nu mai sunt corecte (offseturile au crescut)•Solutia: stiva expand-down. •In stiva expand-up:* - adresa cea mai mica (Bottom of Stack – BOS) este data de adresa baza specificata in descriptorul segmentului de stiva * - adresa cea mai mare (Top of Stack – TOS) este egala cu adresa baza + limita •In stiva expand-down:* - adresa cea mai mica (Bottom of Stack – BOS) este egala cu adresa baza + (limita – 1)* - adresa cea mai mare (Top of Stack – TOS) este egala cu adresa baza + FFFFH (daca B = 0) sau FFFFFFFFH (B = 1) 189)Crearea unui task •Incarcarea partiala sau totala in memorie •Crearea TSS pentru task•Declansare timer (temporizator)•Intrerupere ceas de timp real•Comutarea catre task 190)Structura TSS •Campuri statice (doar citite de catre procesor)•Campuri dinamice •Dimensiunea minima: 104 octeti (numerotati de la 0 la 67H) 191)Protectia porturilor I/O •IOPL Input/Output Privilege Level•Daca CPL <= IOPL nu se genereaza exceptie la executia unei instructiuni IO (IN, OUT, INS, OUTS)•Daca CPL > IOPL si instructiunea este de tip IO, procesorul verifica bitul corespondent din IO Permission Map al taskului curent. Daca acesta este 1 – OK. Altfel – exceptie.•Daca CPL > IOPL si instructiunea este STI sau CLI se genereaza exceptie GP 192)Instructiunea LTR Executata la nivelul de privilegiu 0, plaseaza o noua valoare in TR. Actiuni: *1.Se valideaza ca programul curent poate efectua task switch*2.Se genereaza exceptie GP daca inregistrarea din GDT nu contine un descriptor TSS sau daca acesta este “busy”*3.Se genereaza exceptie “Segment Not Present” daca P in TSS = 0*4.Se genereaza Page Fault daca pagina ce contine TSS nu este in memorie *5.Se genereaza exceptie GP daca selectorul CS din TSS nu selecteaza un segment de cod*6.Se genereaza Stack exception daca selectorul SS din TSS nu selecteaza un segment de stiva *7.Portiunea “invizibila” a TR este incarcata cu adresa baza si cu limita noului TSS*8.Bitul Busy din TSS devine 1 193)Sistem de Operare Single-Task (SOST) Prezentare generala *SOST consta din:•Interpretorul liniei de comanda (Command Line Interpreter)•Incarcatorul programelor (Program Loader)•Servicii ale Sistemului de Operare 194)Interpretorul liniei de comanda *CLI:•Dupa incarcarea in sistem a SO,controlul este transferat codului de initializare, care seteaza structurile de date (ex. elementele vectorului de intreruperi, incarca si initializeaza driverele etc. apoi controlul Þ CLI*•CLI tipareste “prompt”•Utilizatorul tasteaza numele fisierului 195)Incarcatorul de programe •Dupa preluarea numelui fisierului, SO citeste informatii despre acesta si rezerva zona de memorie in care se va efectua incarcarea •SO acceseaza direct discul sau emite comanda de disk read catre BIOS•Rutina de acces la disc (driverul) programeaza si activeaza DMA•DMA transfera blocul. La terminare – intrerupere •Rutina de servire verifica starea transferului si returneaza controlul •La transfer corect SO executa Far Jump la inceputul programului incarcat 196)Servicii SO •Asigura comunicatia intre programe de aplicatii si resursele sistemului •In locul accesului diect la resurse, programele de aplicatii apeleaza serviciile adecvate ale SO•Acces I/O direct: uneori necesar,dar nedorit, intrucat SO nu cunoaste starea portului I/O adresat direct din aplicatie •Utilizarea memoriei: In SOST doar un program este in rulare Þ nu est necesara protectia •Instalarea, executia si terminarea taskurilor: SO incarca taskul in memorie, il lanseaza in executie, comunica cu acesta. La terminare – dealocare.