plas_7.pdf
TRANSCRIPT
-
Platform de e-learning i curricul e-content pentru nvmntul superior tehnic
Programare n limbaj de asamblare
7. Arhitectura calculatoarelor i a memoriei.
-
Arhitectura calculatoarelor
Termenul arhitectura calculatoarelor este adesea utilizat cu semnificaia, simpl, de organizarea i proiectarea calculatoarelor. n practic ntr-un sistem de calcul exist mai multe arhitecturi distincte, fiecare fiind definit de o legtur ntre diferitele niveluri ale sistemului. Figura prezint o schem abstract a unui sistem de calcul, unde cele mai simple operaii i funcii sunt plasate n partea inferioar, iar cele mai complexe operaii, dependente de utilizator, ocup nivelurile superioare. Fiecare nivel folosete funciile furnizate de nivelul anterior (cel ierarhic inferior).
Arhitecturi ale unui sistem de calcul
O arhitectur este, deci, legtura sau interfaa ntre dou astfel de module funcionale. Ea poate fi definit ca vederea funcional a sistemului sub o interfa (nivel) pentru un utilizator care se situeaz deasupra interfeei (nivelului). Proiectanii care utilizeaz interfaa (nivelul) arhitectural nu sunt, n general, preocupai de detaliile sistemului inferioare nivelului arhitecturii sistemului, sau de orice arhitecturi la niveluri inferioare. Ei sunt preocupai de funcionarea sistemului la nivelul interfeei imediat sub nivelul utilizator. Arhitectura global este interfaa ntre ntregul sistem de calcul i lumea exterioar; aceasta este denumit arhitectura sistemului. Undeva, mai jos, este interfaa ntre programul de aplicaie i limbajul de programare de nivel nalt (presupunnd c aplicaia este scris ntr-un limbaj de nivel nalt). Aceast limitare definete arhitectura limbajului de programare. Programatorul este plasat la acest nivel. n continuare, este interfaa ntre limbajul de programare i diferite funcii de administrare a resurselor, n timpul execuiei, care sunt furnizate de ctre sistemul de operare. Acest nivel este definit ca arhitectura sistemului de operare.
Urmtoarea interfa este deosebit de important, deoarece n calculatoarele convenionale ea definete limita dintre hardware i software. Este nivelul elementar, la care instruciunile recunoscute de calculator sunt decodificate i executate. Acesta este nivelul
Limbaje de nivel nalt
Arhitectur
set instruciuni
Lumea exterioar
Program aplicaie
Arhitectura
sistemului
Control
I/O
Control
execuie
Setul de instruciuni de baz Interpretare i execuie
Arhitectur
sistem operare
Procesor I/O Microcod
Registre
ALU Memorie Controllere
Arhitectura
microcod
Arhitectura
nivel poart
Arhitectura limbaj
de programare
-
arhitecturii setului de instruciuni. Celelalte dou niveluri inferioare de arhitecturi (arhitectura microcod i arhitectura la nivel de pori) definesc mai n detaliu alte funcii primitive, dar care nu sunt interesante pentru cei mai muli dintre programatori. n general, ns, termenul de arhitectura calculatorului definete grania dintre hard i soft. Arhitectura calculatorului este nivelul sistemului de calcul ce este vzut de un programator n limbaj de asamblare sau de unul care scrie un compilator.
O separare pe vertical a componentelor din figura urmtoare permite definirea de sisteme multiprocesor sau distribuite; aceast mprire se poate spune c definete arhitectura configuraiei.
Arhitectura configuraiei
Arhitectura memoriei
Una dintre cele mai importante caracteristici ale arhitecturii unui calculator este modul de
organizare al memoriei i modul n care se obine acces la informaia din memorie. Memoria principal este organizat ca un set de locaii de memorare, numerotate consecutiv,
ncepnd de la 0. Numerele asociate locaiilor fizice reprezint adresa fizic, iar mulimea total a adreselor fizice constituie spaiul de adrese fizice. O adres logic este o adres utilizat de ctre programator ntr-o instruciune. Adresele ce pot fi utilizate de un program constituie spaiul de adrese logice. Organizarea acestui spaiu definete arhitectura memoriei. Organizarea spaiului de adrese fizice este determinat de tehnologia utilizat pentru memorie i de costul ei, dar spaiul de adrese logice nu este condiionat de nici una dintre aceste consideraii. Din contr, organizarea memoriei logice este determinat de structura programelor ce vor rula n memorie. Iniial, spaiul de adrese logice era identic cu spaiul de adrese fizice. Memoria liniar Este cea mai obinuit organizare a spaiului de adrese logice, cea mai obinuit arhitectur
CPU1
Limbaje
nivel nalt
Control execuie
Set
instruciuni
Programe
aplicaie
Microcod
Pori
CPU2
Limbaje
nivel nalt
Control execuie
Set
instruciuni
Programe
aplicaie
Microcod
Pori
Procesor I/O
Limbaje
nivel nalt
Set
instruciuni
Programe
aplicaie
Microcod
Pori
Control
I/O arhitectura
set instruciuni
arhitectura
sistem arhitectura
limbaj arhitectura
sistem operare
arhitectura
microcod
arhitectura
nivel poart
S I S T E M D I S T R I B U I T
-
pentru memorie: un spaiu liniar, continuu de adrese. Adresele pornesc de la zero i se succed, ntr-un mod liniar, fr goluri sau ntreruperi, pn la limita superioar, impus de numrul total de bii dintr-o adres logic. Un program, adesea constnd din mai multe proceduri, i datele sale sunt plasate n acest spaiu de adres unic. Spaiul de adrese logice al unei memorii liniare are, astfel, aceeai organizare ca memoria fizic. Astfel, pentru o memorie cu 16 linii de adres pot fi generate 65535 de adrese distincte. O astfel de adres generat de un program este utilizat direct de hardware-ul memoriei pentru a plasa data. Iat ce se ntmpl n cazul a dou programe, avnd codurile plasate la adrese diferite de memorie i care nu se suprapun; s presupunem c unul dintre cele dou programe (B) face o operaie ntr-o locaie n afara codului. n figur se prezint ce se poate ntmpla n acest caz: vulnerabilitatea memoriei nemapate.
Vulnerabilitatea memoriei 'nemapate'
Maparea memoriei liniare
Maparea este, n esen, procesul de translatare a adreselor logice n adrese fizice. n exemplul anterior adresele logice sunt echivalate cu adresele fizice; dar prin exploatarea
maprii, o adres logic poate fi atribuit la o adres fizic arbitrar. Deci maparea este un mecanism pentru realocarea spaiului de adrese logice peste spaiul de adrese fizice. n figura urmtoare se prezint o operaie de mapare foarte simpl. ntregul spaiu de adrese logice ale unui program (locaiile 0-65535, n acest caz) este mapat (suprapus) peste locaiile fizice 30000-95535. Astfel, o referin a unui program la locaia 50000, va prelua datele, efectiv de la locaia fizic 80000 (30000+50000).
memoria fizic
partiie program A
0
eroare de
adresare
65535
spaiul total de adres A
suprascriere
spaiul total de adres B 0
65535
program
B
65535 partiie program B
program A
0
-
O schem simpl de mapare
Aceast operaie este foarte util n sistemele multiprogram (sau multitask), pentru care a fost dezvoltat maparea. Astfel, fiecare program are propriul su spaiu logic de adrese, care este complet independent de spaiul oricrui alt program. Ca atare, mai multe programe pot partaja memoria fizic fr posibilitatea de a interfera ntre ele. Procesul de mapare potrivete (suprapune) tot spaiul de adrese logice ntr-o zon de memorie fizic, dar procesul este transparent pentru program. Iat, de exemplu, cum se realizeaz maparea mai multor programe.
Maparea bazat pe pagini n locul maprii ntregului spaiu logic de adrese ca o unitate, ca n figura de mai jos, mecanisme mai avansate de translaie a adresei mapeaz pagini de dimensiune fix, mai mici, ale spaiului de adrese logice, n pagini de memorie fizic. Astfel, un program mare nu trebuie s fie realocat ntr-o zon (poriune) continu de memorie, care poate fi greu gsit ntr-un cadru cu programe multiple, dect, mai degrab, n mai multe seciuni de memorie, mai mici, care sunt mult mai uor de gsit, disponibile. Sunt mai uor de gsit 20 de pagini de 1 Ko, dect un bloc de 20 Ko.
spaiu
de adrese
fizice
1000000
95535
80000
30000
0
65535
50000
0
spaiu de adrese logice
logica de mapare
funcia de
mapare 65535
0
program
A
65535
0
program
B
65535
0
program
C
300000
215535
150000
program
A
131071
program
C 65535
0
program
B
neutilizat
neutilizat
trei
spaii de
adrese
logice
spaiu
de
adres
fizic
-
Un cadru de mapare multiprogram
Drepturi de acces, bazate pe pagini
Mecanismul de paginare poate furniza baza pentru protecia memoriei ntr-un spaiu logic de adrese. Fiecare pagin poate avea asociate atribute (denumite i drepturi de acces) care indic modul n care se poate obine acces la pagin. Aceste atribute pot permite numai citire, citire / scriere sau pot mpiedica orice acces.
Protecia bazat pe pagini
Memoria virtual Spaiul de adrese logice este mult mai mare dect memoria fizic. Memoria virtual este un mecanism pentru a extinde limitele memoriei fizice. ntr-un sistem cu memorie virtual, aceasta apare utilizatorului ca i cum ntregul spaiu logic de adrese este disponibil pentru memorare. Dar, de fapt, doar cteva pagini din spaiul logic de adrese sunt mapate peste spaiul fizic la un moment dat. Alte pagini nu sunt prezente n memoria principal; n schimb, informaia din aceste pagini este memorat ntr-o memorie secundar, cum ar fi discul, al crei cost pe bit este mult mai economic.
Ori de cte ori se obine acces la o pagin care lipsete, softul sistemului de operare ncarc pagina respectiv de pe disc i memoreaz pe disc o alt pagin, la care nu s-a fcut recent referire. Utilizatorul are impresia unei memorii fizice uriae, dar mai lente.
Memoria segmentat O alt form de organizare a memoriei logice este memoria segmentat. Motivaia acesteia o reprezint faptul c programele nu sunt scrise ca o secven liniar de instruciuni i date, ci mai degrab ca buci (secvene) de cod i buci de date. De exemplu, poate exista o seciune principal
spaiu de
adrese logice
65535
0
unitate mapare
X
R
WR
R
spaiu de
adrese
fizice
R = acces citire pagin
WR = acces scriere / citire pagin
X = acces interzis la pagin
-
de cod i mai multe proceduri separate. Aceste module de cod i date pot fi de diferite dimensiuni. Spaiul logic de adrese este desprit n mai multe spaii liniare de adrese, fiecare avnd o anumit dimensiune. Fiecare dintre aceste spaii de adrese liniare este denumit segment. Fiecare element dintr-un segment este accesibil printr-o adres cu dou componente:
selectorul segmentului, care specific adresa de nceput a segmentului; deplasamentul, care specific adresa relativ, fa de baza segmentului, a elementului
selectat.
Fiecare segment poate fi asociat unui modul de date sau de program. Astfel, programul
poate avea procedura principal ntr-un segment, celelalte proceduri n segmente distincte, i fiecare structur important de date n segmentul su. Astfel, structura adreselor logice reflect organizarea logic a programului.
Mecanismele de protecie pentru memoria liniar sunt bazate, de obicei, pe pagini de lungime fix, a cror dimensiune este determinat pe criterii hardware i nu au vreo relaie cu structura logic a programului. Problema descompunerii spaiului de adrese logice n pagini este c mecanismul de protecie nu poate proteja cu exactitate modulul de program. Dimensiunea paginii este determinat din raiuni hardware, deci nu are legtur cu structura logic a programelor. n schimb, ntruct fiecare segment are o anumit lungime, este uor s-l protejm de alte programe. Mecanismele de memorie virtual pot fi implementate i pentru arhitecturi segmentate. n acest caz, segmentul este unitatea de memorie ce se interschimb (swapping) la i de la memoria extern.
Maparea memoriei segmentate
Maparea, n acest caz, este implementat printr-o tabel de segment, care pstreaz un descriptor pentru fiecare segment. Descriptorul conine adresa de nceput a segmentului i lungimea acestuia. Componenta selectorului de segment a unei adrese logice este utilizat ca un index pentru a selecta descriptorul n tabela (descriptorilor) de segment. Apoi deplasamentul este
adunat la adresa de start a segmentului, furnizat de descriptor, pentru a calcula adresa fizic a operandului referit. Deplasamentul este verificat hardware, pentru a exista sigurana c referina nu depete lungimea segmentului.
-
Compararea memoriei liniare cu cea segmentat
Maparea memoriei segmentate
65535
54000
date B
date A
date progr. principal
44000
34000 procedura
B
procedura A
programul principal
27000
20000
0
programul principal
2000
0 procedura
A procedura
B
date progr. principal
date A
date B
memoria segmentat spaiu de adrese logice
memoria liniar
spaiu de adrese
logice
0
1000
0 0
7000
0
7000
0
1000
0 0
1153
5 0
locaia
segment
tabela
descriptori
segment
adresa logic segmentat
selector
segment
deplasament
descriptor segment
-
Tipuri de segmente i drepturi de acces Descriptorul de segment mai conine, pe lng adresa de baz a segmentului i limita sa, i atribute referitoare la tipul segmentului. Drepturile de acces sunt, deci, asociate, n particular, fiecrui segment, n ciuda faptului c modulele programului refer acele segmente. Dac un segment este de tip read-only (numai pentru citire), de exemplu, i menine tipul pentru toate modulele care fac referire la acesta. Aceast asociere a drepturilor de acces cu segmentele este un dezavantaj, deoarece putem dori s dm diferitelor module acces la acelai segment, dar cu diferite drepturi de acces.
Controlul accesului
Un alt dezavantaj al mecanismului de mapare a segmentelor este dificultatea de a limita
accesul unui program la segmentele altui program. Deoarece tabela de segmente conine toi descriptorii de segment, orice program poate accesa orice segment prin simpla indexare n tabela de
segmente. Soluia este ca fiecare program s aib propriile sale tabele. Dar aceasta nseamn c, ori de cte ori un segment este realocat n memoria fizic, toate programele partajeaz segmentul vor trebui s actualizeze descriptorii lor de segment. Pentru a reduce numrul operaiilor de acest gen, fiecare task vede spaiul de memorie divizat n dou: un spaiu global, care conine serviciile de sistem, sistemul de operare i un spaiu local asociat fiecrui task.
Memoria virtual i alocarea dinamic a memoriei Fiecare modul de program are propriul su cadru de acces, cadru n care (de exemplu, 32 de linii de adres) se pot genera 232 adrese diferite. Deci spaiul total de adrese, cel virtual, este egal cu dimensiunea maxim a unui segment nmulit cu numrul total de segmente. De exemplu la 386/486 i Pentium: cu o magistral de adrese de 32 de bii i un selector de 16 bii, dintre care 14 sunt utilizai pentru adresare, rezult un spaiu total de adresare virtual de 64 To. Fiecare descriptor de segment trebuie s conin un cmp de bii, actualizai hardware, utilizai de sistemul de operare pentru a implementa memoria virtual:
valid (sau prezent), identific dac segmentul se gsete n acest moment n memorie; memorie alocata, indic dac s-a asociat memorie cu acest descriptor; accesat, indic dac segmentul a fost accesat de un program; modificat, indic dac informaia din segment a fost modificat sau nu de un task.
Sistemul de operare poate utiliza aceti bii: valid / memorie alocat, pentru a detecta cnd un segment fizic nu este prezent n memorie; accesat / modificat, pentru a decide care dintre segmentele existente n acest moment ar
trebui interschimbat (swapped) sau pur i simplu, dac n-au fost modificri, scrierea segmentului nou peste cel vechi (neutilizat curent).
n plus, cteva cmpuri din descriptor pot fi utilizate de sistemul de operare, pentru a memora
alte informaii folositoare despre segment (de exemplu: frecvena de utilizare), care pot fi utilizate n algoritmul de interschimb.
Cantitatea de memorie alocat unui modul nu trebuie s fie fix la momentul compilrii; ea se poate modifica dinamic. Mecanismul de alocare dinamic a memoriei face memoria virtual mult mai eficient prin alocarea segmentelor numai atunci cnd este necesar, mpiedicnd astfel utilizarea memoriei de ctre segmentele la care nu se face referire.