Documente Academic
Documente Profesional
Documente Cultură
Tipuri de date
-
2. Variabile si constante
-
Ce este o variabila?
Prin ce se caracterizeaza o variabila?
Un aspect fundamental pentru limbajele de programare este utilizarea variabilelor.
Ce este o variabila?
= o marime care in cursul executiei unui program isi poate modifica valoarea.
Prin ce se caracterizeaza o variabila?
Nume
Tip
Valoare
Cum se transpune definirea unei variabile intrun limbaj de programare de nivel inalt,
de catre compilator, la nivel de executie pe un microprocesor?
int a = 0;
O variabila poate fi privita ca o locatie de memorie folosita pentru stocarea unei valori
si este caracterizata prin:
nume (identificator): acesta este asociat adresei locatiei de memorie.
valoare: informatia stocata
tip: determina multimea de valori pe care le poate lua variabila, codificarea
lor, precum si operatiile ce se pot aplica acestor valori.
Interpretarea informatiei stocate este specificat de tipul variabilei
Caracteristicile variabilelor
Numele variabilei
Tipul variabilei
Dimensiunea alocat pentru variabile
Codificarea valorii variabilei
Stocarea coninutului variabilelor
Alocarea de memorie pentru stocarea valorii
Alinierea datelor
Accesarea variabilelor
Pointeri i referine
Valoare
3. Pointeri si referinte
-
Pointeri i referine
Numele unei variabile identific adresa de memorie la care este salvat
variabila n memorie.
Tipul variabilei specific setul de valori pentru variabil, dimensiunea maxim
de memorie necesar stocrii valorilor de tipul respectiv, precum i setul de
operaii ce se pot efectua asupra valorilor respective.
Valoarea variabilei este dat de coninutul memoriei n timpul execuiei
programului.
O variabila de tip pointer contine adresa unei locatii de memorie care la randul
ei contine valoarea propriuzisa
Pointeri i referine exemplu
int X = 5;
int Y = 7;
...
int* Ptr = &X;
Pointer neiniializat
int *Ptr;
Numele unei variabile identific adresa de memorie la care este salvat variabila
n memorie
Accesarea unei variabile de memorie:
mov al, var_int8
mov si, offset var_int8
mov al, [si]
int a = 1;
int b = 2;
int *pa = &a;
int *pb;
pb = pa + 1;
*pb = *pa + *pb;
Alocarea memoriei:
int *pa = new int;
int *pb = malloc(sizeof(int));
int *pc = new int[10];
Dezalocarea memoriei:
delete pa;
free(pb);
delete[] pc;
Probleme curente la utilizarea pointerilor
Utilizarea unui pointer neiniializat
int *pa; int *pa = NULL;
*pa = 10; *pa = 10;
Utilizarea unui pointer iniializat incorect
int *pa;
pa = 10;
*pa = 10;
Utilizarea unui pointer dup ce a fost dezalocat:
int *pa = new int;
*pa = 10;
delete pa;
(*pa)++;
Utilizarea eronat a aritmeticii pointerilor:
int a = 10; int a = 10;
int *pa = (&a)+1; float b;
int *pa = (&a)+1;
Utilizarea unui pointer n afara scopului variabilei spre care arat:
int *pa; int* f(void)
if( ... ) {
{ int a = 10;
int a = 10; return &a;
pa = &a; }}
(*pa)++;
6
Dangling pointers:
int *pa = malloc(4), *pb = pa;
free(pa);
*pb = 10;
Nu se dezaloca memoria dup ce s-a ncheiat operarea asupra ei: memory leaks
for( i = 0; i < 100000; i++ )
{
int *pi = new int(i);
*pi = rand();
printf(%d, *pi);}
Dezalocare multipl pentru aceeai zon alocat
int *pa = malloc(4), *pb = pa;
free(pa);
free(pb);
5. Modele de memorie
-
Adresele cu care procesorul adreseaz memoria fizic prin magistrala de adrese sunt
considerate adrese fizice
Fiecare octet de memorie are o adres unic numit adresa fizic
Spaiul maxim de adrese fizice
IA-32 este 4Go (32 bii) (extensibil la 64 Go prin PAE (Physical Address
Extension) 36 bii)
IA-32e este in funcie de modul de implementare: 40biti, 48 bii, 56 bii sau 64
bii
Aplicaiile nu folosesc ins in mod direct adresele fizice
Aplicaiile utilizeaz facilitile de management al memoriei implementate in
procesor:
Modelul de memorie liniar
Modelul de memorie segmentat
Modelul de memorie real modul de adresare 8086
6. Moduri de adresare
-
10
Adresarea memoriei
Operandul este specificat i localizat in memorie
Exist mai multe moduri de adresare a memoriei
O adres de memorie in aplicaii se specific prin:
Adresarea memoriei
Adresare direct adresa de memorie a operandului este specificat in codul
instruciunii
Utilizare: variabile de memorie adresabile direct
var_int32 dd 0
mov eax, var_int32
mov var_int32, ebx
Adresare indirect adresa de memorie a operandului este specificat printrun registru sau printr-o combinaie de registre
Utilizare: pointeri i referine
var_int32 dd 0
mov ebx, offset var_int32
mov eax, [ebx]
Exist mai multe combinaii de componente prin care se poate specifica o
adres de offset
7. Extensii SIMD
-
Utilizare:
Procesare, filtrare, recunoatere, codare voce
Procesare, filtrare, recunoatere, codare video
Grafic 3D, modelare CAD
Algoritmi de criptare
Identificare
...
mov eax, 1
cpuid
test edx, 00800000h
jnz mmx_found
...
Registre MMX i SSE
12
int i;
for( i = 0; i < 4; i++ )
{
c[i] = a[i] + b[i];
}
paddd xmm1, xmm2
13
Comparatii
Pack si Unpack
9. Performana sistemelor
-
Programarea secvenial
Majoritatea aplicaiilor sunt scrise dup o logic secvenial
Aplicaia este executat pe un singur procesor
Problema este mprit ntr-o serie de instruciuni ale procesorului
Instruciunile sunt executate secvenial
Doar o instruciune se execut la un moment de timp dat
v=
(1)
t=
+
Performana aplicaiei:
1
r= =
(1)
16
Speedup
Processors
Practice
ncrcarea inegal a procesoarelor
Timpul de comunicaie
Operaii suplimentare necesare (sincronizri, planificri)
Seciuni non-computaionale
Altele
Timpul i costurile de rescriere a codului
18
Din punct de vedere logic, interfaa paralel standard este format din dou registre i
un buffer de intrare, ocupnd trei adrese consecutive din spaiul adreselor de porturi al
procesorului.
Portul paralel standard conine:
Un registru de date pe 8 bii bidirecional (iniial a fost unidirecional ca ieire),
19
Un registru de control bidirecional pe 6 bii dintre care doar 4 linii sunt legate
la connector-ul interfeei paralele
Un buffer de intrare pe 5 bii pentru liniile de stare de la periferic.
Ieirile interfeei paralele folosesc nivelele logice TTL, curentul ns difer de la o
interfa la alta (pn la 12 mA).
Circuitele interfeei paralele sunt uzual implementate n chipset-ul de I/O
Registrul de date:
Adresa: IOBase+0
IOR:
MOV dx, IOBase data = inport(IOBase);
IN al, dx
IOW:
MOV dx, IOBase outport(IOBase, data);
OUT dx, al
Ieirile registrului de date sunt legate la pinii 2-9 ai conectorului de interfa
paralel
La portul paralel bidirecional direcia de transfer se seteaz prin bitul 5 din
registrul de control)
Registrul de stare
Adresa: IOBase+1
20
IOR:
MOV dx, IOBase+1 status = inport(IOBase+1);
IN al, dx
Registrul de control
Adresa: IOBase+2
21
Moduri de lucru
-
SPP
SPP Compatibility
Date unidirecionale trimise spre periferic (imprimant)
Protocolul standard implementat este Centronics
SPP Nibble
Permite transferuri bidirecionale:
Ieiri pe 8 bii
Intrri pe 4 bii prin portul de stare
Cum se implementeaz prin program protocolul de citire date de la periferic?
22
ECP
Controlul fluxului
Ce este i pentru ce e necesar?
Problema sincronizrii transferurilor blocurilor de date
Cum afl emitorul dac receptorul poate primi sau nu alte caractere
Soluii:
Fr control
Control software (XON/XOFF)
Control hardware (RTS/CTS)
Portul serie const din interfaa serial i conectorul de 9 pini situat in spatele
calculatorului.
Prin interfaa serial se inelege ansamblul circuitelor care asigur comunicaia intre
unitatea central (procesor) i un dispozitiv periferic care transfer informaia bit dup
bit.
Portul serie
25
Registrele de divizare
Adresa: IOBase+0 i IOBase+1
Generatorul ratei de transfer preia tactul de intrare i il imparte cu orice numr
cuprins intre 1 i 216 1
Numrul se afl in registrele de divizare.
Frecvena de ieire a generatorului este 16x rata.
Frecvena de intrare a generatorului este 1.84MHz
divisor = (frecvena de intrare) / (baud rate x 16)
outport(IOBase+3, 0x80);
outport(IOBase+1, 0x00);
outport(IOBase+0, 0x06);
outport(IOBase+3, ...);
-
Registrul de stare
Adresa: IOBase+5
Bitul 0 = 1 - s-a recepionat un caracter i a fost transferat in buffer-ul de
recepie.
Bitul 1 = 1 - indic faptul c data din buffer-ul de recepie nu a fost citit de
ctre procesor inaintea recepionrii unui alt caracter. Astfel c acest prim
cuvant a fost pierdut. Bitul OE este pus pe 0 la citirea registrului de stare de
ctre procesor.
26
Bitul 6 - indic faptul c registrul de serializare este gol. Bitul este pus pe 0
odat cu incrcare unui nou caracter din buffer-ul de transmisie.
Care este rolul celor dou flaguri pentru starea transmisiilor seriale?
Transmiter Holding Register Empty
Transmiter Shift Register Empty
27
28
29
Hub controller
Conine setul de registre prin care se configureaz hub-ul
Hub repeater
Comutator de pachete
Regenereaz semnalele
30
Caracteristici fizice
Cum detecteaz echipamentele USB de interconectare (hub-urile) c s-a conectat
(deconectat) un dispozitiv la (de la) unul din porturile sale?
31
Exemplu
Protocolul USB
- Comunicaia prin USB se mparte n dou categorii:
Enumerare comunicaia aferent procesului de enumerare a dispozitivelor
Utilizare (Transfer) comunicaia specific aplicaiei ce utilizeaz dispozitivul
-
Enumerare:
Prin enumerare sistemul gazd afl dispozitivele USB conectate i le
programeaz pentru transferal de date
n timpul enumerrii dispozitivele USB rspund unei secvene standard de
cereri din partea host-ului
Transferuri cu dispozitivul
Dup identificare i configurare dispozitivele USB pot fi utilizate din aplicaii
Fiecare transfer de date se ncadreaz n unul din urmtoarele tipuri:
Control
ntreruperi
Blocuri
Izocron
32
Transfer USB
Transferul cu dispozitivul
Sistemul gazd e responsabil de gestionarea transferurilor prin USB
Host-ul divide traficul n cuante de timp de 1ms numite cadre
Host-ul aloc cte o poriune din fiecare cadru fiecrui transfer
Fiecare cadru ncepe printr-un pachet special numit Start-of-Frame (SOF)
Exemplu de transferuri mprite n cadre
Toate transferurile se desfoar ntre un dispozitiv i host
33
Tranzacii USB
Tranzaciile USB sunt compuse din pn la 3 faze, fiecare faz fiind specificat
printr-un pachet USB.
Fiecare tranzacie ncepe printr-un pachet de tip token, trimis de host prin care
se stabilete adresa partenerului i tipul tranzaciei.
Pachetul de date conine datele specific transferului
Pachetul de rspuns din partea partenerului cu rezultatul transferului.
34