Împingând limitele de ferestre paginat și nepaginate Pool

De data asta am de gând să ne spună despre cele două resurse fundamentale nucleu, paginate (din limba engleză. paginat) și piscinele nepaginată (din limba engleză. nepaginate), care se bazează pe primele două resurse și care au un impact direct asupra multor alte restricții asupra resurselor sistemului, inclusiv numărul maxim de procese, sincronizarea obiectelor și descriptori.

De exemplu, în cazul în care aplicația necesită un tampon de 512 octeți pentru stocarea datelor, managerul heap ia una din zonele pe care le poate aloca, și constată că primele 512 octeți sunt folosite, revenind un pointer la locația de memorie și pune memoria rămasă în lista pe care el folosit pentru a stoca informații despre zonele libere ale haldei.


piscina nepaginate
Kernel-ul și driverele de dispozitive folosesc piscina nepaginate pentru a stoca date care pot fi accesate în cazul în care sistemul nu poate gestiona erori de pagini. Partea de bază într-un astfel de mod atunci când efectuează procedura de manipulare întrerupere (ISR) și apelurile de proceduri amânate (DPC), care este în esență o funcție asociată cu întreruperi hardware. erori de pagini și inadmisibilă în cazul în care conducătorul auto nucleu sau dispozitiv solicită un sistem de blocare de spin. Acesta este singurul tip de blocare, care pot fi utilizate pentru ISR și DPC și ar trebui să fie utilizate pentru a proteja structurile de date care sunt numite de la ISR sau alte DPC și ISR ​​sau DPC, sau de la codul care rulează în fire de kernel. Nerespectarea Driver de a adera la aceste reguli se încheie codul de eroare cele mai frecvente: IRQL_NOT_LESS_OR_EQUAL.

Prin urmare, nepaginata este întotdeauna în memoria fizică și memoria virtuală este nepaginata atribuită memoriei fizice. Structuri de date generale de sistem sunt stocate în piscina nepaginate, inclusiv kernel-ul și obiectele care reprezintă procese și fire, obiecte de sincronizare, cum ar fi mutex, semafoarele sau evenimente referințe la fișiere care sunt reprezentate ca un obiect de fișier și pachete cererea I / O (IRP) , reprezentată ca o operație I / o.


piscină Paged
piscina Paged, pe de altă parte, derivă numele de la faptul că Windows poate scrie date pe care le stochează în fișierul de swap, permițând astfel utilizarea de memorie fizică, care, în acest caz, este eliberat în alte scopuri. Așa cum este cazul cu modul de utilizator de memorie virtuală, în cazul în care conducătorul auto sau sistemul se referă la piscina de memorie paginată, care se află în fișierul paginii, și controler de memorie citește datele înapoi în memoria fizică. Cel mai mare consumator de piscină Paged, cel puțin în Windows Vista și mai târziu sisteme, de obicei, registru de sistem ca o referință la cheile de registry, precum și alte structuri de date stocate în piscina paginată de operare. Structurile de date sunt reprezentate ca afișate în memoria de fișiere, numite secțiuni, sunt stocate, de asemenea, în piscina paginate.

drivere de dispozitiv pentru a aloca paginat și nepaginată utilizare piscina API ExAllocatePoolWithTag. determinarea tipului de pool ca unul dintre parametrii. Un alt parametru este o etichetă de 3 octeți care conducătorii auto sunt folosite pentru a identifica în mod unic memoria alocat acestora; Această opțiune poate fi utilă pentru identificarea conducătorilor auto-cheie, care nu sunt în piscină (așa cum voi explica mai jos).

Există trei contoare, afișează informații despre utilizarea piscinei:

  • octeți de rezervă nepaginate;
  • bytes dischargeable Poole (mărimea virtual pool paginat);
  • Pool paginată bytes rezident.


Cu toate acestea, nu există nici un contor de performanță (contoare de performanță), care indică dimensiunea maximă a acestor bazine. Astfel de date pot fi obținute folosind comanda depanatorul kernel! Vm, ci de a utiliza un depanator nucleu la modul de depanare locale în Windows Vista și versiunile ulterioare ale sistemului, trebuie să porniți sistemul în modul de depanare în care redarea MPEG2 este dezactivată.

Împingând limitele de ferestre paginat și nepaginate Pool

După ce configurați simbolurile, Informații sistem deschis (click pe secțiunea System Information din meniul View, sau apăsați Ctrl + I), și a vedea informații despre piscina în secțiunea de memorie Kernel din caseta de dialog. Iată cum arată pe Windows XP cu 2GB de memorie:


32-biți x Windows XP cu 2 GB de RAM


64-biți x Windows XP cu 2 GB de RAM


32-biți x Windows XP cu 2 GB de RAM

Și, în sfârșit, aici este restricția pentru un sistem cu 64 de biți pentru Windows 7 cu 8 GB de memorie:

Aici este un tabel rezumat al restricțiilor privind dimensiunea nepaginata pentru diferite versiuni de Windows:


32-biți x Windows XP cu 2 GB de RAM


64-x biți pentru Windows 7 cu 8 GB de RAM

Aici este un tabel rezumat al restricțiilor privind dimensiunea piscina paginată pentru diferite sisteme de operare:


Testarea restricții privind dimensiunea pool-ului
Deoarece punerea în comun nucleu utilizat în aproape fiecare nucleu operație, epuizarea completă poate duce la rezultate imprevizibile. Dacă doriți să pe propria lor experiență pentru a vedea modul în care sistemul se comportă în cazul utilizării grele de piscină, utilizați un Notmyfault utilitar. Ea are caracteristici care vă permit să deturneze o anumită sumă de utilizator de biliard paginată sau nepaginată. Aveți posibilitatea să modificați dimensiunea la voință, și după închiderea Notmyfault tot ocupat această memorie de utilitate este eliberat:

Împingând limitele de ferestre paginat și nepaginate Pool

Nu este necesar pentru a rula această aplicație pe sistemul dumneavoastră dacă nu sunteți gata pentru o posibilă pierdere a datelor, deoarece după piscina spațiu liber este terminat, operația I / O aplicație și se va termina cu o eroare. Puteți obține chiar și ecranul albastru de deces (BSOD), în cazul în care orice conducător auto care nu este capabil să proceseze corect starea descărcării de memorie (care este un driver de eroare). Hardware Windows de laborator de calitate (WHQL) testează driverele folosind Driver Verifier - un utilitar construit în Windows - pentru a vă asigura că acestea se pot ocupa de evacuarea din piscina fara erori, dar este posibil să fi instalat drivere terțe care nu sunt fie trecut de această testare sau au erori care nu au fost detectate în timpul testelor WHQL.

Am fugit Notmyfault pe platourile de filmare de sisteme de testare pe mașini virtuale pentru a vedea cum se comportă și în cazul în care îndeplinesc cu orice erori de sistem. După nepaginata pe un sistem cu 64 de biți pentru Windows XP au fost epuizate, o încercare de a rula linia de comandă completează caseta de dialog:

Împingând limitele de ferestre paginat și nepaginate Pool

Pe unul dintre sistemele de testare am văzut un mesaj de eroare, care a fost subliniat faptul că, probabil, datele au fost pierdute. Din fericire, nu vei vedea niciodată un astfel de dialog pe sistemul real!

Aceeași eroare a apărut în cazul epuizării pool paginată. Aici sunt rezultatele încercărilor de a lansa Notepad din linia de comandă pe un sistem cu 32 de biți Windows XP, după piscină Paged a fost epuizată. Rețineți că Windows nu ar putea începe redesenarea titlul ferestrei, și să emită diverse bug-uri cu fiecare nouă încercare de a rula aplicația:

Împingând limitele de ferestre paginat și nepaginate Pool

Motivul pentru care Windows nu închide după ce piscina a fost epuizată, chiar dacă sistemul rupt este că această situație poate fi temporară, care a apărut ca urmare a vârfului volumului de lucru, după care piscina va fi eliberat, iar sistemul va reveni la funcționarea normală. Cu toate acestea, în cazul în care piscina golește driver-ul (sau miez), motivul pentru care o astfel de scurgere devine critică. În acest caz, un rol important este jucat de tag-uri piscina așa cum este descris mai devreme în acest articol.


Urmărirea scurgerilor pool
Dacă suspectați prezența unei scurgeri de piscină, iar sistemul poate rula în continuare aplicații, Poolmon - instrument al unui set de Windows Driver Kit - vă va arăta un număr de zone selectate și numărul de octeți neocupate în aceste zone, separate printr-un tip de piscină, precum și cererile de etichete ExAllocatePoolWithTag. Diferite combinații de taste permit Poolmon sortarea conținutului în diferite coloane; pentru a găsi zonele de memorie alocate este o scurgere, apăsați „b“ pentru a sorta bytes, sau „d“ pentru sortarea prin diferența dintre numărul de segmente de memorie alocate și gratuite. Aici este o imagine care arată de lucru Poolmon asupra sistemului în cazul în care, prin intermediul Notmyfault a fost scurs 14 secțiuni de bazin de memorie, fiecare de aproximativ 100MB:

Împingând limitele de ferestre paginat și nepaginate Pool

Odată ce ați găsit eticheta dorită în coloana din stânga (în acest caz, „scurgere“), următorul pas este de a găsi un driver care utilizează această etichetă. Din moment ce aceste tag-uri sunt stocate în driverul, puteți scana imaginea prezenței etichetei luate în considerare. utilitate String din Sysinternals reține linia necesară în fișierul pe care o specificați (linia implicită dorită trebuie să fie de cel puțin 3 caractere, și, ca cele mai multe imagini de conducători auto găsit în directorul% SystemRoot% # 92; System32 # 92, drivere, aveți posibilitatea să deschideți prompt de comandă, schimbați directorul curent la specificat și rulați comanda „siruri de caractere * | findstr „Odată ce ați găsit o potrivire, puteți obține informații despre versiunea driverului folosind instrumente Sigcheck Sysinternals Aici este procesul de căutare conducătorului auto, folosind eticheta.“ Scurgere „:

Împingând limitele de ferestre paginat și nepaginate Pool

Dacă a existat o defecțiune a sistemului și bănuiți că este vina epuizarea piscina, dump dosar de încărcare în depanator Windbg acest eșec, care este inclus în Debugging Tools pentru pachetul Windows, și asigurați-vă că, cu ajutorul echipei! Vm. Acesta este rezultatul de a rula această comandă pe un sistem în care Notmyfault piscina nepaginate epuizat:

Împingând limitele de ferestre paginat și nepaginate Pool

Împingând limitele de ferestre paginat și nepaginate Pool

Utilizați instrumentul Corzi pentru a căuta informații despre driverul haldei, utilizați tag-ul pe care este definit ca fiind cauza scurgerii.

În acest moment, în această serie, ți-am spus despre limitările cele mai fundamentale ale Windows, inclusiv de memorie fizică, de memorie virtuală, paginate și bazine nepaginată. Data viitoare voi vorbi despre restricțiile privind numărul de procese și fire acceptate de Windows, care se bazează pe aceste constrângeri ale sistemului de bază.