Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Organizarea memoriei sistemului - UNIX

linux



+ Font mai mare | - Font mai mic



Organizarea memoriei sistemului - UNIX

Se stie ca memoria fizica a masinii este adresabila incepand de la octetul cu deplasamentul 0 si mergand pana la un deplasament egal cu cantitatea de memorie a masinii. Asa cum s-a aratat in capitolul 2, procesele in sistemul UNIX sunt formate din trei sectiuni logice: text, date si stiva (memoria partajata va fi considerata ca parte a sectiunii de date, in scopul simplificarii acestei discutii). Sectiunea de text contine un set de instructiuni executate de masina; adresele din sectiunea de text includ adresele codului in cazul instructiunilor de ramificare sau apel de subrutine), adresele de date (pentru accesul la variabilele de date globale) sau adresele de stiva (pentru accesul la structurile de date locale ale subrutinelor). Daca masina ar trata adresele generate ca locatii in memoria fizica ar fi imposibil ca doua procese sa se execute concomitent, daca setul lor de adrese s-ar suprapune. Compilatorul poate genera adrese care sa nu se suprapuna intre programe, dar aceasta procedura nu este practica pentru calculatoarele de uz general deoarece cantitatea de memorie a masinii este finita si setul tuturor programelor ce pot fi compilate este infinit. Chiar daca compilatorul incearca euristic sa evite suprapunerea adreselor generate, implementarea nu va fi flexibila.



De aceea compilatorul genereaza adrese pentru un spatiu virtual de adrese cu un domeniu de adrese, iar unitatea de gestiune a memoriei masinii translateaza adresele virtuale generate de compilator in adrese de locatii in memoria fizica. Compilatorul nu trebuie sa stie unde va incarca mai tarziu nucleul in memorie programul pentru executie. De fapt, cateva copii ale programului pot exista concomitent in memorie.

Toate se vor executa folosind aceleasi adrese virtuale, dar vor referi diferite adrese fizice. Subsistemele nucleului si hardware-ul ce coopereaza la translatarea adresei virtuale in adresa fizica formeaza sistemul de gestiune a memoriei.

Regiunile

La System V nucleul imparte spatiul virtual de adrese al procesului in regiuni logice. O regiune este o zona contigua a spatiului virtual de adrese al procesului care poate fi tratata ca un obiect distinct si poate fi partajata sau protejata. Astfel textul, datele si stiva, de obicei formeaza regiuni separate ale procesului. Mai multe procese pot folosi in comun aceeasi regiune. De exemplu, mai multe procese pot executa acelasi program si este normal ca ele sa partajeze o copie a regiunii de text. La fel, cateva procese pot coopera la folosirea in comun a regiunii de memorie partajata. Nucleul contine o tabela a regiunilor si aloca cate o intrare din tabela pentru fiecare regiune activa in sistem. Sectiunea 7.5 va descrie amanuntit campurile tabelei de regiuni si operatiile cu regiuni, dar pentru inceput consideram ca tabela de regiuni contine informatii pentru a determina unde este localizat continutul ei in memoria fizica. Fiecare proces contine o tabela privata de regiuni per proces (per process region table), numita pe scurt pregion. Intrarile acesteia pot exista in tabela de procese, u area sau intr-o zona de memorie alocata separat depinzand de implementare, dar, pentru simplificare, consideram ca ele sunt o parte tabelei de procese. Fiecare intrare a tabelei private de regiuni pointeaza catre o intrare a tabelei globale de regiuni si contine adresa virtuala de start a regiunii in proces. Regiunile partajate pot avea adrese virtuale diferite in fiecare proces. Intrarea tabelei private de regiuni mai contine campul permisiunilor ce indica tipul de acces permis procesului: numai citire, citire-scriere sau citire-executie. Tabela privata de regiuni si structura regiunii sunt analoage cu tabela fisierelor si structura inodului din sistemul de fisiere. Mai multe procese pot accesa in comun parti ale spatiului lor de adrese printr-o regiune la fel cum pot accesa un fisier printr-un inod; fiecare proces acceseaza regiunea printr-o intrare proprie in tabela privata de regiuni la fel cum acceseaza inodul printr-o intrare proprie in tabela descriptorilor de fisiere a utilizatorului si in tabela de fisiere din nucleu.

Figura 7.2 prezinta doua procese A si B, indicand regiunile, tabelele private de regiuni si adresele virtuale unde sunt legate. Procesele impart regiunea de text "a" la adrese virtuale de 8K respectiv 4K.

Daca procesul A citeste locatia de memorie de la adresa 8K si procesul B citeste locatia de memorie de la adresa 4K, ele citesc aceeasi locatie de memorie in regiunea "a". Regiunile de date si de stiva ale celor doua procese sunt private.

Conceptul de regiune este independent de politicile de gestiune a memoriei implementate de sistemul de operare. Politica de gestiune a memoriei se refera la actiunile nucleului ce asigura impartirea corecta a memoriei principale de catre procese. De exemplu, doua politici de gestiune a memoriei considerate in capitolele 10 si 11 sunt: swapping-ul si paginarea la cerere. Conceptul de regiune este deasemenea independent de implementarea gestiunii memoriei:daca memoria este impartita in pagini sau segmente. Pentru fundamentarea descrierii algoritmilor de paginare la cerere din capitolul 12, discutia de aici considera arhitectura memoriei bazata pe pagini, dar nu si ca politica de gestiune a memoriei este bazata pe algoritmii de paginare la cerere.

Figura 7.2 Procese si regiuni

Pagini si tabele de pagini

Aceasta sectiune defineste modelul memoriei care va fi folosit in lucrare, dar el nu este specific sistemului UNIX. In arhitectura de gestiune a memoriei bazata pe pagini, hardware-ul de gestiune a memoriei imparte memoria fizica intr-un set de blocuri de dimensiuni egale numite pagini. Marimea fizica a paginilor este cuprinsa intre 512 octeti si 4Ko si este definita de hardware. Fiecare locatie adresabila din memorie este continuta intr-o pagina si, in consecinta, fiecare locatie de memorie poate fi adresata de perechea:

(numarul paginii, deplasaent in pagina).

De exemplu, daca masina are 232 octeti de memorie fizica si dimensiunea paginii de 1Ko, masina poate avea 222 pagini de memorie fizica; fiecare 32 de biti de adresa pot fi tratati ca o pereche formata din 22 de biti ai numarului de pagina si 10 biti ai deplasamentului in pagina (Figura 7.3).

Cand nucleul atribuie paginile fizice de memorie unei regiuni, nu trebuie sa atribuie pagini contigue sau intr-o anumita ordine. Scopul paginarii memoriei este de a asigura o mai buna flexibilitate in atribuirea memoriei fizice, analog cu atribuirea blocurilor disc ale fisierelor intr-un sistem de fisiere. Asa cum nucleul atribuie blocurile unui fisier pentru a creste flexibilitatea si pentru a reduce cantitatea de spatiu nefolosit datorita fragmentarii blocurilor, la fel el atribuie paginile de memorie unei regiuni.

 

Figura 7.3 Memoria fizica adresata ca pagini

Figura 7.4 Harta de corespondenta intre numerele logice de pagina

si cele fizice

Nucleul coreleaza adresele virtuale ale regiunii cu adresele fizice ale masinii cu ajutorul unei tabele ce cuprinde numerele de pagini logice din regiune si numerele de pagini fizice corespunzatoare ca in figura 7.4. Deoarece o regiune este o zona contigua de adrese virtuale in program, numarul de pagina logica este un index intr-o matrice cu numere de pagini fizice. Intrarea in tabela de regiuni contine un pointer spre tabela numerelor de pagini fizice numita tabela de pagini. Intrarea in tabela de pagini poate deci contine informatii ce depind de masina cum ar fi bitii permisiunilor care permit citirea sau scrierea unei pagini. Nucleul pastreaza tabelele de pagini in memorie si le acceseaza ca pe toate celelalte structuri de date ale nucleului.

Figura 7.5 prezinta un exemplu de mapare a unui proces in memoria fizica. Sa presupunem ca marimea unei pagini este de 1Ko, si ca procesul vrea sa acceseze adresa de memorie virtuala 68,432.

Intrarea din tabela privata de regiuni arata ca adresa virtuala este la inceputul regiunii de stiva la adresa virtuala 64K (65,536 in zecimal), considerand ca directia de crestere a stivei este de la adrese mici catre adrese mari. Prin scadere adresa 68,432 este la deplasamentul 2896 in regiune. Stiind ca fiecare pagina are 1Ko, adresa este continuta la deplasamentul 848 in pagina 2 (numarand de la 0) a regiuni, localizata la adresa fizica 986Ko. Sectiunea 7.5.5 (incarcarea regiunii) descrie semnificatia intrarii in tabela de pagini marcata ca fiind goala.

Masinile moderne folosesc diferiti registri hardware si fac operatii de tip cache pentru a mari viteza de translatie a adreselor , deoarece accesarea memoriei si calculul adreselor ar fi prea consumatoare de timp. Ori de cate ori reia executia procesului, nucleul informeaza hardware-ul de gestiune a memoriei unde rezida tabelele de pagini si memoria fizica a procesului prin incarcarea registrilor corespunzatori.

 

Figura 7.5 Translatarea adreselor virtuale in adrese fizice

Intrucat astfel de operatii sunt dependente de masina si variaza de la o implementare la alta, nu vor fi luate in discutie.In continuare folosim un model simplu de memorie pentru intelegerea gestiunii memoriei. Memoria este organizata in pagini de 1Ko, accesate prin tabelele de pagina asa cum au fost descrise mai inainte.

Sistemul contine un set de registri tripli de gestiune a memoriei, astfel incat primul registru din triplet contine adresa tabelei de pagina in memoria fizica, al doilea registru contine prima adresa virtuala mapata prin triplet, iar al treilea registru contine informatii de control cum ar fi numarul de pagini din tabela de pagini si permisiunile de acces ale paginii (numai citire, citire-scriere). Acest model corespunde modelului de regiune, descris mai sus. Cand nucleul pregateste un proces pentru executie, el incarca setul de registri tripli de gestiune a memoriei care corespund datelor memorate in intrarile tabelei private de regiuni.

Daca un proces adreseaza locatii de memorie din afara spatiului sau virtual de adrese, hardware-ul produce o exceptie. De exemplu, daca marimea regiunii text din figura 7.5 este de 16Ko si procesul acceseaza adresa virtuala de 26K, hardware-ul va produce o exceptie pe care o trateaza sistemul de operare. In mod similar, daca un proces incearca sa acceseze memoria fara permisiuni corespunzatoare, cum ar fi scrierea la o adresa in regiunea sa de text protejata la scriere, hardware-ul va produce o exceptie. In ambele exemple, procesul s-ar termina normal; capitolul urmator va furniza mai multe detalii.

3 Organizarea nucleului

Desi nucleul se executa in contextul unui proces, translatarea memoriei virtuale asociata nucleului este independenta de toate procesele. Codul si datele pentru nucleu rezida permanent in sistem, si toate procesele il partajeaza. Cand sistemul este pus la lucru (la incarcare), el incarca codul nucleului in memorie si seteaza tabelele necesare si registrii pentru maparea adreselor lui virtuale in adrese fizice de memorie. Tabelele de pagini ale nucleului sunt analoage cu tabelele de pagini asociate fiecarui proces, iar mecanismele folosite la maparea adreselor virtuale ale nucleului sunt similare cu cele folosite pentru adresele utilizator. La multe masini, spatiul virtual de adrese al procesului este impartit in cateva clase, cum ar fi sistem si utilizator, iar fiecare clasa are o tabela proprie de pagini. Cand executia este in modul nucleu, sistemul permite accesul la adresele nucleului, dar interzice un astfel de acces cand executia este in modul utilizator. Astfel, cand se trece din modul utilizator in modul nucleu ca rezultat a unei intreruperi sau al unui apel sistem, sistemul de operare coopereaza cu hardware-ul pentru a permite nucleului referirea adresei, iar cand se revine in modul utilizator, sistemul de operare si hardware-ul interzic aceste referiri. Alte masini schimba translatarea adresei virtuale prin incarcarea registrilor speciali cand se executa in modul nucleu.

Figura 7.6 Trecerea din modul utilizator in modul nucleu

Figura 7.6 prezinta un exemplu de adrese virtuale ale nucleului si ale unui proces, unde gama adreselor virtuale ale nucleului este de la 0 la 4M 1 si gama adreselor virtuale ale utilizatorului de la 4M in sus. Exista doua seturi de tripleti de gestiune a memoriei, unul pentru adresele nucleului si altul pentru adresele utilizatorului, si fiecare triplet pointeaza spre o tabela de pagini ce contine numerele de pagini fizice corespunzatoare adreselor de pagini virtuale. Sistemul permite referirea de adrese prin intermediul registrilor tripli ai nucleului numai in modul nucleu; deci, comutarea intre modul nucleu si modul utilizator necesita numai ca sistemul sa permita sau nu referirea adresei prin intermediul registrilor tripli ai nucleului.

Unele sisteme incarca nucleul in memorie astfel incat multe adrese virtuale ale nucleului sunt identice cu adresele fizice si maparea memoriei virtuale in memorie fizica a acestor adrese este functia identica. Totusi, tratarea zonei u area necesita maparea adresei virtuale in adresa fizica in nucleu.

4 U area

Fiecare proces are o zona u area proprie, totusi nucleul o acceseaza ca si cum numai o singura zona u area ar fi in sistem, aceea a procesului care ruleaza. Nucleul schimba harta de translatare a adreselor virtuale in functie de procesul care se executa pentru a accesa zona u area corespunzatoare. Cand compileaza sistemul de operare, incarcatorul atribuie variabilei u, numele zonei u area, o adresa virtuala. Valoarea adresei virtuale a zonei u area este cunoscuta si de alte parti ale nucleului, in particular, de modulul care face schimbarea de context (sectiunea 7.4.3). Nucleul cunoaste unde in tabelele de gestiune a memoriei este facuta translaterea adresei virtuale pentru zona u area, si el poate schimba dinamic adresa mapata a zonei u area cu alta adresa fizica. Doua adrese fizice reprezinta zonele u area a doua procese, dar nucleul le acceseaza prin aceeasi adresa virtuala.

Figura 7.7 Harta de memorie a zonei u area din nucleu

Procesul poate accesa zona sa u area sa cand se executa in modul nucleu dar nu atunci cand se executa in modul utilizator. Pentru ca nucleul poate accesa doar o zona u area la un moment dat de timp prin adresa sa virtuala, u area defineste partial contextul procesului ce ruleaza in sistem. Cand nucleul planifica un proces pentru executie, el gaseste zona u area corespunzatoare in memorie si o face accesibila prin intermediul adresei sale virtuale.

De exemplu, sa presupunem ca zona u area are 4K si se afla in nucleu la adresa virtuala 2M. Figura 7.7 prezinta un exemplu de organizare a memoriei, unde primele doua triplete de registri refera zonele de text si de date ale nucleului (adresele si pointerii nu sunt aratate), si al treilea triplet refera zona u area pentru procesul D.

Daca nucleul doreste sa acceseze zona u area a procesului A, el copiaza informatia corespunzatoare din tabela de pagina pentru zona u area in al treilea registru triplu. In orice moment, al treilea registru triplu al nucleului refera zona u area a procesului care ruleaza in mod curent, dar nucleul poate referi zona u area a altui proces suprascriind intrarile pentru adresa zona u area din tabela de pagini cu noua adresa. Intrarile registrilor tripli 1 si 2 nu pot fi schimbate, deoarece toate procesele partajeaza zonele de text si de date ale nucleului.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1199
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved