CATEGORII DOCUMENTE |
Procesul page stealer - UNIX
Procesul page stealer este un proces al nucleului care evacueaza din memorie paginile care nu fac parte mult timp din setul de lucru al unui proces. Nucleul creeaza procesul page stealer pe timpul initializarii sistemului si-l apeleaza pe toata durata de viata a sistemului, la nevoie. El examineaza fiecare regiune activa, care nu este blocata, lasand regiunile blocate in expectativa pentru a le examina la urmatoarea parcurgere a listei de regiuni, si incrementeaza apoi campul varsta al tuturor paginilor valide.
Nucleul blocheaza o regiune cand un proces produce o intrerupere pentru o pagina din regiune, astfel incat procesul page stealer nu poate evacua pagina care a generat intreruperea.
Pentru o pagina din memorie exista doua stari: pagina a fost incarcata recent si nu este inca eligibila pentru swapping, sau pagina este eligibila pentru swapping si este disponibila pentru reasigurarea la alte pagini virtuale. Prima stare arata ca un proces a referit recent pagina, ea fiind deci in setul sau de lucru. Unele masini seteaza bitul referinta cand acceseaza o pagina, insa metodele software pot suplini lipsa acestei facilitati daca hardware-ul nu dispune de ea. Procesul page stealer pune pe 0 bitul referinta al paginilor referite si retine cate examinari au fost facute de la ultima referire a paginii. Deci prima stare consta in cateva substari corespunzatoare numarului de examinari pe care le face procesul page stealer pana cand pagina devine eligibila pentru evacuare (Figura 12.7). Cand acest numar depaseste o valoare de prag, nucleul trece pagina in cea de-a doua stare, gata pentru evacuare. Perioada maxima care poate trece pana cand pagina devine eligibila pentru evacuare este dependenta de implementare, si este limitata de numarul de biti disponibili in intrarea din tabela de pagini.
Figura 12.7 Diagrama starilor in functie de timpul de rezidenta
al paginilor
Figura 12.8 prezinta interactiunea dintre procesele care acceseaza o pagina de catre procese si examinarile facute de procesul page stealer. Se pleaca de la pagina incarcata in memorie, figura ilustrand numarul de examinari ale procesului page stealer intre referirile la memorie. Un proces a referit pagina dupa a doua examinare, scazand astfel varsta aceteia la 0. In mod similar, un proces a referit din nou pagina dupa inca o examinare. In sfarsit, procesul page stealer examineaza pagina de trei ori fara sa intervina vreo referire si evacueaza pagina.
Figura 12.8 Exemplu de imbatranire a unei pagini
Daca doua sau mai multe procese folosesc in comun o regiune, ele actualizeaza bitii referinta ai aceluiasi set de intrari din tabela de pagini. In acest fel, paginile pot fi parti ale seturilor de lucru ale mai multor procese, dar acest fapt nu are importanta pentru procesul page stealer. Daca o pagina face parte din setul de lucru al unui proces, ea ramane in memorie; astfel pagina este eligebila pentru evacuare. Nu are importanta daca o regiune are mai multe pagini in memorie decat alta; procesul page stealer nu incearca sa evacueze un numar egal de pagina din toate regiunile active.
Nucleul trezeste procesul page stealer atunci cand memoria libera disponibila in sistem ajunge la un nivel minim, iar acesta evacueaza pagini pana cand memoria libera disponibila in sistem ajunge la un nivel maxim. Valorile nivelelor descrise mai sus pot fi configurate de administrator in vederea cresterii performantelor sistemului.
Cand procesul page stealer decide sa evacueze o pagina, acesta verifica daca exista o copie a paginii pe dispozitivul de swap. Exista trei posibilitati:
Daca nu exista o copie a paginii pe dispozitivul de swap, nucleul planifica pagina pentru evacuare: procesul page stealer pune pagina intr-o lista a paginilor care trebuiesc evacuate si continua; din punct de vedere logic, evacuarea este terminata. Cand lista atinge o limita (dependenta de posibilitatile controlerului de disc), nucleul scrie paginile pe dispozitivul de swap.
Daca exista deja o copie a paginii pe dispozitivul de swap si nici un proces nu i-a modificat continutul in memorie (in intrarea din tabela de pagina bitul modificare este sters), nucleul sterge bitul validare al intrarii din tabela de pagini, decrementeaza contorul de referinte al intrarii din tabela pfdata si pune intrarea intr-o lista de intrari libere in vederea unei alocari viitoare.
Daca exista o copie a paginii pe dispozitivul de swap, dar un proces a modificat continutul paginii in memorie, nucleul planifica pagina pentru a fi evacuata, ca mai sus, si elibereaza spatiul pe care pagina il ocupa pe dispozitivul de swap.
Procesul page stealer copiaza pagina pe dispozitivul de swap in cazurile 1 si 3. Pentru a ilustra diferentele dintre ultimele doua cazuri, sa presupunem ca o pagina este pe dispozitivul de swap si este incarcata in memoria principala dupa ce un proces genereaza o intrerupere de validitate. Sa presupunem ca nucleul nu sterge automat copia de pe disc. Eventual, procesul page stealer decide sa evacueze din nou pagina.
Daca nici un proces nu a scris in pagina de cand aceasta a fost incarcata, copia din memorie este identica cu cea de pe disc si nu este necesar ca pagina sa fie scrisa din nou pe dispozitivul de swap. Daca totusi un proces a scris in pagina, copia din memorie difera de cea de pe disc, astfel ca nucleul trebuie sa scrie pagina pe dispozitivul de swap, dupa ce in prealabil elibereaza spatiul ocupat de pagina pe dispozitivul de swap.
Procesul page stealer completeaza o lista cu pagini de evacuat, posibil din regiuni diferite, si apoi, cand lista este plina, le evacueaza pe dispozitivul de swap. Nu toate paginile unui proces trebuie sa fie evacuate: de exemplu, unele pagini s-ar putea sa nu fi stat suficient timp incarcate. Aceasta difera functie de politica procesului de evacuare/incarcare, care evacueaza din memorie fiecare pagina a procesului, dar metoda de scriere a datelor pe dispozitivul de swap este identica cu cea descrisa pentru sistemele cu swapping. Daca nici un dispozitiv de swap nu contine suficient spatiu contiguu, nucleul evacueaza cate o pagina, consumand astfel mai mult timp. Exista o mai mare fragmentare a spatiului pe un dispozitiv de swap in cazul unei scheme de evacuare prin paginare la cerere decat in cazul swapping-ului deoarece nucleul evacueaza blocuri de pagini dar incarca numai cate o pagina.
Cand nucleul scrie o pagina pe dispozitivul de swap, el pune pe zero bitul validare din intrarea in tabela de pagini si decrementeaza contorul de utilizare al intrarii din tabela pfdata. Daca contorul ajunge la zero, pune intrarea din tabela pfdata la sfarsitul listei inlantuite de intrari libere in vederea reasignarii ei. Daca contorul nu este zero, atunci cateva procese folosesc in comun pagina ca rezultat al unui apel sistem fork anterior, dar nucleul evacueaza totusi pagina.
In sfarsit, nucleul aloca spatiu pentru evacuare, salveaza adresa de evacuare in descriptorul de bloc disc si incrementeaza contorul tabelei de folosire a dispozitivului de swap pentru pagina respectiva. Daca un proces produce o intrerupere de pagina in timp ce pagina este in lista paginilor libere, nucleul poate totusi recupera pagina din memorie in loc sa o recupereze de pe dispozitivul de swap.
De exemplu, sa presupunem ca procesul page stealer evacueaza 30, 40, 50 si 20 de pagini din procesele A, B, C si respectiv D, si ca scrie 64 de pagini pe dispozitivul de swap intr-o operatie de scriere pe disc. Figura 12.9 prezinta secventa operatiilor de evacuare a paginilor care ar aparea daca programul page stealer ar examina paginile proceselor in ordinea A,B,C si D. Procesul page stealer aloca spatiu pentru 64 de pagini pe dispozitivul de swap si evacueaza 30 de pagini ale procesului A si 34 de pagini ale procesului B. Aloca apoi spatiu pe dispozitivul de swap pentru alte 64 de pagini si evacueaza cele 6 pagini ramase de la procesul B, 50 de pagini ale procesului C si 8 pagini ale procesului D. Cele doua zone de pe dispozitivul de swap pentru cele doua operatii de evacuare nu trebuie sa fie contigue. Procesul page stealer pastreaza cele 12 pagini ramase ale procesului D intr-o lista a paginilor ce trebuiesc evacuate, dar nu le va evacua pana cand lista nu se umple.
Figura 12.9 Alocarea spatiului de evacuare intr-o schema de paginare
In concluzie, exista doua faze in evacuarea unei pagini din memorie. In prima faza, procesul page stealer gaseste pagina eligibila pentru evacuare si plaseaza numarul paginii in lista de pagini care trebuiesc evacuate. In cea de-a doua faza, nucleul copiaza pagina pe dispozitivul de swap, pune pe zero bitul validare in intrarea din tabela de pagini, decrementeaza contorul de referinte al intrarii din tabela pfdata si plaseaza aceasta intrare la sfarsitul listei de intrari libere daca contorul sau de referinte este zero. Continutul paginii libere este valid in memorie pana cand pagina este reasignata.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1062
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved