Sunteți pe pagina 1din 40

1)Arhitecturi cu Executie Directa Capabile sa execute direct programe in limbaje de nivel inaltAvantaje:gradul ridicat de interactiune cu programatorul absenta timpului

de compilare reprezentarea programului cu un singur fisier (doar codul sursa, fara fisier obiect sau executabil). Dezavantaje:dificultatile de depanare numarul erorilor sintactice detectate la executie este mic este necesara verificarea sintactica a tuturor programelor, chiar si a celor corecte masina nu poate executa decat programe scrise in limbajul propriu . Nu exista exemple de microprocesoare din aceasta categorie 2)Arhitecturi Reduse *Orientate catre imbunatatirea performantelor la rularea programelor de nivel inalt.*Implementarea directa in hardware a unui mic numar de instructiuni simple, a caror executie este optimizata.*Principalele dificultati sunt solutionate la nivelul compilatorului.*Procesoare cu set redus de instructiuni (RISC-Reduced Instruction Set Computers) 3)Arhitecturi Orientate catre Limbaj *Trasatura distinctiva: utilizarea unor moduri speciale de adresare instructiuni speciale facilitand implementarea unor operatii specifice limbajelor de nivel inalt, cum este accesul la structuri complexe de date. *Rezultatul: simplificarea procesului de compilare.*Avantaj: posibilitatea de implementare directa in hardware a unor functii specifice limbajelor de nivel inalt. Complexitatea crescanda a procesorului poate indeparta rezultatul proiectarii de situatia optima, reducerea vitezei de executie a instructiunilor simple. 4)Arhitecturi Corelate cu Limbajul *Realizeaza o corespondenta biunivoca intre limbajul de nivel inalt si codul masina. *Compilatorul unui astfel de calculator devine similar cu un asamblor. *Diferenta intre tipurile A (translatare software) si B (translatare hardware):mai mare viteza de translatare pentru varianta Bmai redusa complexitatea hardware pentru varianta A 5)Arhitectura si Eficienta de Executie *Caracteristicile arhitecturale cu cele mai puternice influente asupra eficientei de executie a programelor scrise in limbaje de nivel inalt:*tipurile de datemodurile de adresare setul de instructiuni 6)Alocarea Memoriei in Limbaje de Nivel Inalt *Spatiul de memorie ocupat de un program este divizat in doua sectiuni principale: o sectiune read-only contine codul si constantele o sectiune read-write stocheaza toate variabilele declarate si auxiliare utilizate de catre program*Zona de date poate fi subdivizata in:zona pentru stiva (stack), zona pentru variabilele declarate zona cu acces aleatoriu (heap - gramada neorganizata), folosita pentru variabilele create dinamic *Programarea recursiva impune ca fiecarei apelari de proceduri sa i se ofere propria copie de parametri si variabile definite in cadrul procedurii. *In felul acesta, apelarea procedurii rezulta in alocarea unei noi regiuni de memorie, numita cadru (frame), care contine variabilele locale ale lui A, parametrii sai, adresa de revenire si orice alta informatie necesara adresarii variabilelor exterioare lui A, dar vizibile din procedura A. *Celelalte variabile - definite in programul principal. 7)Tipuri de Date *Manipularea datelor - scopul principal al unui program*Toate limbajele de nivel inalt ofera metode flexibile de definire a structurilor complexe de date* In majoritatea cazurilor, programul este in buna masura definit de indata ce s-au proiectat structurile de date ce urmeaza a fi manipulate.*Principial, toate microprocesoarele sunt capabile a manipula cu rezonabila eficienta structurile de date definite in limbajele de nivel inalt, dar prapastia semantica despre care s-a vorbit mai inainte conduce la mari deosebiri intre solutiile practice adoptate. *Un microprocesor ofera suport pentru un anumit tip de date doar daca este capabil a manipula operanzi apartinind acelui tip.*Pentru asigurarea suportului pentru tipuri de date diverse doua caracteristici ale microprocesorului sunt de regula intrebuintate:a)instructiuni care executa operatii asupra datelor reprezentate conform formatului asociat tipului considerat;b)moduri de adresare care permit accesul simplu la operanzi de tipul considerat 8)Lungimea Cuvantului*Dimensiunea cuvantului de date - unul dintre factorii majori care influenteaza performantele calitatile functionale ale unui microprocesor. *Importanta acestor parametri este demonstrata de faptul ca un criteriu tipic de clasificare a microprocesoarelor se bazeaza pe lungimea cuvantului. Se vorbeste de microprocesor de 8 biti, 16 biti, 32 biti, 64 biti, numerele 8, 16, 32, 64 referindu-se la lungimea cuvantului de date manipulat.*Doua posibile definitii sunt:lungimea cuvantului este data de numarul maxim de biti care pot fi transferati intre CPU si memorie intr-un singur ciclu lungimea cuvantului este determinata de dimensiunea

maxima a operandului care poate fi manipulat de catre unitatea aritmetica-logica (ALU) a CPU*Prima definitie se refera la traseul extern al datelor*A doua se refera la traseul intern *Adesea, lungimea cuvantului indica, intr-o anumita masura, performanta. *Este mai potrivit a se discuta despre doua dimensiuni de cuvant de date: a celui intern (influenteaza viteza de prelucrare a operanzilor instructiunii)a celui extern (influenteaza timpul global de acces la memorie pentru extragerea instructiunilor si vehicularea operanzilor) *Cresterea dimensiunii operandului nu este singura consecinta a disponibilitatii unei dimensiuni mai mari a cuvantului. Posibilitatea de a manipula seturi mai mari de biti conduce, de obicei, la introducerea de noi tipuri de instructiuni. * Microprocesoarele cu dimensiuni mai mari de cuvant nu sunt numai mai rapide decit cele cu cuvinte de dimensiuni mai mici, dar ele tind sa posede un mai bogat repertoriu de tipuri de date, sprijinite cu seturi de instructiuni si moduri de adresare adecvate. 9)Organizarea Memoriei *Toate microprocesoarele au un subsistem al memoriei organizat ca o matrice liniara de elemente de baza de memorare, fiecare din ele asociat cu o anumita adresa. *Dimensiunea elementului de baza de memorare este rezultatul compromisului intre doua cerinte disjuncte:a)reprezentarea compacta a datelor b)acces eficient la datele stocate in memorie *Adresarea bitilor* Necesitatea unei reprezentari compacte a datelor conduce la selectarea unei dimensiuni mici a elementului de baza de memorare. *Situatia extrema: *Bitul - cea mai mica unitate adresabila a memoriei. => Penalizari asupra performantei si costului (necesitatea ca bitii sa ajunga la unitatea centrala pe linii fizice diferite)*Alternativa:emularea adresarii la nivel de bit pe o masina care utilizeaza elemente de baza de memorare de dimensiuni mai mari (mecanism de deplasare - mascare [barrel-shifter] care extrage campul necesar intr-un singur ciclu)*Dezavantajele adresarii la nivel de bit au determinat proiectantii de microprocesoare sa utilizeze elemente de baza de memorie de dimensiuni mai mari. 10)Masini cu Lungime Fixa a Cuvantului *Se accepta ca dimensiunea celei mai mici entitati de memorie adresabila sa fie cuvantul de 8 biti (octetul) *Toate adresele emise de catre CPU sunt adrese de octeti. *Pentru accesul la date cu dimensiunea mai mare de un octet, CPU emite adresa primului octet, insotita de semnale de comanda indicand dimensiunea datelor, dimensiune care poate merge pana la cea a cuvantului de date extern. *Pentru microprocesoarele uzuale, sunt accesibile intr-un singur ciclu de memorie: date de 64 biti: quad word (cuvant cvadruplu) date de 32 biti: long word (cuvant lung) date de 16 biti: word (cuvant) date de 8 biti: byte (octet) *Adresarea la nivel de octet si organizarea cu lungime fixa a cuvantului nu pot solutiona problema accesului la date ce traverseaza frontiera unui cuvant. *Necesitatea alinierii in vederea minimizarii timpului de acces la datele din memorie 11)Biti si Campuri de Biti *Bitul - cea mai naturala reprezentare interna a variabilelor booleene, but is it practical?*Camp de biti (bit field) - sir contiguu de biti in memorie, fara a exista vreo interpretare speciala asociata continutului sirului n*Masinile care ofera suport pentru acest tip de date dispun de instructiuni: pentru copierea unui camp de biti intr-o locatie de memorie sau intrun registru de aliniere a campului la una din frontierele locatiei in care acesta se afla de extindere, atunci cand este cazul, a semnului valorii asociate campului de biti. *Pentru a defini un camp de biti sunt necesare trei informatii:a)A - adresa octetului;b)P - offsetul bitului (primul al campului);c)S - lungimea campului 12)Caractere *Cele mai importante tipuri de date manipulate de programe sunt texte si numere.*Codul ASCII (American Standard Code for Communication Interchange)*Sirul de caractere (string), echivalent cu un vector de octeti *Lungimea sirului poate fi fixa sau variabila *Cand este variabila se impune utilizarea unui caracter special pentru a indica terminarea sirului sau asocierea cu un contor indicand numarul de caractere al sirului.*Dimensiunea sirurilor nu permite pastrarea lor in registrele unitatii centrale de prelucrare => manipulate in memorie. 13)Matrice *Microprocesoarele nu ofera instructiuni pentru manipularea datelor structurate in matrice (arrays), insa ele poseda moduri de adresare create special in scopul inlesnirii prelucrarii acestor structuri de date. *Alocarea din figura se poate generaliza. *Se considera o matrice cu n indici. *Adresa a a elementului matricei caracterizat de setul de indici d0,d1,...,dn-1 este data de a=b+s(suma[i=0,n-2](d_i)produs[x=i,n-2](m_x+1) + d_n-1 )*Unde *b - adresa primului octet din

zona de memorie alocata matricii.*s - dimensiunea in octeti a elementului matricii. *mi - numarul de valori posibile ale indicelui i (altfel spus : mi-1 este cea mai mare valoare pe care o poate lua indicele i).*Evaluarea adresei unui element se simplifica in masura considerabila cand se considera o matrice unidimensionala de elemente standard, caci numarul de inmultiri se reduce la una singura, iar unul din factori, dimensiunea in octeti a elementului, este o putere a lui 2 (0,1,2,3,). *In consecinta, evaluarea adresei de acces la un element se reduce la o deplasare si o adunare. Unele microprocesoare poseda moduri speciale de adresare care permit efectuarea operatiilor descrise mai sus. *La o prima examinare, evaluarea parantezei din expresia lui a este o operatie complicata, cel putin din punctul de vedere al programarii. Evaluarea se poate face in maniera recursiva : -k0=0 * -ki=ki-1 *** mi-1 + di-1, i=1,2 ..,n *Se poate observa ca valoarea lui ki reprezinta numarul de elemente precedente celui adresat. *Se mai observa ca valoarea maxima a indicelui di-1 este mi-1 1. *Cunoasterea valorilor ki-1,mi-1,di-1 necesare pasului i al iteratiei permite si testarea validitatii indicelui di-1.* => evaluarea lui ki presupune testarea lui di-1 si apoi evaluarea propriu-zisa, fapt folosit de unele microprocesoare pentru a implementa, intr-o singura instructiune , testarea incadrarii in gama corecta a indicelui si evaluarea lui ki. 14)Moduri de Adresare *Instrument principal pentru a reprezenta in memoria masinii imaginea datelor asa cum este aceasta vazuta de programatorul in limbaj de nivel inalt.*Permit construirea si utilizarea de structuri complexe, multidimensionale de date, in timp ce echipamentul poate trata doar matrice lineare cu elemente de dimensiune fixa. *Adunarea Toate modurile de adresare, cu exceptia celor mai simple, necesita adunarea a doua sau mai multe valori. Caz particular :incrementarea/decrementarea.*Adresarea indirecta Functie al carei argument, de regula rezultat al unor calcule, foloseste pentru a determina - prin adresarea memoriei - operandul la care se face referire.Modurile complexe de adresare pot folosi de mai multe ori functia de adresare indirecta pentru a obtine adresa finala a operandului.*Deplasarea Utilizata la executarea operatiei de indexare. -Indexarea produce offsetul unui element din matricea liniara, avand ca baza de plecare indicii elementului. 15)Registre *Situate in unitatea centrala de prelucrare (CPU)unitatea de aritmetica in virgula mobila (FPU)unitatea de gestiune a memoriei (MMU)*Principalele functii ale registrelor:registru operand (operand register): continutul registrului este insusi operandul la care se face referire registru adresa (address register): continutul registrului este adresa operandului la care se face referire registru baza (base register): registrul contine o adresa care, pentru obtinerea adresei complete a operandului, se va utiliza in conjunctie cu continutul unui alt registru sau al unui camp imediat al instructiunii. 16)Camp Imediat *= camp, adesea optional, al unei instructiuni, dedicat pastrarii unei informatii ce se va utiliza in determinarea adresei la care se afla operandul in discutie. *Utilizari ale campului imediat: operand imediat (immediate operand): continutul campului imediat este chiar operandul la care se face referire;adresa imediata (immediate address): continutul campului imediat constituie adresa operandului la care se face referire;offset/deplasament: campul imediat contine un intreg (cu semn pentru offset), care se utilizeaza in conjunctie cu continutul unui registru pentru a produce adresa operandului la care se face referire. 17)Notatii *g - numele sau numarul unui registru, accesibil programatorului in limbaj de asamblare ;*M[x] - functia de adresare indirecta, aplicata valorii x. Rezultatul ei este informatia memorata la adresa x in memoria principala ;*G[g] - valoarea stocata in registrul g*a.sh.b valoarea rezultata din deplasarea lui a la stanga cu b pozitii binare ;*d - valoarea deplasamentului, memorata intr-un camp al instructiunii. 18)Adresare Directa prin Registru *Cel mai simplu mod de adresare este cel care nu necesita aplicarea nici uneia din functiile de baza pentru a obtine valoarea operandului. In aceasta clasa singurul mod de adresare este cel direct prin registru * Caracterizare: - G[g] 19)Adresare Indirecta prin Registru *Caracterizare: M [G [g]]* Adresarea indirecta prin registru este folositoare pentru accesul la elementele structurilor complexe de date, altfel inaccesibile doar cu unicul mod de adresare permis de masina. Calculul adresei, disponibila - in final - in registrul in discutie , necesita o secventa de instructiuni al caror rezultat este adresa elementului solicitat.

20)Adresare Indirecta cu Autoincrementare/Autodecrementare *Baza modurilor de adresare implementate in oricare calculator.*Mod similar cu adresarea indirecta prin registru, intrucat registrul g, specificat explicit sau implicit in instructiune, contine adresa operandului.*In plus fata de modul precedent, continutul registrului este incrementat/decrementat cu o cantitate determinata de lungimea operandului la care se realizeaza accesul (1, 2, 4 sau 8).*Doua moduri de adresare : cu postincrementare si cu predecrementare.* postincrementare-caracterizare:M[G[g]]urmata de incrementarea cu N:G[g]:=G[g]+N*predecrementare-caracterizare:G[g]:=G[g]-N-urmata de adresa indirecta:M[G[g]] 21)Adresarea Directa *Adresa operandului este memorata ca un camp al instructiunii.*Dupa citirea codului instructiunii (realizata prin modul de adresare cu postincrementare) contorul programului indica urmatorul camp al instructiunii. *Adresarea indirecta cu postincrementare permite accesul la operand si actualizarea contorului programului. Intrucat microprocesoarele de 8 si 16 biti au lungimea cuvintului de adresa mai mare decat lungimea cuvintului de date, sunt necesare mai multe cicluri de acces la memorie pentru citirea adresei operandului.*Adresarea directa specifica adresa operandului ca parte componenta a instructiunii, care se stabileste in momentul compilarii si nu mai poate fi schimbata in timpul executiei programului. *Limbajele de nivel inalt care folosesc recursivitatea nu pot folosi adresarea directa ca urmare a dinamicii adreselor in procesul de recursivitate. *Cu exceptia variabilelor globale, celelalte variabile au adrese alocate in timpul rularii pentru programele recursive, adrese care nu se pot insera in codul instructiunii.*Utilizarea adreselor stocate in codul instructiunii este legata de operatiile de salt sau apeluri de subrutine , deci nu de specificarea de variabile propriu - zise. 22)Adresarea Indirecta Bazata si cu Deplasament*S-a denumit registru baza registrul al carui continut se aduna cu cel al unui obiect manipulat de catre modul de adresare, cu scopul determinarii adresei operandului. *Modul de adresare bazat si cu deplasament (base displacement indirect addressing) calculeaza adresa operandului prin insumarea continutului registrului baza specificat cu valoarea unui camp al instructiunii, numit deplasament *Caracterizare:M [ G[g] + d] * G[g]:=G[g]N * M[M[G[g]]] 23)Adresarea Dublu Indirecta Bazata si cu Deplasament *M[ G[g1] + G[g2].Sh.N] *Cele mai simple structuri cu care opereaza limbajele de nivel inalt sunt matricele liniare de scalari. *Scalarii se reprezinta prin campuri de memorie de 8, 16, 32 sau 64 biti. Calcularea deplasamentului unui element in cadrul matricei liniare se obtine prin deplasarea la stanga a numarului ce reprezinta indicele (indexul) unui element cu 0, 1, 2 sau, respectiv 3 pozitii binare, presupunand ca valoarea initiala a indicelui este 0. *Modul de adresare indirecta indexata bazata este folosit pentru accesul la un element al unei matrice unidimensionale de scalari, stocata intr-o zona de memorie a carei adresa de inceput este continuta in registrul baza. 24)Adresarea Indirecta Indexata cu Postincrementare *M[ G[g1] + G[g2].sh.N], * G[g1] := G[g1] + N*Se obtine din modul de adresare indirecta indexata bazata prin adaugarea unei operatii de incrementare a continutului unuia din cele doua registre, operatie efectuata dupa extragerea operandului. *Deci:continutul registrului g2 se deplaseaza la stanga cu 0, 1 sau 2 pozitii binare; rezultatul se aduna cu continutul registrului g1, obtinindu-se adresa operandului; in fine, continutul registrului g1 se incrementeaza cu valoarea N1, egala cu 1, 2, 4 sau, respectiv, 8 * G[g1]:=G[g1]-N * M[G[g1]+G[g2].sh.N] 25)Adresarea Indirecta Indexata Bazata si cu Deplasament *M [ G[g1] + d + G[g2]. sh.N ] *Adresarea indirecta indexata bazata si cu deplasament este o metoda mai buna de acces la elementele unei matrice unidimensionale de scalari, atat fata de metoda de adresare indirecta bazata cu deplasament, cat si fata de cea de adresare indirecta indexata bazata. *Daca g1 contine indicatorul cadrului local , indicele elementului matricei este continut de g2, iar d indica deplasamentul in interiorul cadrului al adresei de inceput a zonei de memorie ce contine elementele matricei, modul de adresare indirecta indexata bazata si cu deplasament permite accesul intr-o singura instructiune al oricarui element al matricei locale unidimensionale de scalari. 26)Adresarea Indirecta Indexata Indirect cu Postincrementare *M [ G[g1] + G[g2].sh.N1 ]*G [g1] : = G [g1] + N*Se folosesc doua registre : registrul baza g1 si registrul index g2. *Continutul

lui g1 permite adresarea si citirea continutului unei locatii de memorie. *Acest continut se aduna la rezultatul deplasarii spre stanga cu N2 pozitii binare a continutului registrului g2 ( N2 = 0,1 sau 2).*In felul acesta se obtine adresa operandului. *In final , continutul registrului g1 este incrementat cu N1 unitati ; valoarea lui N1 depinde de dimensiunea adresei. Evident , nu exista legatura intre N1 si N2. 27)Adresarea Indirecta cu Deplasament Indirect Bazata si cu Deplasament*M [ M [G[g] + d1 ] + d2 ]*Permite accesul intr-o singura instructiune la scalari nelocali. Indicatorul cadrului local este incarcat in g. *d1 - deplasamentul ( in cadrul campului de afisare al cadrului curent ) indicatorului spre cadrul in care se afla variabila la care se face referire. *d2 - deplasamentul in interiorul cadrului a scalarului referit*Un alt fel de utilizare permite accesul la un camp al unei inregistrari locale la care referirea se face cu ajutorul unui indicator. In acest caz d1 este deplasamentul indicatorului in interiorul cadrului, iar d2 este deplasamentul (fata de inceputul zonei ce contine inregistrarea, inceput specificat prin indicatorul obtinut prin M [ G[g] + d1]]) al campului la care se face referire. 28)Adresare Indirecta Indexata cu Deplasament Indirect Bazata si cu Deplasament *M [ M [ G[g1] + d1 ] + d2 + G[g2].sh.N ]*Permite accesul la matrice unidimensionale nelocale de scalari , fapt datorat adaugarii indexarii la modul de adresare indirecta cu deplasament indirect bazata si cu deplasament.*In g1 se incarca indicatorul cadrului local. *d1 - deplasamentul indicatorului (din campul de afisare ) catre cadrul ce contine matricea de interes. *d2 - deplasamentul in cadrul de interes al inceputului zonei de memorie ce contine matricea *g2 contine indicele elementului la care se face referire. 29)Organizarea Registrelor *Practica a demonstrat utilitatea registrelor in imbunatatirea performantelor microprocesoarelor*Exemplu: arhitectura procesoarelor RISC, unde se intalnesc zeci sau chiar sute de registre in componenta CPU. *Efectele pozitive ale utilizarii registrelor: operatiile asupra continutului registrelor sunt mai rapide decit cele asupra operanzilor continuti in memorie, pentru ca ALU are acces direct la registre lungimea medie a programelor scade DAR*continuturile registrelor (asa numitul context) trebuie salvate la aparitia unei intreruperi sau capcane sau atunci cand, in regim de multiprogramare, are loc comutarea programului curent. *In consecinta, un set numeros de registre conduce la timpi mai lungi de tratare a intreruperii sau de planificare a taskurilor 30)Masini cu Arhitectura de Tip Stiva *Organizarea registrelor pentru a memora si gestiona automat partea superioara a stivei de evaluare. *Instructiunile unei masini de tip stack machine ideala opereaza doar asupra registrelor ce contin varful stivei, cu exceptia instructiunilor de transfer de date, care citesc/inscriu registrul din varful stivei in/din memorie. *Intrucat stiva poate creste peste capacitatea de memorare oferita de registre, partea inferioara a stivei este pastrata in memorie.*existenta unor mecanisme pentru tratarea situatiilor cand varful stivei depaseste partea continuta in registre (register overflow: toate registrele incarcate, apare necesitatea inscrierii unui nou operand in stiva) *cand varful stivei coboara sub partea ce ar putea fi continuta in registre (register underflow: toate registrele vide, apare necesitatea citirii unui operand din stiva). 31)Masini cu Acumulator *Majoritatea microprocesoarelor din prima generatie sunt masini cu acumulator, care foloseau un registru sau un mic numar de registre pentru prelucrarea datelor. *Un registru, numit acumulator, contine unul din operanzi si, in acelasi timp, este folosit pentru a stoca rezultatul operatiei. *Masinile cu acumulator poseda moduri simple de adresare, ceea ce nu ofera suficiente facilitati pentru limbajele de nivel inalt, care necesita determinarea in timpul rularii (dynamic allocation) a adreselor in memorie ale unor variabile.*Functia de baza a acumulatorului: varf al stivei de evaluare, intrucat el constituie un operand al tuturor instructiunilor de prelucrare. 32)Masini cu Registre Index *Arhitecturile cu registre index au reprezentat un progres notabil fata de cele cu acumulator, intrucat permit evaluarea in timpul rularii a adreselor. *Registrul index contine un numar care, prin adunarea cu o valoare continuta in codul instructiunii, permite determinarea adresei complete a operandului. *O varianta o constituie registrele baza.*De multe ori aceeasi masina contine ambele tipuri de registre. *Adresa operandului se determina adunand continutul registrului baza cu cel al registrului index si cu un offset continut intr-un camp al instructiunii.*Introducerea registrului index scurteaza lungimea instructiunii deoarece, in locul unei adrese complete, corpul acesteia poate contine doar un offset exprimat pe un numar mai mic de biti,

la care se adauga un mic camp pentru specificarea registrului index (in situatia ca microprocesorul dispune de mai multe astfel de registre). 33)Organizarea Registrelor de Uz General*Numeroase microprocesoare dispun de un set de registre interne care se pot utiliza pentru toate functiile posibile, intrucat toate instructiunile pot folosi orice registru, indiferent de numele acestuia. Se spune ca aceste masini au un set ortogonal de instructiuni si un fisier de registre. *Fiecarui registru ii poate reveni una din urmatoarele functii: acumulator: este utilizat pentru evaluarea de expresii;index/baza: orice registru poate fi desemnat ca registru baza sau registru index, utilizat la determinarea adresei operandului indicator al variabilei: registrul este folosit pentru memorarea adresei sau este utilizat pentru explorarea unei date de lungime mare, cum este sirul de caractere; indicator de stiva: registrul permite implementarea mecanismului de stiva;registru de comanda: registrul contine informatii de comanda a microprocesorului. Este cazul unui registru de uz general care contine de ex., contorul programului 34)Intreruperi Vectorizate *Intrucat exista mai multe surse de intreruperi, selectarea rutinei de tratare presupune cunoasterea identitatii sursei intreruperii. Aceasta se realizeaza prin executia unui ciclu special, numit ciclu de confirmare a acceptarii cererii de intrerupere (interrupt acknowledge cycle). Se utilizeaza magistrala externa a microprocesorului. *Evenimentul care a generat intreruperea determina furnizarea catre CPU a unui cod de identificare. Acest cod, citit de catre microprocesor in ciclul de confirmare a acceptarii cererii de intrerupere, este utilizat de catre CPU ca index al unei matrici pastrate in memorie *In general intreruperile vectorizate sunt mascabile *Primirea cererilor de intreruperi vectorizate se face printr-un singur semnal fizic, deoarece detaliile privind sursa cererii se obtin prin ciclul de confirmare a acceptarii cererii de intrerupere 35) Intreruperi Nemascabile *O astfel de cerere de intrerupere suspenda executia programului aflat in rulaj indiferent de functia executata de acesta. *Exemple tipice de evenimente: tendinta de a iesi din parametrii de functionare normala a sursei de alimentare detectarea unor erori in operatiile in conjunctie cu memoria.*Semnalarea unei cereri de intrerupere nemascabila se face printr-un semnal de intrare distinct. Nu mai este necesara indicarea sursei unei astfel de intreruperi, intrucat ea se cunoaste. 36)Intreruperi Nevectorizate *Intreruperile nevectorizate se implementeaza prin acelasi mecanism ca si in cazul intreruperilor nemascabile, adica exista linii specializate de intrare pentru semnalarea cererilor.*Spre deosebire de cele nemascabile, intreruperile nevectorizate pot fi dezactivate prin program 37)Intreruperi cu Relansare *Suspendarea executiei unui program se face, de regula, la terminarea instructiunii curente, pentru a se reduce la minimum posibil informatiile ce se salveaza in conjunctie cu programul intrerupt.*Sunt cazuri cand intreruperea este declansata de o situatie care impiedica insasi terminarea executiei corecte a unei instructiuni, caz in care cererea de intrerupere trebuie servita inainte de terminarea instructiunii *Solutie: proiectarea instructiunilor astfel incat sa fie posibila intotdeauna repornirea executiei lor, indiferent de momentul la care a survenit intreruperea. 38)Timpul de Latenta *Timpul cerut de servirea unei cereri de intrerupere depinde de operatiile necesitate de evenimentul extern care a cauzat intreruperea, precum si de intarzierea intre activarea cererii si inceputul activitatii rutinei de testare. Aceasta intirziere este o caracteristica microprocesorului si se numeste timp de latenta.*Pentru a putea evalua timpul de latenta a unui microprocesor trebuie examinata secventa de operatii necesare pentru comutarea de la programul intrerupt la rutina de servire a intreruperii.*Operatiile necesare in acest scop sunt:salvarea in stiva a contorului programului si a indicatorilor de conditie;executia ciclului de confirmare a acceptarii cererii de intrerupere; 39)Prioritati *Ordinea de prioritate este, in general, urmatoarea:1.intreruperi cu relansare - ele au prioritatea maxima, deoarece sunt asociate unor evenimente care nu pot astepta terminarea instructiunii curente pentru a fi servite;2.intreruperi nemascabile - intreruperile din aceasta clasa sunt mai prioritare decit cele vectorizate sau nevectorizate, intrucat evenimentele care le determina necesita o servire rapida si intreruperile nu pot fi mascate;3.intreruperi vectorizate;4.intreruperi nevectorizate.

40)Capcane *Capcana (trap) este un mecanism care produce apelarea automata a unei proceduri. Spre deosebire de o intrerupere, capcana este activata, explicit sau implicit, de catre o actiune efectuata de catre programul aflat in rulaj (intreruperi software). *Capcanele sunt utilizate pentru tratarea unor conditii de exceptie, adesea anormale, care apar in cursul existentei unui program, sau pentru activarea unor proceduri speciale, cum ar fi rutine ale sistemului de operare. 41)Capcane Activate Intotdeauna *Se asociaza cu un eveniment de tip eroare, indiferent de operatia efectuata de catre CPU; *De aceea, nu exista mijloace de dezactivare a acestui tip de capcana. *Exemple tipice: tentativa de a executa o instructiune inexistenta tentativa de a executa, dintr-un regim neprivilegiat, o instructiune rezervata regimului privilegiat capcanele in conjunctie cu gestiunea memoriei externe 42)Capcane Activate/Dezactivate Prin Program *Evenimentele care reprezinta sau nu o conditie de exceptie sau anormala, in functie de actiunile specifice efectuate de catre program.*Capcanele pot fi activate (dezactivate) de programul insusi, dupa cum este necesar sau nu a detecta aceste situatii. *Standardul IEEE 754 prevede ca exceptiile generate de operatiile cu numere cu virgula mobila sau de conversie pot genera o capcana numai in urma unei activari de catre program. *Un alt exemplu: capcana utilizata pentru a detecta tentativa de executie a unei operatii cu operanzi cu virgula mobila in absenta unitatii aritmetice dedicate acestor operatii. In aceste cazuri capcana se dezactiveaza cand configuratia hardware include procesorul matematic. 43)Capcane Solicitate Explicit Prin Program *Nu se folosesc, in mod obisnuit, pentru detectarea conditiilor anormale, dar reprezinta un mijloc de activare a executiei unor rutine speciale, de cele mai multe ori acestea fiind functii ale sistemului de operare. *Sunt astfel organizate incat sa fie posibila activarea lor la aparitia unor capcane. Operatiei ii sunt dedicate instructiuni speciale, numite adesea apeluri de sistem (system-call instructions), data fiind menirea lor principala de activare a rutinelor sistemului de operare. *Cand se executa o astfel de instructiune se activeaza capcana corespunzatoare. *Prin asocierea unui parametru, aceeasi instructiune poate activa capcane diferite 44)Manipularea Capcanelor *Actiunile cerute de manipularea capcanelor sunt similare cu cele executate la aparitia unei intreruperi: se salveaza in stiva contorul programului si indicatorii de conditie se executa saltul la rutina de tratare a capcanei. *Informatia despre rutina de tratare este memorata intr-un vector stocat intr-o zona de memorie bine precizata; in anumite cazuri capcanele si intreruperile folosesc in comun acelasi vector. *De regula, rutina de tratare a capcanei se executa la un nivel privilegiat superior fata de cel in care se afla programul ce a produs capcana. 45)Prioritati *Aparitia simultana de intreruperi si capcane ridica probleme legate de selectarea celei careia sa i se acorde atentie. *Ca si intreruperile, capcanele sunt servite, de regula, la terminarea instructiunii curente. Unele capcane (cum este page fault trap) trebuie servite imediat, intrerupand executia instructiunii curente. Ele pot fi considerate similar cu intreruperile cu relansare.*Desi fiecare microprocesor are propriile sale reguli de prioritate privind capcanele, se pot folosi urmatoarele criterii generale: capcanele cu relansare au prioritatea maxima, ca si intreruperile cu relansare;celelalte capcane au prioritati superioare intreruperilor mascabile, deoarece ele sunt folosite pentru detectarea erorilor si starilor anormale, deci necesita atentie imediata;intreruperile nemascabile pot intrerupe rutinele de tratare a capcanelor si a intreruperilor. 46)Instrumente de Depanare *Depanarea este un proces dificil, care se simplifica prin fragmentarea programelor in blocuri mai mici, mai usor de stapanit. In sprijinul depanatorului se pot oferi urmatoarele seturi de instrumente:a)executie pas cu pas;b)puncte de suspendare a executiei (breakpoints);c)memorarea traseului programului (program trace). 47)Executie Pas cu Pas *Primul instrument permite rularea programului instructiune cu instructiune, executia fiind stopata la sfarsitul fiecarei instructiuni. *Prin examinarea starii CPU si a locatiilor de memorie se poate determina eventuala abatere a programului de la comportarea dorita. 48) Puncte de Suspendare a Executiei *Punctele de suspendare a executiei permit suspendarea executiei unui program dupa executia unei anumite instructiuni. *Permit executia unor blocuri mai mari de program inainte de suspendarea executiei la un anumit punct cu scopul testarii rezultatelor intermediare.

49)Memorarea Traseului Programului *Traseul programului consta intr-o inregistrare a tuturor instructiunilor executate de program de la ultima suspendare si permite verificarea corectitudinii fluxului de instructiuni parcurse de program. *Pentru oferirea suportului necesar acestor instrumente de depanare, toate microprocesoarele moderne sunt prevazute cu mecanismele hardware pentru trace. 50)Capcana de Traseu *Majoritatea microprocesoarelor sunt prevazute cu o capcana speciala, numita trace trap - capcana de traseu. Ea permite atat executia pas cu pas, cat si realizarea de trasee ale programului. Capcana se activeaza (dezactiveaza) prin intermediul unui indicator de conditie special, accesibil prin program. *Cand este activa, capcana de traseu lanseaza in executie rutina de tratare dupa ultima instructiune executata. Desigur, capcana este dezactivata automat pe durata executiei rutinei de tratare in scopul evitarii generarii unei bucle infinite. *Rutina de tratare a capcanei de traseu permite programatorului sa afiseze un set de informatii (starea CPU, locatii de memorie) care sa inlesneasca depanarea programului. Aceeasi rutina permite memorarea intr-un tampon al traseului a datelor despre instructiunea executata. 51)Puncte de Suspendare Software a Executiei *Rularea pas cu pas a programelor este, de cele mai multe ori, consumatoare de timp, mai ales dupa ce s-au corectat mari blocuri de program.*Utilitatea punctul de suspendare a executiei (breakpoint): aceasta facilitate permite inserarea in program a unor "comenzi" de suspendare. nSe selecteaza instructiunile pentru care tentativa CPU de a le executa duce la suspendarea executiei programului. *Pentru implementare se foloseste o instructiune capcana specifica, a carei lungime este cea minima permisa pentru o instructiune.*Instructiunea a carei executie ar trebui sa suspende rularea programului este stocata intr-o zona speciala de memorie si este inlocuita prin instructiunea breakpoint. *Cand contorul programului indica locatia in care se afla instructiunea breakpoint, aceasta este executata, fapt ce rezulta in activarea rutinei asociate de tratare. 52)Puncte de Suspendare Hardware a Executiei *Mecanismul de suspendare software a executiei permite utilizatorului sa intrerupa executia unui program doar cu ajutorul unei instructiuni particulare. *Punctul de suspendare hardware a executiei se implementeaza cu ajutorul unitatii de gestiune a memoriei (memory management unit - MMU), care contine registre in care se inscrie adresa de memorie la a carei adresare trebuie sa se suspende executia programului. *Cand mecanismul de breakpoint este activat, MMU compara fiecare noua adresa de acces cu continutul registrelor de breakpoint. La coincidenta, MMU emite un semnal capcana, fapt ce permite ca tentativa de acces la locatia de memorie al carei nume este pastrat in registrele de breakpoint sa conduca la suspendarea executiei programului si activarea unei rutine adecvate de tratare a situatiei.*Microprocesoarele moderne permit utilizarea de puncte de suspendare a executiei programului atat software, cat si hardware. Numarul primelor este limitat doar de dimensiunea zonei de salvare, in timp ce numarul de puncte de suspendare hardware este limitat de numarul de registre breakpoint din MMU 53)Mijloace de Sprijin pentru Multiprocessing *salvarea si restaurarea starii programelor pentru a permite intreruperea si reluarea corecta a executiei, cerute de executiile intercalate;nexcluderea mutuala, care permite utilizatorilor sa foloseasca in comun o resursa, evitand problemele generate de posesia multipla a resursei;*sincronizarea, pentru a coordona activitatile taskurilor care interactioneaza ;*activarea si dezactivarea taskurilor, permitand pornirea si oprirea unui anumit task. 54)Proces *Fiecare proces este compus din trei parti principale:*O baza de date, pastrata, de regula, in memoria principala, care contine toate datele si spatiul de memorie necesare pentru reprezentarea variabilelor programului, ca si celelalte variabile cerute de executarea calculelor aferente.*Codul care implementeaza algoritmul executat de catre proces.*Mediul in care se executa procesul.Termenul de "mediu" indica o serie de atribute ale procesului, adesea gestionate de catre sistemul de operare, care sunt necesare executiei corecte. Exemple de atribute pot fi descriptorii zonelor de memorie rezervate procesului, cu drepturile de acces pentru fiecare din ele 55)Starile Procesului *Valorile datelor ce se salveaza. De obicei acestea sunt continuturile registrelor, care se afla intr-o zona considerata nesigura intrucat noul proces, prin utilizarea

registrelor, distruge continutul acestora. In clasa registrelor intra, desigur, indicatorul stivei si indicatorii de conditie.*Contorul programului, indicand prima instructiune ce trebuie executata la reluarea rularii procesului.*Toate registrele care contin informatii ce descriu mediul de executie al procesului, incluzand, eventual, registrele unor dispozitive externe, cum sunt unitatea de gestiune a memoriei si coprocesorul matematic (unitatea de calcul in virgula mobila). 56)Excluderea Mutuala *Executia paralela sau pseudoparalela a mai multor procese conduce, in mod inevitabil, la concurenta pentru resursele sistemului, resurse ce pot fi solicitate de mai mult de un proces pentru terminarea taskului ce i s-a asignat. *Fenomenul este evident in cazul sistemelor paralele, dar apare ca paradoxal pentru sistemele pseudoparalele. 57)Concurenta in Sisteme Pseudoparalele *Se considera doua procese A si B, care au nevoie de o resursa a sistemului. *Starea acesteia, libera (free) sau ocupata (busy), este memorata in locatia de memorie X. *X = 0 indica resursa libera. *Se considera o masina ipotetica, folosind un limbaj de asamblare ipotetic, dar evident ca mnemonica, ruland, pentru fiecare proces, urmatorul cod:*test X; inscrie indicatorul de conditie conform valorii memorate in X*bnz after; salt la eticheta after daca resursa este ocupata *set X; inscrie 1 in X pentru a semnala ca resursa a devenit ocupata *Din exemplu rezulta ca este necesar un mecanism de control al accesului la resursele critice. Solutia problemei excluderii mutuale trebuie sa satisfaca urmatoarele criterii:1.numai un singur proces poate utiliza, la un anumit moment de timp, resursa in discutie;2.cand mai multe procese incearca, simultan, obtinerea resursei, mecanismul de control trebuie sa aloce resursa numai unuia din procese si intr-un timp finit;3.cand un proces detine o resursa,timpul de posesie trebuie sa fie limitat; la expirarea lui, resursa trebuie sa fie eliberata;4.procesele asteptand disponibilitatea resursei trebuie sa nu iroseasca timpul unitatii centrale, deci trebuie suspendate. 58)Regiuni Critice *Dijkstra*Proprietatile regiunii critice sunt urmatoarele:a)cel mult un proces executa declaratiile asociate regiunii critice;b) un proces care doreste sa execute declaratiile asociate regiunii critice va dobandi acest drept intr-un timp finit;c) un proces care doreste sa execute declaratiile unei regiuni critice o face intr-un timp finit. 59)Mecanismul test-and-set di:dezactivarea sistemului de intreruperi *move A,X ; copiaza X in A *set X ; inscrie X cu 1 *ei ; reactivarea sistemului de intreruperi *test A; testarea vechii valori a lui X, acum cea a variabilei A. *tas A, X testeaza si inscrie cu 1 pe X, copiaza vechea sa valoare in A, totul intr-un singur ciclu instructiune (normal secventa neintreruptibila) 60)Structuri Multiprocesor si Excludere Mutuala *De regula, magistrala ramane in posesia unui utilizator pentru timpul necesar efectuarii unui singur ciclu de acces la memorie, dupa care este eliberata. *O astfel de tehnica de atribuire a magistralei poate conduce la erori chiar in conditiile existentei instructiunii tas, a carei executie necesita doua cicluri de acces la memorie pentru completare: unul de citire, care copiaza X in A, un al doilea de inscriere, care inscrie cu1 variabila X. 61)Implementarea Regiunilor Critice Vaste *Criteriile de caracterizare a unei solutii rezonabile a problemei excluderii mutuale prescriu un timp finit de asteptare si un comsum minim din timpul unitatii centrale de prelucrare. *Prima solutie consta in a permite unui proces sa cicleze in jurul aceluiasi test pana la eliberarea regiunii. In tot timpul incercarilor nereusite procesorul este mentinut ocupat, desi ar fi putut fi utlizat pentru scopuri mai lucrative, ruland procese care nu sunt in asteptarea intrarii in regiunea critica (busy waiting). 62)Cutii Postale *O cutie postala se comporta in acelasi mod cu un semafor, cu exceptia manipularii mesajelor. *In consecinta, se folosesc aceleasi reguli de sincronizare si aceiasi invarianti. *Operatiile trebuie modificate pentru a se putea manipula mesajele care se transmit sau se receptioneaza. *Noile operatii sunt send(x,m) si receive(x,m), corespunzand lui P si respectiv, V.*x este identificatorul cutiei postale iar m este cel al mesajului. nCand se efectueaza o operatie de tip send, mesajul se introduce in cutia postala, daca aceasta nu este plina. *Cand se efectueaza o operatie de tip receive se extrage primul mesaj din cutia postala, daca aceasta nu este vida. *In mod obisnuit, ordonarea mesajelor in cutia postala este similara cu cea a unei stive de tip FIFO: operatia receive extrage din stiva cel mai vechi mesaj pe care aceasta il contine. *Sunt posibile si organizari care asigneaza prioritati mesajelor continute de cutia postala.

63)Sincronizarea Proceselor *Se considera o unica linie tehnologica compusa din doua masini unelte, masina 1 si masina 2, si un unic tampon B de capacitate c, plasat intre cele doua masini. *Operatia este astfel organizata incat masina 1 primeste o piesa si o prelucreaza. *Cand operatia este completa, masina 1 plaseaza piesa in tampon, cu conditia ca acesta sa nu fie plin, dupa care obtine o noua piesa, daca este disponibila, si repeta aceeasi operatie. *Cand masina 1 incearca sa plaseze o piesa in tamponul plin functionarea sa este blocata, pentru ca trebuie sa astepte pana cand este spatiu in acesta, ceea ce ii permite sa depuna piesa prelucrata si sa se ocupe de o alta. *In cealalta parte a tamponului, masina 2 se comporta intr-un mod similar. *Intai, ea incearca sa obtina din tampon o piesa pentru prelucrare. *Daca acesta nu este gol, masina 2 extrage o piesa, pe care o prelucreaza.*In caz contrar asteapta pana cand tamponul contine cel putin o piesa.*Cele doua masini sunt comandate de doua procese diferite, A si B, executate de catre aceeasi unitate centrala de prelucrare. Se pune problema sincronizarii functionarii lor, pe baza continutului tamponului.*Operatia P blocheaza procesul A cand tamponul este plin, in timp ce operatia V blocheaza procesul B cand acesta este vid. *Pe de alta parte, P porneste procesul B cand tamponul este gol si B asteapta sa prelucreze, iar V va porni procesul A cand tamponul este plin si A asteapta sa stocheze o piesa in tampon. 64)Comunicatia Intre Procese *Exemplul precedent poate fi modificat pentru a demonstra ca doar semafoarele nu sunt suficiente pentru implementarea simpla a sincronizari. *In exemplul modificat se considera ca piesele nu sunt identice. Ele fac parte din patru clase distincte, identificate prin numerele 1,2,3,4. *De asemenea, se impune cerinta suplimentara ca piesele sa fie prelucrate in aceeasi secventa de catre ambele masini.*Sincronizarea presupune si un schimb de date intre procesele care coopereaza, intrucat informatia vehiculata nu indica doar introducerea in tampon a unei piese sau extragerea unei piese din acesta.*Orice semnal de inserare trebuie sa contina date identificand tipul piesei, care trebuie citite cand piesa este extrasa.*Aceste considerente recomanda folosirea unei cutii postale, in care mesajele sunt intregi indicand tipul piesei asociate. 65)Mailbox Comentarii *Sincronizarea se efectueaza la fel ca in cazul precedent, dar procesul A transfera catre B informatii privind tipul piesei. *Daca organizarea cutiei postale este de tipul FIFO, piesele sunt prelucrate in aceeasi secventa de catre ambele masini, deoarece procesul B primeste mesajele in ordinea in care ele au fost emise de catre A.*Nu s-au facut ipoteze privind vitezele relative ale celor doua procese, sau asupra sosirii pieselor la masina 1, element esential in intregul proces de productie. Acest fapt garanteaza ca solutia bazata pe semafoare sau cutii postale este corecta indiferent de viteza de executie. nMai exista si alte posibile extensii ale exemplului, printre care si considerarea situatiei in care mai multe masini identice executa munca masinii 1 si plaseaza rezultatele in acelasi tampon, din care mai multe masini, operand identic cu masina 2, extrag din tampon, in vederea prelucrarii, elementele existente. *In acest caz este suficient a dispune de un singur proces A pentru comanda unei masini de tipul 1, si de un singur proces B pentru comanda masinii de tipul 2.*Sincronizarea se poate face, de asemenea, cu ajutorul semafoarelor si al cutiilor postale. *Se deduce ca mecanismele descrise functioneaza corect si in cazul unor producatori si consumatori multipli. 66)Planificarea Proceselor (Scheduling) *Gestionarea unitatilor centrale de prelucrare ale unui sistem constituie activitatea esentiala a unui sistem de operare multitasking. *Activitatea de planificare a procesorului poate fi divizata in doua clase diferite: planificarea de nivel inalt sau pe termen lungplanficarea de nivel redus sau pe termen scurt. *Prima se ocupa cu introducerea in sistem a programului utilizatorului si cu secventierea diferitelor procese care il compun. nIntrucat planificarea de nivel inalt se poate realiza sub forma unui proces (un proces al sistemului, mai curand decat al utilizatorului), implementarea se face, practic, prin program, si ea nu va fi discutata in cele ce urmeaza. *Planificarea de nivel redus se ocupa de secventierea executiei proceselor prezente in sistem la un anumit moment de timp si este cu mult mai apropiata de hardware. *Planificarea de nivel redus constituie subiectul celor ce urmeaza. Termenul "planificarea proceselor" se refera la un astfel de tip de planificare. 67)Starile Unui Proces *Modul tipic de abordare a problemei planificarii proceselor se bazeaza pe asocierea unei anumite stari fiecarui proces din sistem. *In functie de tipul de calculator si sistem de

operare, se pot identifica un numar de stari ale procesoarelor, ca si un numar de definitii ale acestor stari. *In rulare (running): Un proces in aceasta stare este executat de catre CPU sau de catre o CPU a sistemului. De aceea, se considera ca are o prioritate superioara altor procese gata de rulare;*Gata de rulare (ready): Un proces in aceasta stare este gata de a fi rulat, dar nu este executat, deoarece prioritatea sa este mai mica decat a proceselor aflate in rulare. In aceasta stare, toti parametrii asociati procesului si care influenteaza decizia de planificare sunt cunoscuti planificatorului;*In asteptare (waiting): Un proces aflat in aceasta stare nu poate fi executat, intrucat el asteapta producerea unui eveniment special in sistem, a carui aparitie va pune procesul in starea gata de rulare; *Activ (active): Un proces in aceasta stare nu poate fi considerat pentru executie, intrucat el are nevoie de o comanda speciala pentru a trece, in functie de prioritate, fie in starea in rulare, fie in starea gata de rulare; *Inactiv (inactive): Un proces aflat in aceasta stare nu poate fi planificat, pentru ca, desi este prezent in sistem, are nevoie de o comanda explicita din partea unuia dintre procesele care se executa, sau din partea planificatorului, pentru a intra in starea activa si pentru a i se asigura parametrii de planificare. 68)Planificarea in conditiile prezentei intreruperilor *Intreruperile sunt folosite pentru a informa CPU asupra unor evenimente importante prin efectele lor asupra activitatii sistemului nDe exemplu, o intrerupere anuntand terminarea unui proces I/O efectuat de un periferic lent este mai putin importanta decat una asociata unui dispozitiv mai rapid, deci este important ca prima sa nu intrerupa executia rutinei de tratare a celei de a doua intreruperi. *Este necesara existenta unui mecanism care sa recunoasca doar intreruperile de prioritate ridicata. Cu alte cuvinte, o cerere de intrerupere este confirmata doar daca ea are o prioritate superioara procesului aflat in rulare. *Intreruperile sunt generate de evenimente externe si sunt gestionate prin mijloace hardware. Deci, cand un proces este trecut in starea de rulare, prioritatea sa trebuie facuta cunoscuta dispozitivului de tratare a cererilor de intrerupere, fapt ce permite dezactivarea intreruperilor cu prioritati egale sau inferioare celei a procesului in rulare. *Daca instalarea unui nou proces face ca prioritatea CPU sa scada sub nivelul unei cereri de intrerupere asteptand tratarea, rutina de tratare a cererii mentionate se trece in starea in rulare, procesul intrerupt trecand in starea gata de rulare. *Cand rularea rutinei de tratare a intreruperii se termina, ea apeleaza planificatorul pentru a determina urmatorul proces ce trebuie executat. Decizia planificatorului poate fi infirmata de catre mecanismul de intreruperi in cazul in care intreruperi prioritare asteapta tratarea. *Dispozitivul de tratare a cererilor de intreruperi poate fi considerat drept componenta a planificatorului, implementat sub forma hardware. *In acelasi mod, rutinele de tratare a intreruperilor ce asteapta atentia unitatii centrale pot fi considerate ca fiind in starea gata de rulare, intrucat executia lor va incepe imediat ce prioritatea procesului aflat in rulare scade sub cea a cererilor de intreruperi. 69)Adrese fizice si virtuale *Organizarea memoriei in cateva subsisteme diferite are implicatii importante asupra adresarii.*Nici unul din subsisteme (cu exceptia discului) nu are capacitatea comparabila cu cea maxima direct adresabila a procesoarelor contemporane.=> Imposibilitatea ca un proces sa lucreze cu adrese fizice *Solutie: utilizarea adreselor virtuale *In conditiile multitasking, fiecare proces dispune, teoretic, de spatul maxim direct adresabil aferent procesorului (e.g. 236 = 64 GB pentru Pentium IV) *MMU rol de translator din spatiul virtual in cel liniar, apoi in cel fizic*Avantaje:Un proces poate dispune de spatiul virtual maxim posibil, chiar daca memoria principala a sistemului are dimensiuni mult inferioare Devine posibila functionarea multitasking*Este necesara transformarea, la momentul rularii, a adresei din program (adresa virtuala) in adresa de memorie (adresa fizica), transformare ce utilizeaza un suport hardware adecvat. 70)Memoria primara *Este cel mai mare subsistem de memorie adresabil direct de catre CPU.*Toate programele ce se ruleaza (cod si date) trebuie memorate in memoria primara, ca si informatiile necesare gestionarii memoriei. *Nu toate programele sunt gata de a rula in paralel si, chiar cand un program este executat, el foloseste doar un subset al spatiului sau virtual de adresare pe durata unei anumite faze.*Tehnicile de gestiune a continutului memoriei primare necesita un anumit suport hardware, dar algoritmii sunt implementati prin software o varietate de solutii posibile.*Memoria primara si registrele sunt doua niveluri ierarhice prezente intotdeauna intr-un sistem, in timp ce celelalte niveluri ar putea lipsi 71)Memoria de masa *Informatia care nu este imediat necesara CPU (programe care nu sunt gata

de rulare sau subspatii de adresare care nu sunt necesare in faza curenta) este memorata in dispozitive cu mediu magnetic de stocare, care ofera un mare volum de memorare la costuri unitare mici, dar cu timpi de acces cu cel putin trei ordine de marime mai mari decat cei ai memoriei primare. 72)Consideratii privind costul si performanta *Succesul organizarii ierarhizate a memoriei este datorat bunelor performante si costurilor implicate, deoarece costul pe bit este apropiat de cel al celei mai lente memorii din sistem, in timp ce performantele obtinute sunt comparabile cu cele ale celor mai rapide memorii din ierarhie. Costul pe bit de memorie poate fi calculat cu formula :suma[i=0,4](m_i c_i)/suma[i=0,4](m_i) unde m_i=dimensiunea nivelului i al ierarhiei, c_i = costul pe bit*Performantele depind de localizarea adresei memoriei la care se face acces in cadrul ierarhiei.*Timpul de acces la memorie poate fi evaluat doar ca valoare medie, sau probabila, folosind urmatoarea expresie: T=suma[i=0,4](p_i T_i) unde p_i=proprietatea ca adresa de acces sa se afle in nivelul i, Ti=timpul de acces la date 73)Ierarhizarea memoriei in sistemele multiprocesor *In sistemele multiprocesor, structura ierarhizata intra in conflict cu necesitatea de a efectua, in mod corect, multiple operatii de citire/inscriere. *Problema majora: existenta mai multor copii ale acelorasi date la mai multe niveluri, fapt ce impune actualizarea tuturor acestor copii pentru a pastra integritatea datelor.*Exemplu: Un sistem compus din mai multe plachete cu microprocesoare si cu memorie proprie .Fiecare placheta este conectata, prin intermediul unei magistrale multiprocesor la o memorie comuna. Memoria - structura ierarhica; nivelurile cu numar mic (0,1,2) - implementate in memoria locala, nivelurile cu numar mare (3 si 4) - in memoria comuna.*Daca programul rulat de procesorul i realizeaza accesul la locatia x, continutul acesteia este copiat in memoria cache proprie la adresa x'; *Apoi are loc modificarea continutului lui x', asa ca valorile continute in x si x' nu mai sunt identice.*Daca un al doilea program, rulat de procesorul j, are nevoie de continutul aceleiasi locatii x, el va folosi o valoare diferita de cea curent utilizata in procesorul i, in pofida faptului ca este vorba de aceeasi adresa virtuala.Solutia acestui tip de probleme depinde de ierarhizarea nivelurilor implicate. Problema memoriei cache proprii a fost intens studiata. De asemenea ramane deschisa aceeasi problema pentru memoria cache pe circuit. 74)Mecanisme simple de gestiune *Tehnici simple de gestiune a memoriei, care nu necesita suport hardware, dar ofera un grad redus de flexibilitate pentru gestionarea spatiului aflat la dispozitia utilizatorului. *Aceste metode ofera exemple de gestiune sub controlul deplin sau partial al programului si ilustreaza avantajele altor tehnici, devenite posibile in urma disponibilitatii microprocesoarelor moderne 75)Memorii cu bancuri suplimentare *Tehnica nu necesita un suport hardware special, toate functiile de gestiune sunt efectuate de catre programator. Aceste operatii sunt:partitionarea datelor si codului programului astfel incat fiecare componenta sa incapa intr-un alt banc, iar comutarea intre bancuri sa nu fie prea frecventa;scrierea programelor prin considerarea operatiilor posibile de comutare a bancurilor pentru accesul la operanzi, scriere care necesita inserarea de cod pt. modificarea continutului registrului exterior R. *Tehnica specifica sistemelor cu microprocesoare din perioada de inceput, conceputa pentru extinderea memoriei adresate dincolo de limitele impuse de numarul de linii de adresa (de regula 16) ale microprocesoarelor de 8 biti. *Ideea de baza: extinderea campului de adrese prin adaugarea de biti suplimentari. Ca urmare a limitarilor CPU, acesti biti suplimentari trebuie produsi de catre microprocesor intr-o operatie separata fata de cea de adresare normala. *Selectarea unui banc de memorie se face pe baza continutului unui unic registru R, care contine bitii cei mai semnificativi ai adresei, partea cea mai putin semnificativa a acesteia fiind produsa de catre CPU. *Dupa inscrierea registrului R cu informatia necesara selectarii unui anumit banc, accesul la datele si codul din acesta se face doar cu ajutorul submultimii de adrese emise de catre CPU. Cand apare necesitatea referirii la o locatie dintr-un alt banc are loc modificarea continutului lui R, ceea ce rezulta in comutarea bancurilor. *A doua din operatiile descrise mai sus poate fi efectuata daca programul este scris in limbaj de asamblare; *Programele in limbaje de nivel inalt necesita compilatoare si editoare de legaturi speciale care sa poata face fata problemei comutarii bancurilor. Astfel de instrumente de dezvoltare a programelor nu sunt

disponibile in mod curent, fapt ce complica elaborarea programelor pt sistemele ce adopta solutia mentionata.*Un alt dezavantaj al metodei consta in alocarea statica, rezultat al necesitatii gestionarii prin program a datelor si codului. In felul acesta se suprima orice posibilitate de realocare automata, cu scopul folosirii mai eficiente atunci cand starea sistemului necesita reasignarea memoriei. 76)Swapping *Intr-o masina functionand in regim de multiprogramare este posibila executia concurenta a mai multor programe. De aceea, se doreste a se pastra in memoria principala doar programele care sunt gata de rulare.-Conform politicii de swapping (comutare intre memoria principala si cea secundara), un program care asteapta terminarea unei operatii I/O (care poate dura cateva ms), este evacuat din memorie (swapped out). Cand el devine din nou gata de rulare, sistemul incearca sa gaseasca un spatiu adecvat in memoria primara, in care sa incarce programul in discutie. -Daca nu exista spatiu disponibil, programul este inscris intr-o lista de asteptare. La fiecare evacuare de program in memoria secundara, rutinele de implementare a mecanismului de gestiune a memoriei incearca sa incarce in memoria principala un program din lista de asteptare. -Conversia adresei virtuale in adresa fizica de memorie principala se face prin adunarea adresei virtuale la adresa de inceput a zonei de memorie in care s-a efectuat incarcarea. Deoarece aceasta operatie de relocare trebuie efectuata la fiecare ciclu de memorie, apare necesitatea de hardware specializat, care sa efectueze relocarea intr-un mod care sa nu conduca la lungirea timpului de executie drept consecinta a aplicarii tehnicii swapping.-Acest hardware specializat, implementat adesea intr-un singur circuit, se numeste unitate de gestiune a memoriei (MMU-memory management unit) si poate fi considerat drept o extensie a CPU, care efectueaza cu mai mare viteza functii asociate gestiunii memoriei. Fiecare tehnica de gestiune a memoriei necesita propriul tip de MMU. Totusi, sistemele cu multiprogramare au intotdeauna nevoie de o astfel de unitate hardware.-Ori de cate ori un program este lansat sau relansat in executie, adresa de baza a zonei de memorie in care se afla stocat este incarcata intr-un registru special al MMU. *Un alt registru contine dimensiunea programului, fapt ce permite ca, pe durata executiei acestuia, sa se poata detecta tentativa de adresare intr-un spatiu exterior celui al programului curent. Acest test simplu permite protejarea fiecarui program impotriva unor actiuni periculoase - involuntare sau nu - efectuate de catre alte programe. *Tehnica swapping de gestiune a memoriei este simplu de implementat, dar are si dezavantaje. *Tehnica swapping considera un program drept un bloc a carui incarcare se poate face doar intr-o zona de locatii contigue de memorie, deci ea nu permite folosirea micilor fragmente de spatii libere de memorie, spatii a caror dimensiune totala devine importanta dupa un numar de operatii swapping. Acest efect este numit fragmentarea memoriei si urmarile sale se pot atenua,inlocuind tehnica swapping cu cea de segmentare. 77)Segmentarea nSegmentarea = spargerea programelor in mai multe segmente pentru care nu este necesara stocarea in zone adiacente de memorie, desi fiecare din ele trebuie incarcat intr-un bloc compact de memorie -* diminueaza efectele fenomenului de fragmentare * este posibila utilizarea si a unor zone de memorie de dimensiuni mai mici. *Segmentele corespund unor submultimi logice ale programului. Se poate considera, spre exemplificare, segmentul de cod si segmentul de date. *Segmentarea poate fi mai pronuntata decat atit, putind exista mici segmente compuse din una sau mai multe rutine sau din una sau mai multe structuri de date. *Mecanismul de conversie a adreselor implicat de tehnica de segmentare este complex:*S.O. trebuie sa dispuna de si sa intretina o tabela cu descriptorii segmentelor pentru fiecare program.*Fiecare element al acestei tabele este compus din:adresa de baza;dimensiunea segmentului; atribute (folosite pentru a verifica daca accesul efectuat este corect).In figura urmatoare se prezinta algoritmul utilizat pentru conversia adreselor. *Identificarea segmentului este facilitata de existenta unei submultimi de adrese virtuale. *Descriptorul este extras din tabela de descriptori ai segmentelor. *Dupa aceasta, conversia de adresa se face similar cazului tehnicii swapping.Relocarea este critica pt. performanta sistemului, intrucat trebuie efectuata la fiecare ciclu memorie. Deci, daca tabela descriptorilor segmentului ar fi pastrata in memoria principala, apare necesitatea unui ciclu suplimentar de acces la memorie, ceea ce dubleaza timpul cerut de efectuarea unui ciclu memorie. nDepasirea acestei dificultati se face stocand tabela descriptorilor segmentelor intr-o mica, dar foarte rapida, memorie RAM cu care este prevazuta MMU. *Dimensiunea limitata a acestei memorii speciale necesita folosirea tehnicii de swapping intre aceasta si memoria principala a sistemului. *Problema cand nr. de segmente > cantitatea care poate fi stocata in memoria RAM a MMU. *Solutie: memoria rapida din MMU poate fi utilizata ca memorie cache in care se pastreaza cei mai recent utilizati descriptori

de segment.*La initializarea procesului de conversie a adreselor, MMU cauta in memoria sa interna descriptorul de segment.*Daca nu este gasit, descriptorul este citit din memoria primara si copiat in memoria interna.*Principiul localitatii programelor probabilitate ridicata ca descriptorul sa se afle in memoria interna a MMU. Al doilea ciclu de memorie este doar arareori necesar , deci nu influenteaza intr-un mod important performanta de ansamblu. 78)Memorie virtuala segmentata *Executia programelor evolueaza printr-o serie de faze, iar spatiul de adresare la care se face acces in cadrul unei faze este mai mic decat intregul spatiu de adresare al programului. -Daca segmentele la care se face acces in cadrul unei faze sunt stocate in memoria primara, programul este executat aproape la fel de repede ca in cazul in care toate segmentele sale s-ar gasi in memoria primara, deoarece -practic- toate operatiile de acces au loc la segmente existente in aceasta. *Cand se genereaza o referire la un segment absent, el este adus in memoria principala, inlocuind, eventual, alte segmente.*Implementarea mecanismului: MMU sa verifica prezenta segmentului adresat prin testarea unui anumit bit in descriptorul segmentului: acest bit este 1 cand segmentul este incarcat si zero cind el este evacuat din memoria primara. *Evacuarea se face mai rapid daca segmentul nu a fost modificat de la incarcare, nemaifiind necesara copierea sa in memoria de masa (de regula, in cazul segmentelor de cod).*Pt. aceasta, fiecare descriptor are un fanion indicand starea de modificat / nemodificat (accessed) a segmentului in discutie. Initial, fanionul are valoarea 0 si este inscris cu 1 la fiecare operatie de inscriere a unei locatii din codul segmentului. *O caracteristica esentiala pentru arhitectura hardware a unui sistem folosind tehnici de segmentare este data de posibilitatea intreruperii de catre CPU a executiei in mijlocul unei instructiuni si de reluare a instructiunii exact de la punctul la care a survenit intreruperea. *In aceste cazuri mecanismele clasice pentru intreruperi si capcane nu mai sunt necesare, pt. ca ele sunt activate doar la sfarsitul instructiunii, asa ca nu pot fi utilizate in tratarea unor defecte ale segmentelor , defecte care pot aparea oricind pe durata desfasurarii unei instructiuni. nInstructiunea nu poate fi terminata daca a aparut un defect de segment , deoarece executia ei ar conduce la o eroare ireparabila. *Ultima varianta de tehnica de segmentare are mai multe avantaje (de ex.legate de rularea programelor al caror spatiu de adresare este mai mare decat cel al memoriei fizice disponibile), DAR are si neajunsuri. *Cel mai important: dimensiunile neuniforme ale segmentelor complica gestionarea spatiului de memorie (s-ar putea sa nu existe spatiul necesar incarcarii in memoria primara a unui segment de program pt. ca segmentul evacuat avea dimensiune mai mica, deci memoria eliberata este insuficienta). *Solutie: algoritmi complecsi de inlocuire a segmentelor mentinerea permanenta a unui spatiu neutilizat de memorie. paginarea, care divizeaza spatiul programului in submultimi de aceleasi dimensiuni. 79)Paginarea *Intregul spatiu de memorie se partitioneaza in blocuri de dimensiuni egale, numite pagini.*Paginarea elimina legatura intre organizarea logica a programului si paginile de memorie., deci are consecinte in relatia programatorului cu spatiul de adrese. *Singurele componente care iau in considerare partitionarea spatiului programului in pagini sunt cele ale mecanismului de gestiune a memoriei. *Memoria fizica este privita ca un set de blocuri, fiecare avand dimensiunea unei pagini *Ca si in cazul segmentarii, nu este necesara alocarea de blocuri contigue de memorie pentru pagini contigue ale programului.*Figura indica alocarea unui program in memoria unui sistem functionind in regim de multiprogramare. Paginile, ca si segmentele, pot fi partial stocate in memoria principala a sistemului. -Cand se face o referire la o adresa virtuala dintr-o pagina ce nu se afla in memoria primara, mecanismul de paginare copiaza intr-un bloc intrega pagina continand adresa mentionata. *Mecanismul se numeste "cerere de pagini" (demand paging), intrucat paginile sunt aduse in memorie cand sunt solicitate de catre program. *In decursul timpului s-au dezvoltat mai multe tehnici de paginare, care pot fi grupate dupa cum urmeaza:*mecanisme care determina momentul la care o pagina trebuie copiata in memoria principala. Cea mai des utilizata tehnica este cea bazata pe cererea de pagini (demand paging), utilizata de catre MMU ale unor microprocesoare moderne.*S-au elaborat si alte metode, care incearca predictia comportarii programului si incarca in memorie paginile presupuse a fi utilizate de catre acesta in viitorul apropiat;*mecanisme (sau tehnici de inlocuire) care folosesc algoritmi de selectare a paginilor existente in memorie ce pot fi evacuate, eliberand, astfel, spatiul pentru alte pagini;*mecanisme ce folosesc un algoritm de

determinare a cresterii / descresterii numarului de blocuri de memorie folosite de un anumit program. 80)Suportul hardware al paginarii *Mecanismele hardware pt. implementare eficienta a paginarii sunt foarte apropiate de cele pt. segmentare. *Principala caracteristica: posibilitatea de testare a adresei virtuale emise de catre CPU pt. a determina daca pagina care o contine se afla sau nu in memoria principala.*Aceasta functie se poate realiza cu ajutorul descriptorilor de pagina. *Descriptorul de pagina este similar cu cel de segment, principala diferenta constand in absenta campului limita, deoarece paginile au o lungime fixa, egala, de cele mai multe ori, cu o putere a lui doi.Numar blocAlte atribute Fanion prezent/absentBit acces (accessed)Bit modificare (modified) 81)Tabele de pagina *Testarea si conversia adreselor de pagina se poate face prin mecanismul din figura. *Adresa virtuala este compusa din numarul paginii si un offset in cadrul acesteia nNumarul paginii poate fi impartit in mai multe campuri, fiecare folosit drept index pentru adresarea unui descriptor intr-un tabel cu structura arborescenta, ale carui frunze corespund descriptorilor de pagina. *Continutul descriptorului de pagina este folosit pentru a testa prezenta unei pagini in memorie si pentru a oferi bitii cei mai semnificativi ai adresei fizice de memorie, in timp ce offsetul ii ofera pe cei mai putin semnificativi. *Numarul de niveluri ale arborelui de conversie a adresei constituie un parametru important. Cu cat acest numar de niveluri este mai mare, cu atat timpul consumat pentru obtinerea decriptorului de pagina este mai mare. *Tabela cu structura arborescenta permite sistemului sa implementeze strategii puternice si flexibile de alocare a memoriei. *De ex., devine comoda folosirea in comun a aceluiasi subarbore de catre diferite procese, deci implementarea structurilor de date comune si a procedurilor comune este imediata. *Intrucat zonele comune au un descriptor unic pentru fiecare pagina, actualizarea continutului acestuia ca urmare a incarcarii sau evacuarii nu este mai complicata decat pentru paginile care nu sunt comune. *Desi corecta, schema necesita unele modificari care sa o faca apta pentru o implementare eficienta:*Stabilirea tabelului de paginare (PGT): daca pentru fiecare program se aloca un spatiu de adrese virtuale separat, este necesar un PGT pentru fiecare program. *De regula, spatiul virtual este mult mai mare decat spatiul fizic, deci si numarul paginilor si al descriptorilor asociati este mare. In consecinta, nu este posibila implementarea unei memorii mari si rapide in acelasi circuit integrat in care se afla MMU, memorie ce ar servi efectuarii, fara o degradare marcata, a operatiilor descrise in figura.*Solutia: ierarhizarea memoriei.*Pe placheta de siliciu a MMU se realizeaza o memorie mica, dar rapida, in care se pastreaza descriptorii celor mai recent utilizate pagini. *Pe durata unei faze a programului referirile sunt axate pe un mic grup de pagini, deci descriptorul de pagina corespunzator adresei emise de catre CPU se afla, de cele mai multe ori, in memoria MMU, si doar arareori este necesar a recurge la memoria principala pentru a prelua un descriptor de pagina din PGT.*Memoria cache de mici dimensiuni a MMU destinata stocarii descriptorului este organizata ca o memorie adresabila prin continut (CAM - content-addressable memory), deoarece adresele acestei memorii nu mai sunt legate de numarul de pagina, intrucat ea memoreaza descriptorii de pagina cel mai recent utilizati.*O alta implementare, utilizata adesea in calculatoare mari, de tipul mainframe, se bazeaza pe o memorie CAM mai mare, care are alocat un cuvant pentru fiecare bloc de memorie: fiecare bloc din CAM contine descriptorul paginii stocate in blocul corespunzator al memoriei sau o indicatie ca blocul este vid. *Descriptorul de pagina are aspectul din figura, in care campul adresei baza a fost inlocuit de campul numarului paginii. *Numarul paginii, emis de catre CPU, este utilizat ca intrare in memoria CAM ce contine descriptorii paginilor continute in memoria principala. *Iesirea este constituita de adresa cuvantului din CAM in care se gaseste descriptorul respectiv, sau o indicatie ca pagina nu este prezenta in memorie. *Daca pagina se afla in memorie, iesirea memoriei CAM furnizeaza direct bitii cei mai semnificativi ai adresei fizice. Desi mai rapida, aceasta solutie necesita o memorie CAM mai mare. *De asemenea, schema permite realizarea de spatii de adresare distincte pentru fiecare program doar daca, la fiecare comutare de procese, are loc salvarea/restaurarea continutului memoriei CAM. *In cazul schemei anterior descrise, mecanismul de gestiune a memoriei cache aduce descriptorii in aceasta imediat ce ei devin necesari.

82)Segmentarea cu paginare *Se poate dispune de o tehnica de gestiune a memoriei care combina caracteristicile celor doua metode, oferind alocarea simpla specifica paginarii si calitatile de protectie a memoriei specifice segmentarii. *Programatorul divizeaza intregul spatiu virtual in segmente reflectand structura logica a programului, ca in cazul segmentarii, apoi, se considera ca fiecare segment este consta dintr-un numar de pagini, ca in cazul paginarii, asa ca alocarea memoriei continua sa opereze cu elemente de lungime fixa. *Mecanismele hardware necesare sunt aceleasi ca pentru paginarea pura. *Totusi, se constata o crestere a fragmentarii pt. ca, in cazul paginarii, numai ultima pagina ramane, eventual, incompleta. La combinatia segmentare-paginare numarul de pagini partial utilizate este egal cu numarul de segmente, intrucat se exclude folosirea in comun a unei pagini de catre diferite segmente. 83)Principii privind protectia memoriei *Necesitatea protectiei obiectelor de memorie in mediile cu multiprogramare, determinata de cresterea cerintelor de siguranta si de caracterul privat al segmentelor de date, cod sau combinatii.*In cadrul sistemelor prevazute cu un mecanism corespunzator de protectie, erorile datorate unor cauze hardware sau software se propaga doar in obiectele de memorie accesibile procesului in care a aparut eroarea. *Tentativa de a realiza accesul la alte obiecte, cu amenintarea unui posibil export al erorii, este detectata si marcata ca ilegala si, in consecinta, blocata de mecanismele de protectie. nAstfel, caderea unuia sau mai multor procese din sistem nu conduce, in final, la caderea intregului sistem. *Mentinerea in stare de izolare a erorilor este un important instrument de depanare (ajuta la localizarea punctului in care a aparut eroarea).*Ea constituie si baza altor mecanisme intrebuintate in scopul cresterii fiablitatii: categorisirea (categorisation)recuperarea (recovery) relansarea (restart). *Acelasi mecanism de protectie utilizat pentru localizarea erorilor protejeaza si informatia din sistem impotriva utilizarii neautorizate, cu conditia ca S.O. sa faca imposibil accesul unui proces la obiecte pt. care nu are autorizatie. *Este posibila implementarea unui mecanism mai rafinat de protectie, permitand sistemului sa specifice setul de operatii legale asupra unui obiect accesibil. 84)Medii inchise *Problema izolarii procesului (process isolation ) reprezinta un element cheie in localizarea efectelor erorilor. Ea impune ca nici un proces sa nu dispuna de posibilitati superioare celor cerute de executarea sarcinilor sale. *In modul acesta, toate operatille efectuate de un proces asupra obiectelor sunt constranse la a fi in concordanta cu drepturile alocate. *Orice abatere de la aceste interactiuni predefinite este considerata ilegala. Deoarece drepturile unui proces sunt stocate in memorie, devine necesar ca tabelul ce le contine sa devina un obiect special protejat nCea mai buna cale de a implementa principiul izolarii proceselor: un sistem cu mediu inchis (closed environment). Intr-un astfel de sistem, un proces ce ar urma sa efectueze o operatie asupra unui obiect trebuie sa arate mecanismului de protectie a memoriei ca dispune de dreptul de a efectua acea operatie. *Situatia globala a drepturilor de acces acordate diferitelor procese in conjunctie cu diferitele obiecte poate fi reprezentata printr-o forma matriceala, in care fiecare coloana este asociata unui obiect si fiecare rand este asociat unui proces. Continutul elementului (i,j) reprezinta setul de operatii ce pot fi efectuate de catre procesul i asupra obiectului j. *Exista doua metode de reprezentare a matricei din fig.: prin randuri si prin coloane. *Primei metoda: fiecarui proces ii este asociata o lista a drepturilor de acces, eliminind toate elementele vide (corespunzind obiectelor pentru care nu exista drept de acces).*Lista se mai numeste si domeniu de acces (domain of access), deoarece fiecare proces cunoaste doar obiectele la care are drept de acces, toate celelalte obiecte din sistem fiindu-i ascunse. Cind se face o referire de catre CPU a memoriei asociate unui obiect, domeniul de acces poate fi utilizat pentru gasirea obiectului la care se face referirea. *A doua metoda: ataseaza fiecarui obiect o lista a dreptului de acces pentru fiecare proces. Cind se solicita o operatie asupra unui obiect se testeaza lista de acces asociata pentru a se vedea ca procesul solicitant detine dreptul de acces la acel obiect. *Cele doua metode sunt asemanatoare. Diferenta principala intre ele este data de costurile diferite ale operatiilor tipice necesare modificarii continutului matricei din fig. 85)Liste de drepturi *Drepturile sunt similare unor chei.*Proprietarul are drept de acces la datele protejate prin cheie daca poseda cheia respectiva.*Teste simple pentru asigurarea protectiei *Se permite libera circulatie si copierea drepturilor (desi falsificarea unui drept sau augmentarea

domeniului sau de actiune trebuie interzise). *Desi transferul de drepturi este o caracteristica dezirabila intr-un sistem, ea devine o problema cind se impune revocarea unui drept. *Revocarea este generata de posibilitatea ca dreptul, acordat initial doar unui singur proces, sa fie copiat si transferat altor procese. Lucrurile se complica si mai mult cand se are in vedere ca procesele au, de regula, durate de viata mai mici decat drepturile.*Pentru revocarea unui drept sunt necesare operatii complexe, constand din inspectarea tuturor proceselor, active sau nu, indiferent de mediul in care sunt memorate.*Un argument important in favoarea listelor de drepturi este dat de posibilitatea de a stoca lista de drepturi a procesului in rulare intr-o memorie mica si rapida, ceea ce creste viteza de testare a dreptului de acces. *Listele de acces (despre care se va discuta in paragraful urmator) sunt mult mai voluminoase si necesita o memorie rapida mai mare. 86)Liste de acces *Ofera un fel de directory centralizat, asociat fiecarui obiect, continand drepturile de acces ale procesului.*Cand un proces realizeaza accesul la un obiect, mecanismul asociat de testare examineaza drepturile procesului solicitant si ii accepta sau ii refuza acestuia accesul la obiect. *Fiecare operatie implicand fie un obiect, fie drepturile de acces asociate, trebuie efectuata prin intermediul unui administrator al obiectului (object manager), care testeaza validitatea operatiei. Deci, toate operatiile, incluzind transferul de drepturi, trebuie sa urmeze aceeasi ruta, ceea ce poate conduce la congestionarea ei. *Drepturile de acces pentru un anumit obiect sunt pastrate intr-un singur loc, fapt ce simplifica mult problema revocarii unui drept. *Intrucat legitimitatea accesului este verificata de catre obiecte, un proces cunoaste toate obiectele din sistem, intrucat simpla cunoastere nu are nici un fel de implicatie asupra dreptului de acces. *Un element caracteristic al metodei bazate pe liste de acces este necesitatea ca orice proces sa insoteasca cererea de acces cu un identificator, cerut de catre mecanismul de protectie pentru stabilirea dreptului de acces. *De aceea, testarea listelor de acces este, in mod inerent, mai complicata si mai consumatoare de timp decat testarea listelor de drepturi.*Intrucat ambele tipuri de liste constituie reprezentari diferite ale aceleiasi baze de date, ele sunt echivalente din punctul de vedere functional si ofera acelasi grad de protectie. *Totusi, metoda bazata pe lista de drepturi ridica un numar mai mic de probleme de implementare, ceea ce a facut ca microprocesoarele moderne sa o foloseasca, in defavoarea metodei bazate pe lista de acces. 87)Domenii multiple *Uneori este necesara alocarea unor seturi diferite de drepturi procedurilor aceluiasi proces. Un exemplu este oferit de invocarea unei functii a S.O.: procedura invocata are drepturi mai mari decat cea care o invoca, intrucat poate manipula date interioare sistemului de operare. *In acest caz nu mai este posibil a asocia unui proces un domeniu de acces, data fiind necesitatea unor domenii multiple. *Fiecare procedura are drepturi permanente asupra obiectelor sale locale (obiectele proprii ei). *Suplimentar, in momentul apelarii, o procedura primeste un set de drepturi asupra unor obiecte nelocale, drepturi conferite de catre chemator sub forma unor parametri ai procedurii. *Operatia se numeste validarea inidicatorilor (pointer validation), deoarece dreptul poate fi utilizat pentru adresarea obiectelor, deci ele au un camp care memoreaza un indicator catre obiect. *Mijloacele hardware ce ofera suport pt. domenii multiple de acces trebuie sa poate recunoaste necesitatea de a modifica lista drepturilor asociate programului in rulare si ar trebui sa verifice ca drepturile transferate de catre chemator reprezinta un subset al multimii drepturilor posedate. *Acest test este necesar pentru prevenirea cresterii necorespunzatoare a multimii drepturilor, rezultata din transferul spre o subrutina a unei copii a listei drepturilor augmentata, fapt ce ar permite subrutinei sa efectueze operatii interzise programului chemator *Cu mici exceptii, unitatile de gestiune a memoriei din familiile microprocesoarelor moderne nu dispun de mijloace hardware speciale pentru pentru implementarea domeniilor multiple de acces in forma pura. *In schimb, MMU sunt proiectate pentru sprijinirea eficienta a domeniilor de acces asociate proceselor. Acelasi hardware poate fi folosit pentru implementarea domeniilor multiple, cu o anumita degradare a performantei, deoarece este necesara modificarea continutului memoriei interne a MMU la fiecare apel de procedura. 88)Stari masina privilegiate *Pe baza acestei abordari, CPU isi poate asuma, la fiecare moment, una dintre cele n stari privilegiate. Fiecare procedura este asociata cu o stare privilegiata, asa ca, atunci cind una din ele isi incepe executia, CPU isi modifica starea in concordanta cu numarul privilegiului asociat procedurii. De asemenea, oricarui obiect i se asigneaza un numar de privilegiu.*Domeniul de acces al unei proceduri este constituit de catre toate obiectele din spatiul

virtual al procedurii, ale caror numere de privilegiu sunt mai mari sau egale cu starea actuala a CPU (daca numerele mai mici indica privilegii de grade superioare).*Mecanismul este usor de implementat: numarul privilegiului este memorat, in mod normal, in registrul intern de stare a CPU, care este stocat in stiva cand se apeleaza o procedura si este automat restaurat la terminarea executiei acesteia. *Numarul de privilegiu se poate determina fie prin specificarea lui in instructiunea de apelare, fie prin citirea lui dintr-un descriptor adecvat al procesului. Prima metoda presupune existenta unei instructiuni care sa permita aceasta implementarei; a doua metoda se utilizeaza in sistemele care poseda modurile de lucru kernel (nucleu)si user (utilizator), in care o instructiune de apel sistem produce modificarea starii nucleului.*Un alt mecanism hardware cerut de implementarea unei masini cu stari privilegiate consta in posibilitatea de a testa daca referirile sunt facute la obiecte cu numarul privilegiului egal sau mai mare cu cel al CPU. *Desi toate microprocesoarele moderne implementeaza diferite stari pentru CPU care sunt recunoscute de mijloacele hardware disponibile, doar putine din ele, cum este cazul microprocesorului iAPX286, ofera mecanismele hardware pentru compararea starii CPU cu numarul privilegiului obiectului adresat. Deci, mecanismul starilor privilegiate ofera protectie doar pentru un subset de instructiuni speciale si pentru registrele interne. *Mecanismul bazat pe stari privilegiate, chiar in cazul implementarii complete, violeaza principiul mediului inchis. *Acest lucru se datoreaza faptului ca procedurile cu numar mic al privilegiului au, adesea, mai multe drepturi de acces decat cele strict necesare pentru a-si indeplini functia, facand mai dificila detectarea erorilor produse de defecte hardware, deoarece nivelul lor de privilegiu le permite manipularea de obiecte la care accesul nu ar fi necesar *Devine posibila cresterea multimii drepturilor prin transferul unor parametri neadecvati spre procedurile privilegiate. *De exemplu, daca un proces invoca o primitiva sendmessage, care transfera un numar unei cutii postale care, in mod normal, nu ii este accesibila, s-ar putea ca rezultatul sa constea in atasarea unui mesaj la acea cutie postala, fara a poseda dreptul de a o face.*Un alt pericol pentru securitatea sistemului este dat de posibilitatea de apelare a unei proceduri mai putin privilegiate.*In acest caz devine posibil a apela o rutina bine testata si a obtine rezultate eronate, deoarece rutina a apelat o procedura mai putin meticulos testata, procedura ce a indus eroarea. *In final, credibilitatea rezultatelor obtinute de utilizator este inferioara nivelului dorit, ceea ce faciliteaza deteriorarea programelor de nivel superior. *Deci, in timp ce obiectele accesibile sunt doar cele cu numar de privilegiu mai mare sau egal, procedurile apelabile sunt cele cu numar de privilegiu mai mic sau egal. 89)Mijloace de sprijin pentru testarea drepturilor nCea mai des folosita metoda de a atasa drepturi obiectelor de memorie in sisteme cu microprocesoare consta in a atasa un set de fanioane, numite "drepturi", aceluiasi descriptor al obiectului utilizat pentru conversia adreselor virtuale in adrese fizice. *Aceasta tehnica permite MMU sa gaseasca drepturile asociate obiectului de memorie adresat in descriptorul pe care l-a identificat in vederea conversiei de adrese, asa ca ambele operatii se pt efectua in paralel. *In consecinta, drepturile se asociaza segmentelor sau paginilor, dupa cum se foloseste segmentarea sau paginarea ca tehnica de gestiune a memoriei. Totusi, din punctul de vedere al protectiei memoriei, intre cele doua moduri de gestiune exista o importanta deosebire.*Segmentele sunt subdiviziuni ale programului vizibile de catre programator, cel care decide modul de organizare a programelor in segmente. Deci, fiecare segment poate fi ales astfel incat sa i se poata asocia un anumit drept. *Metoda paginarii nu permite programatorului sa structureze programul pe pagini, asa ca nu exista nici o relatie intre continutul paginii si semantica programului, o pagina putind contine un conglomerat de informatii care necesita - in scopuri legate de protectie - diferite tipuri de drepturi. *De exemplu, o aceeasi pagina poate contine cod si date, accesul la cod facindu-se prin operatii de citire/inscriere. Rezulta ca nu este posibila protejarea codului impotriva inscrierilor eronate, deoarece este necesar a permite inscrierea in conjunctie cu datele din pagina. *De aceea, segmentarea este de preferat pt. o implementare eficienta a mecanismelor de protectie bazate pe drepturi.*Sistemele de paginare au avantaje importante privind alocarea memoriei, segmentarea cu paginare pare a fi o buna metoda, combinind avantajele atit ale segmentarii, cat si ale paginarii. *Desi drepturile au o durata lunga de viata, aceasta caracteristica este dificil de implementat in sistemele cu microprocesoare, in cadrul carora drepturile sunt stocate

in descriptorii folositi pentru gestiunea memoriei. *Apar probleme cand programele se afla partial in memoria principala si partial pe disc. In acest caz, campurile fiecarui descriptor folosit pentru evaluarea adresei fizice isi schimba continutul de fiecare data cand pagina sau segmentul la care se face referire este adus din memoria secundara.*Este dificil a transfera drepturile prin transferul descriptorului de segment sau de pagina, deoarece continuturile campurilor acestuia s-ar putea sa nu fie corecte. *Mai mult, proliferarea descriptorilor da nastere unor probleme legate de concordanta intre diferite copii, care trebuie anulate cand un segment sau o pagina sunt evacuate si actualizate cand acelasi segment sau pagina sunt incarcate in memorie.*In continuare se indica o lista a celor mai des utilizate drepturi de acces. Trebuie mentionat ca unele din acestea pot fi atribuite simultan, intrucat se exclud reciproc:executie (execute only): cand fanionul asociat este 1, singurul drept posibil este acela de a extrage instructiuni. Fanionul este folosit pentru protectia zonelor de cod; citire (read only): cand fanionul asociat este 1, drepturile posibile sunt citirea de date si extragerea de instructiuni. Fanionul este folosit pentru protectia obiectelor de memorie ce nu pot fi modificate;acces exclusiv la date (no CPU): cand fanionul asociat este 1, extragerea de instructiuni este considerata ilegala. Fanionul este folosit pentru identificarea obiectelor de date. 89)Protectia memoriei prin mijloace hardware *Listele de drepturi si listele de acces ofera un grad limitat de protectie impotriva alterarii datelor si programelor pastrate in memorie, deoarece actiunea lor este limitata la evitarea propagarii erorilor dincolo de transmiterea domeniului de acces. *Pentru detectarea rapida si,eventual, corectarea erorilor se utilizeaza frecvent mijloace de protectie hardware. *Necesitatea unui astfel de test provine din cresterea constanta a dimensiunii memoriei, fapt ce contribuie la cresterea la circa 60 - 70% a ponderii erorilor de memorie in totalul erorilor sistem. *In favoarea protectiei prin mijloace hardware pledeaza si faptul ca, din punctul de vedere al volumului suplimentar de memorie si a circuitelor necesare implementarii, metodele folosite pentru detectarea si corectare a erorilor nu ridica probleme deosebite. *In prezent exista mai multe circuite integrate care efectueaza codificarea/decodificarea in vederea detectiei si corectiei erorilor, ceea ce reduce costurile de implementare.*In cele ce urmeaza se vor ilustra solutii curent utilizate in acest domeniu. 90)Detectia erorilor de memorie *Cea mai simpla tehnica de detectare a erorilor este bazata pe bitul de paritate. *Ea foloseste un singur bit suplimentar pentru fiecare cuvint de memorie, in care se memoreaza valoarea functiei "sau exclusiv" sau a functiei "si exclusiv" avind la intrare bitii cuvintului de date asociat. In cazul functiei "sau exclusiv" paritatea este cu sot, in celelalt caz ea fiind fara sot.*Inscrierea in memorie a unui cuvint este insotita de evaluarea bitului de paritate si el se memoreaza simultan cu datele. *La citirea aceluiasi cuvint de memorie sunt extrasi bitii de date si cel de paritate. Un circuit hardware evalueaza paritatea bitilor de date extrasi si o compara cu bitul de paritate evaluat la memorare.*In cazul coincidentei paritatii calculate cu cea memorata, se considera ca informatia citita este corecta. In caz contrar se emita un semnal catre CPU, indicind detectarea unei erori de memorie. *Evident, paritatea cuvintului de date citit se calculeaza in acelasi mod ca la memorarea cuvintului de date. *Mecanismul de testare a paritatii descris mai sus permite detectarea erorilor care afecteaza un numar impar de biti ai cuvintului de date. Eronarea unui numar par de biti trece nedetectata. *Intrucat capacitatea de detectie/corectie a erorilor de catre un cod este data de numarul maxim de erori detectate/corectate in cazul cel mai nefavorabil, controlul paritatii permite evidentierea erorilor simple. 91)Coduri detectoare/corectoare de erori *Tehnologiia memoriilor RAM dinamice a permis realizarea unor mari volume de memorie pe o placheta cu cablaj imprimat, fapt ce a dus la larga utilizare a acestui tip de memorii in sistemele cu microprocesoare. *Din pacate, memoriile dinamice nu sunt numai dense, ci si mai intens supuse erorilor decat memoriile statice. *Din cauzele obisnuite ale erorilor sunt de remarcat radiatiile (in special particulele alfa) si virfurile de tensiune. Deci, chiar daca memoria dinamica functioneaza normal, este posibila aparitia erorilor.*Pentru a face fata acestor probleme se utilizeaza coduri cu redondanta, capabile nu numai sa detecteze, ci sa si corecteze eventualelel erori. *Cind, la citirea unui cuvint de date, se constata o eroare, aceasta poate fi corectata si cuvintul reinscris in locatia corespunzatoare.*Daca eroarea a fost produsa de o particula alfa, memoria isi recapata continutul normal. Daca eroarea este rezultatul unei defectari

hardware, inscrierea nu poate corecta valoarea informatiei stocate, in schimb CPU va primi valoarea corecta pe care locatia adresata ar fi trebuit sa o contina*Codul corector de erori cel mai des folosit pentru memorii dinamice este codul Hamming ce permite detectarea erorilor duble si corectia erorilor simple. *Acest cod necesita un numar suplimentar de k biti pentru fiecare cuvint de date de n biti. asa incat eroarea unuia din cei k+n biti ai cuvintului de cod sa produca o combinatie binara unica si distincta de zero. *Deci este necesara satisfacerea conditiei k+n =< 2 k1 - 1 nInaintea stocarii in memorie, fiecarui cuvint de n biti de date i se adauga cei k biti de control. La citirea memoriei se extrag cei n-k biti memorati si se calculeaza asa numitul sindrom. *Daca valoarea sa este 0, se considera ca informatia citita este corecta. In caz contrar, valoarea lui identifica in mod unic bitul eronat sau semnaleaza prezenta erorii duble. *Calculul bitilor de control necesita calcularea produsului intre o matrice A de dimensiune (k-1) x n si vectorul de date D de n biti. *Rezulta primii k-1 biti de control ai vectorului C, conform formulei: d1*a1,i +d2*a2,i + ... + dn*an,i = ci, i=1,2,...,k-1*Ultimul bit de control este bitul de paritate (cu sot) al celorlalti k+n-1 biti ai vectorului C. nCind continutul citit al locatiei de memorie este corect, sindromul este compus numai din 0. Daca apare o eroare simpla, atunci sn = 1 si, de asemenea, devine 1 sindromul in al carui calcul s-a folosit bitul eronat. *In consecinta, vectorul sindrom capata valoarea acelei coloane a matricii de control A' care contine bitul eronat. Daca sn = 0 dar sindromul nu este nul, acest lucru semnifica aparitia a doua sau mai multe erori, dar nu se dispune de informatiile necesare corectarii lor. *In concluzie, codul folosit permite detectia erorilor simple si duble, precum si detectia erorilor simple.*Alegerea elementelor matricii A, deci si ale matricii A', nu este nici pe departe atit de empirica pe cat pare din exemplul considerat. *Exista o teorie a codurilor, bine pusa la punct, care ofera baze stiintifice de selectare a codului optim pentru o situatie data. *Costul suplimentar exprimat in consum de memorie este k/n. *Ar parea ca este rentabil a folosi cuvinte cu numar n de biti mare, ceea ce ar duce la scaderea raportului k/n. *Pe de alta parte, cu cat n este mai mare, creste si probabilitatea de aparitie a erorilor, sau, altfel spus, creste probabilitatea ca numarul erorilor care apar sa depaseasca numarul de erori corectabile sau detectabile de catre cod.*Din punctul de vedere al circuitelor secundare nu se ridica probleme deosebite, deoarece tehnologia integrarii pe scara larga a permis realizarea, in mai multe variante, a circuitelor care rezolva complet codificarea, detectia si corectia erorilor. Circuitele pot fi folosite in structuri de cuvinte de memorie de l, 2 sau 4 biti, ceea ce inlesneste munca proiectantului.*Bitii de control pot fi folositi si pentru protectia memoriei impotriva adresarii eronate. In acest caz bitii de control sunt calculati prin luarea in considerare a bitilor atit de date cat si de adresa.*Cind se face accesul unui cuvint in vederea citirii se face concatenarea bitilor de date si control cititi din memorie cu bitii de adresa, apoi se verifica sirul astfel rezultat. *Codurile corectoare de erori permit unui modul de memorie sa se comporte corect chiar in prezenta unui mic numar de erori in matricea memoriei, deoarece continuturile incorecte sunt modificate asa incat, din exterior,ele sa apara corecte. *Daca eroarea se datoreste unui defect permanent, ea poate fi corectata de catre mecanismul de corectie, dar nu poate fi indepartata pina la repararea defectului. *Deci, numarul acestor erori creste in timp pina cind ele nu mai pot fi corectate folosind bitii redondanti.*Pentru cresterea fiabilitatii memoriei se pot folosi biti de rezerva. *Memoria poate fi considerata ca o matrice in care liniile corespund cuvintelor, iar coloanele - bitilor de acelasi ordin din cuvintele memoriei. 92)Reconfigurarea memoriei *Tehnica bitilor de rezerva foloseste un numar h de coloane suplimentare, asa ca fiecare cuvint are h biti de rezerva. *Folosirea de coloane suplimentare in loc de rinduri suplimentare este dicatata de structura circuitelor de memorie, care tind sa aiba un mare numar de cuvinte foarte scurte, ceea ce face mai ieftina introducerea de coloane suplimentare. *In favoarea acestei alegeri pledeaza si faptul ca, daca se defecteaza un circuit de memorie ce asigura o coloana, toate cuvintele vor prezenta erori in aceasta coloana. Este mai simplu a substitui coloana defecta cu una de rezerva.*Utilizarea eficienta a bitilor de rezerva presupune existenta unui cod redondant, care sa localizeze coloana defecta, si un circuit de multiplexare, care sa reconfigureze conexiunile la magistrale ale memoriei intr-un mod care sa permita utilizarea coloanei de rezerva in locul celei defecte.*Desigur, erorile pot aparea in coloanele obisnuite, ca si in cele de rezerva. De aceea, codul folosit trebuie sa considere toate coloanele memoriei pentru a evita inlocuirea unei

coloane defecte cu alta coloana defecta. 93)Diagrama Starilor Proceselor A. Starea inactiva *Aceasta stare constituie o interfata intre planificatorul pe termen lung si planificatorul pe termen scurt: un proces este creat de catre planificatorul pe termen lung si este introdus in starea inactiva. Un proces poate fi inlaturat din sistem, prin distrugere, daca planificatorul pe termen lung considera ca nu este necesara prelucrarea de catre sistem a procesului inactiv. Un proces inactiv poate fi activat si i se pot asigura parametrii ceruti de algoritmul de planificare pe termen scurt. Realizarea acestei tranzitii se face la cererea explicita a procesului aflat in rulare sau a planificatorului *Tranzitia in sens opus se poate face numai cand procesul este in starea activa. In acest caz, se emite o cerere explicita de catre procesul aflat in rulare (eventual - o rutina de planificare), folosita pentru dealocarea intregii structuri de comanda (cum este descriptorul procesului) folosit de catre planificatorul pe termen scurt.*In general, procesele ce revin in starea inactiva sunt evacuate din sistem, intrucat ele s-au executat cu succes sau au esuat, asa ca rularea lor nu mai este necesaraB. Starea activa *Un proces in starea activa are alocata toata structura de comanda ceruta de catre planificator, deci procesul este gata sa concureze pentru obtinerea CPU. Totusi, numai ca urmare a unei comenzi explicite procesul este transpus in starea gata de rulare sau in rulare, dupa cum prioritatea procesului este inferioara sau superioara celei a procesului aflat in rulare *Cand un proces comuta din starea activa in cea gata de executie si, apoi, in starea de executie, el este executat de la inceput; contorul programului va fi initializat cu adresa punctului de intrare a programului principal executat de catre proces. *Daca un proces concureaza de doua ori pentru obtinerea CPU, el este reinitializat de fiecare data cand paraseste starea activa. Acest tip de comutare in starea gata de rulare sau in cea de rulare este diferit de cel de parasire a starii de asteptare, caz in care procesul nu este reinitializat, ci executia sa reluata prin restaurarea starii la momentul la care procesului i s-a luat accesul la CPU. *Suplimentar utilizarii ca stare intermediara intre lumea exterioara si concurenta pentru CPU, starea activa poate fi folosita pentru relansarea unui proces care a fost afectat de o eroare reparabila, sau pentru executarea proceselor care necesita mai multe executii. C. Starea de asteptare * Singurul mod de intrare in starea de asteptare consta in executia unei actiuni de suspendare cand procesul se afla in starea in rulare. Operatiile tipice producand suspendarea procesului sunt:tentativa de a intra intr-o regiune critica ocupata;semnalizarea la un semafor plin;transmiterea unui mesaj catre o cutie postala plina;primirea unui semnal de la un semafor gol;primirea unui mesaj de la o cutie postala vida *Orice proces care incearca sa efectueze una dintre operatiile enumerate nu mai poate continua sa fie executat pana in momentul in care entitatea (regiune critica, semafor sau cutie postala) si-a schimbat starea, ceea ce permite reluarea procesului *Operatiile efectuate de catre procesul in rulare, care ar putea comuta un proces din starea de asteptare in cea gata de rulare sau chiar in starea in rulare, sunt: iesirea din regiunea critica;semnalizarea la un semafor vid;transmiterea unui mesaj catre o cutie postala vida;primirea unui semnal de la un semafor plin;primirea unui mesaj de la o cutie postala plina.*Cand una dintre aceste operatii conduce la extragerea unui proces din starea de asteptare, controlul asupra CPU trece in sarcina planificatorului, astfel incat acesta poate decide daca procesul activat detine prioritatea cea mai inalta. In caz afirmativ, procesul ce iese din starea de asteptare este trecut direct in starea in rulare; in caz contrar el intra in starea gata de rulare. D. Starea gata de rulare *Tranzitiile in starea gata de rulare reprezinta alternativa la tranzitiile in starea de rulare (cu exceptia acelora spre starea de asteptare), deoarece diferenta intre procesele aflate in cele doua stari este doar o chestiune de prioritate. In consecinta, tranzitiile intre starile gata de rulare si in rulare sunt cauzate de modificari de prioritati relative ale proceselor executabile. *Diferenta majora consta in faptul ca procesele in starea gata de rulare nu isi pot modifica ele insele starea, in timp ce procesele in rulare pot efectua tranzitii de stare prin executarea de actiuni corespunzatoare. E. Starea in rulare *Procesele in starea de rulare sunt singurele care pot provoca tranzitii de stare ale altor procese, ca si pentru ele insele. Deci, este posibila parasirea acestei stari drept consecinta a unei actiuni explicite, programata de catre utilizator, cum este terminarea normala a unui proces sau dezactivarea temporara. *De asemenea, este posibil ca un proces sa fie fortat sa elibereze CPU drept consecinta a unei actiuni din program care nu a avut destinatia explicita de a produce o tranzitie de stare a procesului. *Aceste actiuni se pot imparti in doua

clase:acelea care produc tranzitia in starea de asteptare acelea care produc tranzitia procesului curent in starea gata de rulare *Prima clasa a fost discutata anterior. *In cea de a doua intra actiunile care produc activarea sau reluarea altor procese. Cum procesul activat ar putea avea o prioritate superioara celui care l-a activat, pot aparea schimbari in prioritatile relative pentru toate procesele ce indeplinesc conditiile de rulare, caz in care procesul in rulare este trecut in starea gata de rulare. *Un al treilea tip de eveniment care produce parasirea de catre un proces a starii in rulare este constituit de actiunea declansata de aparitia unor situatii externe sau interne neobisnuite, care nu pot fi prevazute de catre programator.*Astfel de evenimente includ intreruperi sau exceptiii fatale ce apar pe durata executiei procesului. Ambele pot fi considerate ca evenimente care activeaza procese speciale, constituite din rutinele de tratare corespunzatoare. Intre cele doua tipuri de evenimente exista, totusi, diferente. *Rutinele de tratare a conditiilor fatale de exceptie (overflow, violarea protectiei) se executa ori de cate ori ele sunt activate de catre conditiile corespunzatoare, deci au intotdeauna prioritate superioara procesului care le-a generat. 94)Planificarea in sisteme multiprocesor *Mecanismul de planificare descris mai sus poate fi comod implementat, prin mijloace software, la care se adauga un dispozitiv de tratare a intreruperilor in sistemele cu procesor unic. *Lucrurile se complica in conditiile unui sistem cu mai multe procesoare. Intr-un sistem multi-procesor fiecare proces in rulare este asignat unei CPU si exista doua posibilitati ca un proces sa fie executat de catre sistem:orice proces poate fi rulat de catre orice CPUprocesele pot fi grupate in submultimi, fiecare din ele alocata unei CPU. *Prima situatie se intalneste in sistemele de uz general, pentru care sistemul este considerat ca un tot unitar. Deci, exista un singur grup de procese pentru fiecare din starile posibile. Cand un proces este trecut in starea in rulare, oricare dintre CPU poate fi utilizata pentru a-l rula. Totusi, de regula, se selecteaza CPU care ruleaza procesul cu cea mai mica prioritate. Acesta este trecut in starea de asteptare. nA doua varianta de sistem multiprocesor contine un numar de copii ale situatiei sistemului cu procesor unic. Deci, fiecare CPU are propriile sale grupuri de procese in starea gata de rulare, activa sau inactiva, si un singur proces in starea in rulare. *Aceste sisteme sunt folosite, de regula, in aplicatiile de timp real, pentru care perifericele I/O conectate la fiecare CPU dicteaza locul de executie a fiecarui proces. Diferenta intre acest tip de sistem multiprocesor si un set de sisteme multiutilizator, dar cu un procesor unic, consta in faptul ca procesele ruland pe diferitele CPUse pot sincroniza, pot comunica intre ele, sau pot concura pentru resurse comune. *In ambele tipuri de sistem, o operatie efectuata de catre un proces ruland pe CPUi poate face ca CPUj sa comute de la executia procesului A la cea a procesului B. *Replanificarea unei CPU necesita un anumit suport hardware pentru transmiterea informatiei de la CPUi la CPUj pentru a indica noile conditii.*Intrucat operatia care produce replanificarea apare pe o alta CPU decat cea care comuta procesul pe care il executa, ea constituie un eveniment extern pentru a doua CPU, fapt ce justifica implementarea cu ajutorul intreruperilor a acestui tip de comunicatie interprocesor.*Revenind la sistemul multiprocesor, se pot concepe mai multe metode de implementare a intreruperilor interprocesor. *O solutie consta in utilizarea unor celule speciale de memorie in zona comuna de memorie, fiecare generind, cand se scrie in ea, o cerere de intrerupere spre o anumita CPU. In modul acesta, o CPU se poate intrerupe prin efectuarea unei operatii de inscriere la o adresa speciala. Datele inscrise in locatiile speciale pot indica sursa intreruperii. O alta solutie consta in utilizarea unui set de linii speciale in cadrul magistralei comune, rezervate generarii cererilor de intreruperi interprocesor. Un caz particular este cel utilizand o unica linie de difuzare (broadcasting) care transmite serial mesaje de intrerupere. Mesajele includ identificatori privind sursa si destinatia intreruperii, precum si date indicand motivul intreruperii. Tehnica este recomandata de o serie de standarde: Future Bus (IEEE P896), VME, Multibus II [16]. 95)Localitatea programelor (Locality principle) *Exemplu: alocarea registrelor de catre programator in limbaj de asamblare. *Registrele CPU - cea mai rapida forma de memorie din sistem, dar capacitatea lor - insuficienta .*Un programator experimentat foloseste registrele pentru a memora datele la care frecventa de acces este cea mai mare. *In cazul exemplului, gestiunea unei zone de memorie, unica si rapida, se bazeaza pe cunoasterea structurii programului.*O astfel de tehnica - inadecvata pentru gestionarea memoriei prin mecanisme hardware sau de catre sistemul de

operare. S-a evidentiat existenta unui principiu, numit principiul localitatii programelor (program locality ), extensibil si la date. Daca la momentul t se face acces la adresa de memorie x, exista o probabilitate ridicata ca, la momentul t + t,sa se efectueze accesul la adresa de memorie x + x, unde t si x sunt valori mici ale lui t si x. *Procesul de acces la memorie al unui program in executie se poate diviza in faze. *Pe durata fiecarei faze referirile la memorie au loc doar in cadrul unui mic subspatiu al spatiului de memorie, accesul fiind concentrat in jurul catorva blocuri contigue de memorie. *Doar cand programul se muta de la o faza la alta modelul de acces la memorie devine neuniform, pana la atingerea noii faze, dupa care referirile la memorie se centreaza pe o aglomerare diferita de blocuri.*Mecanismele de gestiune automata a spatiului de memorie pot folosi localitatea programelor pentru a pastra in memoria rapida subspatiul de memorie cu cele mai frecvente accese in cadrul programului curent.*Element esential - detectarea tranzitiei intre faze si identificarea locatiilor de memorie utilizate de catre fiecare faza. *Combinarea gestionarii automate a memoriei cu cea efectuata de catre utilizator presupune oferirea de catre programator a unor informatii privind structura programului, PRECUM SI CONCEPEREA ADECVATA a programului.*permite mecanismului automat sa mute informatiile intre diferitele subsisteme de memorie corespunzator informatiilor furnizate de catre programator. 96)Ierarhizarea memoriei *Principiile de gestiune a memoriei evidentiate anterior conduc la ideea organizarii ierarhizate a diferitelor subsisteme de memorie. *La varful ierarhiei se gaseste memoria cea mai mica si cea mai rapida, in timp ce baza este constituita din memoria cea mai lenta si cu cel mai mare volum. *In general transferul de date are loc doar intre niveluri ADIACENTE ale ierarhiei.*Organizarea memoriei bazata pe localitatea programelor ofera valori bune pentru raportul cost/performanta *Ierarhia memoriei are un numar de cel putin 5 niveluri. *Registrele de uz general constituie nivelul 0 al memoriei pentru date (incluzand adresele programului) si registrul instructiunii este nivelul 0 al memoriei pentru cod. *Procesoarele actuale dispun de cateva registre dedicate pastrarii de informatii temporare necesare gestiunii memoriei. Aceste registre se pot afla, partial, sub controlul programului (privilegiat) dar, in general, sunt gestionate de CPU. *Registrele interne ale CPU sunt direct conectate la diversele subunitati de prelucrare din CPU cea mai rapida si cea mai mica memorie din sistem *Viteza de prelucrare a microprocesoarelor noi creste continuu sunt necesare sisteme de memorie mai rapide.*Timpul de acces al memoriei descreste constant timpul total de raspuns este afectat de intarzieri de interfatare, inclusiv de penalizarea de timp a transferului prin frontierele circuitului. *Introducerea unui nou nivel de ierarhizare compus din memoria care nu este direct conectata la subunitatile de prelucrare, dar implementata pe aceeasi placheta de siliciu ca si CPU. 97)Memorie cache pe chip (pe circuit) *Acest nivel, nivelul 1 al memoriei, este mai lent decat registrele si necesita unele circuite de interfata; totusi, ea este mai rapida decat memoria din exteriorul circuitului. *La acest nivel inca persista distinctia intre date, cod si informatii de gestiune a memoriei.*Memoria cache pe circuit destinata programului este, uneori, organizata ca o stiva de tip FIFO, al carei varf este constituit de registrul instructiunii. Aceasta organizare simpla apare ca urmare a modului aproape liniar al extragerii instructiunilor (perturbarile - create de executia instructiunilor de salt). *Deci, exista o probabilitate ridicata ca urmatorul cuvant de cod ce trebuie sa fie extras sa se afle la adresa urmatoare. *Instructiunile de salt distrug traseul liniar prin spatiul de adresare si videaza stiva. Este necesara aducerea de noi cuvinte de cod din memoria externa, deci dispare, pt scurt timp, efectul favorabil al memoriei cache pe circuit.*Instructiunile necesita un anumit timp pentru a fi executate in interiorul CPU unitatea de gestiune a tamponului de memorie umple stiva FIFO mai rapid decat este vidata de catre CPU, care extrage instructiuni.*Deci, dupa executia unei instructiuni de salt, sirul de asteptare in interiorul circuitului a instructiunilor se reface. *Poate aparea un conflict intre CPU, care trebuie sa execute un ciclu de citire/inscriere a memoriei externe, si unitatea de gestiune a stivei FIFO, care trebuie sa execute un ciclu de citire din memorie pentru a completa sirul de instructiuni. In astfel de situatii ciclul necesar prelucrarii de date este prioritar. *Accesul la date - mai putin predictibil decat cel pentru cod memoria cache pe circuit este organizata ca o memorie cu acces aleator, compusa dintr-o parte de date si o alta de eticheta (tag)*TAG - informatia corespunzatoare adresei CPU utilizata pentru acces la date. *DATA

- valorile datelor *Implementarea memoriei cache pe circuit ridica un numar de probleme arhitecturale: memoria TAG este mare comparativ cu memoria DATA, deci se consuma o mare arie de siliciu pentru gestiunea memoriei.studii efectuate prin simulare au aratat ca introducerea memoriei cache pe circuit creste, in loc sa descreasca, viteza ceruta pentru transferul prin frontiera circuitului. *Tehnica de tip cache este folosita si pentru a memora informatiile cu cea mai ridicata fracventa de utilizare, destinate gestiunii memoriei in acelasi circuit cu CPU sau intr-un circuit destinat special gestiunii memoriei (memory management unit - MMU). *O astfel de unica memorie cache este comandata pe baza principiului LRU (least recently used - cea mai veche informatie folosita. *Nu toate mecanismele de comanda a memoriei cache pe circuit sunt necontrolabile prin program, dar ele sunt implementate prin mijloace hardware si prezenta lor tinde sa fie transparenta fata de programator. 98)Memorie cache pe placa (on-board)*Aceleasi motive care justifica introducerea de memorii cache pe circuit recomanda realizarea lor pe aceeasi placa a CPU: Intarzierea introdusa de circuitele de interfatare, ca si de transmisia si regimurile tranzitorii ale informatiilor pe magistrala sistemului necesita, adesea, introducerea unei stari de asteptare (wait state), mai ales pentru microprocesoarele foarte rapide, atunci cand se adreseaza memoriei care nu se afla pe aceeasi placa. *Memoria cache pe aceeasi placa permite obtinerea de timpi de acces la sistemul de memorie apropiati de cei oferiti de memoria cache de mare viteza, dar la un pret apropiat de cel al memoriei mai mari si mai lente (memorie primara).*In sistemele multiprocesor apare un motiv suplimentar de introducere a memoriei cache. In acest sistem, concurenta intre diferitele CPU pentru accesul la memorie conduce la intarzieri care au ca efect cresterea timpului mediu de acces la memorie. *Este necesara introducerea urmatorilor parametri:dimensiunea cache: dimensiunea memoriei DATA, exprimata in numar de unitati adresabile de catre CPU;dimensiunea blocului: dimensiunea celei mai mici unitati de memorie care poate fi manipulata de mecanismul de gestiune cache (in general, dimensiunea blocului este o putere a lui 2);dimensiunea multimii (set size): numarul de locuri diferite in memoria DATA unde organizarea cache permite stocarea oricarui bloc citit din memoria primara (este, in general, tot o putere a lui 2). *Fie S - dimensiunea multimii adreselor *Adresa CPU poate fi transformata in una din cele S adrese folosite pentru memoria DATA. Deci bitii s ai adresei cache sunt obtinuti prin transformarea prin intermediul memoriei TAG, in timp ce bitii ramasi x = k - s - b sunt determinati in mod unic din adresa CPU, apoi sunt copiati. *Intrucat bitii x determina setul de blocuri posibile in cadrul memoriei de date, iar localizarea exacta in cadrul multimii nu este supusa la restrictiii din partea altor biti de adresa, transformarea celor mai semnificativi n - b - x biti ai adresei emise de catre CPU in cei mai semnificativi s biti ai adresei de memorie cache ar trebui efectuata, in mod ideal, de un set de memorii asociative (cate una pentru fiecare set). *O alta solutie este cea din figura, unde se folosesc doar memorii RAM. In acest caz, numarul de biti utilizati pentru memoria TAG este dat de 2k-b * (n - k + s), care realizeaza corespondenta intre dimensiunea memoriei cache (2k), dimensiunea blocului (2b), dimensiunea multimii (2s) si dimensiunea spatiului adreselor CPU (2n). Prin modificarea valorii lui s se obtin urmatoarele trei organizari clasice:*a) s = 0 (organizare indexata): fiecare bloc din memoria primara este transformat intr-un unic bloc al memoriei cache;b) 0 < s < h-b (organizarea partial asociativa de seturi): orice bloc din memoria primara poate fi transformat intr-un numar limitat de seturi ale blocurilor memoriei cache;c) s = h - b (organizarea complet asociativa): orice bloc al memoriei primare poate fi transformat in orice bloc al memoriei cache. s = h - b*Valorile mari ale lui s conduc la dimensiuni mari ale memoriei TAG. *Unele rezultate experimentale [19] au evidentiat in mod clar ca, prin cresterea dimensiunii setului, creste probabilitatea de acces in memoria cache. *Aceleasi studii au aratat ca dimensiunea de 2 sau 4 a setului conduce la performante foarte apropiate de cele ale organizarii complet asociative.*Din cele de mai sus decurge preferinta proiectantului pentru memorii cu organizare partial asociativa, cu o dimensiune mica a setului. 99)Realizari de memorie cache Principle of locality:*Programele executa secvente *Programele au bucle *Matricele sunt memorate in blocuri contigue *Datele neinrudite sunt plasate in acelasi segment*Write through cache - prezinta datele imediat Write back cache - retine datele pana cand este necesara inscrierea unui intreg bloc (posted write) *Dirty cell*Organization *Tag subsystem,

memory subsystem divizate in refill lines de dimensiuni egale (n cuvinte, n - putere a lui 2)Obisnuit: 4 - 64 octeti *Refill line boundary Transferul se face in unitati de dimensiune egala cu cea a refill line Tag in memorie asociativa:Daca memoria principala are N refill lines, atunci sunt necesari log2 N biti de adresa pt refill lines. Toate componentele simultan scumpa *Partitioneaza memoria in k coloane cu N refill lines / coloana. *Se foloseste low address interleaving cuvinte consecutive de memorie se afla in refill lines diferite cache refill mapped*Cache are o coloana cu N randuri, fiecare aratand o refill line*Cache refill lines sunt grupate in sectoare, numite si randuri (rows).*Cache mapeaza oricare sector al memoriei principale in oricare sector cache se foloseste o memorie asociativa. *Refill lines isi pastreaza ordinea in cadrul sectoarelor memoria asociativa mapeaza doar adrese de sectoare.Cache foloseste validity bits, cate unul pt fiecare refill line, pt a pastra evidenta refill lines aflate in memoria cache. 100)Overlay *Tehnica larg utilizata in minicalculatoare. Ea mai este utilizata pentru rularea de programe mari pe microcalculatoare personale cu memorie mica. Tehnica: programul este partial rezident in memoria principala, restul fiind memorat pe disc.nCand o parte a programului stocat pe disc devine necesara pt CPU, aceasta parte este adusa in memoria principala in locul altei parti a programului, care nu este necesara la acel moment. *Diferitele subspatii ale spatiului programului se pot incarca in aceeasi zona de memorie apare suprapunerea acestor subspatii; de aici decurge si numele tehnicii de gestiune a memoriei: overlay (suprapunere).*Este esentiala evitarea situatiilor cand doua parti distincte si care se pot suprapune ale programului sunt simultan necesare in memorie pentru executarea programului. Singurul care poate face aranjamentele cerute de tehnica overlay este programatorul, pentru ca el cunoaste modul de evolutie a programului si care sectiuni ale lui trebuie sa fie rezidente in memorie la un anumit moment de timp *Partitionarea se poate efectua prin structurarea intregului program intr-un arbore de module, pentru care toate modulele de pe un nivel se pot suprapune.*Arborele de suprapunere se poate construi urmarind arborele apelarii procedurilor. Radacina este reprezentata de programul principal, care este permanent rezident in memoria principala, iar toate procedurile apelate direct de catre programul principal se pot suprapune, pentru ca ele sunt apelate una cate una, nici una din ele ne necesitand prezenta alteia.*Realizarea arborelui de suprapunere este o problema netriviala. Modulele superpozabile trebuie sa aiba, aproximativ, aceeasi dimensiune, ca sa poata fi continute in acelasi spatiu de memorie. *Alta problema este generata de minimizarea operatiilor de instalare in si evacuare din memoria principala a modulelor (swapping). Cu cat numarul acestor operatii este mai mare, cu atat eficienta de ansamblu este mai mica. *Recomandarea: realizarea de module de mari dimensiuni. DAR gestionarea memoriei se face cu mai buna eficienta daca modulele superpozabile sunt de mici dimensiuni. Concluzie: programatorul trebuie sa realizeze compromisul intre cerintele privind memoria si cele referitoare la eficienta executiei. nProgramatorul se poate baza pe instrumente software de dezvoltare necesare elaborarii taskului final, intrucat exista editoare de legaturi care se preteaza utilizarii tehnicii overlay.*La executie, un program construit conform tehnicii mentionate efectueaza apelari ale sistemului de operare ori de cate ori este necesar a folosi o procedura care, la acel moment, nu este rezidenta in memoria principala. *Implementarea tehnicii overlay nu necesita mijloace hardware speciale, cu exceptia unor unitati rapide de disc, care sa permita incarcarea cu mare viteza in memoria principala a sectiunii cerute a programului. *Adresele de program generate de compilatoare nu depind de structura arborelui de suprapunere, intrucat apelurile la procedurile externe sunt solutionate de catre editorul de legaturi, fie in modul normal, fie prin inserarea de apeluri catre sistemul de operare.*Tehnica overlay este un exemplu tipic pentru metodele care combina cunostintele programatorului despre comportarea programului cu comutarea automata a sectiunilor de program, cu scopul implementarii mecanismului de gestiune a memoriei. *Principalul dezavantaj al metodei: pregatirea arborelui de suprapuneri si necesitatea de a incarca in memorie un intreg modul, chiar daca doar o parte a lui este necesara. *Efect: se pot obtine performante mai slabe decat cele oferite de alte tehnici de gestiune, complet automate. DAR este perfect posibila rularea unor programe cu dimensiuni superioare celei a memoriei fizice disponibile. 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 + (n1) * P ***m nr. de segmente, n nr. de taskuri *Durata executiei in cazul secvential *** Tsec = n * Tinstr**instr durata executiei normale a instructiunii **i timpul de executie a segmentului i *** (tb = max (i))***In cazul ideal i = (durate egale in fiecare segment) si *** Tsec = n * m * ***Cu ipoteza i = , i = 1: m, se obtine = P: *** Tsec = n * m * P***S = speed up (factor de 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 + (n1) * P = 5 * 10 + (41) * 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. *Durata procesului se poate minimiza cu on-chip cache folosind buffere geografic apropiate si 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 *proiectare: daca executia nu este complet pipeline, secventa urmatoare de instructiuni nu poate fi 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 4lea 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 Add1.*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) * ***pb probabilitatea ca instructiunea sa fie de salt*c penalitatea indusa de aparitia saltului *Daca se alege target, sunt necesare (1 + c) cicluri pentru executie. Daca nu 1 ciclu *Deci: nr. 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 ***pb = 0,1 ... 0,3 pt = 0,6... 0,7*Daca pb = 0,2, pt = 0,65, c = 3* tave = 1,39 72% eficienta *Pentru a se reduce efectul mai multe tehnici 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. *Latenta medie. Se determina pentru un ciclu dat n diagrama strarilor. Un ciclu n diagrama starilor 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 *RISC:*eficienta determinata de compilator *ciclu mai lung de dezvoltare software*cod mai 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 vsi 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 pipelineV 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 InterProcessor 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 existent2 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 partePentru a selecta un LDT, se executa instructiunea LLTR Si aici se utilizeaza memoria cache a registrelor 1 Procesorul multiplica indexul descriptorului cu 82 Offsetul astfel obtinut se adauga la adresa baza a GDT3 Procesorul citeste descriptorul de 8 octeti din memorie in partea invizibila a LDTRLDT 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 callO intrerupere hardware sau o exceptie software. Valorile CS si EIP sunt obtinute din IDTLansarea 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 segmentDPL (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 msUn 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 conformingC = 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 = DPLC = 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 0In 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 GateX 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: *1.Max(CPL,RPL)<= DPL poarta (la fel ca 1 de la CALL)*2.DPL al cod tinta <= CPL (<= dat de 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 segmentProcesoarele ulterioare generatiei 80286 dispun de patru segmente de date, selectate prin DS, ES, FS, GSAccesul 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 dateDescriptorul sau trebuie sa il caracterizeze drept read/writable.Descriptorul mai indica modul de expandare: - spre adrese crescatoare (Expand-Up) - spre adrese descrescatoare (ExpandDown)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 taskDeclansare timer (temporizator)Intrerupere ceas de timp realComutarea 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 LevelDaca 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 promptUtilizatorul 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 BIOSRutina de acces la disc (driverul) programeaza si activeaza DMADMA 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 SOAcces 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.