Arhitectura Microprocesoarelor 2015 PDF
Document Details
![FlatterBinomial4259](https://quizgecko.com/images/avatars/avatar-12.webp)
Uploaded by FlatterBinomial4259
Universitatea Națională de Știință și Tehnologie Politehnica București
2015
Alex Mihăilă
Tags
Related
Summary
These are lecture notes on computer architecture focusing on microprocessors, covering topics like hardware, software, memory, and I/O devices. The notes are from 2015 and are suitable for undergraduate computer science students.
Full Transcript
Alex Mihăilă, 422B Arhitectura Microprocesoarelor 2015 MICROCALCULATORUL = o masina Von Neumann, programabila, de prelucrare a informatiei, cu 2 componente inseparabile: - Hardware - Software A. Hardware: 1. UCP(unitatea centrala de prelucrare)=blocul functional care prelucre...
Alex Mihăilă, 422B Arhitectura Microprocesoarelor 2015 MICROCALCULATORUL = o masina Von Neumann, programabila, de prelucrare a informatiei, cu 2 componente inseparabile: - Hardware - Software A. Hardware: 1. UCP(unitatea centrala de prelucrare)=blocul functional care prelucreaza datele si conduce TOT sistemul. Se prezinta sub forma unui singur cip, MICROPROCESOR. Celelate componente ale sistemului nu au putere de decizie. 2. MEMORIA=are rolul de stocare a informatiei intr-o secventa de locatie; prezinta 2 entitati informationale: -continutul : un sir de cifre binare 0 si 1, biti, ce reprezinta de fapt coduri, numere etc. ; marimea unei locatii va fi denumita formatul memoriei, exprimat in numar de biti (8,16,32,64 biti). -adresa : numarul de ordine al unei locatii, ce permite identificarea locatiei respective in cadrul secventei de locatii a memoriei (intre adresa si locatia de memorie exista o corespondenta biunivoca) Notiuni complementare: Harta Memoriei= totalitatea locatiilor de memorie pe care le poate adresa microprocesorul. exemplu: adresa pe 8 biti, cate locatii? raspunsul este 2^8 locatii de memorie adresa pe 2 biti, cate locatii? raspunsul este 2^2 locatii de memorie Respectiva harta a memoriei o putem descompune in subdiviziuni logice, numite „segmente”, o impartire virtuala a memoriei. Memoria interna= structura fizica a memoriei unui microcalculator, formata din unul sau mai multe cipuri cu capacitati diverse de stocare; capacitatea totala de stocare a informatiei pe care o realizeaza fizic cipurile de memorie. observatie: memoria interna≠harta memoriei Memoria, de asemenea, dispune de 2 zone (semnificatia continutului memoriei microcalculatorului): -memoria de date(RAM-ul, fizic vorbind): contine operanzi, rezultate; se pot efectua scrierea si citirea; este locul în care ajung datele înainte de a fi prelucrate de microprocesor – această memorie este spaţiul de lucru al calculatorului; -memoria de program(ROM): contine instructiuni, de regula; se poate doar citi. Instructiunea= informatia codificata binar, impusa unui microprocesor pentru a efectua o actiune. Intre cod (un sir de cifre binare) si instructiune exista, de asemenea, o 1 Alex Mihăilă, 422B corespondenta biunivoca. Instructiunea mai poate fi definita ca cea mai simpla actiune din activitatea unui microcalculator, a carui UCP este un microprocesor anume. Microprocesorul citeste din memorie, recunoaste si executa doar codurile instructiunilor pe care el a fost conceput sa le recunoasca !; totalitatea instructiunilor pe care un microprocesor le poate recunoaste si executa se numeste setul de instructiuni al microprocesorului respectiv; aceasta insiruire de instructiuni este structurata sub forma de programe(secventa de coduri structurate in asa fel incat sa urmeze un anumit algoritm pentru o sarcina prestabilita). observatie: memoria nu are niciun control asupra semnificatiei informatiei pe care o detine, ci programatorul si microprocesorul! 3. DISPOZITIVELE de INTRARE/IESIRE (I/O)= o succesiune de porturi prin care se realizeaza comunicarea cu mediul exterior. Exista o asemanare intre porturi si locatiile de memorie; dpdv logic, porturile sunt identice cu memoria, fizic, evident, nu. Putem discuta astfel despre o „harta a porturilor”, deoarece fiecare port are si el continut si adresa, exact ca memoria. Magistrala = conexiunile fizice intre schemele bloc prin care circula informatia cu o semnificatie prestabilita. Fiecare sistem are magistrala lui unica. Dpdv functional, magistrala se imparte in 3 feluri: -magistrala de date : intr-o masina Von Neumann este esentiala, bidirectionala, prin ea circula datele, instructiunile, adresele etc. , pe scurt, cirucla toate tipurile de informatii -magistrala de adrese: unidirectionala, permite microprocesorului sa localizeze informatia in memorie sau in dispozitivele de I/O, deci circula doar adrese. -magistrala de control: bidirectionala, permite circulatia semnalelor de comanda si control de la sau spre microprocesor B. Software: o serie de programe organizate in 2 categorii: -sistem de operare(programe ce permit accesul la resursele calculatorului); -software-ul utilizatorului(totalitatea programelor folosite pentru sarcini specifice) necesitatii utilizatorului) Arhitectura = proprietatile unui sistem(microprocesorul), vizibile si disponibile utilizatorului. Exemple de proprietati: registre, setul de instructiuni etc. observatie: arhitectura e legata de semnificatia informatiei, de aspectul logic al informatiei , structura in schimb, e axata pe aspectul fizic , deci arhitectura≠structura. Clasificarea notiunii de microprocesoare: 1. Dupa latimea magistralei de date avem: microprocesoare pe 8,16,32,64 biti. -un sistem cu latimea magistralei pe 8,16,32 sau 64 biti = microprocesor pe 8,16,32 sau 64 biti; 2. Dupa tipul de sarcini eficient realizabile: -microprocesoare de uz general, nespecializate; -microprocesoare specializate, precum: procesoare de intrare/ iesire, coprocesoare aritmetice etc. 3. Dupa principiile de baza ale arhitecturii: -procesoare c-un set complex de instructiuni : CISC -procesoare c-un set redus de instructiuni : RISC 2 Alex Mihăilă, 422B Reprezentarea informatiei in sisteme digitale: -bit=un bit(0 sau 1) (b) -nibble= insiruire de 4 biti (n) -byte=insiruire de 8 biti (B) -word=insiruire de 2 octeti (w) -double word= insiruire de 4 octeti (dw) *prefixe: k = 2^10=10^3 - kilo P=2^50=10^15 - peta M=2^20=10^6 - mega E=2^60=10^18 - exa G=2^30=10^9 - giga Z=2^70=10^21 - zetta T=2^40=10^12 - tera Y=2^80=10^24 - yotta REPREZENTAREA INTERNA: Formatul instructiunilor ≠ formatul memoriei ! reprezinta totalitatea cifrelor binare necesare pentru codificare. Se lucreaza in octeti. (in reprezentarea programelor) in reprezentarea numerelor: -intregi, fara semn, in binar natural; observatie: Semnul numărului este reprezentat de msb cu următoarea convenţie: -msb = 0 semnifică număr pozitiv; -msb = 1 semnifică număr negativ. Pentru un număr fără semn cu 8 biţi, plaja numerelor reprezentabile acoperă 256 de poziţii, intre 0 şi 255, in zecimal. Pentru un număr cu semn, plaja numerelor reprezentabile acoperă tot 256 de poziţii, dar in intervalul -128 ÷ +127, presupunand 0 număr pozitiv. -intregi, cu semn : *marime si semn; *complement fata de 1; *complement fata de 2; --- toate procesoarele folosesc complementul fata de 2! 3 Alex Mihăilă, 422B REPREZENTAREA EXTERNA: cum apare informatia prelucrata de microcalculator, utilizatorului. - pentru codurile instructiunilor se vor folosi „mnemonicele”, cuvinte-cheie specifice limbajului de asamblare sau cuvinte-cheie impuse de fabricant : MOV, ADD, ADC etc.; - pentru numere avem: reprezentarea binara, octala, hexazecimala; - pentru caractere: reprezentarile alfanumerice, ce folosesc codul ASCII. LA CISC-RISC: -CISC se caracterizeaza printr-un format al instructiunii intre 1 si 15 octeti, variabil in functie de complexitatea lui; -RISC au un numar egal de octeti pe toate instructiunile (4 octeti), deci formatul e de lungime fixa; Altfel spus: microprocesoarele CISC se caracterizeaza printr-un format diferit al instructiunii, o masina CISC pe 32 de biti are orice numar intre 1 si 15 octeti; un microproceosr RISC are un format uniform ,toate instructiunile are exact acelasi numar de octeti, unitatea de control e mai simpla atunci! o masina RISC pe 32 de biti are toate instructiunile pe 4 octeti! BONUS DE LA PROF !!!!!!! Scheme bloc functionale, Circuite combinationale, Circuitele secventiale, Conventii pentru notatii=> explicit in curs AMP electronic pdf, fisier word separat din folder-ul de curs, platformele de pe Moodle sau ce s-a predat efectiv la curs!!! Structura unui nucleu de microprocesor de uz general – CISC Microprocesorul=unitatea centrala de prelucrare a informatiei intr-un sistem programabil, organizat ca o masina „Von Neumann”. Functionarea consta in existenta unui program memorat, alcatuit dintr-o secventa de instructiuni pe care procesorul le oate recunoaste si executa. ORICE instructiune din respectivul program parcurge 3 etape: -microprocesorul acceseaza si citeste din memorie codul instructiunii; -microprocesorul decodifica acest cod si recunoaste instructiunea; -executa instructiunea recunoascuta FETCH-DECODE-EXECUTE !!! 4 Alex Mihăilă, 422B Pasul 1 de detaliere : registrul de date(RD) si registrul de adrese(RA) Registrele RD si RA nu sunt atribute de arhitectura! Functia lor este de a sincroniza activitatea pe magistrala de date, respectiv adrese. Sunt niste dimensiuni impuse de constrangerile sistemului. *Despre RD: -registru fizic, sincronizeaza activitatea pe magistrala de date; -dimensiunea lui este aceeasi ca dimensiunea magistralei de date; -este bidirectional; Odata ce informatia a fost inscrisa in RD, este disponibila in microprocesor. Observam pe imaginea de sus ca dinspre exterior spre microprocesor RD primeste informatia de la memorie si porturi, iar dinspre interior spre exterior trimite informatia spre memorie si porturi! *Despre RA: -registru fizic, sincronizeaza activitatea pe magistrala de adrese; in el se scrie adresa fizica a unei locatii de memorie si/sau a unui port; -TOATE adresele trimise catre memorie prin RA vor fi adrese fizice (adresa ce ne permite sa gasim orice locatie in harta memoriei); -este unidirectional; -dimensiunea lui RA depinde de dimensiunea hartii de memorie; -adresa scrisa prin RA este disponibila intregului sistem; in el se scrie adresa fizica a unei locatii de memorie si / sau a unui port! Observatie: nu exista nicio legatura intre cele 2 registre, RA si RD; marimile lor, de asemenea, sunt complet diferite. 5 Alex Mihăilă, 422B Pasul 2 de detaliere : registrele generale O caracteristica importanta a microprocesorului: setul de registre de uz general, cu functia principala de a stoca n biti de informatie. In acest context, e ca si cum am avea o mica memorie in microprocesor (n-are legatura cu harta memoriei!!!); -rolul de stocare temporara a unor informatii utile programatorului, de fel operanzi (o arie de stocare cea mai rapid accesibila, fiind in interiorul microprocesorului); -sunt atribute de arhitectura (printre cele mai importante); -dimensiunea acestor registre este de regula data de dimensiunea operanzilor in zona de lucru; -numarul si lungimea registrelor generale reprezinta un criteriu de performanta a microprocesorului; -de 2 feluri: logice si fizice! De acum incolo, cand vorbim despre registre, trebuie sa avem in vedere urmatoarele caracteristici: cat de mare e, daca e fizic sau logic, daca este sau nu atribut de arhitectura si ce functie are! Avem 2 categorii de registre: dedicate (functia registrului este impusa de un fabricant); multifunctionale (putem alege ce tip de informatie sa stocheze registrul). Magistrala interna de date (ce-i cu font galben in imagini)= setul de conexiuni intre blocurile functionale ale microprocesorului, inclusiv registrul de date. Alt criteriu de performanta a microprocesorului este cat de mare e magistrala interna de date. De regula, dimensiunea magistralei in cauza = dimensiunea magistralei de date externe, dar nu mereu! exemplu: putem avea 32 biti pe externa, dar pe interna 256 biti! 6 Alex Mihăilă, 422B Pasul 3 de detaliere : unitatea aritmetica de procesare 1.UAL (unitatea aritmetica logica)= se ocupa cu efectuarea de operatii pe 8,16,32 biti cu 2 sau mai multi operanzi. Putem selecta diverse operatii, spre exemplu: -operatii logice c-un operand sau doi; -operatii logice c-un operand complement fata de 2; -operatii logice cu 2 operanzi: SI, SAU, SAU EXCLUSIV; -aritmetice tipice: un operand (incrementare, decrementare); -aritmetice tipice cu 2 operanzi: +,-,*,/ ; obs: alt criteriu de performanta- tipurile de operatii aritmetice ce le poate efectua in UAL microprocesorul! 2.Grupul de fanioane(FLAGS), exista 2 tipuri de fanioane: - aritmetico-logice - speciale Fanioanele sunt asamblate de microprocesor intr-un registru virtual (este un exemplu tipic de registru logic! ). Este un registru tipic logic, nu fizic! obs: C- carry, un transport, tot un fanion! 3. Registrul acumulator=registru fizic, atribut de arhitectura, cu dimensiunea la fel ca cea a operanzilor in zona de lucru. Functia e una clar stabilita : contine operandul si dupa operatie, rezultatul, apoi , obligatoriu, rezultatul distruge operandul. 4.Registrul de deplasare= singurul registru din microprocesor care executa deplasari stanga-dreapta (inmulteste sau imparte cu baza de numeratie un operand). De regula stocheaza un operand iar dupa deplasare rezultatul. Este un registru fizic, nu e atribut de arhitectura, iar lungimea, de regula, e data de operanzii din zona de lucru. Inmulteste sau imparte cu baza de numeratie un operand; stocheaza un operand iar dupa deplasare rezultatul ! 7 Alex Mihăilă, 422B COMENTARIU: *Se selecteaza registrul care contine operandul. *Se citeste informatia din registru (se aduce operandul pe magistrala interna de date). *Se inscrie operandul in registrul de deplasare. *Se comanda registrul de deplasare (selectia functiei de deplasare stanga cu o pozitie). *Se citeste continutul registrului respectiv, rezutatul deplasarii e dus pe magistrala interna de date. *Se selecteaza din nou registrul vizat la primul pas. *Se inscrie in acest registru rezultatul operatiei de deplasare, rezultat care ia astfel locul operandului initial. 8 Alex Mihăilă, 422B Pasul 4 de detaliere : unitatea de control al adresarii memoriei (UCAM) UCAM = modul in care microprocesorul fabrica adresele fizice si putem localiza informatia; blocul functional care preluand informatia de pe magistrala interna de date livreaza adresa fizica catre registrul de adrese. UCAM are 2 functii principale: -sa furnizeze adrese pentru memoria de program; -preluarea informatiilor de pe magistrala interna de date. 1.Furnizarea de adrese se poate face in 2 feluri: a) instructiune dupa instructiune; b) prin secvente, salturi, cicluri etc; 2.Preluarea informatiei: a) accesarea de date elementare; b) date structurate temporale (stiva, coada); c) date structurate spatial(tablouri). Interiorul UCAM-ului arata astfel: 9 Alex Mihăilă, 422B Procesorul foloseste in respectiva schema ORGANIZAREA LINIARA a MEMORIEI = toate locatiile de memorie sunt accesibile in mod egal; utilizatorul foloseste si el adresele fizice, astfel, inseamna ca adresele fizice sunt atribute de arhitectura. De mentionat ca nu este singurul mod de organizare! Circuitul care va returna adresele succesive intr-o memorie organizata liniar este numaratorul(PC). Numaratorul : -mereu incarcat cu adresa fizica a instructiunii curente; -nu este atribut de arhitectura, adica utilizatorul nu-l poate modifica, fiind o functie foarte importanta, care modificata neprofesionist ar da sistemul peste cap; cu el practic se citesc instructiunile de program; -dimensiunea lui e impusa de lungimea adresei fizice; impune marimea hartii memoriei! -furnizeaza localizarea instructiunilor in memoria de program (furnizarea memoriei de program). -accesul memoriei de program prin PC! OBSERVATII IMPORTANTE: Am incarcat direct adresa in RA, fac saltul impunand noua adresa, o trimit in memorie si actualizez numaratorul PC. Un microprocesor pe 16 biti, daca adresa are 32 de biti -> scad criteriile de performanta! In cazul functiei 1 a): numaratorul de program furnizeaza la iesire adresa fizica a instructiunii curente; locatie dupa locatie inseamna instructiune dupa instructiune in memoria de program; inscrisa in RA instructiunea devine valabila in memorie, o citesc(inscrisa in RD), numaratorul se incrementeaza, pregatindu-se pentru urmatoarea instructiune. b): printr-o adresa de salt, inscrisa in RA apoi actualizarea numaratorului de program e facuta disponibila in memorie. In cazul functiei 2 a): o adresa furnizata catre memoria de date. b): toate microprocesoarele folosesc STIVE! ; avem indicatorul de stiva(un numarator special) are furnizeaza o adresa in memoria de date , utilizatorul impune initial de unde sa plece stiva, initializat cu adresa fizica a bazei de stiva, apoi microprocesorul 10 Alex Mihăilă, 422B actualizeaza in orice moment varful stivei, actualizarea indicatorului se face detectand adresa fizica a varfului stivei! Stiva, din punct de vedere informational, este o colectie de date ce sunt plasate in locatii succesive in memorie sau intr-o regiune de acces, prevazute cu mecanisme specifice de acces. Poate fi de 2 feluri: -stiva HARD (tipica RISC, foarte rapida, dar limitata pe partea de stocare ) -stiva SOFT(cele mai multe microprocesoare o folosesc, acces mai lent, dimensiune mare) Stiva e folosita intens de catre microprocesoarele standard, in urmatoarele operatiuni caracteristice: a) stocarea temporara a datelor, cu instructiuni speciale PUSH, POP; b) in mecanismul de apelare a subprogramelor; c) in cererile de intrerupere, pentru a opri executia programului principal si se sare la programul de executie a intreruperii. *Accesul in stiva se realizeaza prin 2 cai: PUSH, POP. -PUSH r; : (SP)ele golesc coada de instructiune, UIM stie doar secvential sa aduca instructiunile, iar saltul poate conduce oriunde, astfel, trebuie sa folosim salturile doar cand e imperios necesar In timp au aparut unitati de predictie a salturilor: cu precizie de peste 90%. PRINCIPIILE DE BAZA ALE UNEI ARHITECTURI TIPICE CISC STRUCTURA REGISTRELOR: *Registrele procesoarelor de tip x86, in modul real, pe 16 biti: -avem putine registre(specific CISC); -cu exceptia registrului IP, toate sunt atribute de arhitectura; -cu exceptia lui F, toate sunt registre fizice; -primul grup de 4 registre, disponibile si pe 8 biti (o caracteristica x86) sunt registrele generale, de date: AX,BX,CX,DX Setul de registre generale este completat cu registre de tip indicator şi index. Pentru fiecare din aceste registre există atât o utilizare implicită sugerată de fabricant, cât şi una alternativă. *AX(acumulatorul): pe 16 biti; implicit in impartiri si inmultiri; se poate imparti si accesa in 2: -AL: implicit in translatii, aritmetica BCD, inmultiri si impartiri pe 8 biti; -AH: implicit in inmultiri si impartiri pe 8 biti; alternativ: AH poate fi acumulator daca dorim! 17 Alex Mihăilă, 422B *BX(baza in adresarea datelor): un registru pointer in mod implicit, care contine o adresa, adresa efectiva a bazei unei structuri de date; se poate imparti si accesa in 2: -BH: pe 8 biti -BL: pe 8 biti alternativ: BH si BL pot fi acumulatori! *CX(contor): un registru numarator, folosit implicit in anumite instructiuni ale procesoarelor de tip x86, precum ciclurile cu contor, operatiile cu siruri etc. ; se poate imparti si accesa in 2: -CL: pe 8 biti; operatii de deplasare sau rotatie cu mai mult de 1 pozitie; -CH: pe 8 biti; alternativ: CL si CH pot fi acumulatori! *DX(date): un registru general de date in mod implicit; se poate imparti si accesa in 2: -DL: pe 8 biti; -DH: pe 8 biti; alternativ: DL si DH pot fi acumulatori! -al 2-lea grup de 4 registre sunt registrele care implicit contin adrese, registrele de adresare/ registre pointer; nu sunt accesibile pe jumatati (tocmai fiindca pointerii au nevoie de 16 biti ) SP- contine adresa efectiva a varfului curent a stivei primare ; BP- pointer pentru stiva alternativa; x86 poate forma 2 stive:una prima si una secundara; deci BP – o intrare secundara in stiva primara; SI, DI- registre index in mod implicit; alternativ: toate aceste registre pot fi registre generale de date si acumulatoare! -al 3-lea grup de 2 registre: registrele dedicate IP- nu contine adresa fizica ci adresa efectiva a instructiunii curente; F- registru logic, registru virtual, o concatenare a unor fanioane; **avem 2 categorii de fanioane la x86: -aritemetico-logice : C(carry-transport),P (parity), A (transport auxiliar, dupa primul nibble), Z(fanionul de zero, cand reultatul unei op e zero), S(fanionul de semn, copiaza msb a unui numar reprezentat in marime si semn), O (depasire); -speciale : T (fanion de tip capcana, trap, folosit in anumite tipuri de intrerupere) , I(fanionul de validare a unor intreruperi), D(fanionul de directie, permite sa ne alegem in ce ordine sa parcurgem un sir); -al 4-lea grup de 4 registre: registre fizice dedicate si atribute de arhitectura, registrele segment; functia lor dedicata (n-am voie s-o schimb) este de a permite realizarea in memorie a segmentelor (subdiviziuni virtuale logice ale memoriei); aceste registre contin adrese segment, de aceea ele sunt folosite in crearea de segment: CS: definim segmentul curent de program; SS: definim segmentul curent de stiva; DS: definim segmentul curent de date; ES: segment suplimentar de date. 18 Alex Mihăilă, 422B *Registrele procesoarelor de tip x86, in modul real, pe 32 biti: - EAX (extended AX) etc. registrele generale se extind; - registrele segement nu se extind, pastreaza dimensiunea, dar mai adauga 2 in plus(FS, GS); - dimensinea registrelor este de regula dimensiunea operanzilor de lucru; Toate caracteristicile de la 16 biti se aplica si la 32 de biti, cu mici diferente, abordate mai sus! Putem conclude astfel urmatoarele caracteristici ale seturilor de registre CISC , comparand 2 microprocesoare, de la INTEL si MOTOROLA: 1. numar registre: μP CISC –numar mic de registre (8 registre Intel, 15 Motorola) -este clar ca Motorola are mai multe registre decat Intel 2. dimensiunea registrelor: -dimensiunea operanzilor de lucru 16 biti pe μP de 16 32 biti pe μP de 16 -Motorola are dimensiunea registrelor mai mare decat la Intel 3. majoritatea registrelor sunt multifunctionale: functii implicite/alternative: a) acumulatoare b) registre de date c) registre index d) indicator de stiva e) numarator -si din acest punct de vedere Motorola superior 19 Alex Mihăilă, 422B 4. registrele folosesc pentru: i. realizarea mai multor stive ii. realizarea mai multor tablouri -si din acest punct de vedere Motorola superior (Motorola 15 potentiale, Intel 3 potentiale) 5. registrele folosesc pentru realizarea unor mecanisme superioare: a. la Intel structurarea segmentata a memoriei (registre segment) b. la Motorola mecanism de protectie cu 2 nivele (uSP si sSP) ORGANIZAREA MEMORIEI MICROCALCULATORULUI *Organizarea memoriei este un atribut de arhitectura a microprocesorului. 1. dimensiunile hartii memoriei - ce memorie poate sa acceseze memoria fizica; 2. formatul memoriei - memoria trebuie sa asigure formatul; 3. conventiile de stocare in memorie a datelor care ocupa mai mult de o locatie; 4. structura logica a memoriei -organizarea propriu-zisa. x86, in modul real: 1. harta memoriei – data de dimensiunea adresei fizice, 20 biti adica 1 megalocatie; 2. formatul memoriei – octetul; 3. informatii stocate pe octeti succesivi care se acceseaza conform conventiei micului indian (informatia cea mai putin semnificativa este pe adresa cea mai mica); 4. imi ofera alternativa: organizarea segmentata a memoriei(in memorie se definesc subdiviziuni logice numite segmente, cu dimensiuni fixe, prestabilite). -adresa fizica nu este atribut de arhitectura in acest tip de organizare a memoriei, fiindca vom lucra cu adrese logice , pe 32 biti, si compuse din 2 parti (efectiva AE si segment AS). *Microprocesorul are organizarea segmentata de 2 tipuri: -intrasegment -intersegment *Translatarea adresei logice = trecerea de la o adresa logica spre una fizica; facuta automat de microprocesor si transparenta pentru utilizator ; *Adresa fizica a bazei unui segment se face inmultind cu 16 baza AS iar apoi in interiorul segmentului pozitionarea se face adunand AE la el: 20 Alex Mihăilă, 422B -ultima e formula de translatare din adresa logica in cea fizica. Observatii: 1. prima deosebire in organizarea liniara si cea segmentata este ca in cazul organizarii liniara adresa fizica este atribut de arhitectura in schimb in cea segmentata nu este atribut de arhitectura; 2. adresarea segmentata - pozitionarea segmentului in memorie si apoi adresare liniara in segment. -se pierd 12 biti, dar ei se regasesc in organizarea virtuala in memorie: -adresa segment se afla in registru segment -adresa efectiva ( nu fizica !) AS impune: -4(16 biti) sau 6(32 biti) segmente simultan; -un segment de program, un segment de stiva si 2 sau 4 segmente de date; -pozitia absoluta a segementelor in memorie este pe adrese multiplu de 16; -pozitiile relative ale segmentelor sunt la latitudinea utilizatorului segmentele pot fi si suprapuse. 21 Alex Mihăilă, 422B AE impune: -dimensiunea lui AE imi da dimensiunea segmentelor : 2^16 locatii de memorie , 64 KB; -dimensiunea hartii memoriei, data de adresa fizica: 2^20 locatii de memorie , 1MB ; -organizarea memoriei:octetul cel mai putin semnificativ e adresa cea mai mica (micul indian). *Mecanisme de utilizare a unui segment: I. Redirectionarea segmentelor (segment overriding): -utilizarea unor segmente pentru alte informatii stabilite implicit de fabricant; -inseamna ca segmentele in memorie pot avea functii implicite si alternative; -redirectionarea segmentelor este restrictionata; -se face in mod explicit in program cu un prefix de redirectionare (un mnemonic in assembler). II. Suprapunerea: Programele care pot rula intr-un singur segment, nu depasesc granitele segmentului, si pentru care pozitia absoluta a segmentului nu conteaza , se numesc programele relocatabile din memorie OBSERVATIE: Organizare liniara a memoriei vs. Organizare segmentata a memoriei -timp de access - pentru segmentare timp indelungat de access dar odata inauntru timpul de accesare este rapid; exemplu: o memorie de 1mb e accesata mai rapid decat una de 64 kb in organizarea liniara a memoriei; in cea segmentata, statistic, accesarea e cu mult mai rapida , deoarece accesul intrasegment este mult mai des decat accesul intersegment. -ocuparea hartii memoriei - org. liniara mai eficace, org. segment risipeste memoria -modularizare - in favoarea organizarii segmentate (stive) 22 Alex Mihăilă, 422B Tabel mai detaliat al REDIRECTIONARII: Functii realizate Adresarea Adresarea Adresa efectiva prin adresarea segment implicita segment memoriei alternativa Fetch CS nu IP Operatii in stiva SS nu SP Stocare variabile (cu anumite data de modul de exceptii) DS CS, SS, ES adresare Formarea unui sir „sursa” DS CS, SS, ES SI Formarea unui sir „destinatie” ES nu DI Adresare in stiva cu BP SS CS, DS, ES date de modul de adresare Adresare relativa la BX DS CS, SS, ES date de modul de adresare 23 Alex Mihăilă, 422B TRANSFERURILE DE DATE: Transferurile de date: deplasarile de operanzi si/sau rezultate in interiorul microprocesorului, intre microprocesor si celelalte componente ale microcalculatorului, sau intre microcalculator si lumea exterioara. Din punctul de vedere al complexitatii transferurilor de date, se poate face urmatoarea clasificare a microprocesoarelor de uz general: -Categoria A: acumulator dedicat care ia parte la orice transfer de date: -Categoria B: poate transfera direct cu alte registre ; are toate caracteristicile celor din categoria A, sunt mai complicate astfel: -Categoria C: transfera direct din locatia de memorie ; are toate caracteristicile lui A si B: -Categoria D: pot transfera un bloc de memorie dintr-o parte in alta; au toate caracteristicile lui A, B si C: OBSERVATII: -ne referim la transferuri de numere! nu coduri! ci operanzi si rezultate! -presupun 2 membrii: sursa si destinatie (copierea sursei la destinatie, sursa nu se distruge!) -dimensiunea sursei si destinatiei sunt identice Registrele care iau parte la transferurile de date dintr-un microprocesor sunt atribute de arhitectura! 24 Alex Mihăilă, 422B TEHNICI DE ADRESARE Un alt atribut de arhitectura: tehnicile de adresare (modalitate de specificare, in formatul unei instructiuni a locatiei unui operand, rezultat sau a codului unei instructiuni). *Tehnici de adresare simple: acele tehnici de adresare care le detine orice masina CISC. Avem astfel urmatoarele: a)Implicita in registru: este modul sau tehnica de adresare ce presupune ca in chiar codul instructiunii curente exista niste campuri in care se specifica registrul sau perechea de registre in care avem informatia tinta ( un operand sau rezultat, doar numere!). obs: - nu e in memorie adresarea, ci este un mod de a localiza informatiile dorite chiar in registrele generale ale microprocesorului; - la limita un singur octet, deoarece se reduce la formatul instructiunii. - registrele vizate sunt pe 8 sau 16 biti, depinzand de tipul microprocesorului; ex: MOV AX, BX b)Adresarea imediata: este modul sau tehnica de adresare ce presupune ca in formatul instructiunii curente, imediat dupa cod, se afla informatia dorita (adica informatia se afla in memoria de program). -nu putem avea in formatul instructiunii curente alte instructiuni; -cautam date in memoria de program! doar citim, nu scriem; -in formatul instructiunii avem doar operanzi, nu si rezultate, avand in vedere ca doar citim din memorie. obs: cel putin 2 octeti (unul pentru cod, altul pentru rezultate) ex: MOV AL, 0FFh exemplu: Fie un procesor CISC , un procesor pe 8 biti, cu urmatoarele caracteristici: - adresare liniara a memoriei; - o adresa fizica pe 2 octeti; - formatul memoriei este de 8 biti; -exista un numarator de program „PC” si pp ca numaratorul de program contine chiar adresa codului instructiunii; -2 operanzi: un operand pe un octet, un operand pe celalalt octet 25 Alex Mihăilă, 422B Cel mai important mod de adresare pentru CISC ( la RISC acest mod nu prea functioneaza): c)Adresarea absoluta (extinsa, directa) : modul sau tehnica de adresare ce presupune ca in formatul instructiunii curente gasim, imediat dupa cod, adresa completa a informatiei vizate; *adresa completa = totalitatea elementelor necesare pentru a identifica fizic in memorie informatia dorita; -in cazul organizarii liniare a memorie, adresa fizica este adresa completa! -in cazul organizarii segmentate a memoriei: adresa completa e adresa logica(efectiva sau segment), avem cazuri: *cand accesul este intrasegment: adresa efectiva = adresa completa! *cand accesul este intersegment: adresa logica=adresa completa! obs: -formatul maxim al instructiunii este de 3 octeti; -cele mai multe instructiuni de salt, folosesc acest tip de adresare! exemplu: Fie o masina CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii pe un octet si o adresa fizica de 2 octeti; de asemenea, acest procesor asculta de conventia micului indian: 26 Alex Mihăilă, 422B d)Adresarea scurta: modul sau tehnica de adresare ce presupune ca in formatul instructiunii curente se gaseste o parte din adresa completa a informatiei vizate, cealalta parte e presupusa implicit; obs: - formatul instructiunii este mai compact, neavand toata adresa completa--> minim 2 octeti(1 octet cod+1/2 octet la adresa completa); - se refera atat la date cat si la instructiuni, deriva din adresa completa; - localizarea informatiei in „pagina zero”, pentru instructiuni speciale. exemplu: Fie o masina CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii pe un octet si o adresa fizica de 2 octeti (1/2 inferior in formatul instructiunii si 1/2 superior implicit 0): e)Adresarea relativa: modul sau tehnica de adresare ce presupune ca in formatul instructiunii curente gasim adresa relativa a informatiei vizate, la pozitia codului instructiunii curente („in pagina curenta”). Pozitia relativa este date de „deplasament”, care e un numar cu semn (ne putem duce inainte sau dupa). „disp”= deplasamentul , fie p 8 biti (disp8), pe 16 biti (disp16) etc. obs: -informatia vizata poate fi data sau instructiune (de obicei aceasta modalitate de adresare e folosita la cicluri cu contor); - formatul este mai compact decat la adresarea absoluta--> minim 2 octeti. 27 Alex Mihăilă, 422B exemplu: Fie o masina CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii pe un octet si o adresa fizica de 2 octeti: f) 1. Adresarea indirecta prin registru: prezenta si la CISC si la RISC , presupune ca in chiar codul instructiunii curente este indicat un registru sau o pereche de registre care unul dintre ele contine adresa completa a informatiei vizate ; obs:-in acest moment registrul este de fapt un pointer! -formatul instructiunii este compact , avem minim un octet; -putem accesa orice, si instructiuni si date! ex: MOV AX, [SI] ; -de fel SI, DI, BX, BP exemplu: Fie un procesor CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii de un octet, o adresa fizica de 2 octeti si o pereche de registre generale de 8 biti fiecare: 2. Adresarea indirecta cu memoria: presupune ca in formatul instructiunii curente se gaseste adresa completa a adresei informatiei vizate ; obs: -adresa adresei practic (timpul de acces se lungeste!, dar avem 2 avantaje: o relativa independenta a localizarii datelor fata de program; al 2-lea: protectia informatiei ); -formatul este de minim 3 octeti, avand adresa completa! -putem accesa orice, si date si instructiuni. 28 Alex Mihăilă, 422B exemplu: Fie un procesor CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii de un octet, o adresa fizica pe 2 octeti si foloseste conventia micului indian: g) 1. Adresarea cu preindexare: presupune ca in formatul instructiunii curente gasim pozitia relativa a unei date, a unui numar, intr-o structura de date (tablou de date) predefinita; obs: -formatul este mai compact decat o adresa completa: minim 2 octeti; -pozitia relativa, deplasamentul, este un numar pozitiv! -acest mod de adresare se refera doar la date! -marimea deplasamentului da marimea tabloului; -numarul de registre index indica numarul de tablouri potentiale; 29 Alex Mihăilă, 422B exemplu: Fie un procesor CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii de un octet, o adresa fizica pe 2 octeti, cel putin un registru index de 16 biti si deplasamentul de 8, 16 biti: 2. Adresarea cu postindexare: o combinatie intre adresarea indirecta cu memoria si preindexare; presupune ca in formatul instructiunii curente gasim adresa completa a deplasamantului intr-o structura de date predefinita; obs: -formatul are cel putin 3 octeti; -acest mod de adresare se refera la date; exemplu: Fie un procesor CISC pe 8 biti, organizarea liniara a memoriei, formatul instructiunii de un octet, o adresa fizica pe 2 octeti si un tabel de deplasament: aici, pozitiile relative ale variabilelor se afla in ceea ce vom denumi tabele de deplasamente; 30 Alex Mihăilă, 422B *Tehnicile de adresare compuse: rezultate din compunerea a 2 sau mai multe tehnici de adresare! 2 concluzii: a) modul sau tehnica de adresare contribuie decisiv la dimensiunea formatului instructiunii curente; b) semnificatia informatiei o stim noi si microprocesorul, nu memoria: adresarea directa vs adresarea indirecta cu memoria vs cu adresare cu preindexare ,avem semnificatii diferite: -pentru directa: adresa informatiei -pentru indirecta: adresa adresei informatiei -pentru adresare cu preindexare: adresa deplasamentului informatiei obs: toate sunt aceeasi entitate-->o adresa completa, dar au semnificatii de informatie diferite! COMENTARII: (r) = continutul unui registru oarecare; (r1,r2) = continutul a 2 registre concatenate; (r)h = continutul jumatatii superioare; ((r)) = continutul unei locatii de memorie a carei adresa se afla intr-un registru (adresare indirecta prin registru); (mem) = continutul unei locatii de memeorie; [ ] = optional. 31 Alex Mihăilă, 422B Tehnici de adresare pentru Intel 8086: E posibila redirectionarea segmentelor: Adresare indirecta+Adresare directa prin registru: Adresare indirecta prin registre+Adresare cu preindexare: 32 Alex Mihăilă, 422B 2 adresari indirecte prin registre: 33 Alex Mihăilă, 422B 34 Alex Mihăilă, 422B Tipuri de instructiuni CEL MAI IMPORTANT ATRIBUT DE ARHITECTURA: instructiunea! -din punct de vedere semantic, μP imparte setul de instructiuni in 5 subseturi: 1) transfer de date 2) prelucrari date 3) instructiuni de control al programului 4) instructiuni IN / OUT 5) instructiuni de control al μcalculatorului 1)Transferul de date: -presupune in general 2 membrii, o sursa si o destinatie: se copiaza sursa la destinatie( asta e semantica); sursa ramane neschimbata; -tipurile de entitati care participa la transfer, sursa sau destinatie, depind de clasa din care face parte microprocesorul; exemplu: fie un procesor de clasa A, fie S, fie D trebuie sa fie implicit acumulatorul microprocesorului. -localizarea informatiilor, fie la sursa fie la destinatie, se face folosind una din modurile de adresare disponibile microprocesorului respectiv; niciodata la niciun microprocesor nu sunt posibile orice combinatii, exista intotdeauna restrictii! -destinatia unui transfer nu poate fi adresata imediat, deoarece destinatia trebuie sa reprezinte un loc de depozitare a unei noi informatii, nu a unei constante! -dimensiunea lui s = dimensiunea lui d; -un transfer de date este considerat cel cu stiva, cu PUSH si POP etc. -formatul instructiunii este foarte compact, deoarece trebuie sa permita un transfer masiv de informatii. 35 Alex Mihăilă, 422B Exemple: 36 Alex Mihăilă, 422B DESCRIERI FORMALE ALE SEMANTICII UNOR INSTRUCTIUNI Alte descrieri semantice: obs: ne ghidam in functie de paginile 32-34 ! sesizati ca fiecare adresa fizica (AF) scrisa acolo sunt ca o formula pentru descrierea in cauza; scriem separat destinatia si sursa, in functie de tipul lor de adresare (care deseori e diferit, nu la fel ) ! PUSH [BX] : SP ← SP – 2 ( (SS)↑0H + (SP)+1) ←( (DS)↑0H + (BX)+1) ( (SS)↑0H + (SP)) ←( (DS)↑0H + (BX)) 37 Alex Mihăilă, 422B PUSH DI : cu adresare indirecta implicita la destinatie si adresare in registru implicita la sursa SP ← SP – 2 ( (SS)↑0H + (SP)+1) ←(DI)h (high) ( (SS)↑0H + (SP)) ←(DI)l (low) POP BX : (BL)← ((SS)↑0H + (SP)) (BH)← ((SS)↑0H + (SP) +1) SP ← SP + 2 POP [SI] : ((DS)↑0H + (SI))← ((SS)↑0H + (SP)) ((DS)↑0H + (SI)+1)← ((SS)↑0H + (SP) +1) SP ← SP + 2 XCHG BX, [BP+SI] : adresare in stiva implicita (BL)← ((SS)↑0H + (BP)+(SI)) (BH)← ((SS)↑0H + (BP)+(SI) +1) MOV [BX+SI+10H], FFAAh ( (DS)↑0H + (BX)+(SI)+10h) ←AAh ( (DS)↑0H + (BX)+ (SI)+11h) ← FFh MOVSB/MOVSW: o instructiune tipica CISC -copiaza un sir de numere dintr-o locatie de memorie la alta locatie de memorie; -este o primitiva ce poate fi repetata cu REP, un prefix de repetabilitate, ce implica un ciclu cu contor, o bucla! (face parte dintr-un set de tipuri de prefixe, pe care Intel le poate folosi ! exemplu: prefix de redirectionare etc.) : REP MOVSB/MOVSW 38 Alex Mihăilă, 422B - in formatul instructiunii apare, paradoxal, un octet inaintea codului (mai intai prefixul apoi codul, acest aspect reprezinta o exceptie!); -SI, DI, DS, ES, CX, DF- ca sa aiba rost, aceste registre trebuie actualizate, sunt prestabilite; -este un transfer intersegment ; -caracteristica specifica INTEL: asocierea lui DI cu DS este obligatorie! nu-l putem redirectiona; -DF imi permite sa parcurgem intr-un fel sirul, de la stanga spre dreapta(DF=0), ori invers(DF=1); 2)Prelucrari de date: Avem 2 tipuri de operatii: a)operatii cu un operand (monadice): - cu acumulator: (d)← ⨂(d) - fara acumulator: (d)← ⨂(s) b)operatii cu 2 operanzi(diadice): - cu acumulator: (d)← (𝒅)⨂(s) - fara acumulator: (d)← (𝒔𝟏)⨂(s2) observatie: operatiile cu acumulator sunt tipice CISC, deoarece nu avem multe registre, iar cele fara acumulator sunt tipice RISC! Caracteristici: -tipuri de operatii uzuale: a)logice: SI, SAU, XOR(diadice logice), complement fata de 1 si 2 (monadice logice) b)aritmetice: +, - ,*, / (diadice aritmetice), incrementare, decrementare(monadice aritmetice) c)deplasari si rotatii(monadice aritmetice) -sursa si destinatie pot fi, in principiu, registre generale, DAR si locatii de memorie ! observatie: utilizarea locatiilor de memorie ca membrii a operatiior aritmetice-logice, este o caracteristica CISC ! -identificarea operanzilor si a rezultatului se face folosind modurile de adresare ale μP respectiv, cu restrictii; -nu orice combinatii de moduri de adresare, pentru sursa si destinatie, sunt posibile; -ca si la transferuri, sursele si destinatiile au lungimi egale 39 Alex Mihăilă, 422B exceptii: inmultirea, cu rezultatul pe dubla precizie impartirea, unde deimpartitul este pe dubla precizie -aceste instructiuni afecteaza fanioanele aritmetico-logice, modul in care ele sunt afectate, face parte din semantica instructiunii! avem 4 moduri de afectare a fanioanelor: a) fanioane neafectate indiferent de operatii ( nu pot fi folosite in a lua decizii ulterioare) b) fanioane afectate ulterior c) fanioane care sunt fie setate, fie resetate dupa o operatie indiferent de rezultat d) fanioane care in functie de tipul operanzilor, in functie de valoarea operanzilor, sunt setate sau resetate obs: -nu toate fanioanele sunt afectate de orice instructiune de prelucrare de date -exista instructiuni de prelucrari de date care afecteaza anumite fanioane la fel -afecteaza fanioanele aleator -performanta acestor tipuri de instructiuni este un compromis intre complexitatea instructiunii si timpul de executie, tipic CISC ! Exemple: Fie un procesor CISC pe 8 biti, organizare liniara a memorie, adrese fizice pe 16 biti, memorie formatata pe octeti, numarator PC, indicator de stiva, registre generale R1, R2, R3,R4,R5, R6 , 8 biti fiecare , acumulator A pe 8 biti, si fanion de transport optional. 40 Alex Mihăilă, 422B Alte primitive: folosite in lucrul cu sirurile in special ! CMPSB / CMPSW (compara un element dintr-un sir, cu un element din alt sir): -trebuie initializate: ES,DS,SI,DI,DF ! SCASB / SCASW (se compara o constanta cu elementele unui sir): -utilizarea lui ES si DI e obligatorie; -poate fi prefixat cu REP, REPZ, REPNZ STOSB / STOSW ((ES)↑0H + (DI))← (AL) - pe 8 biti [((ES)↑0H + (DI)+1)↑ ((ES) ↑ 0H + (DI)) ← (AX) ] – optional, pe 16 biti if (DF)=0 then (DI)←DI+N else (DI)←DI-N 41 Alex Mihăilă, 422B LODSB / LODSW (AL)←((DS)↑0H + (SI))← - pe 8 biti [(AX) ←((DS)↑0H + (SI)+1)↑ ((DS) ↑ 0H + (SI))] – optional, pe 16 biti if (DF)=0 then (SI)←SI+N else (SI)←SI-N exemple de instructiuni logice: -IMUL – inmultirea cu semn! DIV CX : inainte de executia propriu-zisa a operatiei, se face verificarea pentru “impartirea la zero”==>se genereaza automat o intrerupere software de tip 0, apeland un subprogram dedicat! 42 Alex Mihăilă, 422B 3)De control al programului: Microprocesoarele ne pun la dispozitie 2 clase de actiuni: teste si salturi! Testele: A.testeaza un fanion; B. testeaza combinatii logice fanioane; C. testeaza un bit oarecare dintr-un operand oarecare; D. testeaza linii de intrare “serie”; Salturi: ma duc la alta locatie de memorie, decat cea imediat urmatoare. *dupa efectuarea sau nu a unor teste: -neconditionate -conditionate *dupa modul de adresare(mult mai retrictiv)-CISC foloseste patru salturi: *dupa cum memoreaza sau nu valoarea curenta a numaratorului de program: -salturi propriu-zise -apeluri de subprograme *dupa complexitate A.salturi 2 posibilitati B. salturi 3 posibilitati C. cicluri observatie: -salturile neconditionate nu sunt recomandate de folosit ; in schimb salturile conditionate, strict necesare, pot fi facute; -apelurile de subprogame (CALL) = apelul de program, in esenta, este un salt neconditionat (ca JMP, dar cu diferenta majora ca CALL poate sa revina la adresa de la care a plecat, in programul principal)!!! -apelurile de programe presupun salvarea adresei pentru reintoarcere, e regula facuta in stiva, procesoarele CISC folosesc stiva pentru asta ; CALL este saltul la prima instructiune a programului apelat; salveaza in stiva adresa urmatoarei instructiuni dupa CALL! 43 Alex Mihăilă, 422B exemple: 1. Prin adresare directa intersegment; salt propriu-zis neconditionat : 2. Prin adresare implicita, intersegment, neconditionat: 3. Intel are toate salturile conditionate cu adresare relativa, intrasegment cu deplasament, numai pe 8 biti : 4. Apelul (adresare directa, intersegment): 44 Alex Mihăilă, 422B 5. Return la apelul din programul principal (ultimele 2 randuri, paranteze drepte, pentru intersegment, restul intrasegment): 45 Alex Mihăilă, 422B Principiile de baza ale unei arhitecturi de microprocesor- RISC Pe aceeasi masina VON NEUMANN, cu acelasi mod de functionare (fetch-decode- execute), cu aceleasi tipuri de arhitectura, dar se manifesta in mod diferit! CARACTERISTICI DEFINITORII: 1. Unitatea de control este realizata prin „logica de tip cablat”. 2. Instructiunile se desfasoara intr-o singura stare , deci durate de timp identice! 3. Numarul de instructiuni este mic (sub 128); ele sunt „simple” (nu exista operatii de tip cicluri, adica nu avem loop-uri). 4. Dimensiunea este fixa pentru tot formatul instructiunilor (cat cea a operanzilor tipici); de regula, sunt pe 32 de biti, dar in general informatiile (operanzi, rezultate, instructiuni, adrese etc. ) vor fi uniforme pe 4 octeti ! 5. Instructiunile au format uniform (nu mai mult de 4 tipuri de formate); informatiile din formatul instructiunilor sunt putine, pentre decodificari cat mai simple cu putinta! 6. Numarul de moduri de adresare este mic (sub 4); pentru a nu avea coduri imense; sunt putine, dar sunt compuse, nu simple! 7. Exista un numar mare de registre generale, atribute de arhitectura (cel putin 32). 8. Accesul memoriei se face numai cu instructiuni de transferuri simple de date intre registre si memorie (instructiuni de tip „LOAD” si „STORE”), operatiile de prelucrare ale datelor folosesc numai registrele microprocesorului lor. Setul de registre: Avem de-a face cu urmatoarele avantaje in folosirea unui set de registre: - marirea vitezei de procesare prin minimalizarea accesului in memorie a operanzilor si/sau a rezultatelor; - realizarea structurilor de date de tip stiva sau „coada” hard (in interiorul microproesorului); - transferul parametrilor intre programele apelante si apelate se face direct in interiorul microprocesorului; - deservirea cererilor de intrerupere si multiprocesare pot fi realizate direct in interiorul microprocesorului; - marirea „factorului de uniformitate” a cipului (numar total de circuite / numar de tipuri de circuite: registre, UAL, numaratoare etc.). Registrele: Procesorul RISC are: - in general foarte multe registre (de la 32.....2000 sau poate chiar mai mult, conform ultimelor tehnologii aparute); - dimensiunea registrelor = dimensiunea operanzilor de lucru (32, 64 biti); - ele sunt fizice sau logice; 46 Alex Mihăilă, 422B - toate registrele sunt multifunctionale, in general fara functii implicite; multe dintre ele fiind folosite ca pointeri; nu avem acumulator, nici macar implicit! - avand multe registre generale, putem defini subdiviziuni logice in setul de registre, ce conduc la aparitia registrelor logice; intervine astfel in acest proces notiunea de set de lucru de registre (subset de registre logice folosite in program); Pentru un program care ruleaza, vom avea de a face de acum incolo cu setul de lucru de registre (care se poate schimba de la un program la altul, de minim 32 de registre). Ca microprocesorul sa treaca de la registrul logic la registrul fizic, se realizeaza translatarea registrelor logice in registre fizice. Respectiva translatare se face automat si transparent pentru utilizator. *Tipuri de organizari a setului de registre: a) setul de registre fizice simplu: -un sir de registre, fiecare identificat dupa numarul sau de ordine r0, r1, r2 etc. (la fel ca-n organizarea liniara a memoriei) , apoi folosite cum dorim. b) mai multe seturi de registre logice (unic set de registre fizice): - se imparte setul de registre fizice in mai multe subseturi; - fiecare subset de registre logice are cel putin 32 de registre, ca sa fie set de lucru! - prin intermediul unui pointer trecem de la un subset la altul; avantajul: modularizarea programului ( nu mai salvam continutul registrelor; trec de la un program la altul fara sa mai salvez continutul unor registre care vor fi folosite si in alt program); -remarcam o corespondenta biunivoca intre registrul fizic si cel logic. 47 Alex Mihăilă, 422B c) seturi de registre logice partial suprapuse(unic set de registre fizice): - - suprapunere = „ferestre de registre” care permit comunicarea intre seturile de lucru; - - in acest tip de organizare nu mai avem nicio corespondenta biunivoca intre registrul fizic si logic; - - fiecare set de registre logice reprezinta de fapt un set de lucru! - - permite transferul de parametrii intre programul apelant si apelat !! - - daca ultimul set de lucru se suprapune cu primul, avem de-a face cu „ferestre circulare” ---> se incurajeaza recursivitatea! -microprocesorul impune numarul de suprapuneri; d) mai multe seturi de registre logice pentru multiprocesare (mai multe seturi de registre fizice): 48 Alex Mihăilă, 422B - multiprocesarea = set fizic pentru fiecare proces ; trecerea de la un proces la altul se face prin intermediul unui pointer. Ca exemple, avem, de la inceputurile RISC-ului, urmatoarele registre ale microprocesoarelor : Berkeley RISC I si II. a) registrele disponibile pentru o anumita procedura: -setul de lucru, de 32 de registre, este format din: 3 ferestre si registrele sale proprii. b) registrele fizice si registrele logice: 49 Alex Mihăilă, 422B - 8 seturi de lucru : putem avea 8 programe care se pot apela unele pe altele (A,B,C,...,H); - primele 10 registre sunt comune, 10 registre dedicate fiecarui parametru de lucru; - 6 registre din fiecare set se suprapun; - ultimul set de 6 registre se suprapune peste ultimul; - 8 seturi de lucru a cate 32 de registre fiecare; - registrul R0= 0 stochez constanta 0 ! -->> consum de registre, aspect care nu-l regasim si la CISC! -in total: 138 de registre fizice! - translatarea: R0=A0=B0=C0=…=H0... R10=A10=H26 R15=A15=H31 R26=A26=B10 R31=A31=B15 etc. *Setul de instructiuni si Tehnicile de adresare Setul de instructiuni: Dupa cum am stabilit, setul de instructiuni este mult simplificat (cel mult 128 de instructiuni) si sunt „simple”. Avem urmatoarele tipuri de instructiuni RISC: a) instructiuni pentru acces in memorie: LOAD/STORE LOAD r, mem; (r) ← (mem) STORE mem, r; (mem) ← (r) - accesul in memorie se face DOAR cu aceste instructiuni; - r si mem trebuie sa aiba aceeasi dimensiune. b) instructiuni aritemetico-logice: (d)← (𝒔𝟏)⨂(s2) , unde ⨂ - o operatie aritmetica, logica oaecare ! - nu se lucreaza cu acumulator (destinatia nu inlocuieste ua dintre surse); - d, s1 si s2 sunt registre din setul de lucru; - d, s1 si s2 au aceeasi dimensiune; nu vom avea niciodata locatii de memorie; - tipuri de operatii: 1.operatii logice: SI, SAU, XOR (diadice), CF1, CF2(monadice); 2.operatii aritmetice: +, -, *, : (diadice), incrementare, decrementare (monadice); obs: inmultirea si impartirea nu sunt considerate operatii complexe! 50 Alex Mihăilă, 422B 3.deplasari sau rotatii (monadice), care nu distrug operandul si au un numar variabil de celule. c) instructiuni de control: *aici avem salturi proriu-zise, apeluri de subprograme si teste: - apelurile de subprograme nu folosesc neaparat stiva „soft”, microprocesorul nu o foloseste implicit, adresa de revenire poate fi salvata in stiva „hard” sau intr-un registru; - daca exista stive, de multe ori ea este „hard”, nu „soft”. Tipuri de moduri de adresare: 1. In registru: AF =𝒓𝒏 , unde 𝒓𝒏 reprezinta un registru oarecare din setul de lucru registre; 2. Directa (absoluta), de regula intr-o portiune a hartii de memorie: AF = adr - se presupune ca adresa figureaza in formatul instructiunii; - in formatul instructiunii am o bucata de din instructiunea curenta, astfel puem considera ca avem o adresare scurta ! 3. Indirecta prin registru: AF = (𝒓𝒏 ) - se acceseaza orice din harta memoriei; - orice registru poae fi pointer; - tipica RISC 4. Adresarea imediata: constante care apar in formatul instructiunii. *tipuri compuse de adresari: 5. Relativa la baza, directa: AF = (𝐫𝐧 ) +adr 6. Relativa la baza, cu registru index: AF = (𝐫𝐢 ) + (𝐫𝐣 ) , (ri ), (rj ) –orice registre din setul de lucru obs: 5 si 6 sunt bazate pe adresarea indirecta prin registru! 7. Relativa (la PC): AF = (PC) + disp , tipica pentru adresarea in programe; 51 Alex Mihăilă, 422B DE REMARCAT: Orice registru poate fi baza si oricare registru poate fi index! 52 Alex Mihăilă, 422B UNITATEA DE CONTROL A MICROPROCESORULUI RISC(UCP-ul): Ca la orice procesor, UCP are 2 functii: - desfasurarea in spatiu - desfasurarea in timp * Desfasurarea in spatiu: Un RISC : la fiecare instructiune avem 4 octeti! Deci UCP-ul e simplificat! (fata de CISC, unde avem intre 1 si 15 octeti pentru instructiuni). - se observa ca-n formatul instructiunii putem avea : un cod, dezvoltarea pentru 3 registre si un loc pentru un deplasament, instanta, adresa; - 32 de registre de lucru; - 2^6 instructiuni, din cod; - o adresa are: 26 biti! (0-25). Un CISC se prezinta sub forma urmatoare: - linia punctata: suplimentar! - linia continua: obligatoriu! O masina RISC are toate instructinile desfasurate intr-un numar egal de stari! Se poate face o desfasurare in paralel a mai multor instructiuni dintr-o secventa => o desfasurare diferita cu fiecare TACT. 53 Alex Mihăilă, 422B * Desfasurarea in timp: a) CISC - inmultirea pe 32 de biti! unde se folosesc 2 acumulatori DX, AX: CONCLUZII: 1. pentru diverse operatii de prelucrari de date se folosesc aceleasi componente ale schemelor Block prezentate deja pentru un μP CISC; 2. operatiile aritmetice complexe dureaza un numar mare de stari, variabil, depinzand de operanzi; 3. succesiunea de stari este stocata intr-o memorie de μprogram in care fiecare instructiune e μprogramata; acumulator + registru de deplasare => realizare prin concatenare de 2 registri de 32 biti. 54 Alex Mihăilă, 422B b) RISC - inmultirea pe 32 de biti! CONCLUZII: 1. operatiile de prelucrare de date se realizeaza cu circuite dedicate, combinationale de regula; 2. operatiile se realizeaza cablat, exista premise ca aceste operatii de prelucrari de date, chiar cele complexe, sa se realizeze intr-o stare; 3. UC simplificata, astfel nu e nevoie de un automat complicat care sa genereze succesiunile de stari. Acest aspect face diferenta majora dintre un RISC si CISC! obs: UC= unitate de control, neprogramata...e cablata! Pe scurt: -avantajul major: doar o stare la RISC, n stari la CISC! fiecare operatie pe RISC reprezinta un circuit separat !!!! la CISC se folosesc aceleasi blocuri, aceeasi schema pentru indiferent ce operatie, dar depinde de complexitatea operatiei daca avem sau nu numar mare de stari! observatie: - totodata, la un RISC, circuitul trebuie optimizat pentru ca hazardurile sa fie sub o perioada de clock ! - unitatea de control fiind mai simpla → desfasurarea in timp este mai rapida ; definim CPI (clock per instruction = 1). In mod normal avem urmatoarele cazuri: a) la RISC: CPI=1; cu exceptii CPI>1 (date de salturi); b) la CISC: CPI>1 si variabil; c) la unele procesoare, superscalare: CPItimpul de raspuns e un criteriu de performanta! nu avem de a face cu stiva, salvare in ea etc; este preprogramat! (sa controleze transferuri pe magistrala de date pentru un acces direct intre porturi si memorie) – cel mai rapid transfer posibil pe magistrala de date! 66 Alex Mihăilă, 422B b) Intreruperi nemascabile: * este formulata pe un terminal specializat (“NMI”); * nu poate fi invalidata de catre utilizator(=nemascabila); * ca prioritate, urmeaza dupa cererea de acces direct la memorie(DMA); * asteapta terminarea instructiunii curente; * urmeaza algoritmul general de raspuns la o cerere de întrerupere; * rutina de deservire a întreruperii are o adresa prestabilita. c) Intreruperi mascabile: * este formulata pe un terminal specializat (“ INT ”); * poate fi invalidata de catre utilizator (fanion / fanioane de validare a întreruperilor); * ca prioritate, urmeaza dupa întreruperile nemascabile; * asteapta terminarea instructiunii curente; * urmeaza algoritmul general de raspuns la o cerere de întrerupere; * rutina de deservire a întreruperii are o adresa care depinde de “modul de raspuns” prestabilit: “modul 0” – perifericul stabileste adresa dar si instructiunea de apel a rutinei de deservire a întreruperii; practic perifericul stie tot! “modul 1” – adresa rutinei de deservire a întreruperii este prestabilita; adica perifericul nu stie ce-i intreruperea etc. si ii trimitem noi o procedura; “modul 2” – întreruperi vectorizate (combinatie intre modul 0 si 1). Nu toate microprocesoarele detin modulele de mai sus ( z80 e un exemplu care le detine pe toate). Intreruperi vectorizate: adresa completa a unei rutine de deservire a intreruperii; Algoritmul de vectorizare: adresarea indirecta cu memoria (independenta pozitionarii datelor in program si protectie! ) , folosind o tabela cu vectori de intrerupere ! -un procesor are, de regula, mai multe proceduri de raspuns, si , deci, mai multi vectori de intrerupere pregatiti (vectorul il alegem noi!); -vectorii sunt organizati intr-o tabela, unul dupa altul intr-o zona predefinita; aceasta tabela reprezinta legatura dintre codul intreruperii si procedura definita pentru a servi intreruperea asociata cu acel cod; -perifericul trimite prin intermediul portului cererea de intrerupere si un cod (un numar de biti); -microprocesorul calculeaza pornind de la acest cod adresa vectorului (adresa adresei procedurii de raspuns corespunzatoare); -citeste vectorul si transfera controlul la procedura de raspuns (salt la prima instructiune din procedura); - localizarea tabelei in harta memoriei; avem doua categorii de microprocesoare din punct de vedere al pozitiei in tabela cu vectori de intrerupere : 67 Alex Mihăilă, 422B microprocesoare care spun unde se afla tabela; microprocesoare ce pot sa foloseasca anumite zone. I. Dimensiunea vectorului de intrerupere (numarul de octeti al adresei complete) : m bytes: Cand memoria este organizata: - liniar, daca memoria total adresabila [octeti] are 𝟐𝑵 octeti, o adresa completa are atunci N biti = m bytes (cu transformarile de rigoare) ! - segmentata, adresa completa = dimensiunea reg. segment (AS) + dimensiunea offset(AE) => m bytes (4 octeti de fel, daca nu se specifica altfel in cerinta ) ! II. Codul „tip” [biti], numarul vectorilor de intrerupere: Daca „tip” are n biti, atunci avem 𝟐𝒏 vectori de intrerupere [octeti], deci 𝟐𝒏 rutine potentiale de deservire a intreruperilor. III. Marimea tabelei de vectori este: m*2^n [octeti] *unde m = dimensiunea vectorului de intrerupere [octeti] 2^n = numarul vectorilor de intrerupere [octeti] *cu proprietatea ca : memoria total adresabila [octeti] >= m*2^n [octeti] EXEMPLU: Fie o masina CISC (z80), microprocesor pe 8 biti, organizarea liniara a memorie, cu o adresa pe 16 biti (o adresa completa are 2 octeti), memoria formatata pe octeti; acest microprocesor poate raspunde la cererile de intrerupere mascabile, vectorizate, iar codul „tip” primit de la periferic trebuie sa aiba 7 biti (128 de proceduri-->128 de vectori) ; exista un fanion de validare a intreruperilor si exista un registru atribut de arhitectura, I, pe 8 biti, care ne permite localizarea tabelei cu vectori de intrerupere. 68 Alex Mihăilă, 422B cu vector_de_întrerupere = ((I) ↑ tip ↑ 0 + 1) ↑ ((I) ↑ tip ↑ 0) -vectorul de intrerupere are 2 octeti = m; -„tip” are 7 biti; -tabelul cu vectori de intrerupere : 2*2^7 bytes – 256 de bytes; -iar localizarea tabelei este la alegerea utilizatorului. *Concatenam cu 0 la dreapta( sau deplasam o pozitie la stanga): inmultim cu 2! (de ce? obligatoriu pe adrese pare, intrarea in tabela e din 2 in 2! intrarile in tabele sunt obligatoriu pe adrese pare!==> avand vectori pe 2 octeti, adresele vectorilor nu pot fi decat pare! Tipuri de intreruperi la microprocesoarele Intel x86 in modul real - vectorul de intrerupere are 4 octeti (2 octeti IP, 2 octeti CS) = m ; - INTEL are „tip” 8 biti; - tabela are un 1 kB; - localizarea tabelei este prestabilita; Intel impune ca aceasta tabela sa inceapa de la pozitia „0”; octetul se inmulteste cu 4! (intrarile in tabela din 4 in 4, iar apoi partea mai semnificativa se completeaza cu zerouri, adresele fizice pe 20 de biti). O caracteristica interesanta din partea Intel este: intreruperea software. Observatii: *intreruperea - ceva asincron cu programul, de natura hardware (nu depinde de noi!) *intreruperea software (depinde de noi; daca o vrem, apare) - o instructiune din microprocesor, din setul de instructiuni; dar de ce o numeste intrerupere? deoarece este identica cu succesiunea de actiuni ce o face procesorul cand primeste o intrerupere propriu-zisa, de natura hardware (foloseste aceeasi tabela cu vectori de intrerupere ) ! 69 Alex Mihăilă, 422B *unde [tip]- un numar ce poate fi dat in zecimal, intre 0 si 255 ; numarul venind de pe magistrala de date! - al doilea rand==>salveaza in stiva registrul de fanioane; - fanionul IF si TF, amandoua sunt invalidate, ca sa nu ne intrerupa alt periferic; - al 6-lea rand==>se salveaza in stiva adresa segment curenta, ca sa stiu unde sa ne intoacem, si se incarca jumatate din vectorul de intrerupere (jumatatea ce presupune adresa segment a procedurii de raspuns); - daca acest numar(„tip”) exista se incarca jumatatea superioara a vectorului de intrerupere sau, altfel, se incarca automat adresa segment cu procedura de raspuns ; - se salveaza in stiva adresa efectiva curenta si apoi se incarca adresa efectiva din vectorul de intrerupere (jumatatea inferiora ramasa), calculata sau implicita daca acest numar nu exista in formatul instructiunii! Avem formula adresei unui vector de intrerupere : 4*tip ÷ 4*tip+3 ! obs: INT corespunde vectorului de tip 3! deci, conform formulei avem 0Ch ÷ 0Fh (se observa ca-s chiar limitele unui interval in descrierea formala! ) In probleme, fie un tip = 16 : INT 16 ==> randurile 7,9,10,13,15,16 dispar, nu au rostul a fi scrise din moment ce „tip” exista! in caz contrar, daca „tip” nu exista ==> radurile 7,8,9,13,14,15 dispar! *Alte intreruperi software : *INTO (interact if overflow) : dedicata situatiei cand tin seama de depasirea unei operatii aritmetice. aceasta intrerupere corespunde vetorului de tip 4! deci, conform formulei avem 10h ÷ 13h 70 Alex Mihăilă, 422B *IRET (return after interact) : intoarcearea din procedura de raspuns. De asemenea, de observat la instructiunea de impartire ca avem o intrerupere software la mijloc!!! DIV CX (impartire la „0”): vectorul de tip 0! 71 Alex Mihăilă, 422B Avem 5 intreruperi software rezervate ! Primul kb il lasam neocupat fiindca vom avea tabela de vectori ! Dimensiunea temporala a arhitecturii de microprocesor de uz general Vom aborda urmatoarele aspecte: 1. Desfasurarea in timp in cazul unui procesor CISC clasic (fundamentele CISC); 2. Imbunatatirile aduse pentru microprocesoarele CISC de generatia a 3-a; 3. Modul in care executia PIPELINE poate fi intarziata din motive obiective (situatiile cand CPI>1, de ce?) – la RISC. *1. Un nucleu CISC: desfasurarea in timp depinde de complexitatea instructiunii ; isi imparte executia in cicluri masina (M1,M2... – un grup de actiuni elementare ce rezolva ceva, precum FETCH) si stari (T1, T2...). Numar mic de cicluri masina, combinate in diverse feluri putem realiza diverse instructiuni. exemple de cicluri masina: -FETCH („M1”) - inseamna ca ciclul masina M1, va fi ciclul masina de FETCH ! -decodifica; -prelucrare de date; -citeste din memorie; -scrie in memorie; etc. Fie o masina CISC, cu urmatoarele caracteristici: magistrala de date interna si externa pe 8 biti; organizarea liniara a memoriei; adresa fizica pe 16 biti; memorie organizata pe octeti; registre generale pe 8 biti concatenabile cate doua (R1...R6); un acumulator pe 8 biti A; registru de fanione F pe 8 biti ; un numarator de program PC; un indicator de stiva SP; un registru index, IX; un registru de instructiuni , RI, pe 8 biti; un registru de date RD, RA si niste registre temporare (ATEMP, TEMP, AUX1, AUX2). 72 Alex Mihăilă, 422B - ATEMP, TEMP: se ocupa cu sincronizarea operatiilor aritmetice si logice din UAL; - AUX1, AUX2 : ele sunt registre ascunse, registre cache ! Pentru fiecare exemplu prezentat, vom avea in vedere urmatoarele aspecte: 1. Ce moduri de adresare sunt folosite in instructiunea propusa? 2. Care este formatul instructiunii propuse, cati octeti? 3. Propunerea desfasurarii in timp! I. exemplu: un simplu transfer intre registre, in interiorul microprocesorului: la T1: se acceseaza codul instructiunii curente din memoria de program; se emite un impuls MREAD (memoria e avertizata ca urmeaza a fi citita); multe microprocesoare isi fac cunoscuta starea (rand 2) , folosit pentru sincronizare cu restul dispozitivelor (apare obligatoriu in prima stare, a primului ciclu masina, se inscrie in RD pe magistrala de date interna); la T2: numaratorul de program (PC) este actualizat si urmeaza sa indice urmatorul octet; se aduce codul instructiunii din memoria de program in microprocesor (discutate in 2.1); la T3: tipic ciclului masina de FETCH, codul este adus in RI, un registru care primeste codul si atat (nu-l vedem, nu-i atribut de arhitectura) ; 73 Alex Mihăilă, 422B la T4: urmeaza decodificarea ; microprocesorul acum stie ce are de facut ; copiem din R3 in TEMP ; registrele interne din microprocesor sunt realizate fizic ca o mica memorie RAM; la T5: folosim un registru tampon ; de ce TEMP? – trebuie sa defineasca 2 conditii :sa nu fie atribut de arhitectura; trebuie sa am acces de pe magistrala interna de date (se observa pe desenul de sus ca TEMP e legat de magistrala!). *Avand in vedere schemele bloc functionale din capitolul 2 cu precizarile facute in acest capitol si principiile masinii Von Neumann, desfasurarea in timp urmareste minimizarea timpului de executie ,in conditile date! Conditiila date inseamna principiile masinii Von NEUMANN, schemele bloc functionale stabilite si precizarile atributelor de arhitectura si de structura prezentate. O masura importanta ca sa atingem scopul respectiv: de a incerca sa indeplinim mai multe actiuni elementare intr-o stare ! Principii: -putem avea mai multe actiuni elementare intr-o singura stare daca nu mai mult de o actiune elementara foloseste magistrala interna de date; -intr-o singura stare pot fi efectuate succesiv mai multe actiuni elementare daca este evident ca niciuna dintre ele nu va dura cat o perioada de TACT. Conventie: Daca am 2 astfel de formule pe acelasi rand: actiuni elementare simultane. (precum T2) Daca am 2 astfel de formule una dupa alta: actiuni elementare succesive. (precum T1) obs: O actiune elementara = un set de comenzi trimise de la UC (unitatea de control) spre diverse blocuri ; semnale de validare / selectie trimise diverselor componente ale procesorului. Fiecare formula din exemplu reprezinta o actiune elementara! Pentru astfel de actiuni, stabilim niste reguli : a) actiunile succesive : trebuie sa dureze suficient de putin pentru a se incadra intr-o perioada de TACT (actiunile combinationale-decodificarea , actiuni elementare in interiorul microprocesoruui) b) actiunile simultane: putem avea una sau mai multe actiuni elementare succesive daca cel mult una din repesctivele actiuni elementare afecteaza magistrala interna de date Ce trebuie avut in vedere! 1. adresare implicita in registru, si pentru sursa si destinatie; o copiere simpla! 2. 1 octet (datorita PC-ului). 74 Alex Mihăilă, 422B II. in cadrul unui alt exemplu: avem o adunare in interiorul microprocesorului, pe 8 biti ; utilizarea acumulatorului este obligatorie (cand declaram ca avem un acumulator dedicat - automat instructiunea va arata cum se prezinta mai jos): la M1: T1, T2, T3 si o parte din T4 se observa ca sunt identice , deoarece orice instructiune incepe cu FETCH SI DECODE (principiu VON NEUMANN), se intampla la toate instructiunile, toate incep asa!!! (ca o sintaxa) la T4: dupa decodificare facem 2 actiuni simultan acum, nu una! pentru adunare trebuie sa avem operanzii in TEMP si ATEMP! TEMP afecteaza magistrala interna de date, ATEMP nu! (uita-te pe desen!) la M2: in mod paradoxal se declanseaza un nou ciclu masina care lasa starea T1 nefolosita! astfel: - avem de fapt 4 stari, economisim o stare din 5; (executia PIPELINE) - cele 2 instructiuni pot fi suprapuse partial; - orice stare in cerc acceseaza magistrala interna de date ( o ocupa); nu exista 2 pe aceeasi verticala! - executia lui n+1 se realizeaza dupa 4 stari! De remarcat ca suprapunerea nu este uniforma, pentru ca instructiunea nu se desfasoara uniform! ==> SUPRAPUNERE PARTIALA SI NEUNIFORMA. Ce trebuie avut in vedere! 1. adresare implicita in registru, si pentru sursa si destinatie; o copiere simpla! 2. 1 octet (datorita PC-ului); 75 Alex Mihăilă, 422B III. in cadrul unui alt exemplu: tot o adunare, doar ca de aceasta data iesim din microprocesor; al 2-lea operand este in memoria de date la adresa aflata in perechea R5, R6; ce vedem este o adresare indirecta, parantezele sunt un pointer : la M1: T1, T2, T3 sunt la fel din nou! la T4: decodificam si ATEMP primeste valoarea acumulatorului (pregatim primul operand in ATEMP!); la M2: la T1: citesc din memoria de date; furnizam adresa operandului si-l accesam; la T2: il aduc din memoria de date in microprocesor; la T3: il pregatesc pentru adunare. la M3: prelucrarea datelor! Observatii: - complexitatea e mai mare (mai multe stari), deci timp mai mare; - putem face si aici o suprapunere, dar castigul de timp este mai mic (aici economisim o stare din 8 !). Ce trebuie avut in vedere! 1. adresare indirecta prin registru 2. 1 octet (datorita PC-ului). 76 Alex Mihăilă, 422B IV. in cadrul unui alt exemplu: o instructiune complexa, cu 4 cicluri masina si 13 stari! operatia de transfer din memorie! la M1: un FETCH pur, ca-n cazurile anterioare T1, T2, T3 la fel ca exemplele anterioare, iar la T4 doar decodifica; la M2: citim din memoria de program primul octet; la M3: citim din memoria de program al doilea octet; *ambii operanzi ii ducem in niste acumulatoare! citim din memoria de program in M2, M3. la M4: asamblam octetii sa formeze o adresa, accesam memoria de date! *Actiuni elementare, formal identice, cu semnificatii diferite: -T2 din M1 :aduc codul; -T2 din M2, M3 :aduc o adresa; -T2 din M4 : aduc un operand. Ce trebuie avut in vedere! 1. adresare directa/absoluta a sursei si implicita a destinatiei; 2. 3 octeti (o data avem octetul de cod si obtinem apoi 2 octeti de adresa, operanzii, pentru a citi formatul complet al instructiunii) 77 Alex Mihăilă, 422B V. in cadrul unui alt exemplu: un salt neconditionat cu adresare directa, unde ne asteptam sa folosim o instructiune cu 3 octeti M1 (FETCH pur), M2, M3(FETCH din memorie) la fel ca-n exemplul anterior! M4 – inscrierea acestei adrese in RA inseamna de fapt saltul, accesam memoria de program, nu de date! adresa din AUX1, AUX2 (registre tampon) folosite sa aducem adresa operandului ! PC actualizat ulterior! *M4 poate fi suprapus cu o instructiune urmatoare pentru ca saltul inseamna inceputul unei noi instructiuni si se pot suprapune. Ce trebuie avut in vedere! 1. salt cu adresare directa 2. 3 octeti (un octet de cod si 2 octeti de adresa). 78 Alex Mihăilă, 422B VI. Cand ai ca destinatie o locatie de memorie! destinatia: adresare indirecta prin registru sursa: adresare implicita prin registru Concluzii, caracteristice desfasurarii in timp pentru un procesor CISC clasic: 1) desfasurarea in timp se bazeaza pe principiile VON NEUMANN, pe scheme bloc prestabilite si cu precizarea absplut necesara a unor anumite atribute de arhitectura si de structura; 2) urmareste o minimizarea a timpului de executie, in conditiile date; 3) caracteristica generala a desfasurarii in timp este neuniformitatea (numarul de stari variaza in functie de complexitate instructiunii); 4) pentru minimizarea timpului s-a incercat suprapunerea a unor actiuni elementare, dar si suprapunerea unor actiuni dintr-o secventa; 5) suprapunerea instructiunilor este posibila datorita unui numar mic de stari, identic, la inceputul fiecarei instructiuni incat pana la urma avem o suprapunere neuniforma si nesistematica. 79 Alex Mihăilă, 422B CRESTEREA VITEZEI DE EXECUTIE PENTRU CISC EVOLUATE Incepand cu generatia a 3-a de procesoare CISC pana in zilele noastre s-au adus atribute de arhitectura in plus. (de asemenea are in vedere schema bloc functionala din subcapitolul 3.1- vezi slide). In respectivul capitol avem in vedere 2 caracteristici fundamentale: a) 2 sau mai multe unitati cu functii distincte (putem lucra in paralele, deci poate viteza va creste, dubla etc. : UE (prelucreaza operanzi dar nu interfateaza cu restul), UIM ; b) existenta conceptului de „coada de instructiuni” : UIM ( rolul de a aduce din memorie instructiunea, poate aduce chiar mai multe fiindca are o „coada de instructiuni” la dispozitie, care trebuie sa fie mereu plina-->procesorul nu mai asteapta, viteza poate creste!) ; timpul nu scade din cauza neuniformitatii instructiunii! Fie un procesor CISC clasic conform capitolului 2. Are de efectuat o secventa de instructiuni care constau in cicluri masina ca mai jos. Alegerea este intamplatoare. Succesiunea de instructiuni din punct de vedere al ciclurilor masina este intamplatoare. Sa vedem ce fac UE, UIM si BUS(magistrala): 80 Alex Mihăilă, 422B *faza de prelucrare (in UE) - UIM in acelasi timp aduce urmatoarea instructiune si inca una cat timp UE inca prelucreaza – alta faza de prelucrare facute de UE - UIM nu poate face FETCH, deoarece in momentul in care instructiunea 1 s-a terminat, trebuie sa se scrie rezultatul in memorie, apoi ia instructiunea urmatoarea , se termina faza de prelucrare 2, apoi avem nevoie de ceva din memorie (citire) , se aduce apoi alta instructiune, alta faza de prelucrare etc. Comentariu mai detaliat: 1. in timp ce instructiunea 1 realizeaza o prelucrare, UIM are timp sa aduca, succesiv, codurile a doua noi instructiuni (se formeaza astfel coada de instructiuni); 2.ciclul masina de prelucrare aferent celei de-a doua instructiuni poate incepe dupa ce doul instructiunii corespunzatoare a fost adus in UIM si „recunoscut” in UCP; 3.in timp ce UE rezolva prelucrarea aferenta instructiunii 2, UIM isi poate permite sa intrerupa aducerea codurilor de instructiuni si sa se ocupe de inscrierea in memorie a rezultatului obtinut in ciclul masina de prelucrare inclus in instructiunea 1 care in acest fel este terminata; 4.UIM continua cu ciclul de FETCH pentru instructiunea 4 si apoi citeste din memorie operandul necesar instructiunii 3. UE poate incepe imediat dupa acesta ciclul de prelucrare aferent instructiunii 3; 5.in acest timp, UIM poate aduce din memorie codul instructiunii 5 si poate continua cu un eventual ciclu masina de conversatie cu memoria aferent instructiunii 4. Concluzii: a) CISC, incepand cu generatia a 3-a, au noi atribute de arhitectura care permit cresterea vitezei de executie in timp; b) cresterea vitezei de executie nu este direct proportionala cu numarul de unitati care lucreaza in paralel, din cauza neuniformitatii instructiunii (fiind CISC); viteza nu e dubla! ; desfasurarea in timp permite suprapunerea sistematica dar tot neuniforma a instructiunilor dintr-o secventa; c) prin acest tip de functionare se atinge limita ocuparii magistralei de date a microcalculatorului. 81 Alex Mihăilă, 422B DESFASURAREA IN TIMP LA PROCESOARELE RISC Desfasurarea in timp la RISC are urmatoarele premise: instructiunile sunt uniforme in timp, toate dureaza acelasi numar de stari; acest lucru este posibil deoarece: prelucrarea operanzilor este realizata cablat; exista multe registre interne ceea ce permite accesarea memoriei in mult mai putine ocazii; avem putine instructiuni, codificarea este simpla si rapida; avem putine moduri de adresare, ea este simpla si rapida; format identic ca numar de octeti pentru toate instructiunile si putine tipuri de format; Acestea duc la simplificarea unitatii de control care este cablata si nu microprogramata. Toate aceste premise permit desfasurarea uniforma si rapida. Uniformitatea permite aplicarea PIPELINE. Desfasurare PIPELINE, fie cu 5 etaje, N=5 (pot fi si 7, 9 etc. stari), care inseamna ca orice instructiune dureaza 5 stari! Semnificatia fiecareia e diferita, depind de tipul instructiunii! Exemplu: fie o instructiune RISC cu 5 stari. N=5 S1: FETCH S2: DECODE S3, S4, S5: depind de tipul de instructiuni, de 2 feluri: - pentru instructiuni de prelucrari de date; S3- citeste operand; S4- prelucrarea; S5- scrie rezultat. - pentru instructiuni de accesare a memoriei de date si/sau de program (LOAD, STORE si salturi); S3, S4, S5: accesarea memoriei. 82 Alex Mihăilă, 422B n, n+1,n+2...timpul s1,s2,s3... starile, 5 in numar k-4,k-3...rezultatul *in fiecare moment de timp avem cate un rezultat; fiecare instructiune dureaza o stare! (CPI=1 – doar la RISC) OBSERVATIE: salturile sunt o problema! Fie o succesiune de instructiuni oarecare, RISC: 83 Alex Mihăilă, 422B La n+4 avem rezultatul saltului ! La n+5 se executa instructiunea asupra careia se efectueaza saltul ! Ideea : acest mod de desfasurare PIPELINE este corect, DAR rezultatul este gresit! (restul instructiunilor in starea n+5 sunt rezultate gresite!) *Corectarea: Dupa salt se introduc niste instructiuni : NOP (no operation) – instructiune care nu modifica atributele de arhitectura ==>nu se intampla nimic, n-avem rezultate, iar programul nu se strica! Timp de 4 stari, se poate observa in imaginea urmatoare, ca procesorul sta degeaba: 84 Alex Mihăilă, 422B Primul rezultat apare in n+9! Starile n+5, n+6, n+7, n+8 reprezinta intarzieri (CPI >1). MEREU, cand ajungem cu orice tip de salt la starea de rezultat(ultima coloana), completam in stanga randul doar cu NOP-uri (vezi n+4) ! E logic intrucat noi nu am executat inca saltul ca sa poate prelua deja instructiunea la care sare! 85 Alex Mihăilă, 422B Optimizarea întârzierilor pentru a preveni execuţia incorectă a salturilor Reprezinta optimizarea de la 4 stari la 3 stari! *primul rand: se aduna continutul lui r1 la continutul lui r2 si rezultatul se depune in r3; *al doilea rand: se face un sir logic intre continutul lui r5 si continutul lui r6 si rezultatul se depune in r0; Numarul de NOP-uri care trebuie adaugat depinde de structura benzii rulante! 86 Alex Mihăilă, 422B Intarzieri din cauza accesului in memorie Varianta incomoda: LOAD r1, mem ADD r3, r2, r1 - continutul lui r1 nu e cel corect! Varianta comoda: 87 Alex Mihăilă, 422B LOAD r1, mem NOP NOP... NOP ADD r3, r2, r1 La n+4 am adaugat 2 NOP-uri ca sa citim la timp operandul rezultat (r1), folosit de urmatoarea instructiune ADD! Numarul de instructiuni NOP depinde de: a) structura benzii rulante; b) numarul de stari necesare accesarii memoriei; Intarzieri din cauza dependentei datelor de utilizarea registrelor ADD r1, r2, r7 AND r6, r1, r3 Varianta incomoda: Varianta comoda: ADD r1, r2, r7 NOP NOP AND r6, r1, r3 88 Alex Mihăilă, 422B Concluzii: 1) procesoarele RISC au drept caracteristica principala desfasurarea in timp uniforma a tuturor instructiunilor; 2) in aceste conditii, se poate asigura o executie de tip PIPELINE, cu n etaje, care sa permita CPI=1; 3) exista instructiuni pentru care este necesara introducerea intarzierilor: CPI>1 in acest conditii; 4) global vorbind, avem o suprapunere sistematica si uniforma a tuturor instructiunilor Astfel, privind din ansamblu: -o masina CISC clasica: suprapunere nesistematica si neuniforma a instructiunilor intr-o secventa; -CISC cu generatia 3 incolo: sistematica dar tot neuniforma; -RISC: sistematica si uniforma. Sfârșitul! (c-un numar nelimitat de linii rosii) 89 Alex Mihăilă, 422B Tin sa multumesc colegei mele de serie, Georgiana Ranghiuc, fara de care multe informatii din acest fisier n-ar fi fost prezente. Nebunul ce a batut-o la cap: (culoarea mea naturala a pielii dupa ce am terminat de scris acest almanah ingineresc!) Succes si v