plas_7.pdf

Upload: druta-anka

Post on 13-Jan-2016

215 views

Category:

Documents


0 download

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.