Realizarea managementului memoriei - stadopedia

1. Pagina la care a fost făcut apel nu este fixă.

2. A existat o încălcare a protecției.

3. Scrieți la pagina partajată.

4. Stack-ul necesită memorie suplimentară.







5. Pagina la care a fost adresată cererea este fixă, dar în prezent nu este încărcată în memorie.

Înlocuirea paginilor are loc după cum urmează. Sistemul încearcă să mențină un anumit număr de pagini gratuite în memorie, astfel încât atunci când apare o pauză de pagină, o pagină gratuită să poată fi găsită imediat, fără a fi nevoie să scrieți mai întâi alte câteva pagini pe disc. Ca urmare a acestei strategii, cele mai satisface erori de pagini, utilizați numai o singură operațiune de disc (de la pagina disc citire), dar uneori trebuie să efectuați două operații (scrie pe disc pagina „murdar“, atunci pagina dorită este citit de pe disc). Desigur, paginile care se adaugă la lista de pagini gratuite ar trebui să vină de undeva. Prin urmare, lucrarea reală a algoritmului de înlocuire a paginii se caracterizează prin modul în care aceste pagini sunt preluate din procese și plasate pe lista paginilor libere.

În sistemul de swap, conceptul de set de lucru este utilizat în mod activ. Fiecare proces (nu fiecare fir) are un set de lucru. Acest set este format din paginile afișate care sunt în memorie, atunci când accesează-le, deci nu există întreruperi ale paginilor. Mărimea și compoziția setului de lucru, desigur, se schimbă pe măsura procesului. Setul de lucru al fiecărui proces este descris de doi parametri: dimensiunile minime și maxime. Aceste dimensiuni nu sunt limite rigide. Un proces poate avea mai puține pagini în memorie decât limita inferioară sau (în anumite circumstanțe) mai mult decât maximul specificat. La început, aceste limite sunt aceleași pentru fiecare proces, dar ele se pot schimba cu timpul. Valoarea minimă inițială implicită este cuprinsă între 20 și 50 de pagini, iar valoarea maximă inițială este cuprinsă între 45 și 345 de pagini, în funcție de suma totală a memoriei RAM. Valorile implicite pot fi modificate de administratorul de sistem.

O dată pe secundă, daemonul selectat de kernel selectat, numit manager al setului de sold. verifică dacă sistemul are pagini libere. Dacă există mai puține pagini gratuite decât este necesar, acesta rulează managerul spațiului de lucru. care examinează seturile de lucru și eliberează pagini suplimentare. Managerul setului de lucru determină mai întâi ordinea în care doriți să examinați procesele. În primul rând, paginile sunt luate de la procese mari care au fost inactive pentru o lungă perioadă de timp. În cele din urmă, este luat în considerare procesul primordial. Apoi, managerul setului de lucrări începe să cerceteze procesele în ordinea selectată. Dacă setul de lucru al procesului este în prezent mai mic decât limita sa inferioară sau de la ultima inspecție, numărul de întreruperi la nivel de pagină în acest proces a fost mai mare decât un anumit nivel, atunci paginile nu sunt îndepărtate de la acesta. În caz contrar, managerul setului de lucru ia una sau mai multe pagini din proces. Numărul de pagini preluate din proces destul de complex depinde de cantitatea totală de memorie RAM, precum și de numărul de memorie necesar pentru procesele curente și de modul în care dimensiunea setului de lucru curent se corelează cu limitele superioare și inferioare și în plus față de alți parametri. Toate paginile sunt considerate la rândul lor.

Pe un aparat uniprocesor, dacă bitul de acces al paginii este șters, contorul asociat paginii este incrementat cu unul. Dacă acest bit este setat la unu, contorul este resetat. După scanare, paginile cu cele mai mari valori ale contorului sunt șterse din setul de lucru. Procesul continuă să exploreze procesele până la eliberarea suficientelor pagini, după care se oprește. Dacă o căutare completă a tuturor proceselor nu are ca rezultat eliberarea unui număr suficient de pagini, managerul setului de lucrări pornește a doua trecere, unde deja ia pagini din procese unde dimensiunea setului de lucru este mai mică decât minimul.







Pe mașina multiprocesor, algoritmul bazat pe verificarea biților de verificare nu mai funcționează, deoarece, deși actualul CPU nu a accesat recent această pagină, alte CPU-uri ar fi putut accesa-o. Studiul biților apelurilor tuturor procesatorilor centrali este prea scump. Prin urmare, bitul de acces nu este luat în considerare deloc, iar cele mai vechi pagini sunt șterse.

Trebuie remarcat faptul că, din punctul de vedere al procedurii de înlocuire a paginilor, sistemul de operare în sine este tratat ca un proces. Ea deține paginile și are și un set de lucru. Acest set de lucru poate fi, de asemenea, redus. Cu toate acestea, unele părți ale sistemului și piscina non-paginată sunt fixate în memorie și nu pot fi descărcate în nici un caz.

Fiecare pagină de memorie este în unul sau mai multe seturi de lucru sau într-una din cele cinci liste. Lista paginilor "curate" (redundant) și "murdare" (modificate) afișează paginile care au fost recent eliminate din seturile de lucru, dar sunt încă în memorie și sunt încă asociate cu procesele care le-au folosit. Diferența dintre acestea este că paginile curate au o copie pe disc, în timp ce paginile modificate nu au astfel de copii și aceste pagini trebuie salvate încă. Lista paginilor gratuite include pagini curate care nu mai sunt asociate cu nici un proces. Lista paginilor zonate include pagini care nu sunt asociate cu niciun proces și care sunt umplute cu zerouri. Cea de-a cincea listă constă în pagini de memorie cu defecte fizice. Acest lucru asigură că aceste pagini nu sunt folosite pentru nimic.

Paginile se deplasează între seturi de lucru și liste diferite de managerul setului de lucru și de alți daemoni ai firelor de kernel. Să ne gândim la aceste tranziții. Când managerul de lucrări șterge pagina din setul de lucru, pagina se înscrie în partea de jos a listei paginilor curate sau în lista paginilor modificate, în funcție de starea lor. Ambele liste au pagini valide, deci dacă apare o pauză de pagină și una dintre aceste pagini este necesară, ea este eliminată din listă și returnată setului său de lucru fără o operație de I / O pe disc. Când procesul își încheie activitatea, toate paginile sale care nu sunt utilizate de alte procese se înscriu în lista de pagini gratuite. Aceste pagini nu mai sunt asociate cu niciun proces și nu pot fi returnate la seturi de lucru prin ruperea paginii. Alte tranziții sunt cauzate de alți demoni. Odată la fiecare 4 secunde, un flux swap este pornit în căutarea procesului, toate firele fiind inactive pentru o anumită perioadă de timp. Dacă poate găsi astfel de procese, el detașează stivele acestor procese și trece paginile de proces către listele de pagini "curate" și "murdare".

Alți doi demoni, un demon pentru afișarea paginilor afișate și un demon pentru scrierea paginilor modificate. sunt activate din când în când pentru a verifica dacă există suficiente pagini curate. Dacă numărul paginilor goale este sub un anumit nivel, aceștia ia paginile din partea de sus a listei de pagini modificate, le scriu pe disc și apoi le pun în lista paginilor "curate". Primul daemon scrie fișierelor afișate, iar al doilea scrie paginile fișierelor swap. Ca urmare a activităților lor, paginile "murdare" devin "curate".

Motivul pentru care ai doi demoni care curăță paginile este că fișierul afișat în memorie poate să crească ca rezultat al scrierii către el. Această creștere va necesita noi blocuri de disc liber. Lipsa spațiului liber pentru scrierea paginilor poate duce la interconectare. Al doilea fir poate scoate situația din impas, scriind paginile într-un fișier swap care nu crește niciodată în dimensiune.

Dacă procesul eliberează pagina, această pagină nu mai este asociată cu procesul și poate fi plasată pe lista paginilor libere, dacă nu este distribuită altor procese. Când o pauză de pagină necesită un bloc de pagină pentru a plasa o pagină în ea care trebuie citită, acest bloc este luat din lista paginilor libere ori de câte ori este posibil. Nu contează că această pagină poate conține în continuare informații confidențiale, deoarece toate acestea vor fi imediat suprascrise. Când stack-ul crește, situația este diferită. În acest caz, este necesar un bloc de pagină gol, iar regulile de securitate necesită ca pagina să conțină toate zerouri. Din acest motiv, un alt daemon kernel - zero, pagini de flux - operează cu o prioritate minimă, ștergerea conținutului paginilor de pe lista liberă și punerea lor pe lista de pagini aduce la zero. Când CPU-ul este inactiv și există pagini pe lista paginilor libere, firul de zero de pagină poate fi zero, deoarece pagina null este mai utilă decât o pagină gratuită.

Deci, managementul memoriei este un subsistem foarte complex, cu o mulțime de structuri de date, algoritmi și metode euristice. În multe privințe, ea se autoreglează, însă are și multe mecanisme pe care un administrator de sistem le poate utiliza pentru a influența performanța sistemului. Trebuie subliniat faptul că gestionarea memoriei în sistemele reale este mult mai complicată decât un algoritm de swap simplu, cum ar fi un algoritm de ceas sau un algoritm de îmbătrânire.







Articole similare

Trimiteți-le prietenilor: