De regul la microprocesoarele de 8 bii, adresa generat i depus pe magistrala extern de adrese
este folosita direct n adresarea unei locaii de memorie sau a unui dispozitiv de I/O. ncepnd cu microprocesoarele de 16 bii apar noiunile de adres logic i adres fizic. Adresele generate de un program sunt considerate adrese logice i totalitatea acestora formeaz spaiul adreselor logice. Totalitatea adreselor ce corespund memoriei (i/sau dispozitivelor de I/O) formeaz spaiul adreselor fizice. Cele 2 spaii, al adreselor logice i fizice, pot s fie egale sau inegale. Ca urmare, trebuie s existe un mecanism de conversie a adreselor, de translatare din adrese logice n adrese fizice. La microprocesoarele Intel din seria x86 mecanismul de translatare este inclus pe acelai substrat de siliciu cu microprocesorul. La unele din microprocesore (ca de exemplu Motorola MC68000) mecanismul de translatare din adresele logice n cele fizice este preluat de un circuit extern microprocesorului denumit "unitate de administrare a memoriei" (MMU - Memory Management Unit). n general, tehnicile folosite pentru lucrul cu sistemul de memorie ntr-un calculator, fie c este vorba de selecie, adresare, alocare de spaiu n memoria principal, folosesc un ansamblu de resurse hardware i software, operaiile executate de acestea fiind incluse n noiunea general de management al memoriei. Administrarea ntregii memorii (de pe toate nivelurile ierarhice) a calculatorului, incluznd i modalitile de partiionare logic i adresare n spaiul adreselor logice (L) i n spaiul de memorare (M, adrese fizice) se face cu ajutorul unei uniti hardware pe care o notm n continuare MMU (Figura 1). Cnd un program trebuie rulat (lansat n execuie), el este mai nti adus din memoria auxiliar nmemoria principal (n ntregime sau parial). Pentru MMU se impun urmtoarele cerine de baz: 1. s realizeze translatarea adreselor i s susin alocarea dinamic a memoriei nainte ca un program s fie executat, este necesar ca acestuia s i se aloce un spaiu n memoria principal (spaiu de adrese n memoria fizic existent n calculator). Dac aceast atribuire de spaiu (adrese) se face doar la ncrcarea programului n memoria principal, procedeul este numit alocare static i prezint dezavantajul c adresele de ncrcare sunt fixe. Alocarea dinamic a memoriei se caracterizeaz prin atribuirea spaiului necesar programelor, sau proceselor, n timpul execuiei acestora. Adresa la care se ncarc programul n memoria principal nu mai este fix, ea putnd fi modificat, la momente de timp diferite. Figura 1. Organizarea ierarhica a memoriei Se folosesc trei procedee de translatare a adreselor logice n adrese fizice toate bazndu-se pe o divizare a spaiului adreselor logice n blocuri de adrese logice continue, dup cum urmeaz: segmente de lungime arbitrar; pagini (n spaiul adreselor logice) i cadre-pagin / blocuri (n cadrul adreselor fizice), de lungime fix; combinaii de adresare segmentat-paginat. adrese fizice MP MA (auxiliara) MMU Cache UCP adrese logice control date (acces direct) (acces indirect) (acces direct) Mecanismul de translatare, indiferent c se folosesc pagini sau segmente, se produce n faza de execuie a programului i include printre altele, un tabel de translatare prin care se face corespondena ntre adrese logice i adrese fizice (principiul este prezentat n fig. 2). Figura 2. Principiul tehnicilor de translatare a adreselor De la microprocesor se recepioneaz adresa logic L. Dac elementul adresat nu se gsete n memoria principal, atunci registrul (de adres) L va conine adresa din memoria extern unde se gsete elementul respectiv i el va fi adus de rutine ale sistemului de operare n memoria principal, la o adres fizic a crei valoare M se nscrie n registrul de adres L din tabela de translatare. Daca elementul adresat este n memoria principal rezult c adresa fizic este M. Acest mecanism este totui ineficient, cci tabela de translatare are dimensiunile egale cu ale memoriei principale. Pentru micorarea dimensiunii tabelelor se folosete divizarea spaiului logic n segmente / pagini, iar referirile se fac doar la nivelul de adres logic de bloc. Trebuie menionat c dac sunt lansate dou procese n execuie, fiecare cu spaiul su de adrese logice, exist dou tabele de translatare spre memoria principal. Sistemul de operare va reactualiza coninutul tabelei de translatare ori de cte ori va avea loc o relocare (schimbare de poziie n spaiul adreselor fizice) a programelor n memorie. 2. s susin mecanismele de implementare ale memoriei virtuale Mecanismul memoriei virtuale permite programelor s fie executate chiar dac numai o parte din instruciunile lor se ncarc n memoria principal, iar restul se gsesc n memoria auxiliar de tip disc magnetic. Adresele logice sunt numite adrese virtuale, n cazul implementrii memoriei virtuale, pentru c nu exist fizic n memoria principal ci ele se gsesc n memoria auxiliar. 3. s poat furniza protecie i securitate pentru memorie Cerina se refer la protecia informaiei, la alocarea de drepturi de acces la zone din memoria principal i la zone din spaiul adreselor logice, (protecie la citire, scriere, tergere, copiere, execuie). Se protejeaz memoria disponibil alocat programelor de sistem i programelor utilizator, asigurndu-se securitatea informaiei (acces limitat la informaii), prin controlul accesului la resursele sistemului. Aa cum s-a pomenit i mai sus exist dou strategii folosite pentru implementarea MMU: a) MMU se afl pe chip-ul procesorului; se aplic la microprocesoarele cu spaiul segmentat al adreselor logice. De exemplu: Intel x86, Pentium, Zilog Z800, Z8000) b) MMU este construit separat de UCP, variant aleas la microprocesoarele cu spaiu liniar (organizare liniar a) al adreselor logice. De exemplu: MC 680x0, Z8001). n cazul n care organizarea logic a memoriei este liniar, adresele ncep n mod obinuit de la 0 i avanseaz liniar. Memoria poate fi apoi structurat prin software, la nivelul translaiei de adrese. n cazul n care organizarea memoriei este segmentat, programele nu sunt scrise ca secvene liniare de instruciuni i date, ci ca segmente separate de cod, date, sau stiv. Spaiul adreselor logice este spart n mai multe spaii cu adresare liniar, fiecare cu lungime diferit, definit de compilator sau de programator. O adres logic efectiv este calculat ca o combinaie ntre numrul segmentului (care indic adresa de baz a unui bloc de memorie) i un deplasament (offset) n cadrul segmentului. Tabel de translatare Adresa logic de la UCP Adresa fizic Cuvnt adresat Memoria principal M M L n general schemele de adresare liniar sunt mai potrivite pentru manipularea structurilor mari de date, n timp ce segmentarea faciliteaz programarea, permind programatorului s structureze programele n module segment. n plus adresarea segmentat simplific protecia i relocarea obiectelor n memorie. Segmentarea faciliteaz gestiunea memoriei n sistemele de calcul multiuser, multitasking. TRANSLATAREA ADRESELOR Indiferent de schema de organizare a memoriei (liniar sau segmentat) procesorul trebuie s aib un mecanism de translatare a adreselor, util n implementarea memoriei virtuale. Acest mecanism este de asemenea util pentru protejarea informaiei din memorie. Translatarea de adrese este un proces atribuire i organizare (mapare) a adreselor logice n adrese fizice de memorie. Mecanismul de translatare mparte memoria principal n blocuri (cadre pagin). Aa cum am amintit mai sus se folosesc 2 scheme de translatare: (1) translatare prin paginare (2) translatare prin segmentare n sistemele paginate, memoria principal este mprit n blocuri de lungime fix n timp ce n sistemele segmentate blocurile sunt de lungime variabil. Paginile au n general lungimi de ordinul 256 - 4096 cuvinte, n timp ce segmentele cu lungimea definit de compilator sau programator au 64 K-cuvinte, sau mai mult. n sistemele cu multiprogramare i time- sharing 1 , mai muli utilizatori folosesc aceleai programe cum sunt editoare, compilatoare, programe utilitare, biblioteci de programe etc. Att sistemele cu paginare ct i cele cu segmentare permit mecanisme de partajare, ntre procesele utilizator, a paginilor, respectiv a segmentelor. Aceste mecanisme se bazeaz pe intrri n tabele de mapare de pagin (sau segment) n care intrrile diferitelor procese indic ctre acelai bloc din memoria principal. Combinaia ntre segmente i pagini presupune c un segment conine una sau mai multe pagini virtuale. Mecanismul de segmentare administreaz spaiul virtual, mprind programele n segmente, n timp ce paginarea este destinat administrrii memoriei fizice care este mprit n cadre pagina (blocuri). Vom descrie n continuare mecanismele folosite pentru maparea segmentelor i paginilor. Maparea adreselor folosind pagini n cazul paginrii, implementarea tabelului pentru maparea adreselor este simpl pentru c informaia din spaiile de adresare i memorare este divizat n blocuri de dimensiune fix. Memoria fizic este mprit logic n blocuri de aceeai dimensiune (64-4096 cuvinte fiecare). Termenul pagin se refera la blocuri, de aceeai dimensiune, de adrese din spaiul de adresare. De exemplu, presupunem un calculator care are 20 de bii de adres i folosete doar 32KB n memoria principal (memorie implementat fizic prin circuite de memorie); dac o pagin, respectiv un bloc, au dimensiuni egale cu 1 kB, atunci spaiul de adrese e divizat n 1024 pagini, iar spaiul de memorie e divizat n 32 de blocuri. Se consider c i programele sunt mprite n pagini. Poriuni din programe sunt mutate din memoria auxiliar n memoria principal n nregistrri egale cu mrimea paginii. n loc de bloc de memorie e folosit uneori termenul de cadru pagin (page frame). n cazul maprii prin paginare adresa virtual este reprezentat printr-un singur cuvnt de adres mprit ntr-un cmp corespunztor numrului paginii (adresa paginii) i un cmp pentru deplasament. La maparea prin segmentarea un singur cuvnt de adres nu mai este suficient; dimensiunea variabil a segmentelor conduce la existena a dou cuvinte de adresare, n care primul indic numrul (adresa) segmentului, iar cel de-al doilea deplasamentul n cadrul segmentului. ntr-un calculator cu 2 p cuvinte pe pagin, p bii sunt folosii pentru a specifica o adres de linie iar cei mai semnificativi bii rmai n adresa virtual specific numrul de pagin. Fie de exemplu un sistem simplu cu o adres virtual cu dimensiunea de 16 bii i pagini cu 4096 cuvinte. Pentru c o pagin are 2 12 cuvinte, cei patru bii mai semnificativi vor specifica una din cele 16 pagini, iar cei 12 bii mai puin semnificativi indic adresa liniei n cadrul paginii.
1 time-sharing = partajarea timpului UCP Figura 3. Paginarea memoriei Ca urmare maparea trebuie fcut doar de la un numr de pagin la un numr de bloc din memoria principal, pentru c adresa liniei e aceeai pentru ambele spaii. Organizarea de principiu a tabelului de mapare a memoriei ntr-un sistem paginat poate arta ca n figura 3. n tabelul paginii de memorie, adresa conduce la numrul paginii, iar coninutul indic numrul blocului unde pagina este stocat n memoria principal. Se observ c paginile virtuale 2, 3, 5 i 8 se afl n memoria principal, n blocurile 3, 0, 1 i respectiv 2. Un bit de prezen adugat fiecrei locaii a tabelului indic dac pagina respectiv a fost mapat n memoria principal (i s-a alocat spaiu i a fost transferat din memoria auxiliar n memoria principal). Valoarea 0 a bitului de prezen indic c pagina nu este n memoria principal. n exemplul dat, cei 4 bii ai adresei virtuale specific att numrul paginii ct i adresa n tabelul paginilor de memorie. Coninutul tabelului este citit n registrul ce indic blocul de memorie. Dac bitul de prezen este 1, numrul de bloc e transferat n registrul ce pstreaz adresa fizic din memoria principal. Dac bitul de prezen este 0 rezult c adresa virtual se refer la un articol ce nu se gsete n memoria principal. n acest caz, se genereaz o cerere (n forma unei ntreruperi software, de tip eroare de pagin 2 ) ctre sistemul de operare (SO) pentru a aduce pagina cerut din memoria auxiliar n memoria principal, nainte de reluarea programului care a accesat adresa din pagina respectiv. O astfel de organizare n memoria principal a tabelului de translatare este ns ineficient, cci tabelul are multe locaii goale. Dac presupunem un calculator cu spaiul de adrese de 4 GB (2 32 ), cu pagini de memorie de 32 KB (2 15 ), iar spaiul memoriei fizice este 32 MB (2 25 ) rezult 128 K-pagini virtuale de memorie i 1024 blocuri (1 K-blocuri). Conform principiului din figura 6.24 tabelul de translatare ar avea
2 page fault = eroare de pagin Adres tabel Tabel pagini de memorie Registru bloc de memorie Memoria principal BLOCK 0 BLOCK 1 BLOCK 2 BLOCK 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0000 0 Adresa virtual Numr pagin Numr linie Adresa fizic (real) de memorie principal 1 0 0 0 0 0 0 0 0 0 0 0 0 1 00 01 10 11 Bit prezen 0001 0 0010 11 1 0011 00 1 0100 0 0101 01 1 0110 0 0111 0 1000 10 1 1001 0 1010 0 1011 0 1100 0 1101 0 1110 0 1111 0 10 0 Sistemul de memorie 151 131071 (2 17 = 128 K) linii i doar 1024 locaii ar fi ocupate (cu bit de prezen 1), restul fiind goale, neutilizate. O soluie a acestei probleme o constituie folosirea unei memorii asociative, ca n figura 4, (tabel asociativ de pagini de memorie) cu numr de locaii egal cu numrul de blocuri din memoria principal. Figura 4. Translatarea adresei de pagin cu memorie adresabila prin continut n fiecare locaie de memorie se stocheaz numrul paginii virtuale i numrul corespunztor al blocului de memorie principal alocat. Adresa logic se compar combinaional cu coninutul tabelului asociativ, doar pentru poziiile binare ce corespund la 1 logic n registrul de mascare, deci n figura 4, doar pentru cmpul de adres al numrului de pagin virtual. Dac la apelarea unei pagini virtuale, aceasta nu este mapat n memoria principal, operaia de adresare este o ratare (miss) i evenimentul este rezolvat printr-o rutina de servire a sistemului de operare care aduce pagina respectiv din memoria auxiliar. i acest tabel asociativ de translatare poate avea dimensiuni mari uneori. De aceea se folosesc tabele asociative de mare vitez la care numrul liniilor este mai mic dect numrul de blocuri (cadre pagin) i n care se salveaz numai o parte din maprile realizate. Acest registru asociativ este numit TLB (Translation lookaside buffer) i este descris mai jos. Mapare prin segmentare La acest tip de mapare spaiul adreselor logice este mprit n segmente, care spre deosebire de pagini, nu au o dimensiune fix. Segmentele sunt spaii de adrese continue (liniare), care includ programe sau poriuni din programe cu atribute comune. Mecanismul de translatare este prezentat n schema de principiu din figura 5. Spre deosebire de operaia de paginare, la segmentare nu se mai face concatenarea (alturarea) adresei de deplasament (din adresa logic) la adresa fizic. Aici adresa de deplasament este adunat cu adresa fizic a segmentului (adresa sa de baz) citit din tabelul de translatare al segmentelor, specific unui anumit proces. 1111 0 0 0010 11 0011 00 0101 01 1000 10 1000 Numr linie Numr pagin Adres logic Registru argument Registru masc Numr pagin Numr bloc Figura 5: Segmentarea memoriei Adres logic Adres liniar (fizic) Adresa de baz a segmentului Adres fizic segment Nr.segment Offset Segment Tabel de translatare a segmentelor Noiuni privind protecia memoriei Inventarea multiprogramrii, la care un procesor este partajat ntre mai multe programe aflate n execuie, a condus la noi cerine privind protecia ntre programe. Mecanismele de protecie sunt strns legate de implementarea memoriei virtuale. Multiprogramarea conduce la conceptul de proces. Un proces este constituit dintr-un program aflat n execuie plus orice stare necesar pentru continuarea rulrii sale. Partajarea timpului (time-sharing) este o variant a multi-programrii care partajeaz UCP i memoria ntre diferii utilizatori simultani, iar mecanismul de partajare d iluzia c toi utilizatorii au propriile maini. Astfel c, n oricare dintre variante, trebuie s fie posibil s se comute de la un proces la altul. Aceast comutare este numit comutare de proces sau comutare de context. Un proces trebuie s se execute corect indiferent dac se execut continuu de la start pn la terminare, sau dac este ntrerupt n mod repetat pentru a se face comutarea ctre alte procese. Responsabilitatea meninerii comportrii corecte a proceselor cade att n sarcina resurselor hardware, care asigur salvarea i restaurarea corect a proceselor ce ruleaz pe UCP ct i n sarcina sistemului de operare care trebuie s garanteze c un proces nu interfereaz cu celelalte i c un proces nu poate modifica datele altor procese. Aceasta nseamn asigurarea proteciei datelor de ctre sistemul de operare. n afar de protecie, sistemul de operare permite, n anumite condiii, i partajarea codului i a datelor ntre diferite procese pentru salvare de spaiu de memorie prin reducerea numrului de copii de informaii identice. Cel mai simplu mecanism de protecie este constituit de o pereche de registre care verific fiecare adres, astfel nct s nu se permit accesul n afara unor limite alocate n spaiul de adrese. Aceste registre sunt numite registru - baz i registru limit. O adres este valid dac se ncadreaz ntre cele dou adrese coninute n registre: Baz Adres Limit La unele sisteme adresa este considerat ca un numr fr semn, care se adun ntotdeauna la o adres de baz, astfel c testul de adres limit se reduce la: (Baz + Adres) Limit Dac proceselor utilizator li s-ar permite s modifice registrele de adrese de baz i limit, atunci acest mecanism de protecie nu ar putea funciona. Modificarea respectivelor registre este permis doar sistemului de operare, pentru asigurarea proteciei ntre procese. Pentru asigurarea proteciei sistemul de operare (SO) are trei responsabiliti principale: 1. S furnizeze cel puin dou moduri de execuie indicnd c procesul aflat n rulare este un proces utilizator, sau un proces al sistemului de operare. La diferite SO ultimul tip de proces este numit n diferite feluri: proces kernel (nucleu), proces supervizor, sau proces executiv. 2. S prevad o poriune a strii CPU pe care procesul utilizator o poate doar citi, dar nu o poate scrie. Aceasta include registrele baz / limit, indicatori (bii) pentru moduri utilizator / supervizor i indicatori pentru validare / invalidare evenimente de tip excepie. Capitolul 6 158 3. S prevad un mecanism prin care UCP poate trece din mod utilizator (user) n mod supervizor i viceversa. Primul sens de trecere este specific apelurilor sistem (system calls apeluri de servicii oferite de SO), implementate ca instruciuni speciale care transfer temporar controlul la o locaie precis din spaiul de cod al supervizorului. Registrul contor de program corespunztor locului unde se face un apel sistem este salvat, iar UCP trece n mod supervizor. Revenirea la modul utilizator este similar cu cea produs la o revenire din procedur. Adresele de baz i limit constituie minimul unui sistem de protecie. Mecanismul memoriei virtuale ofer alternative mai complexe i mai sigure dect modelul simplu prin baz i limit. Aa cum s-a vzut, adresele virtuale sunt translatate n adrese fizice pe baza unor tabele de translatare. Acest mod de mapare, prin tabele, ofer posibilitatea introducerii de informaii pentru controlul erorilor de program (intenionate sau nu) care ncearc s treac peste mecanismele de protecie. Cea mai simpl cale este introducerea unor indicatori de permisie pentru fiecare pagin sau segment. De exemplu pot exista indicatori care s permit doar citire, doar execuie, sau care s interzic accesul unui proces utilizator la anumite pagini / segmente. Fiecare proces poate face adresare doar ctre paginile proprii de memorie, procesul utilizator neavnd dreptul s modifice tabelele sale de pagin / segment. Protecia poate fi extins chiar pe mai mult dect dou niveluri (nu doar utilizator i supervizor), privite ca i inele concentrice de protecie, n centru gsindu-se nivelul de protecie cel mai nalt. n aceast ierarhie de niveluri de protecie un program poate accesa doar date de pe nivelul su de protecie i de pe nivelurile inferioare n ierarhie. Poate face ns operaii de apelare (call) a serviciilor sistemului de operare, servicii oferite de rutine ce se afl pe niveluri superioare de protecie. Adesea se face comparaia, n oarecare msur nefericit, cu clasificri de tip militar ale sistemelor: top secret, secret, confidenial i neclasificat. Programele utilizator (civilii n exemplul militar) au doar dreptul de acces la nivelul de protecie cel mai de jos: ne-clasificat. La sistemele de protecie de tip inele concentrice, deosebirea fa de exemplul anterior, este c se pot face apelri la rutine situate pe niveluri superioare de protecie, dac exist chei de acces ctre acele niveluri. Poate exista dreptul de apelare a unor servicii ale sistemului de operare, prin mecanismul de comutare a proceselor. Aa cum am pomenit i mai sus, informaia de protecie este setat n registre speciale ataate fiecrei intrri n tabelele de translatare, registre setate doar de rutine de control al sistemului de operare. Drepturile de acces pot fi de tipul: a. Atribuirea de privilegii complete de citire i scriere. Aceste drepturi se atribuie programului atunci cnd execut propriile instruciuni. b. Read-only (protecie la scriere). Protecia la scriere este util la operaiile de partajare a unor rutine de sistem (utilitare, biblioteci, etc.). c. Execute only (program protection). Protejeaz programul la copiere. Restricioneaz referirea la segment doar n timpul fazei de fetch a instruciunii i nu i n timpul fazei de execuie. Asta permite utilizatorului s execute instruciunile segmentului de program, dar nu permite citirea instruciunilor ca date cu scopul de a copia coninutul lor. Sistemul de protecie a memoriei, n sensul celor spuse mai sus, se construiete pentru: (a) memorie (detecteaz orice eroare de adresare nainte ca aceasta s creeze erori accidentale sau voite); (b) programe (previne ca programele utilizator (de aplicaii) s fac modificri ilegale n rutinele SO); (c) utilizatori (programele utilizatorilor ntre ele); (d) securitate informaie (acces limitat la informaiile unde utilizatorul nu are drept de acces).