miercuri, 7 septembrie 2011

CURS 3 SO.Probleme de baza ale SO: memoria virtuala

Prin spatiul de adrese fizice al unui calculator se întelege memoria hardware existenta (RAM).
Prin spatiul de adrese virtuale se întelege spatiul la care calculatorul poate face referire (care depinde de numarul de linii din magistrala de adrese a procesorului).
Exemplu: un procesor cu 36 de linii în magistrala de adrese poate adresa 236octeti = 64 GB de memorie (spatiu de memorie virtuala), dar sistemul are (uzual) între 256 MB si 2 GB de memorie (spatiul de memorie fizica).
Conceptul de memorie virtuala este folosit pentru a permite rularea unor programe care necesita o capacitate de memorie mai mare decât cea fizica. Altfel spus, calculatorul „da impresia” ca are mai multa memorie decât are în realitate. În acest scop este necesar ca pe hard disc sa fie suficient spatiu pentru a memora întreg spatiul de adrese virtuale.
Atât spatiul de adrese fizice cât si cel al adreselor virtuale este împartit în pagini, de aceeasi marime.
Astfel, când în memoria RAM nu încape toata informatia aferenta unui program, pentru a face loc, sistemul de operare scrie o parte a datelor din RAM mai putin utilizate în ultimul timp, într-un un fisier ascuns de pe hard disc (swap file, fisier de schimb sau de paginare; la Windows, fisierul pagefile.sys La Linux partitia separata swap). În spatiul liber astfel creat în memoria RAM se încarca cantitatea de informatie care initial nu încapea. Când are din nou nevoie de datele pe care le-a scris anterior în fisier, sistemul de operare le reîncarca în memoria RAM si pune, daca este nevoie, alte date pe hard disc. Blocurile care compun fisierul de paginare sunt paginile.
În particular, când un program face apel la adrese care depasesc spatiul adreselor fizice (adresele respective fiind situate în spatiul adreselor virtuale) se ajunge la situatia numita defect de pagina. Sistemul de operare încarca pagina de pe hard disc care contine acea adresa, eliminând o pagina (de exemplu, pagina cea mai putin folosita în ultimul timp) din memoria fizica (o scrie în fisierul de paginare). Acest algoritm lucreaza de obicei bine, dar în anumite situatii poate da gres, asa cum se va vedea în exemplul prezentat în continuare:
 Un program contine 9 pagini virtuale (numeroate de la 0 la 8) si trebuie rulat pe un calculator care are loc doar pentru 8 pagini în memoria fizica. Programul contine o bucla mare: în pagina 8 exista o instructiune care necesita un salt în pagina 0. Continutul memoriei din momentul initial este prezentat în prima coloana, a), din tabelul de mai jos. Dupa parcurgerea ultimelor instructiuni din Pagina 7, trebuie accesata Pagina 8, aflata pe hard disc. În acest scop, se salveaza în fisierul de paginare pagina cea mai putin folosita în ultimul timp, adica Pagina 0, iar în locul ei se aduce Pagina 8, asa cum se observa în a doua coloana, b), a tablelului.
Parcurgerea paginii 8 va avea ca efect executia instructiunii de salt, care necesita Pagina 0. Ca urmare, aceasta va fi încarcata în memorie din fisierul de paginare, în locul Paginii 1, cea mai putin folosita în ultimul timp, obtinându-se situatia din a treia coloana, c) din tabel. Dupa parcurgerea Paginii 0, programul va avea nevoie sa acceseze Pagina 1, care tocmai a fost salvata în fisierul de paginare. De aici înainte, de fiecare data când este trebuie sa se treaca la pagina urmatoare, aceasta trebuie încarcata din hard disc, ceea ce micsoreaza viteza de lucru, confirmând ca în acest caz, algoritmul de eliminare a paginilor nu functioneaza corespunzator.
Actiunile corespunzatoare memoriei virtuale se fac fara ca utilizatorul sa stie. Având în vedere ca hard discul este mai lent, performantele calculatorului scad în momentul utilizarii memoriei virtuale.

Exemplu pentru Windows XP.
În Windows XP se pot stabili caracteristici referitoare la memoria virtuala (Control Panel/ System/ Advanced/ Settings/ Advanced): unitatea de disc pe care se realizeaza fisierul de paginare, marimea initiala a fisierului de paginare, marimea maxima a aceluiasi fisier . De asemenea, Windows prezinta valoarea minim permisa, valoarea recomandata (1,5 x memoria RAM), respectiv valoarea actuala pentru marimea fisierului de paginare. Se recomanda ca valoarea initiala sa nu fie mai mica decât valoarea ceruta de Windows.
Pentru cresterea performantelor la utilizarea memoriei virtuale se recomanda:
-crearea unui fisier de paginare pe fiecare disc;
-marirea dimensiunii fisierului de paginare;
-dimensiunea initiala sa fie egala cu cea maxima

Miniaplicatia din Control Panel/Administative Tools/Performance , indica numarul de pagini de memorie pe secunda care trebuie mutate de Windows între memorie si hard-disc, o mare parte din acestea reprezentând-o datele comutate între memorie si fisierul de paginare. În diagrama respectiva se poate observa variatia numarului de pagini (cu galben), care are un maxim de aproape 100, vizibil la circa 2/3 din intervalul de timp (1 min. 40 sec.) prezentat. Se observa de asemenea valorile numerice de 4,356 pentru valoarea medie (Average), respectiv, 96,003 pentru valoarea maxima (Maximum).
Aplicatie
În continuare se descrie un experiment care evidentiaza existenta memoriei virtuale. În acest scop se încarca de mai multe ori, succesiv, programul MATLAB.
Se urmaresc: fereastra Performance din Windows Task Manager (disponibila prin Ctrl+Alt+Del),si fereastra corespunzatoare configurarii fisierului de paginare memoria virtuala . În prima fereastra se urmaresc parametrii:PF(PageFile) Usage, care reprezinta memoria totala folosita de sistemul de operare
(suma dintre cantitatea de informatie existenta în memoria RAM si cantitatea de informatie existenta în fisierul de paginare)
Limit (arata valoarea maxima de memorie care poate fi folosita), este suma dintremarimea memoriei fizice si marimea fisierului de paginare, disponibila prin valoarea dincâmpul Currently allocated Physical Memory (meoria RAM existenta fizic).
În a doua fereastra se urmareste valoarea parametrului Currently allocated (se
precizeaza ca  fereastra corespunzatoare configurarii fisierului de paginare-memoria virtuala a fost captata de pe un alt calculator, încât valorile existente nu corespund cu aplicatia descrisa).
Tabelul urmator prezinta valorile acestor parametrii în functie de numarul de încarcari ale
programului MATLAB.
Din tabel se pot observa urmatoarele:
-la un moment dat (încarcarea 3 a MATLAB-ului) marimea memoriei totale folosite (PF Usage) o depaseste pe cea fizica (Physical Memory);
-când marimea memoriei totale folosite se apropie de valoarea Limit (începând cu a 9- a încarcare a MATLAB-ului), sistemul de operare mareste continuu marimea fisierului de paginare alocat (Currently allocated).
De retinut ca marirea necesarului de memorie RAM poate fi facuta si prin declararea în MATLAB a unor variabile de tip matrice cu un numar mare de linii si coloane, în acest fel nemaifiind necesara încarcarea de un asa mare numar de ori a MATLAB-ului.
Exemplu: daca se defineste o variabila cu 1000 de linii si 10000 de coloane, memoria alocata va fi de 1000×10000×8 B = 8×107 B = 8×107 /(1024×1024) MB = 76,3 MB (pentru fiecare element al matricei se aloca 64 biti sau 8 B).