Sunteți pe pagina 1din 58

1 ------------------------------------ <Cuprins>------------------------------------

1. Limbaje de programare(Ciurea)
1. Operatori in C/C++
2. Variabile locale si variabile globale/ Durata de viata si domeniul de
vizibilitate a variabilelor
3. Tipuri de instructiuni
4. Instructiuni conditionale in C/C++
5. Instructiuni repetitive in C/C++
6. Siruri de caractere cu terminatie nula: declaratie, functii specifice
7. Functii: declaratie, apel, exemple
8. Recursivitate: definitie, exemple (multiplica instante ale aceleiasi cai).
Exista redundanta ? si utilizare
9. Backtracking: definitie, exemple si utilizare
10. Fisiere text: declaratie, deschidere, accesarea informatiei
11. Tipul pointer: declaratie, proprietati (tipuri de pointeri)
12. Alocarea dinamica a memoriei

2. POO (Breazu)
1. Explicati de ce se spune ca mostenirea multipla creeaza un graf orientat
aciclic.
2. Care este legatura intre mostenire si abstractizare.
3. Care este legatura intre polimorfism si mostenire ?
4. Diferenta intre "overloading" si "overriding".
5. Clase si obiecte
6. Drepturi de acces intr-o clasa.
7. Mostenirea
8. Incapsularea
9. Polimorfism
10. Constructori si destructori
11. Operatorul new, constructor si rol
12. Legaturi statice si dinamice la apelul functiilor
13. Tabela metodelor virtuale VMT
14. Solutii de tratare a exceptiilor
15. Durata de viata si vizibilitatea variabilelor
16. Transfer prin valoare si transfer prin referinta
17. Explicati: (cod cu mostenire)
18. Ce structuri de date se folosesc la functii ? Dar in cazul structurilor
obiectuale.
19. Fiecare obiect are o stare si o comportare si o " identitate". Explicati poza

3. Java (Sima)
1. Ce relatie exista intre structurile: coada cu prioritati, lista sortata si min/max
heap
2. Asemanarile si deosebirile intre o clasa abstracta si o interfata
3. Backtracking
4. Greedy
5. A*
6. Programarea dinamica
7. Care din struct ofera operatii mai eficiente: stiva, arbore, tabela de dispersie

1
8. Gestiunea mem in C si Java
9. Cls abstracte  interfata java; asemanari si deosebiri

// Ingineria Programarii
10. Ce se intelege prin "use cases" si unde se intalneste ?
11. Explicati unul dintre pricipiile de proiectare obiectuala : OCP, Liskov sau
DIP
12. Ce se intelege prin "dynamic dispatch" in contextul apelului unei metode?
13. In contextul design patterns ce este un sablon creational; exemplificati ;
Singleton, Adapter
14. Ce desemneaza faza de analiza in cadrul ingineriei software

4. Arhitectura sistemelor de calcul (Mihu Z.)


1. Principiul memoriei virtuale. Evidenţiaţi resursele hardware şi respectiv
software implicate în acest mecanism. Ce este şi care este rolul TLB
(Translation Lookaside Buffer) ?
2. Analizaţi comparativ cele 3 arhitecturi de cache (mapare directă,
semiasociativ şi asociativ) şi rezumaţi avantajele şi dezavantajele fiecărei
organizări. (Analizati si separat.)
3. Combinaţia memorie cache – memorie virtuală.
4. Cache adresat cu adrese reale; avantaje şi dezavantaje
5. Cache adresat cu adrese virtuale; avantaje şi dezavantaje
6. În sistemul de gestiune a memoriei identificăm algoritmi de înlocuire
relativi la:
i. memoria cache
ii. memoria virtuală
iii. TLB (Translation Lookaside Buffer)
Pentru fiecare caz explicaţi rolul algoritmului şi modul principial de
implementare
7. Rezumaţi caracteristicile esenţiale ale arhitecturilor:
a. RISC
b. CISC
c. Evidenţiaţi avantajele/dezavantajele fiecărei arhitecturi.
8. Ce e memoria virtuala ?

5. OPM + SOAC + PSAA (Vintan)


1. De ce nu este suficientă doar optimizarea unităţilor secvenţiale de program-
obiect (“basic-blocks”), fiind necesară optimizarea (globală a) întregului
program? În ce constau dificultăţile optimizării globale ? Soluţii de
principiu.
2. Care sunt motivele pentru care microprocesoarele superscalare au un succes
comercial superior celor cu paralelism exploatat prin optimizări de
program (“scheduling” static – spre exemplu microprocesoare tip VLIW,
EPIC etc.) ?
3. Procesoare superscalare.
4. BTB(branch pradiction).
5. Arhitecturi superscalare vs paralele.

2
6. Limitări arhitecturale ale paradigmei superscalare şi independente de
caracteristicile microarhitecturale, referitoare la:
- maximizarea ratei de aducere a instrucţiunilor din memorie
- maximizarea ratei de execuţie a instrucţiunilor.
- Soluţii de principiu.
7. Care sunt principalele avantaje ale tehnicilor de reutilizare dinamică a
instrucţiunilor ? De ce este dificilă detectarea reutilizabilităţii unei funcţii HLL
(High Level Language) prin schemele actuale de reutilizare dinamică a
instrucţiunilor ?
8. HLL, HSA
9. Limitarea issue-bottleneck. Reutilizarea dinamica a instructiunilor
10. Care sunt principalele avantaje ale tehnicilor de predicţie dinamică a
valorilor instrucţiunilor ? Ce tipuri de asemenea predictoare exista ? (Ce tipuri
de asemenea predictoare ... „lipsesc” ?)
11. Optimizarea dinamica a procesarii programelor ; alg , aplicatii
12. Predictia statica si dinamica
13. Predictori de salturi
14. Predictori de valori
15. Caracteristici ale sistemelor cu microcontroller-e (memorii, componente
tipice ale sistemului I/O, set instrucţiuni, instrumente de dezvoltare).

6. Sisteme de operare (Breazu)


1. Partitionare HDD
2. Descrieti notiunea de preemptivitate in planificarea unitatii centrale.
3. Fire de executie; comparare cu procese
4. Sincronizarea proceselor
5. Memoria virtuala. Implementare la nivelul Sistemului de Operare.
6. Rolul Sistemului de Operare si rolul hardware-ului in tratarea unei exceptii
page fault.
7. Sistemul de Operare: rolul resurselor hard si soft

7. Baze de date (Mitea)


1. Caracteristicile modelului relaţional pentru baze de date.
2. Ce se înţelege prin concurenţă şi cum se rezolvă aceasta la nivelul unui
SGBD relaţional?
3. Care sunt etapele de proiectare a unei baze de date?
4. Ce este o tranzacţie şi ce proprietăţi are aceasta? ACID, proprietati
5. Ce se înţelege prin baze de date distribuite? Dar prin baze de date orientate
obiect?

8. Data mining (Moisil)


1. Ce se înţelege prin depozit de date (data warehouse) şi în general în ce
constă o operaţie de data mining?
2. Operatii dataming

9. Retele (Sigovan)
1. Care sunt nivelele ISO-OSI ale retelei de calculatoare si care este rolul lor.
2. Medii de comunicatie. Enumerare. Topologii de retea.
3. Rolul protocoalelor de acces la mediu. Exemple de protocoale.
4. Nivelul retea. Functionare. Rol. Exemplu de protocol.

3
5. Nivelul aplicatie. Servicii. Exemple de protocoale de serviciu.

10. Bazele Inteligentei Artificiale


1. Cãutarea euristicã
2. Învãtarea pe de rost – tehnici de invatare
3. Cadre si scenarii
4. Arbori de joc
5. Aplicatii ale inteligentei artificiale
6. Subdomenii ale inteligentei artificiale
7. Reprezentarea cunostintelor
8. Algoritmi de cautare
9. Retele semantice
10. Regula min-max si alfa

------------------------------------ </Cuprins>------------------------------------

4
1. Limbaje de programare(Ciurea)

1. Operatori in C/C++
Clasificare:
-unari
-binari
Se pot defini:
Operatori Aritmetici: +,-, *, ?, %.....
Operatori Relationali: <, >,<=, >=
Operatori de Egalitate: ==, !=
Operatori Logici: &&, ||
Operatori Logici la nivel de Bit: &-si, |-sau, ^-XOR, ~NOT
Op. Incrementare, Decrementare: ++, --
Op. Atribuire: valoare=exepresie(=), *=, +=,...
Op. Shiftare: <<, >> st, dr
Op. Diversi:

Conditional: ?: (min=a<b?a:b),
Apel de functie: () x(y)
Sizeof – dim in octeti a unei marimii,
de conversie – (tip) expresie
int a, b, c; float v; v= (float)a/b
virgula: x,y

[] pt vectori
 . pt structuri
*, & pt pointeri

2.Variabile locale si variabile globale/ Durata de viata si domeniul de vizibilitate


a variabilelor
Domeniul de vizibilitate a unui variabile: zona de program în care acesta recunoaşte o
variabilă(identificator). Durata de viata semnifica perioada de timp in care oricarui
identificator I se aloca un spatiu in memoria sistemului.

Variabile locale:
-variabile declarate in interiorul functiei
-valabile in interiorul functiei, in celelalte functii nu sunt accesibile
-sunt init cu valori neprecizate
-sunt generate intr-o zona de memorie de tip stiva(LIFO)
-variabilele statice locale sunt mai rapide, pastreaza valoarea la iesirea
din functie, dar vor ocupa loc in memorie pe toata durata programului.
Variabile globale:
-var declarate in afara fct
-sunt init cu valori nule
-pot fi folosite in orice fct cu exceptia functiilor in care apar variabile locale cu
acelasi nume(in astfel de situatii, au prioritate cele locale)
-variabilele sa fie stocate permanent in segmentul de date. =>

5
=>Aceasta duce la o crestere a dimensiunii programului. In plus, datorita posibilitatii
de acces din orice functie la variabile externe, sunt permise si eventualele modificari
nedorite, iar detectarea acestora este mult mai dificila, este recomandata evitarea
folosirii variabilelor globale, mai ales in cazul programelor care folosesc mai multe
functii si volumul datelor este mare.

3. Tipuri de instructiuni
-Instr. Vida: ;
-Instr. Expresie: expresie; (se evalueaza chiar daca nu folosim rez., se termina cu
;)
-Instr. Compusa: {i1,i2,i3....} - se folosesc ca sa putem scrie mai multe instr care sa
fie interpretate de compilator ca una singura
-Instr. Conditionale: if, switch
-Instr. Repetitive: while ,do ..while, for
-Instr. De iesire din ciclu: break; (det.iesirea fortata din ciclu)
-Instr.de revenire din functie : return sau return expresie

4. Instructiuni conditionale in C/C++


Instrucţiunea condiţională IF este folosită pentru a compara două valori şi a
forma) IF – THEN – ELSE. Partea IF testează o condiţie. Dacă aceasta este adevărată,
atunci este urmată ramura THEN. În caz contrar se merge pe ramura ELSE.
If(expr) instr1
Else instr2

Instructiunea switch permite alegerea unei actiuni dintr-un grup, în functie de


valorile pe care le poate lua o expresie. Initial se evalueaza conditia asociata(expresie)
si daca se gaseste o eticheta(e const) avand valoarea egala cu a expresiei, se executa
instructiunile corespunzatoare acelui bloc case, iar daca nu se executa instructiunea de
pe ramura default.
switch(expresie)
{ case const1: instr1; break;
case const2: instr2; break
…..n
default: instr n+1
}

5. Instructiuni repetitive in C/C++


a) Instr. De ciclare cu test initial
While (conditie)
{Instructiuni}

● se verifica conditia la inceput


● daca nu este adevarata, secventa din corpul buclei nu se
executa deloc.
● continua sa se execute atata timp cat conditia ramane
adevarata

b) Instr. De ciclare cu test final


Do...
{Instructiuni}

6
While(conditie)

● se verifica conditia la sfarsit


● inseamna ca o bucla do – while se executa cel putin o data
c)Instr. De ciclare for
for (initial; conditie;iteratie)
{Instructiuni}

Bucla for continua sa se execute atata timp cat conditia ramane adevarata.
Atunci cand devine falsa , bucla se termina iar executia programului continua cu
instr. Imediat urmatoare dupa for.
Concluzie : - se utilizeaza o bucla for atunci cand se efectueaza un nr cunoscut
de iteratii, se utilizeaza o bucla do – while daca e nevoie ca bucla sa execute cel putin
o iteratie ; se utilizeaza o bucla while cand prelucrarea presupune un numar
necunoscut de pasi.

6. Siruri de caractere cu terminatie nula : declaratie, functii specifice


In cazul in care am declarat un tablou de caractere care stocheza un nr de caractere
mai mic decat lungimea sa, se foloseste caracterul null (‘\0’) pentru a indica sfarsitul
secv de car.
Declaratie :
char str[15]; - doar primele 14 car pot fi folosite, ultimul car e alocat pt car nul

Initializare :
char myword [] = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ };
char myword [] = “Hello”;
In cel de-al 2lea caz cand se folosesc «  caracterul null este inserat automat.

Functii :
size_t strlen(char* s); - intoarce lungimea unui sir fara car null | (pointer la char)
char* strcpy(char* to, const char* from); - copiaza un string care se termina in null in
alt string.
Char* strncpy(char* to, const char* from, size_t maxlen); - copiaza o portiune dintr-
un string care se termina in null in alt string
char * strcat ( char * destination, const char * source ) - concateneaza un string care
se termina in null la sfarsitul celui de-al doilea string
int strcmp(const char* s1, const char* s2); - compara 2 stringuri
int strncmp ( const char * str1, const char * str2, size_t num ); - compara primele n
caractere din 2 stringuri : // Returns -1 (s1<s2), 0 (s1==s2), or 1(s1>s2)

7. Functii: declaratie, apel, exemple


declarare
tip_rez nume_functie(tip1,tip2,…);

definire
tip_returnare numele_functiei (tip_parametru nume_parametru)
{Corpul functiei}

7
apelare
numele_functiei (parametrii);

O functie este o colectie de instructiuni care executa o anumita sarcina.Parametrii


formali apar in declararea functiiilor iar parametrii reali sunt cei care se apeleaza
functia , ei trebuie sa fie de acelasi tip.

8. Recursivitate : definitie, exemple (multiplica instante ale aceleiasi cai). Exista


redundanta ? si utilizare
Este procedeul prin care o functie se auto-apeleaza.
- in toate subprogramele recusive exista o conditie de oprire care impiedica
autoapelarea la infinit si un caz de baza pentru care cunoastem valoara
returnata
- recursivitatea foloseste structura de date numita stiva
- recursivitatea poate fi – directa sau indirecta (backtracking)

Ex: factorialul, fibonacci, ackerman

Nu exista redundanta.
Utilizare: atunci cand e nevoie de reutilizarea codului metodei (a aparut datorita
nevoii de transcriere a formulelor matematice recusive)
De fiecare data cand programul apeleaza functia, compilatorul de C depune in stiva
adresa instructiunii care urmeaza imediat dupa apelul functiei (numita adresa de
revenire) Apoi, compilatorul depune in stiva val parametrilor(pt param transmisi prin
valoare) sau adresa (pt cei transimi prin referinta). Cand executia fct se incheie , s.o al
calc descarca adresele de revenire din stiva in counter-ul de program al CPU.

9. Backtracking: definitie, exemple si utilizare


Backtracking :
- tehnica de cautare sistematica a solutiei prin explorarea tuturor cailor dintr-un
sp de stari;
- pleaca de la starea declarata de start (initiala, origine) si urmeaza o cale pana
atinge scopul sau se blocheaza (ajunge la o stare de unde nu mai poate cauta).
Daca s-a gasit, scopul, cautarea s-a terminat si programul returneaza solutia.
Daca ajunge pe un drum inchis, se intoarce inapoi (backtrace) in cel mai recent
nod de pe acele arce ce nu au fost parcurse ‘si continua pe una din ac ramuri.

Ex : pb. Damelor, pb labirintului, pb. Combinarilor


Utilizare : atunci cand se doreste obtinerea tuturor solutiilor problemei. In cazul cand
se cere o singura solutie se poate forta oprirea, atunci cand a fost gasita.

10. Fisiere text : declaratie, deschidere, accesarea informatiei


Fisierul text este o succesiune de caractere ASCII încheiata cu caracterul ^Z,
care are rol de marcator de sfârsit de fisier. Deci, componentele elementare ale
fisierelor text sunt caracterele, grupate în linii. Lungimea liniilor nu este fixa, pentru
separarea lor utilizându-se un marcaj de sfârsit de linie (caracterele CR/LF).
Fisierele text pot fi create prin intermediul editoarelor si sunt direct afisabile.

8
File *f – implicit text
f=fopen(„.....”, [w,r, b])
fclose(denumire);
fprintf – afisare

append, r,w,rw,b,t(ext) – adaugare


fscanf, fgets, fgetc – citeste din fis

fread(ptr loc. Mem, dim in bytes car de citit, nr. car, fis ) – citeste un nr de elemente
fscanf(file, format,...) – citeste din file si stocheaza in fct de param format
fgets(char *str, int num , file) – citeste num-1 car din file si le stocheaza in str
fwrite( ptr. tablou ce trebuie scris, dim in bytes car de scris, nr, file ) – scrie un tablou
de nr elem in file

11. Tipul pointer : declaratie, proprietati (tipuri de pointeri)


(Background : O variabila este numele unei locatii de memorie care este apta de a
pastra o valoare de un anumit tip.Programul face referinta la fiecare locatie de mem
prin utilizarea unei adrese unice.)

Definitie : Un pointer este o variabila care contine adresa altei variabile

Declaratie : tip *numePointer // numePointer pointeaza spre tipul de date tip


(tip e tipul variabilei cu adresa lui numePointer)
int x ; int *p ; p = &x (corect)
float y ; int *p ; p=&y (gresit)

operatorul & (op. de referentiere) – intoarce adresa din mem a operandului


operatorul * (op. de dereferentiere )- intoarce valoarea inregistrata la adresa resp.

Proprietati :
o se pot face atribuiri
o pointerul poate primi valoarea NULL(nu pointeaza spre ceva)
o comparatii intre pointeri de acelasi tip
o adunarea intre un pointer si un intreg
o incrementarea-decrementarea(adr ptr +/- 1)
o diferenta intre doi pointeri de acelasi tip (dc point spre ac. Vect. Arata
cate elem sunt intre ele)
o pointeri la functii (adresa de mem. Unde incepe codul unei fct)

Tipuri de pointeri : int, float, char, void


Pointerul de tip void specifica absenta unui tip, deci ei pot pointa la orice tip. Ei nu
pot fi dereferentiati direct (deoarece nu au tip spre care sa dereferentieze), deci trebuie
facut cast la un tip concret si apoi dereferentiat.

12. Alocarea dinamica a memoriei


Se refera la alocarile de mem efectuate in timpul executiei progr cu ajutorul unor
rutine de management a memorie :
a) alocare controlata de limbaj

9
b) alocare controlata de programatori

a) Alocare dinamica controlata de limbaj este ptr a rezolva var locale la intrarea intr-o
subrutina, procedura sau funct . Ptr acestea se foloseste tehnica bazata pe stiva, Ea
respecta urmatoarele :

1. La fiecare actionare de subrutina este creata o „ inregistrare de actionare »


- adr de revenire
- zona param formali
- zona var locale
- este fct de subrutina
Obs : Ptr fiecare subrutina legatura si formatul ,,inregistrarii de actionare » sunt
cunoscute in momentul compilarii (in fct de nr si natura parametrilor, de natura
subrutinei nr si natura var locale)

=> referintele la param formali sau var locale sunt rezolvate inca de la compilare a.i.
la activare, locatia aflata la deplasamentul coresp este completata cu val de apel ;
La terminarea procedurii inreg coresp este distrusa.

2. Toate inreg existente in cadrul unui progr, ptr toate procedurile active la un mom
dat sunt mentinute in ac loc Stiva Programului si unde sunt depuse secv in ordinea in
care sunt activate procedurile si distruse in ordine inversa (LIFO).

b) Alocarea controlata de utilizator


- in limbajele care permit descrierea de struct dinamice ; HEAP = un bloc de mem din
care alocarile si dealocarile se fac in orice ordine

In limbajul C, alocarea dinamica se realizeaza prin diversele variante ale functiei


malloc()(calloc()), iar eliberarea zonelor dynamic se face prin functia free(). In C++
introdus alocarea dinamica in structura limbajului, s-au introdus new(operator care
aloca mem. In heap si dc alocarea s-a facut cu success returneaza adresa zonei de
memorie alocata, sau valoarea 0 – daca alocarea nu s-a putut face) si delete(eliberarea
memoriei 10dynamic10 prin intermediul operatorului new).

HLL Mecanism alocare dinamica:


- se declara o var pointer p.
- se aloca var dinamica prin op new aplicat unui tip, iar rez e atribuit
lui p (p retine adr var dynamic)
- orice acces la var. Alocata din se face prin interm. Lui p (var.
Alocata din. se afla in heap)

10
2. POO (Breazu)

1. Explicati de ce se spune ca mostenirea multipla creeaza un graf orientat aciclic

Prin mostenire o clasa poate folosi functionalitatea unei alte clase. Prima este clasa
baza, iar cealalta este clasa de derivata.
Relatia dintre cele 2 clase este unidirectionala de la cea de baza la cea derivata. O
clasa poate sa fie clasa de baza pentru mai multe clase derivate. Se creeaza astfel o
structura de tip arbore. In cazul mostenirii simple, ramurile arborelui nu se unesc pe nivele
inferioare. In C++ o clasa derivata poate sa aiba mai multe clase de baza. Astfel ramuri ale
arborelui de mostenire ajung sa se uneasca, formand un graf orientat. Graful este aciclic
deoarece legaturile nu se pot intoarce asupra altor clase care sunt deja clase de baza.

2. Care este legatura intre mostenire si abstractizare.


O clasa abstracta este o clasa care are un scop atat de general ca nu contine
suficiente atribute sau operatii pentru a reprezenta un obiect al lumii reale. Clasa exista
doar pentru a putea fi mostenite din ea alte clase. Compilatorul nu va permite sa creati
obiecte din clasa abstracta. O clasa abstracta este o clasa care are cel putin o metoda pura.
Metoda pura (metoda virtuala pura)
 la declarare – functie = 0;
 clasa care o contine este o clasa abstracta
 clasele care mostenesc clasa abstracta trebuie sa redefineasca metodele
pure
 metodele pure nu pot fi apelate si deci nu permit instantierea claselor
abstracte

Relatia de mostenire:
 este un mecanism de abstractizare - fiecare clasa derivata este o forma
mai concreta a clasei de baza; obiectele claselor derivate pot fi folosite oriunde este
asteptat un obiect al clasei de baza (polimorfism)
 permite reutilizarea codului - definit in clasa de baza.

3.Care este legatura intre polimorfism si mostenire ?

Principala forta a relatiei de mostenire este data de facilitatea de a trata


obiectele claselor cuprinse intr-o ierarhie ca si cum ar fi instante ale clasei din varful
ierarhiei. Aceasta se numeste polimorfism - obiecte cu caracteristici comune pot fi
tratate unitar. Clientul poate trimite mesaje spre un obiect, si lasa obiectul sa decida ce
are de facut.
Polimorfism in c++ apare doar in contextul mostenirii.
In c++ polorfismul este introdus prin intermediul functiilor virtuale.
Polimorfism: poli-multe morphos-forme.

11
Mostenire = creearea unei clase numita extinsa sau derivata , din alta clasa numita
clasa de baza.
Polimorfism=tratarea uniforma a obiectelor din clase diferite. Exista la diferite clase
derivate din aceesi clasa de baza.Polimorfismul este implementat printr-un apel al
unei metode care executa metode distincte pt obioecte din clase distincte
Este posibil prin redefinirea metodelor si datelor private prin mostenire
Polimorfismul de moştenire
Polimorfismul de moştenire, spre deosebire de celelalte forme de polimorfism,
este un polimorfism al obiectelor. La baza polimorfismului obiectelor stă relaţia de tip
IS_A existentă între clasa de derivata si cea de baza.
Aşadar relaţia de tip IS_A ne permite manipularea unor instanţe în contexte care cer
instanţe ale claselor de bază, iar acest fapt introduce două noţiuni: tip static şi tip
dinamic. Prin tip static se înţelege tipul sub care este manipulată o entitate adică tipul
declarativ de manipulare. Prin tip dinamic se înţelege tipul real al unei instanţe adică
tipul din a cărui instanţiere a rezultat instanţa.

4. Diferenta intre "overloading" si "overriding".

Se refera la metodele claselor.


Supraincarcare = permitere definirea mai multor metode cu acelasi nume, insa lista
parametrilor trebuie sa fie diferita. (alte tipuri, alta ordine intre tipuri);

Suprascrierea = suprascrierea unor metode dobandite prin mostenire; metoda noua


trebuie sa aiba acelasi prototip ca cea pe care o redefineste;

-Supraîncărcarea tratează mai multe metode din aceeași clasă cu același nume, dar
semnături diferite

-Suprascreirea trateaza doua metode, una dintr o lasa de baza si una dintr o clasa
derivata, care au aceeasi semnatura

-Supraîncărcarea vă permite să definiți o operație similară în moduri diferite pentru


date diferite

-Suprascrierea va permite sa definit o operatie similara in moduri diferite, pentru


diferite tipuri de obiecte

5. Clase si obiecte

Clasa: entitate asemanatoare cu o structura, cu diferenta ca membrii unei structuri


sunt implicit publici, iar membrii unei clase sunt implicit privati; grupeaza intr-o
entitate o lista de variabile si metode care sa opereze asupra lor;

Obiect: instanta a clasei; o clasa nu detine valori pentru membrii ei, este doar un
model pentru obiecte; obiectele sunt create dupa modelul clasei si folosite in
program; metodele statice tin de clasa, insa doar ca un comportament care nu tine
neaparat de o instanta a clasei.

12
6. Drepturi de acces intr-o clasa.

 Public: membrii cu acest atribut pot fi accesati atat din interiorul cat si din
exteriorul clasei
 Private: membrii cu acest atribut pot fi accesati numai din interiorul clasei
Pt mostenire si incapsulare
 Protected: se comporta ca si privat pentru incapsulare dar ca si public pt
mostenire

7. Mostenirea

Mostenirea la nivelul claselor este folosita pentru refolosirea codului unei clase
de catre una noua. Prima este clasa de baza, a doua este cea derivata.
Derivare:
 Public
o public->public;
o protected->protected;
o private->null;
 Protected
o public->protected;
o protected->protected;
o private->null;
 Private
o public->private;
o protected->private;
o private->null;

8. Incapsularea

Incapsularea = ascunderea caracteristicilor si a modului de functionare a unor


obiecte; se realizeaza prin modificatorii de acces private si protected; metodele si
membrii private nu sunt accesibili decat din interiorul obiectului; doar acesta stie ce sa
faca cu acestea; metodele publice sunt folosite pentru a primi din exterior cereri pe
care apoi le indeplinesc sau nu intr-un mod doar de acel obiect stiut;

9. Polimorfism

Polimorfismul apare in contextul mostenirii.


= tratarea uniforma a obiectelor din clase diferite, insa legate printr-o clasa de
baza comuna
Clase derivate pot fi tratate ca si clasele de baza, referinte la clasele de baza pot
referi obiecte de tipul claselor derivate. Se pot structura actiuni pentru obiecte diferite
folosind aceeasi constructie, aceleasi secvente de cod pentru toate, insa actiunile
rezultate sa fie diferite pentru fiecare obiect in functie de tipul acestora.

13
10. Constructori si destructori

Constructor = metoda cu numele clasei si care nu are tip returnat;


Constructorul este apelat primul la intantierea unui obiect (new) si este de regula
pentru initializari ale membrilor
Destructor = metoda cu numele clasei precedat de ~, fara tip returnat;
Destructorul este apelat cand obiectul este sters din memorie (delete) si este folosit
pentru actiuni de eliberare de memorie alocata dinamic si care ar ramane blocata
altfel.

11. Operatorul new, constructor si rol

Operatorul new permite alocarea dinamica a memoriei in structura heap pentru un


obiect. Daca are succes returneaza un pointer la structura de date, daca nu returneaza
0 sau arunca o exceptie.

12. Legaturi statice si dinamice la apelul functiilor

Metodele statice, si cele non-statice si non-virtuale sunt legate static, la compilare.


Adresa de salt este calculata la compilare si este aceeasi la fiecare rulare a
programului.
Metodele virtuale au adresele pastrate intr-o tabela VMT. Legarea este dinamica,
adresele metodelor fiind cunoscute si calculate doar la rulare. Nu vor fi aceleasi
pentru rulari diferite.

13. Tabela metodelor virtuale VMT

Tabela VMT este folosita pentru a pastra referintele la functiile declarate virtual.
Exista pentru fiecare clasa. In cazul unui apel al unei functii virtule, adresa acesteia
este cautata in tabela si apoi lansata. Aceasta legare se face runtime.
La derivarea unei clase noi dintr-una cu metode virtuale, tabela VMT este copiata si
acesteia. In cazul in care o metoda este redefinita, intrarea coresp din VMT este
inlocuita cu adresa acesteia. Vechea metoda poate fi lansata si ea insa explicitand
clasa de care apartine.

14. Solutii de tratare a exceptiilor

Exceptii:
Try
{
//bloc de date care pot genera exceptii
}
Catch(...; Exception; Exception e) // toate / tip de exceptie / tip si accesarea info
exceptiei
{
//bloc de cod de tratare a exceptiilor
}

14
Finally
{
// cod executat fie daca exceptia a fost prinsa fie daca nu
}

Throw new Exception();

Blocurile catch sunt parcurse in ordine pana la primul care se refera la exceptia care a
fost aruncata. De regula se pun mai intai blocuri catch cu expectii concrete, apoi
blocuri cu exceptii folosind clase mai generale, posibile de baza pentru cele
precedente, iar la final blocul ... care prinde toate tipurile de exceptii.
Se poate folosi si int pe post de exceptie.
Cand o exceptie nu este prinsa, se trece pe nivelul superior (metoda care a apelat
metoda curenta), si tot asa pana se ajunge la sistem.

15. Durata de viata si vizibilitatea variabilelor

 Var globale
o Durata de viata – pe toata durata executiei programului
o Vizibilitate – in toate metodele, insa doar in modulul curent
 Var locale
o Durata de viata – de la locul declararii si pana la iesirea din corpul
functiei, sau al structurii cu {}
o Vizibilitate – doar in interiorul functiei sau al structurii {} in care a fost
declarata
 Var statice
o Durata de viata – valorile lor raman si la iesirea din functie, iar la
apelul urmator aceasta poate fi folosita in continuare
o Vizibilitate – doar in int functiei
 Var externe
o Durata de viata – pe toata durata executiei programului
o Vizibilitate – atat in interiorul modului curent cat si in celelalte in care
este declarata

16. Transfer prin valoare si transfer prin referinta

Se refera la transferul parametrilor la apelul metodelor.

Tranferul prin valoare copiaza valorile parametrilor, in parametrii formali, cadrul de


stiva aferent apelului functiei. Modificarile aduse asupra acestora nu influenteaza
valorile variabilelor originale.

Transferul prin referinta transmite functiei referintele la variabilele care se doresc a fi


parametri pentru functie. (sintaxa: int& la declarare, normal la apel in C++; ref int x la
declarare, ref x la apel in c#). Modificarile asupra paramterilor in interiorul functiei se
pastreaza la iesire.

15
17. Explicati: (cod cu mostenire)
- la momentu potrivit pe imaginea potrivita

18. Ce structuri de date se folosesc la functii ? Dar in cazul structurilor


obiectuale.
- la functii stiva
- la obiecte heap

19. Fiecare obiect are o stare si o comportare si o " identitate". Explicati poza
- metodele ii dau obiectului comportarea sa si membrii identitatea

3. Java(Sima)

2 Ce relatie exista intre structurile: coada cu prioritati, lista sortata si


min/max heap

Lista sortata
 Structura de forma unui lant formata din noduri continand valori ordonate
Heap
 Structura bazata pe arbori
 Proprietate: daca B e copil pt A, atunci valoarea lui A e >=/<= cu valoarea lui
B (max-heap/min-heap)

Coada cu prioritati
 Coada in care nu primul venit este primul care iese, ci cel cu prioritatea(sau
valoarea) cea mai mare
 Poate fi implementata folosind
o Lista sortata
 ineficient
 O(n) pt inserare, O(1) pt get-next, O(nlogn) pt constructie
o Lista nesortata
 ineficient
 O(1) pt inserare, O(n) pt get-next,
o Heap
 Toate operatiile au O(nlogn)

16
3 Asemanarile si deosebirile intre o clasa abstracta si o interfata

Ambele notiuni sunt un model de generalizare.

O interfata este un sablon pentru o clasa, contine prototipurile metodelor care trebuie
implementate de acea clasa pentru a putea spune ca implementeaza acea interfata.
Alte metode pot fi adaugate pe langa acestea.

O clasa abstracta serveste tot ca model pentru alte clase care o vor mosteni. Metodele
pure trebuie implementate de catre clasele derivate. Pe langa aceasta, clasele abstracte
adauga posibilitatea refolosirii codului din clasele de baza.

4 Backtracking

Backtracking este un algoritm de gasire a tuturor solutiilor unei probleme. O solutie


este generata incremental, alegand la fiecare pas una din componentele candidat ale
solutiei. (ex: problema celor 8 regine – plasarea pe tabla a 8 regine a.i. sa nu se poata
lua una pe cealalta)

backtrack(x)
{
Foreach(componenta urmatoare y)
{
If(valid(y))
{
If(solutie(y)) output;
Else backtrack(y);
}
}
}
Pot fi variante care nu exploreaza toate solutiile, ci se opresc la prima solutie destul de
buna fata de un anumit criteriu.

5 Greedy

Algoritm de cautare euristica in care se merge spre solutie alegand de fiecare data
optimul local.
Reduce problema la o subproblema mai simpla, cea de alegere a urmatoarei
componente din solutie indiferent de cum ar afecta global urmatoarele alegeri.
Pentru Traveling Salesman un algoritm greedy alege de fiecare data cel mai apropiat
oras.
Algoritmii greedy sunt destinati problemelor simple, care au o structura optimala. Ei
au o vedere limitata asupra problemei.

6 A*

A* este un algoritm de cautare euristica. Euristica folosita este distanta+cost.


Nodurile candidat sunt sortate dupa aceasta valoare, iar cel cu valoarea cea mai mica
este dezvoltat mai departe, iar nodurile sale copil sunt adaugate in lista candidatilor.

17
Acest algoritm gaseste solutia optima.
In plus fata de greedy, A* mai ia in considerare si dista nta deja parcursa.
Complexitatea de timp a A* poate fi in cel mai rau caz exponentiala, insa pentru spatii
de cautare arborescente aceasta este polinomiala.
Si compexitatea de memorie poate di de asemenea exponentiala. Numarul solutiilor
partiale care trebuie memorate creste exponential. Exista variante care combat aceasta
problema. IDA*,MA*, SMA* (iterative deepening; mem-bonded; simplified mem-
bounded)

7 Programarea dinamica

Programarea dinamica are la baza impartirea problemei de rezolvat in subprobleme


mai simple.
Programarea dinamica bottom-up se refera la pastrarea rezultatelor unor calcule
pentru a fi refolosite la pasii urmatori.
Programarea dinamica top-down se refera la formularea unor calcule complexe sub
forma recursiva de calcule simple.
Pentru ca o problema sa poate fi rezolvata folosind programarea dinamica in mod
eficient ea trebuie sa aiba urmatoarele proprietati:
 Solutia optima sa poata fi construita din solutiile optime ale subproblemelor in
care poate fi impartita
 Subproblemele sa se suprapuna; o subproblema sa poate folosi rezultatul de la
alta, decat sa o rezolve iar si iar; ex: Finonacci: F43=F42+F41; sa nu se recalc
recursir F42 si F41 ci sa se foloseasca rez calculate anterior

8 Care din struct ofera operatii mai eficiente: stiva, arbore, tabela de dispersie

Stiva
 Inserare O(1)
 Stergere O(n)
 Cautare O(n)
Arbore
 Inserare O(nlogn) + operatii de echilibrare
 Stergere O(nlogn) + operatii de echilibrare
 Cautare O(nlogn)
Tabela de dispersie
 Inserare O(m)
 Stergere O(m)
 Cautare O(m)

n - nr de elem
m – constanta

Tabela de dispersie este cea mai eficienta insa are nevoie de memorie mai multa.

9 Gestiunea mem in C si Java

 Gestiunea memoriei in C se face prin constructori si destructori, de catre


programator. In Java de catre Garbage Collector;

18
 In C se pot aloca zone de memorie aleatoare, fara a fi folosite de obiecte. In
Java doar la instantierea obiectelor;
 C este avantajos pentru softuri real-time
 In C este permis ca un pointer sa adreseze o locatie deja dealocata. In Java
obiectele care mai au referinte in program nu sunt dealocate
 In C destructorul este lansat sincron cu dealocarea obiectului. In Java
finalizatorii sunt apelati asincron, inainte ca obiectul sa fie dealocat, lucru care
poate sa nu se intample deloc (garbage colectorul poate sa nu decida sa
dealoce memoria daca nu este nevoie)
 In C primitivele pot ramane neinitializate. Java impune initializarea lor
 In C pot exista obiecte alocate fara referinte la ele (folosesc inutil memorie)

9. Cls abstracte  interfata java; asemanari si deosebiri


- vezi rezolvari subiecte anterioare (Sima)

10. Ce se intelege prin "use cases" si unde se intalneste ?

Modelul use-case
Acest model este creat in faza de analiza si isi propune sa prezinte functiile
sistemului din punctul vedere al utilizatorului. in acest context termenul scenariu
desemneaza o secventa de pasi ce descriu interactiunea dintre utilizator si sistem. Un
caz de utilizare (use case) este compus din set de scenarii care apar impreuna cand
utilizatorul foloseste sistemul pentru a-si atinge un scop, ca si ghid practic de utilizare
a "use case"-urilor, Fowler ([FowOl]) sugereaza sa se identifice scenariul principal de
utilizare cu succes a sistemului. Acest scenariu este o secventa numerotata de pasi
care se succed la o utilizare normala. La acest scenariu se adauga extensiile care
reprezinta variante secventa principala.
Actorii nu sunt parte a sistemului - ei repreizinta orice sau pe oricine care
trebuie sa interactioneze cu sistemul. Un actor poate sa introduca informatii in sistem,
sa receptioneze informatii din sistem, fie sa faca ambele operatii. In mod normal
actorii sunt detectati dm enuntul problemei si pe baza discutiilor purtate cu
beneficiarii sistemului sau cu exper! in domeniu.
Pentru reprezentarea use-case–urilor se foloseste UML (Unified Modeling
Language). UML contine mai multe tipuri de diagrame care se pot clasifica:
• Diagrame de structura
• Diagrame de comportament
• Diagrame de interactiune

11. Explicati unul dintre pricipiile de proiectare obiectuala : OCP, Liskov sau
DIP

OCP(Open Closed Principle)- OPEN pentru a fi extins, adica comportarea lui poate
fi extinsa in diferite moduri in sitnatia in care cerintele aplicatiei se modifica
b- CLOSED la modificarea codului sursa

19
Cele doua cerinte sunt contradictorii. Toate tehnicile utilizate pentru
rezolvarea acestei contradictii se bazeaza pe abstractizare. In limbajele obiectuale
abstractiile sunt clase de baza, abstracte, care nu se modifica. Toate clasele care ar
putea fi derivate din aceste clase abstracte reprezinta posibile variatii de comportare.

Liskov - LSP (Liskov Substituition Priciple) – principiul substitutiei lui Liskov


Subclasele tre sa poata substitui clasele de baza.
Pricipiul LSP arata ca daca o metoda dintr-o clasa (User) functioneaza corect
cand utilizeaza instante ale unei clase (Base), metoda trebuie sa functioneze corect si
cu instante ale unei derivate din clasa de baza (Derived).

DIP(Dependency Inversion Principle)


Principiul Dependentei Inverse. „Sa depinzi de abstract si nu de concret”.
Modulele de nivel inalt nu trebuie sa depinda de modulele de nivel scazut. Ambele tre
depinda de abstracti.Abstractiile nu trebuie sa depinda de detalii. Detaliile trebuie sa
depinda de abstractii.
Daca OCP exprima scopul arhitecturii OOP. DIP exprima mecanismul
principal.

12. Ce se intelege prin "dynamic dispatch" in contextul apelului unei metode?


legarea dinamica (tarzie - ''late binding'') e dynamic dispatch

In acest caz compilatorul si editorul de legaturi fac corespondenta intre numele


metodei si adresa acesteia din segmentul de cod prin intermediul unui tabel de adrese
posibile de salt. Alegerea adresei efective de apel se face in momentul rularii. in functie
de obiectul pentru care se apeleaza (deci, decizia legarii este intarziata). La nivelul cel
mai de jos. legarea dinamica corespunde apeluiui indirect al unei proceduri (folosind de
exemplu o instructiune de tip CALL indirect). Acesta este modul de legare folosit de
limbajele obiectuale pentru metodele virtuale.
Polimorfismul fiind un exemplu de solutie avand la baza indirectare prezinta
binecunoscutele avantaje si dezavantaje aie acestor metodc:
• avantaje: se asigura (introduce) un grad de flexibilitate
• dezavantaj: ca in orice apei indirect, se inrautajesc pcrformantele de vite/a
Comproraisul avantaje /dezavantaje (flexibilitate / viteza) se poate stabiii de caire
programatoi. prin posibilitatea alegerii. pentru fiecare rneioda in parte, a tipuiui de
legare: statica sau dinamica.

mica paranteza
(
legarea statică (timpurie – “early binding”) – caz în care compilatorul şi editorul
de legături fac corespondenta între numele metodei şi adresa acesteia din segmentul

20
de cod. Odată fixată această legătura în momentul compilării ea este definitivă în tot
timpul rulării programului. La nivelul cel mai de jos, legarea statică corespunde
apelului direct al unei proceduri. Acesta este modul de legare clasic folosit de toate
limbajele structurate procedurale şi de limbajele obiectuale pentru metodele ne-
virtuale (clasice).
)

13. In contextul design patterns ce este un sablon creational; exemplificati ;


Singleton, Adapter
Un pattern (sablon) reprezinta o solutie comuna a unei probleme intr-un
anumit context.
Sabloanele sunt :
1. creationale -> modul de creare al obiectelor
a) Factory Method (Constructor virtual) - defineste o interfata ptr crearea unui
obiect, dar lasa subclasele sa decida care clasa va fi instantiata.
b) Abstract factory - furnizeaza o iterfata ptr crearea unor familii de obiecte
inrudite sau dependente, fara a specifica clasele lor concrete
c) Singleton - asigura ca o clasa are o sg instanta si furnizeaza un punct global
de acces la ea
d) Builder

2. structurale -> compozitia claselor si a obiectelor


a) Adapter - converteste interfata unei clase in alta interfata, ceruta de client. Adapterul lasa
clasele sa lucreze impreuna cand sunt probleme datorate incompatibilitatii interfetelor; ^
b) Bridge -- separa abstractizarea de implementare, a.i. ac se pot modifica independent /
c) Composite
d) Facade( Decorator) - ataseaza dinamic responsabilitati unui obiect; furnizeaza o
altemativa mai flexibila decat subclasarea ptr extinderea functionabilitatii;

3. comportamentale (Observer, Interpreter, Iterator, Mediator, Memento)


-> modul in care obiectele si clasele colaboreaza pentru indeplinirea
unei anumite sarcini

14. Ce desemneaza faza de analiza in cadrul ingineriei software


Ciclul de dezvoltare al aplicatiilor
• Analiza
In aceasta faza se urmareste clarificarea 'cerintelor si construirea unui model al
sistemului ce trebuie concretizat, model independent de limbajul in care se face
implementarea si de mediul in care se executa (hard, DBMS utilizat, structura
distribuita).
Metodele actuate fac distinctie clara intre cele doua etape care rezulta de mai
sus:
- faza de stabilire a cerintelor (requirements specification), si
- faza de analiza obiectuala, etapa in care pe baza descrierii problemei se descopera
clasele si obiectele care vor modela problema precum si relatiile dintr acestea, oferind
in final un asa numit model de analiza al sistemului care se construieste.
• Proiectarea sistemului (Design)
Plecand de la modelului de analiza se adauga detalii tehnice. se ia in considerare
mediul de implementare, se stabilesc modalitatile de realizare a cerintelor. In aceasta
faza se desfasoara urmatoarele activitati:

21
- Detalierea claselor descoperite la analiza si introducerea de noi clase "tehnice" care nu
fac parte din domeniul problemei
- Stabilirea arhitecturii sistemului
- Gruparea claselor in module
- Trasarea grafului programului (modulele din care se compune programul, baze de date,
etc.)
- Stabilirea modului de comunicare intre diferitele module sau cu bazele de date
- Detalierea fiecarui modul
• Implementarea
*-
- Scrierea completa a claselor intr-un limbaj de programare
• Testarea programelor
- Se face validarea sistemului: se verifies daca programul are erori 5! daca ofera sau nu
funcjionalitatea ceruta
• Documentarea sistemului
- documentare pentru programatori
- documentare pentru utilizatori: manual de instalare si utilizare
• Livrarea sistemului
- Instalarea programului la beneficiar
- Instruirea utilizatorului programului
- Manual de utilizare
• Intretinerca sistemului
- Rezolvarea erorilor ce apar in timp
- Imbunatatirea programului si producerea de variante mai performante
- Modificari datorate cerinjclor utilizator

4. Arhitectura sistemelor de calcul (Mihu Z.)

1. Principiul memoriei virtuale. Evidenţiaţi resursele hardware şi respectiv


software implicate în acest mecanism. Ce este şi care este rolul TLB
(Translation Lookaside Buffer) ?
MV = intreaga memorie (MP + MS) este facuta sa para a fi MP (memorie principala
cu acces aleator). Utilizatorului i se creeaza impresia unui spatiu de memorie
principala foarte extins (spatiul virtual) sub care se ascunde spatiul real. O parte din
spatiul virtual are corespondent in MP, iar cealalta parte are corespondenta in MS
(disc). Pentru cele 2 spatii, virtual si real, se utilizeaza adrese diferite. Programele
genereaza adrese virtuale care adreseaza spatul virtual, in timp ce spatiul real este
adresat cu adrese reale (sau fizice).
Pentru a inregistra corespondenta dintre paginile virtuale si paginile reale se utilizeaza
tabele de pagini (page tables) stocate in MP. Printr-o referinta la tabela de pagini
corespunzatoare, fiecare adresa_ virtuala, generata de catre procesor, este translatata
intr-o adresa reala, care va selecta o locatie dintr-o pagina reala. Daca pagina reala
este prezenta in MP, va fi accesata informatia din locatia respectiva. Daca pagina
reala nu este prezenta in MP, se va activa exceptia page fault care va transfera
controlul unei rutine speciale (handler-ul de exceptie).
TLB = tabela de mare viteza (cache) care retine adresele paginilor cel mai probabil a
fi referite. Se mai num si cache pentru translatarea adreselor (adresa virtuala -> adresa
fizica)

22
TLB are 2 functii: translatarea ultrarapida a adreselor virtuale localizate in TLB; un
algoritm de inlocuire a liniilor TLB atunci cand o noua adresa virtuala trebuie
actualizata in TLB

2. Analizaţi comparativ cele 3 arhitecturi de cache (mapare directă,


semiasociativ şi asociativ) şi rezumaţi avantajele şi dezavantajele
fiecărei organizări. (Analizati si separat.)
Cea mai simpla metoda de a asocia data mernorata in cache cu adresa locatiei
MP de unde provine este de a memora in aceeasi locatie cache atat data cat si adresa
MP de unde aceasta provine. Acesta este principiul maparii complet asociative (fully
associative cache). Pentru implementarea cache-urilor complet asociative se
utilizeaza memorii ascciative memorii adresabile prin continut), in fiecare locatie
cache se memoreaza atat adresa MP cat si data memorata in MP la acea adresa. Cand
procesorul lanseaza o citire din memorie, adresa MP este comparata cu toate adresele
memorate in cache (memorie asociativa) asa cum se indică in figura 3.3.
Pentru a exploata avantajele localizarii spatiale (in toate tipurile de cache), intr-o
locatie cache se poate memora mai mult decat o locatie MP (o linie sau un bloc de
loca MP consecutive).
Cache-ul complet asociativ ofera flexibilitate maxima in ceea ce priveste combinarea
liniilor in cache (orice linie MP poate fi incarcata in orice locatie cache) pentru o
anumita capacitate a cache-uui ofera minimum de conflict, dar este in acelaji timp si
cel mai scump datorita costului mernoriilor asociative (zona cache in care se me.-
norea adresele MP este un plan de memorie asociativa). In ciclurile miss informatia
solicitata de procesor se va citi din MP si linia din care provine aceasta informatie
trebuie actualizata (copiata) in cache inlocuind astfel o alta linie actualizata anterior in
cache. Linia care va fi inlocuita va fi selectata pe baza unui algoritm de inlocuire si
acest algoritm trebuie implementat in hardware deoarece trebuie sa opereze la viteza
ridicati. Implementare complet asociativa este viabila (din punct de vedere al costului)
doar pentru cache-uri capacitate mica pana la moderata. Microprocesoarele cu cache-
un interne (on-chip) m folosesc frecvent implementarea complet asociativa deoarece
asigura1 performante maxim
Memoria cache complet asociativă este costisitoare deoarece revendica un plan de
memorie asociativa a carui structura devine foarte complexa pe masura ce creşte
capacitatea cache-ului. Cache-urile cu mecanism de adresare prin mapare directa
utilizeaza memorie RAM normala de mare viteza. Structura di principiu a unei astfcl
de memorii cache este redata in fig. 3.5.
Adresa MP emisa de procesor este imparţită in doua câmpuri, Tag si index. Tag-ul
este format din biţii cei mai semnificativi ai adresei si este memorat in cache
impreuna cu data. lndex-ul este format din bipi cei mai puţin semnificativi si este
utilizat la adresarea cache-ului.
In cazu! maparii directe, o linie din MP cu un anumit index va ft mapată intotdeauna
in aceeasi locate cache (in cea selectată de indexul respectiv). si deci la un moment
dat în cache se pot afla doar Iinii cu indecsi diferip. Deoarece o linie MP poate fi
gizduita de o singura locate cache, un algoritm de inlocuire (evacuare) devine
nenecesar. Eficienta inlocuirii liniilor cache in cazul maparii directe rezida din
probabilitatea foarte mic5 ca douS Iinii MP diferite dar cu acela^i index să fie
revendicate de procesor in aceeasi perioadă de timp.
Memorii cache

23
adresarea locajiilor cache. Aceasta tehnica $i avantajele ei vor fi prezentate in cazu!
TLB (Translation Look-aside Buffer), in capitolul 4.
Pentru cache-wile cu mapare directa pot fi identificate urmatoarele avantaje:
1. Nu necesita algoritm de inlocuire (evacuare)
2. Hardware siraplu ?i cost scazut
3. Viteza mare de operare
Dezavantajele sunt:
1. Performantele scad considerabi! daca in aceeaji perioadS de timp se acceseaza
adrese NfP difsrire car care prszinta cinipuri index ider.tics.
2. Rata de hit este mai mica decat in cazu! cac.^-urilor asociative.
Totusj, pe masura ce capacitatea cache-ului cre$te diferenfa dintre ratele de hit
aferente celor 2 tipuri de cache-uii se reduce 5! devine nesemnifkativa.
Memoria cache organizată in seturi asociative
In cazul memoriei cache cu mapare directi, toate cuvintele (liniile) memorate
in cache trebuie sa aiba indec?i diferip. Ta?-urile pot fi ider.dce sau diferite. Deci o
linie MP poate fi copiatS intr-o stngura locape cache. In cazul memoriei cache
complet asociative, once linie MP poate fi copiata in orice locatie cache, dar costul
devine prohibitiv pentru cac/!«-urile de capacitate mare 51 memoriile asociative de
capacitate mare devin relativ lente (operatia de cautare in memoria asociativj
consumS tot mai mult limp pe masurS ce capacitatea acesteia create).
Cache-urile organizate in seturi asociative permit doar unui mimgr li^itat de linii MP,
cu acelasi index si ra^-uri diferite, sa fie incarcate in cache ;i deci ar putea fi
considerate ca un compromis mtre maparea complet asociativa şi maparea directă.
Organizarea unui cache cu seturi asociative este prezentata in fig. 3.7.
Numarul de loca|ii (linii) dintr-un set reprezinta dimensiunea setului si se numeste
asociativitate. Fiecare linie din fiecare set confine un tag memorat care impreună cu
index-ul (numarul setului) identifies complet linia respectiva. Mai intai, index-ul din
adresa MP emisa de procesor va selecta un set in cache. Apoi, comparatoarele vor
compara toate tag-mis din setul selectat cu fag-ul desprins din adresa emisă de
procesor. Daca un comparator semnalizeaza egalitate (hit), linia aferenta este accesată
si incarcată in procesor. Dacă nici un comparator nu semnalizeaza egalitate (miss), se
va recurge la accesul in MP

3. Combinaţia memorie cache – memorie virtuală.


Intr-un sistem de calcul cu memorie virtuală memorie şi mem cache, memoria
cache ar putea fi inserată după translatarea adresei virtuale prin TLB, astfel incat in
cache se vor memora tag-uri rezultate din adrese reale şi comparaţia acestora se va
face cu tag-ul rezultat din adresa reală de acces in MP. O alta solutie posibila consta
in inserarea cache-ului inainte de translatarea adresei virtuale prin TLB, astfel incat in
cache se vor memora tag-uri rezultate din adrese virtuale si comparaţia acestora se va
face cu tag-ul rezultat din adresa virtuala emisă de procesor. Vom prezenta mai intai
primul caz, care este mai puţin. complicat şi care are mai puţone repercusiuni asupra
proiectarii sistemului de calcul (în ansamblu).

4. Cache adresat cu adrese reale; avantaje şi dezavantaje


Desi nu este absolut necesar pentru o corecta operare, de regula se recurge la
implementari care asigura un anumit grad de paralelism (performante superioare),
translatarea adresei in TLB se face concurent cu anumite parti independente din
procesul de selectie a locatei cache. Paralelismul va fi introdus in urmatoarea maniera:
sistemul de memorie virtuala imparte adresa virtuala emisa de procesor in doua

24
campuri, campul cel mai semnificativ care va identifica pagina (campul page) si
campul cel mai putin semnificativ care va identifica cuvantul (linia) in cadrul paginii
(campul line). Pentru un anumit sistem particular delimitarea cimpurilor line si page
este fixa si astfel realizata incat pagina si aiba o dimensiune optima (optimizarea
transferurilor MP - disc la momentele page fault). In cazul cache-urilor cu mapare
directa si a celor mapate in seturi asociative, adresa virtuala este de asemenea
impartita in doua campuri, campul superior tag si campul inferior index, (care
selecteaza setul sau linia cache). Daca campul index coincide cu campul line, atunci
selectia setului/liniei in cache se poate face in paralel cu translatarea adresei virtuale
in TLB; acesl lucru este posibil deoarece campul line nu este afectat de translator
(trece nemodificat din adresa virtuala in cea reala). Dupa translatarea adresei in TLB
si obtinerea adresei reale, aceasta adresa va fi comparata cu tag-urile selectate in
cache.
Din considerente de cost si de viteza de operare, mult mai raspindite sunt
TLB-urile organizate in seturi asociative. In aceasta situatie, TLB-ul impune divizarea
campul page in 2 subcampuri, tag si index, asa cum indica figura 4.16 – pag 103
Pentru cache-urile cu mapare directa, in mod cert, suprapunerea operatiilor in TLB si
cache (paralelismul) se bazeaza pe faptul ca dimensiunea paginii este identica cu
dimensiunea cache-ului. Pentru cache-urile organlzate in seturi asociative restrictiile
impuse de paralelism nu mai sunt tot atat de severe (dimensiunea globala a cache-ului
organizat in seturi asociative poate sa creasca prin cresterea dimensiunii setului). Fara
a afecta esential paralelismul, va fi permis o anumita variatie a lungimii campurilor
delimitate in adresa virtuala. In particular, dimensiunea paginii poate fi mai mare,
astfel incat vor aparea mai multi biti in campul line decat numarul de biti necesari
pentru selectia setului (liniei) cache. Bitii ramasi vor fi concatenati la dreapta
campului Real page citit din TLB, rezultand astfel un camp extins care se va compara
cu tag-urile citite din cache (fig. 4.17 – pag 104).

5. Cache adresat cu adrese virtuale; avantaje şi dezavantaje


Daca memoria cache este adresata cu adrese virtuale, in ciclurile de acces la
memorie initiate de procesot aceste adrese vor fi imediat disponibile; apare astfel o
rezerva potentiala care permite cresterea vitezei de operare in raport cu cache-urile
adresate cu adrese reale. In cazul ciclurilor cu hit in cache nu va mai fi necesara
translatarea adresei virtuale prin TLB ceea ce poate conduce la o imbunatatire a
vitezei de operare; translatarea adresei (prin TLB in cazul hit in TLB, sau cu ajutorul
tabelelor de translatare din MP in cazul miss in TLB) va fi necesara numai in cazul
ciclurilor cu miss in cache
Un avantaj particular al cache-urilor adresate cu adrese virtuale va fi acela ca
nu mai este necesara suprapunerea operatiilor TLB peste operatiile cache, deoarece nu
mai este necesar translatarea adresei virtuale in adresa reala in cazul ciclurilor cu hit
in cache.
Desi cachie-urile adresate cu adrese virtuale par a fi o solutie atractiva, sa
notam ca acestea induce si anumite complicatii datorate legaturilor care pot sa existe
intre anumite adrese virtuale, care apartin unor procese diferite si care coexista in
cache. Este posibil ca 2 adrese virtuale diferite, care apartin 1a 2 procese diferite sa
conduca (prin translatare) la aceeasi adresa reala. Asemenea adrese virtuale sunt
denumite sinonime. Sinonimele apar daca locatia de memorie adresata este partajata
de 2 sau mai multe procese

25
Pentru a gestiona sinonimele adreselor virtuale li se pot atasa tag-uri de proces
(tag-uri suplimentare), pentru a putea diferenfia doua adrese virtuale identice dar care
apartin unor procese diferite.
O alta metoda de gestionare a sinonimelor din cache-urile adresate cu adrese
virtuale consta in utilizarea unui buffer de translatare inversa numit reverse translation
buffer (RTB) sau inverse translation buffer (ITB). In cazul unui ciclu cu miss in cache
adresa virtuala va fi translatata in adresa reala cu ajutorul TLB. Adresa reala obtinuta
va fi utilizata la accesarea MP; in paralel cu derularea accesului in MP, adresa reala va
suferi o translatare inversa pentru a se identifica toate adresele virtuale care conduc
prin translatare la aceasta adresa reala. Translatarea inversa se face cu ajutorul RTB.

6. În sistemul de gestiune a memoriei identificăm algoritmi de înlocuire relativi


la:
i. memoria cache
ii. memoria virtuală
iii. TLB (Translation Lookaside Buffer)
Pentru fiecare caz explicaţi rolul algoritmului şi modul principial de
implementare

a) Pentru cache
Inlocuire aleatoare - De exemplu, un numarator asociat intregului cache poate fi
incremental periodic. Valoarea momentana din numarator identifica linia de inlocuit.
Algoritmul first-in first-out - selecteaza pentru inlocuire linia care se afla in cache
de ce! mai mult timp. Algoritmul FIFO poate fi implementat in mod natural cu o
memorie FIFO sau cu un numarator
LRU – Se inlocuieste linia din cache cea mai putin recent referita (linia cea mai putin
utilizata din setul celor prezente in cache de ex). Implementare prin: numaratoare,
stiva de registri, matrice de biti de stare.
b) Pentru mem virtuala
Algoritmi globali (pagina de evacuat luand in considerate toate paginile existente in
MP) si locali(selecteaza pagina de evacuat luand in considerate numai paginile
asociate programului care a general exceptia page fault.)
Inlocuire aleatoare - La activarea exceptiei page fault, acest algoritm realizeaza o
selectie aleatoare paginii ce urmeaza a fi evacuata din MP.
Algoritmul first-in first-out - La activarea exceptiei page fault, algoritmul first-in
first-out (FIFO) va evac: pagina care se afla in MP de cea mai lunga perioada de timp.
Poate fi impl printr-o coada circulara.
Algoritmul first-in-not-usedfirst-out – este o modificare a FIFO astfel incat sa se
evite evacuarea paginilor
utilizate (care prezinta o probabilitate rnai mare de a fi accesate din nou).
LRU – La page fault, va fi evacuata din MP pagina care n-a mai fost referita de cea
mai lunga perioada de timp.
Working Set - Algoritmul working set se bazeaza pe faptul ca fiecare program are
propriul set de lucru; el inlocuieste pagina care n-a fost referita in intervalul T.
c) Pentru TLB
Algoritmii sunt similari cu cei de la cache (a). Alg de inlocuire a unei intrari in TLB
este insa complet hardware

7. Rezumaţi caracteristicile esenţiale ale arhitecturilor:

26
b. RISC
c. CISC
d. Evidenţiaţi avantajele/dezavantajele fiecărei arhitecturi.

CISC: set amplu de instructiuni, multe moduri de adresare, formate de instructiuni de


lungime variabila
RISC: set redus de instrucjiuni care include doar instructiuni simple, memorii cache on
chip, numar mare de registre, un compiliator care maximizeaza utilizarea registrelor
(minimizeaza accesele la memorie) si incearca optimizarea performantelor procesorului cu
structura pipeline.
Av/dezav.Comparatie
Av RISC: viteza de procesare, implememarea VLSI, timpul de proiectare si costul
proiectarii, suport oferit pentru limbajele de nivel inalt. In ceea ce priveste viteza de
procesare, arhitectura RISC suporta mult mai bine modelul pipeline la nivelul instructiunii
(datorita setului redus de instr si complexitatii lor uniforme). Un alt avantaj ai procesoarelor
RISC este ciclul de proiectare mai scurt. Arhitecturile complexe (CISC) necesita un ciclu
de proiectare mai lung si perioade mai lungi de testare si diagnoza a microcodului.
Arhitectura simpla (RISC) este mai putin predispusa la erori de proiectare.
Arhitectura CISC reduce numarul de instructiuni din program datorita utilizarii
instructiunilor complexe. Arhitectura RISC reduce numarul de cicluri procesor
necesare executiei unei instructiuni.
Dezav RISC: Datorita instructiunilor simple, performantle arhitecturii RISC sunt dependente
de eficienta compilatorului. Principalul dezavantaj al arhitecturii RISC consta in necesitatea
scrierii unui compilator performant. Un alt dezavantaj consta in faptul ca exista
instructiuni CISC care echivaleaza cu 2 sau chiar 3 instructuni RISC, ceea ce conduce la
programe RISC mai lungi decat programele CISC echivalente.
In concluzie, proiectarea procesoarelor RISC ar putea fi imbunatatita prin utilizarea
anumitor principii CISC dezvoltate si imbunatante de-a lungul anilor.

8. Ce e memoria virtuala ? - vezi rezolvarile de la subiectele anterioare Mihu Z

5. OPM + SOAC + PSAA (Vintan)

10 An 3 Intro

Calculatoare: personale, servere, dedicate


Componente:
 Microprocesor
 Bus de adrese: unidir, Mp pune adresele de acces la mem/ porturi I/O
 Bus de date: bidir; citirea/scrierea in memoriei sau in disp I/O
 Memoria: caract: capacitate, latenta
o EPROM: nevolatile la decuplarea tensiunii, volatile la UV; BIOS
o SRAM : volatile; rapide, consum mare
o DRAM : volatile; mai lente ca SRAM, consum redus; capacitate mare
Procesarea unei instr:
 Fetch: citirea instr din mem
 Decode : aduce operanzii in registrii
 Execute
Mod de lucru intre Mp si I/O:

27
 Interogare/Pooling : testarea de Mp a unui bit de stare asociat perifericului;
dezavantaj: Mp asteapta citirea bitului inaintea fiecarei actiuni; latenta mare
 Intreruperi hardware : Mp abandoneaza executia instr curente si se ocupa de
intrerupere
 DMA : pentru disp rapide; scrierea/citirea direct in memorie (o op de citire ~
cu latenta unei intreruperi)

11 An 3 Cache-uri

Localiate temporala: o instr accesata de procesor este f probabil sa fie accesata din
nou in viitorul apropiat
Localitate spatiala: o instr din vecinatatea instr curente accesata de procesor este f
probabil sa fie si ea accesata in viitorul apropiat

Cache-urile exploateaza cele 2 localitati: instr accesate de procesor sunt introduse


intr-o memorie rapida aflata intre procesor si memoria principala. Datele sunt aduse in
blocuri.

Tipuri:
 Mapare directa:
o fiecare locatie din memorie are asignata o locatie in cache folosind o
functie de hash;
o un tag discrimineaza intre diferitele blocuri care pot ocupa aceeasi
locatie;
o la conflicte se suprascrie cu valoarea accesata cel mai recent
 Complet asociative:
o Fiecare locatie din memorie poate ocupa orice locatie din cache
o Eliminare prin LRU
o Rapide, insa scumpe si de dim reduse
 Semiasociative
o Cache cu mapare dinamica cu reducerea coliziunilor la nivel de de
intrare
o N-way associative – N intrari pentru fiecare set
o Fiecare locatie din mem are un singur set in care se poate gasi in cache

Strategii de scriere:
 Write through
o Se scrie atat in cache cat si in MP
o Nu se mai evacueaza intrarea din cache in MP
o Dureaza mai mult ,de aceea se foloseste un buffer: DWB
o Mai usor de implementat decat WB
 Write back
o Se scrie doar in cache, iar la evacuarea blocului in MP
o Comnum mai mic de putere
o Asigura mai usor coerenta

Asigurarea coerentei cache-urilor:


 Write Invalidate

28
o Invalidarea intrarilor din celelalte cache-uri
 Write Broadcast
o Actualizarea celorlalte copii

Reducerea penalizarii la miss:


 Niveluri multiple de cache
 Memorii victim-cache

Reducerea ratei de miss:


 Cresterea marimii blocurilor (- incarcarile/evacuarile dureaza mai mult)
 Cresterea capacitatii (crestere timp de acces, costuri)
 Cresterea asociativitatii (crestere timp de acces)
 Optimizari prin compilator : intrarea intr-un basic block sa fie prima din bloc
in cache

Victim cache
 Mem complet asociativa intre L1 cache si MP
 Blocurile evacuate din cache datorita missurilor sunt pastrate temporar in VC
 Pot aparea multe interschimbari intre cache si VC
Selective Victim Cache
 Aduce blocul din MP in cache sau SVC in mod selectiv
 In cache blocul conflictual e A, in SVC e B
 Hit B in cache
o Se trimite din cache la CPU
o Hit B=1 Sticky B=1
 Hit B in SVC
o Se trimite din SVC la CPU

If sticky A=0
se aduce in cache; sticky B=1 hit B=1
Else
if hit B=0
copiaza B in blocul tranzitoriu; sticky A=0
else
interschimba A cu B; sticky B=1; hit B=0
 Miss in ambele

If sticky A=0
A trece in SVC; B trece in cache; sticky B=1 hit B=1
Else
if hit B=0
B trece in SVC in blocul tranzitoriu; sticky A=0
else
A trece in SVC; B trece in cache; sticky B=1; hit B=0

TLB (Translation Look-aside Buffer)


 Cache pentru intrarile din tabela de pagini a mem. virtuale
 Dimensiuni mici

29
Paginarea – impartirea mem in pagini de marime egala
Segmentarea – impartirea mem in segmente de lungime variabila

Pipeline – procesare paralela prin care un proces e divizat in subprocese, fiecare


suvproces fiind exec intr-o unitate dedicata care opereaza in paralel cu celelale

IF->ID->ALU->MEM->WB

Hazarduri:
 Structurale
 De date
 De ramificatie

1. De ce nu este suficientă doar optimizarea unităţilor secvenţiale de program-


obiect (“basic-blocks”), fiind necesară optimizarea (globală a) întregului
program? În ce constau dificultăţile optimizării globale ? Soluţii de principiu.
Optimizare locala
 La nivelul basic block-urilor
 Instr sunt rearanjate pentru a fi aduse din cache de catre procesor a cat mai
multor instr independente
 Calea critica
o drumul de lungime maxima in graful dependentelor intre instr
o chiar profitand de paralelismul instr la maxim, secventa nu poate fi
exec mai rapid decat lungimea caii critice
 List scheduling
o Parcurge graful dependentelor de jos in sus
o Fiecare instr are prioritatea egala cu lungimea caii de jos pana la ea
o Incearca lansarea in exec a instr disponibile
o Daca exista conflicte de resurse se alege instr in functie de prioritate
 Dificila datorita incertitudinilor aduse de branch-uri
 Paralelism la nivel de basic block este redus – 2-3 instr
Optimizare globala
 Suprapunerea instr din basic block-uri diferite
 Se estimeaza paralelism de 50-60 instr in cazul ideal al resurselor nelimitate,
renaming perfect etc.
 Trace scheduling
o Ca LS doar pe mai multe basic block-uri, pe o singura cale de parcurs
folosind o predictie a branchurilor care sunt parcurse

2. Care sunt motivele pentru care microprocesoarele superscalare au un succes


comercial superior celor cu paralelism exploatat prin optimizări de program
(“scheduling” static – spre exemplu microprocesoare tip VLIW, EPIC etc.) ?

Procesoare superscalare = procesoare paralele pentru care decodificarea instr, detectia


dependentelor de date dintre ele, rutarea si lansarea lor in exec din bufferul de
prefetch se fac prin hardware; instr simple RISC sunt asigate de hard unitatilor de
exec;

30
VLIW (Very long instr word) aduc mai multe instr simple RISC intr-o singura instr,
pe care le distribuie apoi unitatilor de procesare.
Este nevoie de softuri de exploatare a paralelismului din program pentru a grupa instr
independente.
Este mai simplu dpdv hardware, instr fiind asignate unitatilor de exec in ordinea
codificarii si nu dinamic ca la proc superscalare.
Compilatorul e puternic senzitiv la modificari hardware.
Dezavantaje VLIW:
 Paralelism redus al programelor =.> unit de exec libere
 Reorganizarea greoaie a aplicatiilor
 Modificari hard => modificari ale compilatorului
 Cresterea necesitatilor de memorare a aplicatiilor

3. Procesoare superscalare.
Un deziderat ambitios este acela de se atinge rate medii de procesare de mai multe
instructiuni per tact. Procesoarele care initiaza executia mai multor operatii simultan
intr-un ciclu (sau tact) se numesc procesoare cu executii multiple ale instructiunilor.
Un astfel de procesor aduce din cacheul de instructiuni una sau mai multe instructiuni
simultan si le distribuie spre executie în mod dinamic sau static (prin reorganizatorul
de program), multiplelor unitati de executie.
Principiul acestor procesoare paralele numite si "masini cu executie multipla" (MEM)
consta în existenta mai multor unitati de executie paralele, care pot avea latente
diferite. Pentru a facilita procesarea acestor instructiuni, acestea sunt codificate pe un
singur cuvânt de 32 sau 64 de biti uzual, pe modelul RISC anterior prezentat. Daca
decodificarea instructiunilor, detectia dependentelor de date dintre ele, rutarea si
lansarea lor în executie din bufferul de prefetch înspre unitatile functionale se fac
prin hardware, aceste procesoare MEM se mai numesc si superscalare.

Pot exista mai multe unitati functionale distincte, dedicate de exemplu diverselor
tipuri de instructiuni tip întreg sau flotant. Asadar executiile instructiunilor întregi, se
suprapun cu executiile instructiunilor flotante (FPFlotant Point). În cazul
procesoarelor MEM, paralelismul temporal determinat de procesarea pipeline se
suprapune cu un paralelism spatial determinat de existenta mai multor unitati de
executie. În general structura pipeline a coprocesorului are mai multe nivele decât
structura pipeline a procesorului ceea ce implica probleme de sincronizare mai dificile
decât în cazul procesoarelor pipeline scalare. Acelasi lucru este valabil si între diferite
alte tipuri de instructiuni având latente de executie diferite. Caracteristic deci
procesoarelor superscalare este faptul ca dependentele de date între instructiuni se
rezolva prin hardware, în momentul decodificarii instructiunilor. Modelul ideal de
procesare superscalara, în cazul unui procesor care poate aduce si decodifica 2
instructiuni simultan este prezentat în figura 4.1.

S-ar putea deci considera aceste procesoare MEM ca fiind arhitecturi de tip MIMD
(Multiple Instructions Multiple Data) în taxonomia lui Michael Flynn.

31
De remarcat ca procesoarele superscalare, determina apropierea ratei de executie la
una sau, în cazul în care se pot aduce mai multe instructiuni simultan, la mai multe
instructiuni per ciclu. Dificultatile de sincronizare sporite, se rezolva prin utilizarea
unor tehnici hardware bazate pe "scoreboarding" deosebit de sofisticate. Majoritatea
microprocesoarelor RISC actuale sunt de tip superscalar (contin cel putin un
coprocesor integrat în chip). Un procesor superscalar care aduce din cache-ul de
instructiuni mai multe instructiuni primitive simultan, poate mari rata de procesare la
1.2-2.3 instr./ciclu masurat pe o mare diversitate de benchmark-uri, la nivelul
realizarilor practice între anii 1995-1998

În cazul procesoarelor superscalare sunt citate în literatura de specialitate 3 modalitati


distincte de procesare si anume: In Order Issue In Order Completion (IN - IN), In
Order Issue Out of Order Completion (IN - OUT) si respectiv Out of Order Issue Out
of Order Completion (OUT - OUT).

a) Modelul IN - IN
Este caracterizat prin faptul ca procesorul nu decodifica urmatoarea pereche de
instructiuni, decât în momentul în care perechea anterioara se executa. Asadar atât
executia cât si înscrierea rezultatelor se face în ordinea din program

b) Modelul IN - OUT
Este caracterizat de faptul ca executia propriu-zisa se face în ordine, în schimb
înscrierea rezultatelor se face de îndata ce o instructiune s-a terminat de executat.
Modelul este mai eficient decât cel precedent însa poate crea probleme de genul
întreruperilor imprecise care trebuiesc evitate

c) Modelul OUT - OUT


Este cel mai agresiv si performant model de procesare a instructiunilor într-un
procesor superscalar. Instructiunile sunt aduse si decodificate sincron, presupunând
deci existenta unui buffer între nivelul de decodificare si executie (instructions
window). Astfel creste capacitatea de anticipare a instructiunilor independente dintr-
un program. Modelul permite o exploatare mai buna a paralelismului instructiunilor la
nivelul unui program dat, prin cresterea probabilitatii de determinare a unor
instructiuni independente, stocate în buffer.

8. Arhitectura lui Tomasulo


A fost proiectata si implementata pentru prima data în cadrul unitatii de calcul
în virgula mobila din cadrul sistemului IBM - 360 / 91 si este atribuita lui Roberto
Tomasulo, considerat a fi fost pionierul procesarii superscalare.
Arhitectura este una de tip superscalar având deci mai multe unitati de
executie, iar algoritmul de control al acestei structuri stabileste relativ la o instructiune
adusa, momentul în care aceasta poate fi lansata în executie si respectiv unitatea de
executie care va procesa instructiunea. Arhitectura permite executia multipla si Out of
Order a
instructiunilor si constituie modelul de referinta în reorganizarea dinamica a
instructiunilor într-un procesor superscalar. De asemenea, algoritmul de gestiune
aferent arhitecturii permite anularea hazardurilor WAR si WAW printr-un ingenios
mecanism hardware de redenumire a registrilor, fiind deci posibila executia Out of
Order a instructiunilor si în aceste cazuri. Asadar, singurele hazarduri care impun
executia In Order sunt cele de tip RAW.

32
În cadrul acestei arhitecturi, detectia hazardurilor si controlul executiei instructiunilor
sunt distribuite iar rezultatele instructiunilor sunt "pasate anticipat" direct unitatilor de
executie prin intermediul unei magistrale comune numita CDB (Common Data Bus).
Arhitectura de principiu este prezentata :

Arhitectura tipica a unui procesor superscalar:

Bufferul de reordonare (RB - Reorder Buffer) este în legatura cu mecanismul de


redenumire dinamica a registrilor în vederea executiei Out of Order precum si cu
necesitatea implementarii unui mecanism precis de tratare a evenimentelor de
exceptie( derute, devieri, întreruperi hard-soft, etc.). Acesta contine un numar de
locatii care sunt alocate în mod dinamic rezultatelor instructiunilor. În urma
decodificarii unei instructiuni, rezultatul acesteia este asignat unei locatii din RB, iar
numarul registrului destinatie este asociat acestei locatii. În acest mod, registrul
destinatie este practic redenumit printr-o locatie din RB.

Bufferul RB poate fi gestionat ca o memorie FIFO (First In First Out) circulara. În


momentul decodificarii unei instructiuni, rezultatul acesteia este alocat în coada RB.
Rezultatul instructiunii este înscris în momentul în care unitatea de executie
corespunzatoare îl genereaza. Când acest rezultat ajunge în prima pozitie a RB, daca
între timp nu au aparut exceptii, este înscris în setul de registri. Daca instructiunea nu

33
s-a încheiat atunci când locatia alocata în RB a ajuns prima, bufferul RB nu va mai
avansa pâna când aceasta instructiune nu se va încheia. Decodificarea instructiunilor
poate însa continua atât timp cât mai exista locatii disponibile în RB. Daca apare o
exceptie, bufferul RB este golit, procesorul bazându-se pe contextul memorat In
Order în setul general de registri. Astfel, desi proceseaza Out of Order, procesorul
superscalar implementeaza un mecanism de exceptii precise.

4. BTB(branch pradiction).

O alta problema delicata consta în faptul ca desi predictia poate fi corecta, de multe
ori adresa de salt (noul PC) nu este disponibila în timp util, adica la finele fazei de
aducere IF. Timpul necesar calculului noului PC are un efect defavorabil asupra ratei
de procesare. Solutia la aceasta problema este data de metoda de predictie numita
"branch target buffer" (BTB). Un BTB este constituit dintr-un BPB care contine pe
lânga bitii de predictie, noul PC de dupa instructiunea de salt conditionat si eventual
alte informatii. De exemplu, un cuvânt din BTB ar putea contine si instructiunea tinta
a saltului. Astfel ar creste performanta, nemaifiind necesar un ciclu de aducere a
acestei instructiuni, dar în schimb ar creste costurile de implementare. Diferenta
esentiala între memoriile BPB si BTB consta în faptul ca prima este o memorie
operativa iar a 2-a poate fi asociativa, ca în figura urmatoare.

La începutul fazei IF se declanseaza o cautare asociativa în BTB dupa


continutul PC-ului în curs de aducere. În cazul în care se obtine hit se obtine
în avans PC-ul aferent instructiunii urmatoare. Mai precis, considerând o
Procesoare pipeline scalare cu set optimizat de instructiuni 103
structura pipeline pe 3 faze (IF, RD, EX) algoritmul de lucru cu BTB-ul este
în principiu urmatorul:
IF) Se trimite PC-ul instructiunii ce urmeaza a fi adusa spre memorie si spre BTB.
Daca PC-ul trimis corespunde cu un PC din BTB (hit) se trece în pasul RD2, altfel în
pasul RD1.
RD1) Daca instructiunea adusa e o instructiune de branch, se trece în pasul EX1,
altfel se continua procesarea normala.
RD2) Se trimite PC-ul prezis din BTB spre memoria de instructiuni. În cazul în care
conditiile de salt sunt satisfacute, se trece în pasul EX 3, altfel în pasul EX2.
EX1) Se introduce PC-ul instructiunii de salt precum si PC-ul prezis în BTB. De
obicei aceasta alocare se face în locatia cea mai de demult neaccesata (Least Recently
Used - LRU).
EX2) Predictia s-a dovedit eronata. Trebuie reluata faza IF de pe cealalta ramura cu
penalizarile de rigoare datorate evacuarii structurilor pipeline.

34
EX3) Predictia a fost corecta, însa numai daca si PC-ul predictionat este într-adevar
corect, adica neschimbat. În acest caz, se continua executia normala

5. Arhitecturi superscalare vs paralele.


Procesoare paralele = existenta mai multor unitati de executie paralele care pot avea
latente diferite;
Procesoare superscalare = procesoare paralele pentru care decodificarea instr, detectia
dependentelor de date dintre ele, rutarea si lansarea lor in exec din bufferul de
prefetch se fac prin hardware

6. Limitări arhitecturale ale paradigmei superscalare şi independente de


caracteristicile microarhitecturale, referitoare la:
a. maximizarea ratei de aducere a instrucţiunilor din memorie
b. maximizarea ratei de execuţie a instrucţiunilor.
c. Soluţii de principiu.

a) Maximizarea ratei de aducere a instrucţiunilor din memorie


Rata de aducere a instructiunilor este limitata de instructiunile de salt. Astfel
procesorul poate aduce din memorie doar un singur basic block (basic block=secv. De
instr. dinamice) inmedie 6 instr/ciclu datorita acestor instructiuni de salt. Aceasta
limitare se numeste fetch bottleneck(„limitarea producatorului”).
Solutia: Pentru a rezolva aceasta problema folosim o structura trace cache(TC)
– o memorie cache de instructiuni care contine basic block-uri succesive, pe care
procesorul le-a executat anterior. O intrare in trace cache contine un trace de basic
block-uri

Fig 1. Selectia dintr-o linie trace cache asociativa

35
Memoria TC e accesata cu adresa de inceput a basic block-ului curent n
paralel cu un predictor multiplu de salturi. Acest predictor predictioneaza toate cele
(M-1) adrese de inceput aferente celor (M-1) basic-blockuri ce urmeaza dupa blocul
curent.
Accesare: atat IC(instruction cache) cat si TC sunt accesate in paralel cu adresa de
inceput a noului bloc de instr. Ce trebuie executat. Prima oara cand un trace este
intalnit ii este alocata o linie in TC. Daca acelasi trace se intalneste din nou in timpul
executiei programului(aceeasi adr.de inceput si aceleasi preziceri ale branch-urilor) el
va fi gasit si va fi trimis decodorului.ste intalnit in TC se va cauta in IC si dc nici aici
se cauta in nivelele ierarhice superioare.

TC exploateaza reutilizarea eficienta a secventelor dinamice de instr.


reprocesate frecvent in baza a doua motive de principiu:
 localizarea temporala a trace-ului
 comportarea predictibila a salturilor in virtutea comportarii lor ulterioare

b) Maximizarea ratei de execuţie a instrucţiunilor


Rate de executie a instr. este fundamental limitata de calea critica din
program (cel mai lung lant de dependente prin hazarduri RAW masurat in cicli CPU).
Aceasta limitare se numeste Issue Bottleneck(„limitarea consumatorului”).Alte
limitari sunt: hazarduri structurale (conflicte la resurse comune), hazarduri de
ramificatie (generate de instr. de ramificatie) si mecanismul de aducere a instr. din
memorie.
În ultimii ani s-au dezvoltat două tehnici hardware menite să exploateze
redundanţa existentă în programe, reducând timpului de execuţie al acestora prin
colapsarea dinamică a dependenţelor de date: reutilizarea dinamică a instrucţiunilor
şi predicţia valorilor.
Ideea de reutilizare dinamica(DIR) a instr. apartine cercetatorilor Sodani si
Sohi care au aratat ca reutiliz. instr. se face relativ frecvent datorita: structurilor de
date folosite in program(liste, arbori, stive, hash tables, etc) si a manierei concise in
care sunt scrise (programe recursive, loop-uri, mostenire). Mai putin de 20% din instr.
statice genereaza peste 90% instr. dinamice. O instr. dinamica e reutilizabila daca
apare cu aceleasi intrari si produce aceleasi iesiri, deci in acelasi „context de intrari”
se va updata „contextul de iesire” => nr. de instr. dinamice executate e redus
Sodani si Sohi au dezvoltat 3 scheme de reutilizare dinamica a instr.: primele 2
la nivel de instr.(reutiliz. valorilor si reutiliz. numelor registrilor) si ultima la nivel de
lant de instr dependente RAW(reutiliz. numelor reg. si a lanturilor de dependente
RAW). Instr. deja executate se memoreaza intr-un cache numit buffer de
reutilizare(Reuse Buffer - RB). Acesta poate fi adresat cu PC pe timpul fazei de
aducere a instructiunii, are un mecanism de invalidare selectiva a unor intrari si un
mecanism de testare a reutilizabilitatii instr. selectate. Managementul RB consta in
stabilirea instructiunii care va fi plasata in buffer si mentinerea consistentei RB.
Reutilizarea dinamică a instrucţiunilor (DIR) este o tehnică nespeculativă care
recunoaşte un lanţ de instrucţiuni dependente executat anterior şi nu-l mai execută din
nou - early validation - actualizând doar diferite date (rezultatele) în tabelele hardware
aferente. DIR comprimă un lanţ de instrucţiuni din calea critică de execuţie a
programului.

36
Predictia valorilor e o tehnica descoperita de Lipasti. Localitatea valorii se
refera la faptul ca rezultatul unei instr. care este din nou procesata sa se repete.
Predictia dinamica a valorilor instructiunilor (VP) repr. o tehnica speculativa
care se bazeaza pe predictia valorii instructiunilor urmata de executia speculative a
instructiuniilor successive dependente. Executia speculativa este mai tarziu validata
(late validation) dupa ce rezultatul instructiunii e produs. In cazul unei predictii
corecte timpul de executie al caii critice este redus. Altfel instructiunile prezise gresit
trebuie executate din nou (recovery), cu penalitatile de timp aferente.

Mica paranteza:
(

Daca prima intr este mov a, val 1 + val2 si a doua if (a==1) do ... instr a doua
presupune ca a =1 si se executa pe acea ramura , chiar daca nu se cunoaste inca val
din a. Cand se face ALU pt prima instr. se cunoaste rez. si ea va spune dc predictia e
valida sau nu. Dc nu e valida se face recovery –instr. sunt evacuate din pipeline si se
executa cealalta ramura.

Localitatea valorilor este justificata de: redundanta datelor, constantele din


program, calculul adreselor instr de salt, apelul functiilor virtuale, exploatarea
tabelelor de erori ale compilatorului etc. Ca si metrica de evaluare, localitatea valorii
pentru un benchmark este calculata ca raport dintre numarul de instructiuni Load
dinamice care regasesc o aceeasi valoare în memorie ca si precedentele k accese si
respectiv numarul total de instructiuni Load dinamice din benchmark.

Alti factori care determina limitarea ratei de issue a instructiunilor sunt: largimea de
banda limitata a interfetei procesor - cache, missurile în cacheul de date, alias-urile de
memorie. Pentru a contracara efectul acestor factori se poate utiliza cu succes
mecanismul Data Write Buffer (DWB). DWB reprezinta un mic procesor de iesire
care lucreaza în paralel cu CPU degrevându-l pe acesta de sarcina scrierii în cache.
DWB ofera porturi de scriere virtuale multiple spre deosebire de DataCache care
contine un singur port de citire (LOAD) si un singur port de scriere (STORE). DWB
rezolva prin "bypassing" elegant hazardurile de tip "LOAD after STORE" cu adrese
identice, nemaifiind deci necesara accesarea sistemului de memorie de catre
instructiunea LOAD.

37
7. Care sunt principalele avantaje ale tehnicilor de reutilizare dinamică a
instrucţiunilor ? De ce este dificilă detectarea reutilizabilităţii unei funcţii HLL
(High Level Language) prin schemele actuale de reutilizare dinamică a
instrucţiunilor ?

Avantaje:
• scurtcircuitarea unor nivele din structura pipeline de catre instructiunile
reutilizate reducand presiunea asupra resurselor(SR, unit. de exec., etc)
necesare altor instr. aflate in asteptare
• la reutilizarea unei instr. rezultatul sau devine cunoscut mai devreme decat in
situatia in care s-ar procesa normal, permitand altor instr. dependente de
aceasta sa fie procesate mai rapid
• reducerea penalitatilor datorate predictiei eronate a adreselor destinatie in
cazul instr. de salt, prin reutilizarea codului succesor punctului de convergenta
• colapsarea dependenteleor de date determina imbunatatirea timpului de
executie al instructiunilor, crescand gradul de paralelism al arhitecturii

Reutilizabilitatea unei functii HLL


Cu cat reutilizarea se face la un grad mai mare de granularitate cu atat este mai
eficient pentru performata globala a sistemului. Pentru a identifica lanturile de
instructiuni reutilizabile este nevoie de o vedere globala a intregului program , dificil
de indeplinit numai printr-o abordare la nivel hardware.
Totusi au existat cercetari in care s-a incercat reutilizarea basic block-urilor si
si a trace-urilor. O tehnica mai noua (propusa de Kavi) urmareste reutilizarea la un
nivel extrem de masiv: reutilizarea dinamica a rezultatelor functiilor, bazat pe
observatia ca functia e de multe ori reexecutata cu aceeasi parametri. Pt. ca
reutilizarea sa fie eficienta trebuie sa se tina cont de urmatoarele aspecte:
- determinarea influentei optimizarilor de compilare asupra castigului de
performanta
- cunoasterea numarului de param. ai functiei
- influenta conceptelor de programare asupra reutilizarii
realizarea unui studiu comparativ intre castigul de performanta obtinut prin
reutilizarea la nivel de functie vs. reutilizarea la nivel de instr.

8. HLL, HSA

Caracteristica principala a arhitecturii HSA (Hatfield Superscalar Architecture) o


constituie exploatarea paralelismului la nivelul instructiunii, într-un mediu
superscalar, prin schedulling agresiv aplicat codului sursa în momentul compilarii.
Scheduler-ul dezvoltat la Universitatea din Hertfordshire, UK (HSS - Hatfield
Superscalar Scheduler) [VinFlor00] a fost implementat ca parte integranta a
proiectului HSA (Hatfield Superscalar Architecture) – o arhitectura superscalara
minima care combina cele mai bune caracteristici ale conceptelor VLIW si
superscalare

In computing, a high-level programming language is a programming language with


strong abstraction from the details of the computer. In comparison to low-level

38
programming languages, it may use natural language elements, be easier to use, or be
more portable across platforms. Such languages hide the details of CPU operations
such as memory access models and management of scope.
This greater abstraction and hiding of details is generally intended to make the
language user-friendly, as it includes concepts from the problem domain instead of
those of the machine used. A high level language isolates the execution semantics of a
computer architecture from the specification of the program, making the process of
developing a program simpler and more understandable with respect to a low-level
language.(wikipedia is my homie :P )
Statistici deosebit de serioase arata ca în cadrul implementarilor de limbaje HLL
(High Level Languages) instructiunile CALL / RET sunt frecvent folosite si totodata
cele mai mari consumatoare de timp (ocupa între 5%-45% din referirile la memorie).

9. Limitarea issue-bottleneck. Reutilizarea dinamica a instructiunilor


- vezi 6b

10. Care sunt principalele avantaje ale tehnicilor de predicţie dinamică a


valorilor instrucţiunilor ? Ce tipuri de asemenea predictoare exista ? (Ce tipuri
de asemenea predictoare ... „lipsesc” ?)
Avantaje:
- se reduc hazardele RAW prin reducerea asteptarii instructiunilor dependente
ulterioare
- datorita exploatarii gradului de localitate pt. instr. ALU se reduce timpul de
executie pt. instr. mari consumatoare de timp(DIV/MULT) dar si hazardele RAW
- eploateazã vecinãtatea valorii prin predicţia acestei valori, reducând atât timpul
mediu de acces la memorie cât şi necesarul de lãrgime de bandã al memoriei
- VP nu scurtcircuiteazã execuţia - instrucţiunile trebuind sã se execute pentru a
verifica ulterior predicţia. Timpul total de execuţie a unei instrucţiuni va fi limitat
astfel de latenţa sa de execuţie şi verificare. Câştigul aici constã în faptul cã se
deblocheazã instrucţiuni dependente prin procesul de predicţie a valorii

Exista 2 mari categorii de predictoare: computationale si contextuale.


Predict. computationale prezic pe baza unor valori anterioare din alg., folosind o
formula de recurenta.
Ex: pred Last Value, pred incremental

Pred. contextuale prezic urmat. Val. Pe baza aunui pattern anterior(context) care e
generat repetitiv in secventa de valori. Un pred. contextual e de ord k daca contextul
sau include ultimele k valori si deci cautarea se face prin aceste ultime k valori.
Ex: PPM si pred adaptive pe 2 nivele

Pred. hibride foloseste 2 /mai multe predictoare diferite. Ideea de baza e urmat.: dc un
predictor greseste( prezice gresit) celalalt predictor e lasat sa prezica.

De ‚lipsit’ nush ce lipsesc

11. Optimizarea dinamica a procesarii programelor ; alg , aplicatii


- fetch bottleneck – TC

39
- issue bottleneck – DIR si VP
->vezi sub 6

12. Predictia statica si dinamica


Scheme de predictie numite statice sunt caracterizate prin faptul ca predictia saltului
pentru o anumita istorie a sa este fixa, bazata în general pe studii statistice ale
comportamentului salturilor. Astfel de exemplu un salt care anterioarele trei instante
s-a facut efectiv (taken) poate fi predictionat în tabele ca se va face.

Dinamic = predictie folosind automate

Datorita faptului ca predictorul propriu-zis este implementat prin automate finite de


stare, mai mult sau mai putin complexe, aceste scheme au un caracter dinamic,
comportarea lor adaptându-se functiei de „istoria” saltului respectiv.

13. Predictori de salturi


O metoda consacrata în acest sens o constituie metoda "branch prediction buffer"
(BPB). BPB-ul reprezinta o mica memorie adresata cu cei mai putin semnificativi biti
ai PC-ului aferent unei instructiuni de salt conditionat. Cuvântul BPB este constituit în
principiu dintr-un singur bit. Daca acesta e 1 logic, atunci se prezice ca saltul se va
face, iar daca e 0 logic, se prezice ca saltul nu se va face. Evident ca nu se poate sti în
avans daca predictia este corecta. Oricum, structura va considera ca predictia este
Implementarea schemelor clasice de predictie în procesoarele superscalare avansate
corecta si va declansa aducerea instructiunii urmatoare de pe ramura prezisa. Daca
predictia se dovedeste a fi fost falsa structura pipeline se evacueaza si se va initia
procesarea celeilale ramuri de program. Totodata, valoarea bitului de predictie din
BPB se inverseaza. Dezavantajul schemei BPB cu un singur bit se manifesta
îndeosebi în cazul buclelor de program.

Schemele de predictie anterior prezentate se bazau pe comportarea recenta a unei


instructiuni de salt, de aici predictionându-se comportarea viitoare a acelei instructiuni
de salt. Este posibila îmbunatatirea acuratetii predictiei daca aceasta se va baza pe
comportarea recenta a altor instructiuni de salt, întrucât frecvent aceste instructiuni
pot avea o comportare corelata în cadrul programului. Schemele bazate pe aceasta
observatie se numesc scheme de predictie corelata.
Daca doua branch-uri sunt corelate, cunoscând comportarea primului se poate anticipa
comportarea celui de al doilea, ca în exemplul de mai jos:
if (cond1)
....
if (cond1 AND cond2)

40
Se poate observa ca functia conditionala a celui de al doilea salt este dependenta de
cea a primului. Astfel, daca prima ramificatie nu se face atunci se va sti sigur ca nici
cea de a doua nu se va face. Daca însa prima ramificatie se va face atunci cea de a
doua va depinde exclusiv de valoarea logica a conditiei "cond2". Asadar în mod cert
aceste doua ramificatii sunt corelate, chiar daca comportarea celui de al doilea salt nu
depinde exclusiv de comportarea primului.
Un alt avantaj al acestor scheme este dat de simplitatea implementarii hardware, cu
putin mai complexa decât cea a unui BPB clasic. Aceasta se bazeaza pe simpla
observatie ca "istoria" celor mai recent executate m salturi din program, poate fi
memorata într-un registru binar de deplasare pe m ranguri (registru de predictie).
Asadar adresarea cuvântului de predictie format din n biti si situat într-o tabela de
predictii, se poate face foarte simplu prin concatenarea c.m.p.s. biti ai PC-ului
instructiunii de salt curente cu acest registru de deplasare în adresarea BPB-ului de
predictie.
GAg (Global History Register, Global Prediction History Table);

PAg
În scopul reducerii interferentelor diverselor salturi în tabela de predictii, în [Yeh92]
se prezinta o schema numita PAg- Per Address History Table, Global PHT, a carei
structura este oarecum asemanatoare cu cea a schemei GAg.

O problema dificila în predictia branch-urilor o constituie salturile codificate


în moduri de adresare indirecte, a caror acuratete a predictiei este deosebit de scazuta
prin schemele anterior prezentate (cca.50%). În [Cha97] se propune o structura de
predictie numita "target cache" special dedicata salturilor indirecte. În acest caz
predictia adresei de salt nu se mai face pe baza ultimei adrese tinta a saltului indirect
ca în schemele de predictie clasice, ci pe baza alegerii uneia din ultimele adrese tinta
ale respectivului salt, memorate în structura. Asadar, în acest caz structura de
predictie, memoreaza pe parcursul executiei programului pentru fiecare salt indirect

41
ultimele N adrese tinta.

O alta idee noua în predictia branch-urilor o reprezinta predictia pe baza de


lanturi Markov utilizând algoritmul PPM (Prediction by Partial Matching).

Poate fi abordata si prin metode de inteligenta artificiala datorita apropierii


problematicii predictiei de salturi de recunoasterea de paternuri. Prin abordarea
neurala a predictiei tabela de predictie este înlocuita cu informatia, distribuita,
înmagazinata în ponderile retelei iar predictia automatului cu rezultatul produs de
nivelul de iesire al retelei neurale. Revenind la domeniul recunoasterii de paternuri,
reteaua neurala clasifica paternurile în doua categorii: salturi care ar trebui
predictionate ca taken si salturi care ar trebui predictionate ca not taken

14. Predictori de valori


Predictoare computationale (genereaza predictia pe baza istoriei valorilor
memorate, prelucrându-le dupa un algoritm stabilit) respectiv contextuale (lucreaza la
nivel de o
singura instructiune si încearca sa prezica viitoarea valoare care va fi produsa de
instructiune bazându-se pe repetarea unor contexte anterior generate).
Predictoarele incrementale fac parte din categoria celor computationale si
reprezinta o generalizare a predictorului de tip Last Value (echivalent cu un predictor
incremental cu pas 0). În acest caz, considerând ca vn-1 si vn-2 sunt cele mai recente
valori produse, noua valoare vn va fi calculata dupa formula de recurenta: vn = vn-1 +
(vn-1 - vn-2), unde (vn-1 - vn-2) este pasul secventei. Pasul nu este obligatoriu sa fie
constant în timpul executiei programului, ar putea fi si variabil, însa pentru obtinerea
unei acurateti ridicate, pasul trebuie sa fie constant pe perioade de timp suficiente
pentru predictie. În aceasta idee se propun scheme de actualizare a pasului bazate pe
histerezis. Astfel, pasul memorat în tabelele de predictie este modificat numai atunci
când numaratorul saturat asociat, memoreaza o valoare situata peste un prag stabilit.
Fireste, acest numarator este incrementat în cazul unei predictii corecte, respectiv
decrementat în cazul unei predictii incorecte.
O clasa importanta a predictoarelor contextuale sunt cele care implementeaza
algoritmul “Prediction by Partial Matching” (PPM), care contine un set de
predictoare markoviene .
Limitarea fundamentala a procesului de predictie a valorilor prin predictoare
computationale poate fi depasita cu ajutorul unui predictor hibrid. Statisticile
cercetatorilor arata ca un singur tip de predictor (computational, contextual etc.) nu da
în general rezultatele cele mai bune. Este evident ca anumite tipuri de secvente de
valori generate prin program sunt prezise mai bine de un anumit predictor, iar altele,
de catre un alt tip de predictor particular. Din acest motiv s-a nascut ideea predictiei
hibride, adica doua sau mai multe predictoare de valori sa conlucreze în mod dinamic
în procesul de predictie.

15. Caracteristici ale sistemelor cu microcontroller-e (memorii, componente


tipice ale sistemului I/O, set instrucţiuni, instrumente de dezvoltare).
Microcontroller = a type of microprocessor emphasizing self-sufficiency and cost-
effectiveness, in contrast to a general-purpose microprocessor (the kind used in a PC).
The only difference in a microcontroller and a microprocessor is that a

42
microprocessor has three parts - ALU, Control Unit and registers, but the
microcontroller has additional elements like ROM, RAM etc.
Memoria: arh Harvard (spatii de adrese separate pt instr si date). Mem program e
RAM sau EPROM si e adresata pe 16b; mem de date e ROM si adresata pe 8 sau 16b.
Nu au bus special pt date si adrese.
Tipuri de instructiuni: instr aritmetice, logice (AND, OR, NOT, XOR), de salt
conditionat sau neconditionat, de transfer de date (MOV, PUSH, POP, XCH-face cat
3 MOV-uri)
Sistemul I/O: Microcontrollerele, spre deosebire de microprocesoare, se
caracterizeaza prin includerea în propriul cip a diverselor porturi de I/O seriale si
paralele, a circuitelor timer, memorii, sursa de ceas interna, etc
Instrumentele de dezvoltare: magistrala I2C, magistrala ACCESS, placa DB-51 !!
habar n-am ce-s astea 

6. Sisteme de operare (Breazu)

1. Partitionarea HDD. Scop, realizare.

Partitie = zona contigua de disc delimitata de 2 adrese

Prin partitionare discul fizic este impartit in mai multe discuri logice. Fiecare dintre acestea se
comporta ca si cum ar fi un disc separat.
Informatiile despre partitionarea discului sunt stocate intr-un tabel de partitie principala
localizat pe primul sector fizic al discului (0,0,1).

Realizare: comanda fdisk in DOS

Scopuri:
 organizarea discului;
 folosirea discurilor mai mari decat pot fi manipulate de strucrura logica a SO
 permite stocarea de SO si sisteme de fisiere diferite pe acelasi disc;

2. Descrieti notiunea de preemptivitate in planificarea unitatii centrale.

Preemptivitate = proprietatea unui proces de a putea fi oprit din executie pentru a se


executa alt proces cu o prioritate mai mare.

Preemptive allocation = politica de alocare a resurselor dintr-un sistem care permite ca un


proces sa nu detina o resursa pe toata durata executiei sale. (resurse limitate) Exista resurse
pentru care se poate face prelevare fortata (procesor, memorie interna) si altele pentru care
ac lucru nu este permis(banda magnetica , imprimanta).

Preemptive scheduling = politica de planificare a proceselor pentru executie care


permite ca un proces aflat in rulare sa piarda resursa procesor la aparitia unei cereri
provenind de la un proces de prioritate mai mare, sau la expirarea cuantei de timp
alocate. Procesul este trecut in starea ,,pregatit pentru executie" ,un alt proces fiind

43
planificat si rulat conform algoritmului de planificare utilizat. In ac mod se realizeaza
multiplexarea proceselor.

Alocarea nonpreemptiva = strategie bazata pe “bunul simt” al programelor de a ceda


voluntar UC.
Alocarea preemtiva = strategia dominanta in cazul SO pentru sistemele de calcul
individual. SO isi asigura in intregime responsabilitatea alocarii resurselor comune.
SO distribuie timpul in UC. Rezulta un dublu salt calitativ privind:
- Robustetea. SO detine controlul total. Trecerea de la un fir la altul se
executa automat, fara participarea firelor, deci robust.
- Eficienta. Se evita riscul alocarii UC pentru o aplicatie care nu o poate
folosi, doar pentru a o ceda din nou.

3. Fire de executie; comparare cu procese

Program aflat în executie = Proces.


Fir de executie = succesiune sceventiala de instructiuni care se executa în cadrul
unui proces.

Firele de executie fac trecerea de la programarea secventiala la programarea


concurenta. Un program secvential reprezinta modelul clasic de program : are un
început, o secventa de executie a instructiunilor sale si un sfârsit. Cu alte cuvinte, la
un moment dat programul are un singur punct de executie.

Un sistem de operare monotasking (MS-DOS) nu este capabil sa execute decât un


singur proces la un moment dat în timp ce un sistem de operare multitasking (UNIX,
Windows) poate rula oricâte procese în acelasi timp (concurent), alocând periodic
cuante din timpul de lucru al CPU fiecarui proces.
Un fir de executie este similar unui proces secvential în sensul ca are un
început, o secventa de executie si un sfârsit. Diferenta între un fir de executie si un
proces consta în faptul ca un fir de executie nu poate rula independent ci trebuie sa
ruleze în cadrul unui proces.
In cadrul unui proces se pot executa simultan mai multe fire de executie.
Un fir de executie poate fi asemanat cu o versiune redusa a unui proces,
ambele rulând simultan si independent pe o structura secventiala de executie a
instructiunilor lor. De asemenea executia simultana a firelor de executie în cadrul unui
proces este similara cu executia concurenta a proceselor: sistemul de operare va aloca
ciclic cuante din timpul procesorului fiecarui fir de executie pâna la terminarea lor.
Din acest motiv firele de executie mai sunt numite si procese usoare.

Deosebiri:
 firele de executie nu pot rula decât în cadrul unui proces
 fiecare proces are propria sa memorie (propriul sau spatiu de adrese)
 La crearea unui nou proces prin instr fork() se copiaza datele si codul
procesului initial, firele doar codul
 firele de executie au acces la aceleasi date, datele procesului care le
contine

44
Firele de executie sunt utile în multe privinte, însa uzual ele sunt folosite
pentru executarea unor operatii consumatoare de timp fara a bloca procesul principal :
calcule matematice, asteptarea eliberarii unei resurse, acestea realizându-se de obicei
în fundal.

4. Sincronizarea proceselor.Metode de realizare


Definitie
Sectiune critica = segment de cod ce gestioneaza o resursa comuna mai multor
de fire de executie separate si concurente
Controlul accesului proceselor in sectiunea critica se numeste excludere
mutuala.
Sincronizarea proceselor reprezintã înlantuirea automata a starilor unor
procese concurente, prin blocarea si deblocarea automatã a proceselor în executie.
Problema sincronizarii poate sa apara:
- în legatura cu utilizarea în comun a resurselor între procese concurente,
pentru alocarea automata a resurselor
- în cazul proceselor concurente în care executia unui proces este conditionata
de rezultatul executiei altui proces
- în cazul comunicarii între procese, în scopul realizarii unei comunicari
corecte.
Mecanisme de sincronizare a proceselor :
Sincronizare hardware:
Mediu uniprocesor- se impiedica producerea intreruperilor cat timp o variabila
partajata este modificata.(secventa curenta de instr se executa in ordine fara
preemtivitate)- nefezabila in mediu multiprocesor
Semafor
 pentru fiecare resursa partajata din sistem exista un bit semafor si o
lista a proceselor în asteptare, pentru alocarea resursei
 bitul semafor s este setat initial la valoarea 1
 alocare: cerere de la un proces; s--; daca s e 0 atunci resursa e alocata,
altfel procesul este pus in coada de asteptare
 dezalocare: un proces elibereaza resursa; s++; primul proces din coada
de asteptare primeste resursa; daca lista e goala s ramane 1
 functiile de alocare si dezalocare trebuie sa fie concurente

Monitor:
 contine un set de variabile si operatori definiti de programator
 procedurile monitorului pot accesa doar variabilele monitorului si cele
formale, iar var locale ale monitorului pot fi accesate doar de catre
procedurile sale
 un singur proces poate fi activ in cadrul unui monitor
 sincronizarea se face prin variabile de tip condition si operatorii wait()
si signal()
 wait suspenda procesul pana cand alt proces foloseste signal
Blocarea cu bariere
Bit de lock - slabutz

Mecanismele de sincronizare directã, prin comunicarea între procese:

45
Cu ajutorul unor functii primitive ale sistemului de operare, care permit
deblocarea unui proces care a intrat în starea de asteptare
Concomitent, se poate realiza si schimbul de date între cele douã procese,
utilizând directive ale sistemului de operare de tipul SEND, RECEIVE;

10. Memoria virtuala. Implementarea la nivelul SO

Memoria reala: capacitatea memoriei interne


Memoria virtuala: mem reala este suplimentata de cea externa, prin tehnica de
swapping (un proces aflat in starea de asteptare se evacueaza temporar pe disc,
eliberind memoria principala ocupata; reluarea executiei procesului se face prin
reincarcarea sa de pe disc in memorie)
Avantaje: se simuleaza o memorie mai mare decit cea fizica existenta se
imbunatateste folosirea resurselor SC (CPU + memorie)

Paginare: impartirea mem. In pagini (4-64 KB) => mem poate fi astfel alocata
noncontiguu

Implementare in SO: folosind o tabela de pagini (indica adresele de inceput ale


paginilor in memorie)
Ajutor hardware – TLB – cacheaza intrarile din tabela de pagini
Tabela de pagini
- dintr-o bucata – poate fi f mare
- ierarhica
- 2 nivele; tabela de pagini este paginata la randul ei
- Mai mult spatiu folosit insa mai rapida
- Tabele de dispersie (hash)
- O tabela de dispersie contine adresele paginilor
- La suprapunere paginile sunt inlantuite
- Ocupa la fel de mult spatiu ca prima (poate putin mai mult datorita
pointerilor din lanturi) si are viteza mai mare pt o tabela bine
ocupata
- Tabela inversata
- Folosirea unei singure tabele pentru toate procesele, fiecare intrare
indicand si procesul care o foloseste
- Mai putin spatiu pentru tabele, insa cautare mai grea
- Pagini partajate
- In cazul in care procese au cod comun, acesta este incarcat o singura
data in memorie (mai multi utilizatori care folosesc un procesor de
text)

6. Rolul Sistemului de Operare si rolul hardware-ului in tratarea unei exceptii


page fault.

Page fault = intrerupere det de incercarea de accesare a unei pagini marcate ca


invalida (pagina nu este in memorie si va trebui adusa de pe disc)
Rutina de tratare a intreruperii de pagina executa:
- Se examineaza adresa solicitata pentru a vedea daca este o adresa permisa(HARD)

46
- Daca adresa e invalida procesul este incheiat anormal, altfel se cere SO sa incarce
pagina(HARD)
- Se cauta un cadru liber(SO)
- Se solicita o op I/O de incarcare a paginii(SO)
- Modificarea tabelei de pagini pt a indica existenta paginii in mem
- Reinceperea instr care a det page fault
Scrierile în MV se fac după algoritmi de tip "write back" (adică se scrie numai
în memoria principală, nu şi pe disc; scrierea pe disc se face odată cu evacuarea
paginii) şi nu "write through" (scriere în memoria principală şi pe disc - procedeul ar
consuma timp enorm)
Translation-Lookaside Buffers (TLB). Prin paginare, fiecare acces la o
anumită dată necesită 2 accese la memorie: unul pentru obţinerea adresei fizice din
tabela de pagini, iar celălalt pentru accesarea propriu-zisă a datei în memoria
principală.

În vederea reducerii acestui timp de acces (dublu), tabela de pagini este


"caşată" (memorată) în CPU. Memoria cache care memorează maparea tabelei de
pagini se numeşte TLB (Translation-Lookaside Buffer). Ca orice cache, TLB-ul poate
avea diferite grade de asociativitate. Există evacuări şi încărcări între TLB şi tabela de
pagini din MP.

Deoarece TLB-ul este implementat în general "on-chip" (deci chiar în


procesor), capacitatea sa este relativ mică (32-1024 intrări) în comparaţie cu tabela de
pagini, care are 1-4 milioane de intrări. De obicei, TLB-ul se implementează full-
asociative, pentru a avea o rată de miss scăzută (0.01% - 0.1%). Miss-urile în TLB se
pot rezolva atât prin protocol hardware cât şi printr-un handler software.

Miss-uri în TLB şi PF-uri

Pe durata procesului de translatare a adresei virtuale în adresă fizică pot să


apară două evenimente de excepţie:
TLB miss, dar pagina accesată este prezentă în memoria fizică (MP)
Page Fault (PF), adică TLB miss urmat de faptul că pagina dorită nu este
prezentă în tabela de pagini rezidenta în MP (bit P=0).

Un TLB miss generează de obicei o procedură hardware de aducere a


numărului paginii fizice din tabela de pagini. Această operaţie se poate implementa
prin hardware, ea durând un timp relativ scurt (20-30 perioade de tact).

12 Sistemul de operare: rolul resurselor hard si soft

Un sistem computer poate fi impartit in:


 Hardware (CPU, memorie, disp I/O)
 SO
 Aplicatii
 Utilizatori

SO este un program care se comporta ca un intermediar intre utilizatorul calc


si hardware

47
Scopul unui SO este de a furniza un mediu in care un utilizator poate executa
aplicatiile. Acesta trebuie sa fie usor de utilizat. In plus trebuie sa foloseasca in mod
eficient resursele pe care le aloca aplicatiilor.
O def mai comuna este aceea ca SO este un program care ruleaza tot timpul pe
calculator, de obicei numit kernell, toate celelalte programe fiind aplicatii.
HARD – componentele care realizeaza fizic calculele si actiunile cerute de
utilizator prin intermediul aplicatiilor, intermediate de SO.
SOFT – modul in care sunt folosite resursele hard de catre SO pentru a servi
aplicatiile si utilizatorul.

7. Baze de date (Mitea)

1. Caracteristicile modelului relaţional pentru baze de date.


Bazele de date reprezintă o modalitate de stocare si organizare a datelor pe un
suport extern, cu posibilitatea regăsirii acestora. De obicei o bază de date este
memorată într-unul sau mai multe fişiere. Bazele de date sunt manipulate cu ajutorul
sistemelor de gestiune a bazelor de date.
In modelul relational(cel mai raspandit) datele sunt memorate în tabele. Pe
lânga tabele, o bază de date relaţională mai poate conţine: indecşi, proceduri stocate,
trigger-e, utilizatori şi grupuri de utilizatori, tipuri de date, mecanisme de securitate şi
de gestiune a tranzacţiilor etc.
In limbajul relational tabela este relatia, linia este tuplul/inregistrare, iar
coloana atributul/camp. Astfel modelul relational este perfect fundamentat matematic
de algebra relatiilor.
Tabelele relaţionale trebuie să îndeplinească următoarele condiţii:
•  să conţină doar un singur tip de înregistrări;
• câmpurile nu au o ordine specifică în cadrul înregistrării, de la stânga la
dreapta;
• înregistrările nu au o ordine specifică în cadrul fişierului, de sus în jos;
• fiecare câmp conţine o singură valoare, atomică;
• înregistrările au un câmp sau o combinaţie de câmpuri care le identifică în
mod unic, numită cheie primară.
Modelul relational al datelor implica 3 aspecte:
● structura datelor (tabelara)
● integritatea datelor( sa respecte regula de integritate a entitatii si de integritate
referentiala )
● manipularea datelor (operatori ai algebrei relationale: selectie, intersectia,
diferenta, proiectia)

2. Ce se înţelege prin concurenţă şi cum se rezolvă aceasta la nivelul unui SGBD


relaţional?
Un SGBD este o colectie de programe care gestioneaza struct.BD, controleaza
accesul la datele memorate in BD, translateaza cererile utilize. in codul necesar pt
procesarea acelor cereri, le proceseaza si returneaza rez catre utiliz.

48
Concurenta BD(bazei de date) apare atunci cand mai multi utiliz. vor sa
acceseze aceleasi date simultan => SGBD trebuie sa mentina integritatea BD.
In esenta, un SGBD asigura concurenta in modul urmator:
● Cand doua sau mai multe persoane vor sa vizualizeze aceleasi date fara a le
modifica insa, totul este in ordine si nu trebuie luate masuri suplimentare.
● Cand insa cel putin o persoana doreste sa faca modificari asupra unor date care in
acelasi timp sunt vizualizate de catre alte persoane, atunci SGBD-ul trebuie sa
stocheze mai multe copii ale datelor si sa transfere toate modificarile-copiilor intr-
o singura versiune atunci cand intreaga operafiune este terminata.
● Cand mai multi utilizatori incearca sa faca modificari asupra acelorasi date un
SGBD rezolva problema folosind blocarea(locking). ). Utilizatorul care a efectuat
primul modificarea datelor le blocheaza, ceilalti utilizatori neputandu-le modifica
pana cand operatia efectuata de acesta nu este incheiata. intregul mecanism care
gestioneaza concurenta intr-o baza de date are la baza conceptul de tranzactie. Toate
tranzactiile sunt atomice, adica orice tranzactie individuala fie este complet
executata, fie nu se executa deloc.

3. Care sunt etapele de proiectare a unei baze de date?


Proiectarea bazeior de date are ca scop transformarea modelelor
informationale (semantice/conceptuale) in modele dependente de sisteme de gestiune
a bazelor de date.
Din acest motiv, proiectarea unei baze de date are ca pasi:
1. Analiza sistemului economic pentru care se realizeaza BD si a cerintelor
informationale dorite
1.1. Analiza structurala (statica): analiza componentelor sistemului si a
legaturilor dintre acestea. In urma acestei analize se obtin modelul structural (static).
1.2. Analiza comportamentala (temporala): analiza starilor sistemului si a
posibilelor tranzitii intre aceste stari. Se obtine astfel modelul dinamic sau
comportamental.
1.3. Analiza cerintelor informationale, respectiv a transformarilor de date.
Rezulta astfel modelul functional.
1.4. Integrarea celor trei modele in scopul corelarii si completarii lor.
2. Proiectarea structurala a BD la nivel logic, conceptual si fizic.
3. Implementare.
4. Incarcarea datelor in BD.
5. Exploatarea si intretinerea BD.

4. Ce este o tranzacţie şi ce proprietăţi are aceasta? ACID, proprietati


Tranzactie:secventa de actiuni dintr-un program, o unitate logica de lucru, care
citeste si/sau scrie date in baza de date si care satisface testul ACID, incadrata de
delimitatorii begin transaction si end transaction.

ACID (Atomicitate, Consistenta, Izolare, Durabilitate)


Atomicitate: o tranzacţie este executată fie în întregime (tranzactia a fost comisa -
commit), fie nu se execută deloc (tranzactia a fost abandonata - abort). SGBD-ul
trebuie sa se asigure ca toate tranzactiile comise sunt in baza de date, si sa elimine
toate tranzactiile abandonate..
Consistenta: daca toate restrictiile de integritate asupra BD sunt satisfacute. Executia
unei tranzactii trebuie sa faca transferul bazei de date dintr-o stare consistenta in alta
stare consistenta

49
Izolarea : implică protejarea rezultatelor intermediare ale operaţiilor din cadrul unor
tranzacţii concurente. SGBD pot furniza mai multe nivele de izolare. Un nivel este
serializibilitatea tranzactiilor care ofera cel mai puternic nivel de izolare.Tranzactiile
se numesc serializabile daca executarea intretesuta a operatiilor lor produce acelasi
efect asupra BD ca si cand ar fi executate intr-o oarecare ordine seriala.
Durabilitatea: presupune ca actualizarile tranzactiilor executate cu succes nu sunt
niciodata pierdute. Ele pot fi refacute in cazul unor defectiuni aparute la nivelul
sistemului.

5. Ce se înţelege prin baze de date distribuite? Dar prin baze de date orientate
obiect?
Baze de date distribuite
Bazele de date distribuite reprezinta baze de date logic integrate dar fizic
distribuite pe mai multe sisteme de calcul. Utilizatorul unei asemenea baze de date o
vede ca pe o baza de date unica, compacta (nivelul logic), cu toate ca, in realitate, ea
este distribuita pe mai multe calculatoare legate intre ele (nivelul fizic).
Porţiunea unei baze de date distribuite ataşată la unul singur dintre
calculatoarele involvate este numită partiţie sau fragment. Fiecare partiţie a unei baze
de date distribuite se poate replica (duplica) identic în alt calculator din reţea cu
scopul de a creste fiabilitatea. Arhitectura de baza este cea de tip client-server.
Av. SBDD: se mareste limita max a dim unei BD, viteza de acces mai mare,
reflecta structura organizationala, autonomie locala, performanta imbuntatita,
economie, modularitate.

Baze de date orientate obiect


Se integreaza facilitatile specifice bazelor de date cu cele specifice programarii
orientate obiect si se obtine un sistem de gestiune baze de date orientat obiect :
ODBMS. Un ODBMS face ca obiectele din baza de date (persistente, fata de cele
dintr-un program) sa apara ca obiecte dintr-un limbaj de programare. Sistemele de
gestiune baze de date orientate obiect extind programarea orientata obiect cu date
persistente transparent, control al concurentei, data recovery, interogari asociative,etc.
Persistenta transparenta din bazele de date obiectuale se refera la posibilitatea
de a manipula direct obiecte din baza de date folosind un limbaj de programare
orientat obiect.

9. Retele (Sigovan)

1. Care sunt nivelele ISO-OSI ale retelei de calculatoare si care este rolul lor?

ISO a impus un model arhitectural pt retelele de calc care cuprinde 7 niveluri:


a) Nivel fizic: Nivelul fizic are rolul de a transmite datele de la un calculator la altul
prin intermediul unui mediu de comunicatie.
b) Nivelul legatura de date: Nivelul legaturii de date corecteaza erorile de
transmitere aparute la nivelul fizic, realizand o comunicare corecta intre doua
noduri adiacente ale retelei. Mecanismul utilizat in acest scop este impartirea
bitilor in cadre ( frame), carora le sunt adaugate informatii de control. Alte functii:
fluxul de date, gestiunea legaturii.

50
c) Nivelul retea : Nivelul retea asigura dirijarea unitatilor de date intre nodurile
sursa si destinatie, trecand eventual prin noduri intermediare (routing). Este foarte
important ca fluxul de date sa fie astfel dirijat incat sa se evite aglomerarea
anumitor zone ale retelei (congestionare).
d) Nivelul Transport: Nivelul transport realizeaza o conexiune intre doua
calculatoare gazda (host) detectand si corectand erorile pe care nivelul retea nu le
trateaza. Functiile principale sunt: stabilirea unei conexiuni sigure intre doua
masini gazda, initierea transferului, controlul fluxului de date si inchiderea
conexiunii.
e) Nivelul Sesiune: permite utilizatorilor de pe masini diferite sa stabileasca intre ei
sesiune de comunicare. Tot la acest nivel se rezolva modalitatea de transfer a
datelor simplex sau duplex. Un alt rol este acela de gestionare a jetonului
f) Nivelul Prezentare: Nivelul prezentare realizeaza operatii de transformare a
datelor in formate intelese de entitatile ce intervin intr-o conexiune. Nivelul
prezentare ar trebui sa ofere si servicii de criptare/decriptare a datelor, in vederea
asigurarii securitatii comunicatiei in retea.
g) Nivelul Aplicatie: Nivelul aplicatie are rolul de "fereastra" de comunicatie intre
utilizatori, acestia fiind reprezentati de entitatile aplicatie (programele). Alte
functii: identificarea partenerilor de comunicatie, autentificarea lor, selectarea
modului de dialog, identificarea constrangerilor asupra reprezentarii datelor . Ex:
FTP, HTTP, telnet, SMTP

2. Medii de comunicatie. Enumerare. Topologii de retea.


Principalele medii de transmisie sunt :
● Fire torsadate: un cablu torsadat este alcatuit din doua fire înfasurate elicoidal
fiecare fir izolat în parte .Cablul torsadat poarta numele de TWISTED PAIR în
literatura de specialitate. Prin înfasurarea celor doua fire se elimina prin
diferentiere zgomotul . Exista doua categorii de cabluri torsadate: UTP(Unshilded
Twisted-Pair) si STP(Shielded Twisted Pair).
● Cablul coaxial : un invelis protector care imbraca 2 elemente conductoare : un fir de
cupru imbracat intr-un material izolator si o folie metalica. Banda acestui mediu este
mai mare ca la firele torsadate (10MB/sec, deci de 10 ori mai bun ). Acest cablu
este foarte des folosit în LAN .
● Fibra optica: fibre de sticla imbracate separat intr-un invelis de plastic. N-avem
suport electric ci suport fotonic . Fotoni sunt emisi de o dioda laser sau un led si
sunt detectati cu ajutorul unui detector de lumina . Frecventa de lucru este de mii
giga hertzi(enorm de mult). Fibra optica este un mediu prin care lumina trebuie sa
se transmita .

Topologia unei retele se refera la amplasarea sau dispunerea fizica a calculatoarelor,


distribuitoarelor, ruterelor, cablurilor si a altor componente.
Topologii de retea:
● Reteaua tip magistrala(bus) este constituita dintr-un sg cablu
la care sunt conectate direct toate nodurile
● Reteaua tip stea toate nodurile sunt conectate la un nod central care
joaca un rol particular in funct. retelei( orice comunicatie intre 2 calc va trece prin acest
nod)
● Reteaua de tip inel are nodurile interconectate cu ajutorul unui cablu
de transrnisie comun si formeaza o bucla inchisa.
● Reteaua tip plasa are fiecare nod conectat cu toate celelate noduri

51
● Reteaua tip arbore nodurile sunt grupate in mai multe topologii
de tip star care sunt legate la un cablu central (combina top. star si bus)
● Reteaua fara fir(wireless)

3. Rolul protocoalelor de acces la mediu. Exemple de protocoale.

Protocol : ansamblu de conventii si reguli pe baza carora se realizeaza transmiterea


datelor
Rol : transmiterea mesajelor si tratarea coliziunilor care apar.
a) Protocoale cu coliziuni
Aloha
- fiecare statie poate sa emita cand doreste; daca se intra in coliziune cu alta statie ,
statiile vor detecta coliziunea datorita proprietatii de reactie a difuzarii, vor astepta o
perioada aleatoare de timp, dupa care vor incerca din nou sa transmita.
- varianta imbunat. a prot. presupune existenta in retea a unei statii speciale care sa
emita un bip. Nici o statie nu are voie sa transmita decat dupa primirea acestui semnal
special;

CSMA (Carries Sens Multiple Access) - acces multiplu cu detectia purtatoarei;


CSMA persistent
- fiecare statie inainte de a incepe transmisia asculta canalul
- daca nu detecteaza nici un semnal inseamna ca poate sa transmita, canalul fiind liber
- daca detecteaza o purtatoare asteapta pana se elibereaza canalul, dupa care incepe sa
transmita;
- daca propriile cadre intra in coliziune cu cadrele altei statii , staliile vor astepta o
perioada aleatoare dupa care repeta algoritmul
- o statie poate fi sigura daca a ocupat canalul numai daca primeste inapoi cadrul
nedeterioriat dupa o perioada 2 τ ,unde τ este timpul de propagare maxim intre cele
mai indepartate statii din retea

CSMA nepersistent
- statiile asculta canalul de comunicatie; daca nu detecteaza purtatoare, transmit, iar
daca detecteaza nu raman in continuare in ascultare ,ci intrerup ascultarea, asteapta o
perioada aleatoare de timp, dupa care se repeta alg.

CSMA/CD (colision detection)


- aduce urm imbunatatire fata de CSMA : daca doua statii emit simultan,
cadrele vor intra in coliziune ,acesta va fi detectata imediat de fiecare statie ,si ele isi
vor intrerupe imediat transmisia, economisindu-se astfel largime de banda.
b) Protocoale fara coliziuni
Bitmap (harta de biti) :
- acest prot presupune numerotare statiilor din retea cu adrese de la 1 la n ;
- la intevale precise de timp o statie din retea emite un cadru cu lungime de n biti;
- toat statiile primesc acest cadru ;
- daca statia K are ceva de transmis trebuie sa seteze bitul K din cadrul de n biti la
valoarea 1 „logic”, iar daca nu are nimic la val 0 logic;
- dupa aceasta operatie statiile vor incepe sa tramsmita in ord crescatoare a adresei
de statie ;

Binary Count Down (numaratore inversa binara)

52
- acest prot presupune ca toate statiile din retea sa aiba o adresa cu aceeasi lungime
- inainte de a incepe transmisia , statiile care au ceva de transmis isi difuzeaza propria
adresa
- la nivelul fiecarei statii se va face un sau bit pe bit inte adresele statiilor care doresc
sa transmita ,dupa care fiecare statie va proceda astfel:
- daca rez operatiei SAU acopera bitul corespunzator al propriei adr cu un 1 logic ,
statia renunta la transmisie in favoarea celorlalte
- operatia SAU se face incepand de la bitul cel mai semnificativ a adr la bitul cel mai
putin semnificativ .

4. Nivelul retea. Functionare. Rol. Exemplu de protocol.


Nivelul retea este al treilea nivel din cele 7 ale modelului OSI. El raspunde cererilor
de servicii alea nivelului de transport si adreseaza cereri nivelului de legatura de date
El adreseaza mesaje si translateaza adrese logice in adrese fizice.

Nivelul retea asigura livrarea pachetelor si alegerea optima a cailor de transmitere


(rutarea - routing). Ca atare, nivelul retea  trebuie sa gestioneze traficul in retea,
congestiile (aglomerarea anumitor zone ale retelei) si ratele de transfer (vitezele) de-a
lungul liniilor de transmisie.

Ex : protocolul IP (Internet Protocol)


Este cel mai cunoscut la acest nivel si este utilizat pentru interconectarea reţelelor din
Internet. Este un protocol fără conexiune care permite transmiterea unor blocuri de
date (datagrame). Intre surse şi destinaţii identificate prin adrese cu lungime fixă. In
cazul datagramelor foarte mari, protocolul IP realizează, dacă este cazul, fragmentarea
şi reasamblarea in vederea transmiterii prin orice reţea
Alte ex: ICMP, ARP, RIP

5. Nivelul aplicatie. Servicii. Exemple de protocoale de serviciu.


Este cel mai inalt model din cele 7. Acest nivel stabileste serviciile ce stau la
dispozitia utilizatorilor retelei. Este responsabil cu :
● initierea si verificarea fiabilitatii transferului de date
● refacerea erorilor
● stabilirea acordului de comunicare intre parteneri
● accesul la retea
● alocarea dinamica a adreselor IP(DHCP)
● transferal de fisiere(FTP)

Ex: HTTP, HTTPS, SMTP, FTP, UUCP, NNTP, SSH, , RTP, Telnet

53
10. Bazele Inteligentei Artificiale

1. Cãutarea euristicã
Reprezintă o metodă de căutare care foloseşte informaţie euristică.
Informaţia euristica reprezintă acea informaţie despre proprităţile domeniului specific,
care ne ghideaza spre solutie.
Aceste informatii sunt de obicei utilizate prin intermediul unei functii, numita
functie de evaluare care indica masura în care nodul respectiv este indicat pentru
expandare.
O metoda euristica s-ar putea sa nu gaseasca intotdeauna cea mai buna
solutie, dar garantat ea va gasi o solutie buna intr-un timp rezonabil. Este utila pentru
problemele a caror rezolvare ar lua foarte mult timp.

Metodele euristice se folosesc de catre algoritmii de cautare cum ar fi :


● Algoritmul Greedy merge pe o singura cale pâna la întâlnirea unui nod care nu
mai poate fi expandat (nu are întoarceri decât la atingerea nodurilor terminale).
Are urmatoarele defecte : nu este optima(prin aceea ca se poate bloca într-o
bucla infinita) si nici completa(nu dezv. tot spatiul de cautare). Functia de
estimare care se foloseste reprezinta costul caii de la nodul curent la un nodul
final.
● Algoritmul A* : dezvolta din lista candidatilor pe cel mai bun in fct de
informatia euristica, urmasii sunt adaugati la candidati (se dezvolta tot spatiul de
cautare) si procesul se repeta. Functia de evaluare euristica este formata din 2
componente :

F(S)=g(S)+h(S)
g(S) = costul caii de la nodul de start la un nodul current
h(S) = costul caii de la nodul curent la un nodul fina
Functia de estimare trebuie sa aprecieze costul unei cai în arborele de
cautare la o valoare mai mica sau cel mult egala cu valoarea reala a costului
respectiv. Aceasta metoda este completa si optima.

2. Tehnici de invatare . Învãtarea pe de rost.

a) Invatarea prin primire de sfaturi


Cercetarile cauta sa automatizeze cele 5 faze ale primirii de sfaturi:
-cerere = cererea unui sfat la un expert
-interpretare = asimilarea sfatului intr-o reprezentare interna
-operationalizarea = convertirea intr-o forma directa utilizabila
-integrarea = integrarea in baza de cunostinte
-evaluarea = evaluarea de catre elementul de performanta a actiunilor
rezultante.

b) Invatarea pe de rost
Invatarea pe de rost(memorarea) – se refera la salvarea cunostintele noi astfel
incat atunci cand sunt din nou necesare singura problema va fi gasirea lor si nu un
calcul repetat. Memorarea pe de rost poate fi vazuta ca un proces elementar de

54
invatare, nu suficient de puternic pt a obtine o invatare cu inteligenta in sine, dar
reprez. o parte importanta in orice sistem de invatare. Lucreaza prin luarea problemei
pe care el le-a rezolvat si prin memorarea problemei si a solutiei sale

c) Invatarea prin exemple


Un program care invata din exemple tre sa extraga din exemplele specifice,
reguli generale care sa poata fi folosite pt a ghida actiunile elementului de
performanta.

3. Cadre si scenarii
Un cadru este un şablon general, în care datele noi sunt interpretate în
termenii sau conceptele experienţei dobândite anterior.Pentru a analiza, o experienţă
nouă, se utilizează o structură deja existentă, care se particularizează cu detaliile
situaţiei curente. Reprezentare prin cadre favorizează prelucrarea bazată pe aşteptare,
deoarece nu contrazice orizontul de aşteptare.
Un scenariu este o modalitate de reprezentare a cunoaşterii ce descrie o
secvenţă stereotipă de evenimente într-un anumit context, adică situaţii care se repetă,
păstrând aceeaşi structură. Utilitatea scenariilor rezultă din faptul că, în lumea reală,
există diverse modele de apariţie a evenimentelor, modele datorate relaţiilor cauzale
dintre evenimente. Aceste evenimente descrise într-un scenariu alcătuiesc un lanţ
cauzal, al cărui punct de start îl reprezintă condiţiile iniţiale, iar punctul final constă în
rezultate.

4.Arbori de joc
Arborii de joc se aplica doar in cazul jocurilor la care :
 Exista 2 jucatori care muta pe rand si care cunosc la fiecare mutare pozitiile si
alegerile posibile ale adversarului.
 Jocul incepe cu o stare specificata si se termina cu victoria unui jucator,
pierderea celuilalt sau un rezultat de egalitate.
 Exista reguli care definesc daca o mutare este legala si care sunt efectele ei

Arborele de joc este o reprezentare a tuturor partidelor posibile. Starea initiala


specificata reprezinta nodul radacina. Apoi se efectueaza prima mutare a primului
jucator. Toate starile posibile in care se poate ajunge reprezinta succesorii nodului
initial. Jocul se poate termina cu o victorie, infrangere sau egalitate – stari terminale.
fiecare cale completa de la nodul radacina la un nod terminal da o partida completa
diferita a jocului.
Arborele de joc este trasat pt a reflecta punctul de vedere al unui singur
jucator. El poate fi reprez. printr-un arbore AND/OR. Nodurile sale posibile ale unui
jucator sunt reprez. prin noduri OR, iar cele ale adversarului prin noduri AND.

5. Aplicatii ale inteligentei artificiale


a) rezolva probleme dificile in chimie, biologie, geologie, inginerie, medicina la
nivelul de performanta al expertilor umani.
b) manipuleaza robotii pentru a realiza sarcini motoare repetitive.
c) recunoaşterea automată a formelor (scrisului ş.a.), a sunetelor (vorbitului) ş.a.
d) algoritmi genetici
e) agenti inteligenti
f) teoria jocurilor
g) retele neuronale

55
h) sistemele expert
6. Subdomenii ale inteligentei artificiale
 Rezolvarea problemelor :ex: in domeniul jocurilor – dame, sah,etc
 Intelegerea limbajului : exista programe care traduc propozitii dintr-o limba in
alta, care acumuleaza cunostiinte prin citirea de texte scrise si prin construirea
unei BD interne.
 Programarea automata : folosite la sistemele care pot scrie programe pt a
descrie scopul lor : ex – descrieri in engleza ale algoritmilor
 Sistemele expert :diagnoza medicala, analiza de date chimice si geologice
 Robotica si vedere : ex: miscarea bratelor unui robot, recunoasterea obiectelor
si a umbrelor in scene vizuale
 Sisteme si limbaje de programare specializate : ex : cu posibilitati [roiectate pt
a facilita manipularea robotilor, modelarea cunoasterii,etc.
 Rationamentul logic (un domeniu foarte insistent cercetat) : atat timp cat
faptele originale au fost corecte programele vor putea demonstra toate
teoremele care rezulta din aceste fapte

7. Reprezentarea cunostintelor
O reprezentare este definita ca o multime de conventii pentru descrierea
obiectelor. In IA o reprez. a cunoasterii este o combinatie de structuri de date pt
memorarea informatiei in programe si de proceduri de utilizare a acestor structuri
pentru realizarea de interfete.
Programatorul alege reprezentarea care i se pare cea mai adecvata pentru o
sarcina data, luand in considerare compromisurile care trebuie sa le faca.

Reprezentarile sunt de doua tipuri :


 Declarative – cunostintele sint specificate prin descrierea lor, fara a indica modul
in care ele vor fi utilizate. Pentru a utiliza o reprezentare declarativa, aceasta
trebuie completata cu metode care specifica cum vor fi utilizate cunostintele
reprezentarii
Includ : scheme de reprezentare prin calcul cu predicate
regulile de productie
retele semantice
Avantaje :
– informaţiile elementare sunt independente între ele
– supleţe la modificări
– lizibilitate uşoară
– eficienţă în prelucrare

 Procedurale – cunostintele de control necesare rezolvarii problemei sunt


inglobate in insasi reprezentarea data. Pentru a utiliza reprezentarea procedurala in
rezolvarea problemei, trebuie sa existe un interpretor care urmareste specificatiile
de control incluse in reprezentare.
Avantaje:
– permite descompunerea explicită a problemei la nivelurile superioare de
prelucrare
– nu este necesară o declarare explicită a tipului informaţiei
Dezavantaj: lipsa de flexibilitate, relaţiile dintre informaţiile elementare fiind foarte
dificil de modificat.

56
 Mixte cu ajutorul obiectelor, cadrelor (=frames), schemelor
Avantaj: combină cele două forme de reprezentare sus menţionate optimizând
avantajele şi echilibrul dintre avantaje şi dezavantajele lor, în funcţie de natura
aplicaţiei considerate.

8. Algoritmi de cautare
Uzual spatial starilor este identificat printr-un graf orientat in care fiecare
nod este o stare si fiecar arc reprezinta aplicare unui operator de transformare a unei
stari intr-o stare successor. O solutie este o cale de la o stare start la o stare scop.

a) Cautare oarba in spatiul starilor


Daca ordinea in care se iau in considerare caile este arbitrara, nefolosind
informatia specifica domeniului pt a judeca unde este mai probabil sa se gaseasca
Solutia, cautarea se numeste oarba.

b) Cautare oarba in grafuri AND/OR


Se folosesc la problemele unde este nevoie de descompunerea unei probleme
in probleme mai simple. Succesorii unui nod notat cu AND sunt subprobleme si
trebuie rezolvate pt a satisface nodul parinte, iar nodurile notate cu OR sunt
subprobleme alternative si fiecare dintre ele poate satisface nodul parinte.

c) Cautare euristica in spatiul starilor


Daca ordinea in care se iau in considerare se face tinand cont de o informatie
splimentara despre proprietatile domeniului specific(informatie euristica) avem o
cautare euristica.

c) Cautare euristica intr-un graf AND/OR


La fel ca la cautarea oarba in graf AND/OR doar ca se tine cont de informatia
euristica acum in gasirea subgrafului optimal.

d) Cautarea in arborii de joc


Initial este generat un arbore de joc. Fiecare nod reprezinta o pozitie in joc.
Cea mai buna mutare este cea care duce la un nod cu valoare maxima.
Cuprinde:
 procedura minmax (pt explicatii vezi subiectul 10)
 procedura alpha beta

9. Retele semantice
O retea semantica este folosita ca o forma de reprezentare a cunostiintelor.
Este reprezentata printr-un graf care are noduri si arce. In mod normal nodurile
reprezinta obiecte, concepte sau situatii ale domeniilor, iar arcele sunt relatii intre
acestea. Popularitatea folosirii retelelor semantice a aparut datorita faptului ca se pot
deduce usor ierarhiile mostenitoare.

10. Regula min-max si alfa


Procedura min-max e o tehnica de cautare in arbori de joc. Numele acestei
proceduri vine din felul in care sunt evaluate nodurile. Daca avem doi jucatori A si B

57
si presupunem ca avem un arbore de joc in care A este max (A e max pt ca arborele
este desenat din punctul de vedere al lui A) si B este min. :
 Valoarea pt jucat. A a unui nod cu succesori OR (un nod in care A alege
urmat. mutare) este maximul dintre valorile succesorilor sai.
 Valoarea pt jucat. A a unui nod cu succesori AND (un nod in care B alege
urmat. mutare) este minimul dintre valorile succesorilor sai.

Nodurile notate cu OR - sunt alegeri pe care A le poate face, iar cele notate cu
AND sunt alegeri pe care adversarul le face si carora A trebuie sa le poata raspunde.
http://en.wikipedia.org/wiki/Minimax (vezi imagine ca se intelege mai bine)

Procedura alfa-beta incearca sa optimizeze nr de noduri care sunt evaluate prin


folosirea procedurii min-max.Proc. alfa-beta nu schimba rez. alg minmax, ea doar il
optimizeaza. Procedura se opreste sa evalueze o miscare atunci cand s-a gasit cel
putin o posibilitate care e mai rea decat cele examinate anterior.
Acest algoritm mentine 2 valori pt un nod: alfa si beta. Initial alfa si beta nu
sunt completate. Completarea lor incepe de la un nod terminal(cel mai din stg). La
fiecare nivel se face swap intre alfa si beta. Daca la un anumit moment este randul lui
A sa mute, el evalueaza prima mutare cu o valoare x, apoi pt a 2a mutare se
genereaza toti succesorii si se evalueaza primul succesor. Daca valoarea acestui
succesor este mai mica decat x , este mai rau decat ce a evaluat prima oara (A alege
ce e mai mare tot timpul) , iar adversarul sigur va alege acea mutare(deoarece lui ii
convine) sau alta mai rea pt A, deci nu are rost sa mai evaluam si ceilalti succesori
mai departe.
http://en.wikipedia.org/wiki/Alpha-beta_pruning(vezi imagine ca se intelege mai
bine)

58

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