100 de erori de memorie fizică. Gestionarea erorilor de pagină lipsă. Memoria virtuală în Windows

Algoritmi preventivi/non-preemptivi.

În cazul unui algoritm preventiv, sistemul de operare poate întrerupe oricând execuția firului curent și poate comuta procesorul pe un alt thread. În algoritmii non-preemptive, firul de execuție care este dat procesorului decide doar când să transfere controlul către sistemul de operare.

Algoritmi cu cuantizare.

Fiecărui fir de execuție i se oferă o porțiune de timp în care firul de execuție se poate executa pe procesor. Când cuantumul expiră, sistemul de operare comută procesorul la următorul thread din coadă. Quantum este de obicei egal cu un număr întreg de intervale de temporizare de sistem 1.

Algoritmi cu prioritati.

Fiecărui fir de execuție i se atribuie o prioritate - un număr întreg care indică gradul de privilegiu al firului de execuție. Sistemul de operare, dacă există mai multe fire gata de rulare, selectează firul cu cea mai mare prioritate.

Windows implementează un algoritm de programare mixt - preventiv, bazat pe cuantizare și priorități.

  1. Tip multitasking pentru aplicația DOS
  2. Garanții de service
  3. Programarea proceselor din prim-plan
  4. Scopul fișierului de paginare
  5. Procesele P1, P2, P3 alocă 100, 20, 80 MB de memorie. Sistemul are 128 MB de RAM. Care este dimensiunea memoriei ocupate în fișierul de pagină. Care este dimensiunea fișierului de swap.
  1. Ce este o „defecțiune de pagină”?

Întreruperea 14 -Eroare de pagină (#PF): Intel386...

Generat dacă motorul de pagină este activat (CR0.PG = 1) și apare una dintre următoarele situații la traducerea unei adrese liniare într-una fizică:

  • element al tabelului de pagini sau al directorului de pagini utilizat în traducerea adreselor, are bit de prezență zero, adică tabelul sau pagina necesară nu este prezentă în memoria fizică;
  • procedura nu are nivel de privilegii, suficient pentru a accesa pagina selectată sau încearcă să scrie pe o pagină care este protejată la scriere pentru nivelul de privilegii curent.

Managerul de erori de pagină obține informații despre cauza acesteia din două surse: codul de eroare, care este împins în stivă, și conținutul registrului CR2, care conține adresa liniară care a provocat eroarea. Codul de eroare a paginii are un format special (Fig. 3.7.).

Un program întrerupt, după eliminarea motivelor care au cauzat eroarea paginii (de exemplu, încărcarea unei pagini în memoria fizică), poate fi continuat fără ajustări suplimentare.

Dacă o eroare a paginii a fost cauzată din cauza unei încălcări a privilegiilor de securitate a paginii, bitul de acces (A) din intrarea corespunzătoare din directorul paginii este setat. Comportamentul bitului de acces din elementul de tabel de pagină corespunzător pentru acest caz nu este reglementat de procesoarele Intel și poate diferi în diferite modele.

  1. O rată mare de eroare a paginii indică:

Nesiguranțe de program

Nefiabilitatea memoriei RAM

Altele: explicați

Coloana „Erori ale paginii lipsă din memorie/sec.”

În coloana „Erori ale paginii epuizate/sec.” (Hard Faults/sec) arată numărul mediu de erori de pagină din memorie pe secundă în ultimul minut. Dacă un proces încearcă să folosească mai multă memorie fizică decât este disponibilă în prezent, sistemul scrie unele dintre date de pe memorie pe disc - în fișierul de pagină. Accesul ulterior la datele salvate pe disc se numește o eroare de pagină din memorie.

Ce înseamnă erori de pagina din memorie?

Acum că aveți o idee despre ce informații sunt colectate în tabelul Procese, să vedem cum le puteți utiliza pentru a monitoriza alocarea memoriei. Când rulează aplicații și lucrează cu fișiere, managerul de memorie monitorizează dimensiunea setului de lucru a fiecărui proces și înregistrează cererile de resurse de memorie suplimentare. Pe măsură ce setul de lucru al unui proces crește, dispecerul potrivește aceste solicitări cu nevoile nucleului și ale altor procese. Dacă spațiul de adrese disponibil este insuficient, dispecerul reduce dimensiunea setului de lucru prin stocarea datelor de pe memorie pe disc.

Mai târziu, la citirea acestor date de pe disc, apare o eroare de pagina de memorie lipsită. Acest lucru este destul de normal, dar dacă apar erori simultan pentru diferite procese, sistemul necesită timp suplimentar pentru a citi datele de pe disc. Erorile de pagina prea frecvente din memorie reduc, respectiv, performanța sistemului. Probabil ați experimentat încetiniri neașteptate în toate aplicațiile, care apoi s-au oprit brusc. Această încetinire sa datorat aproape sigur redistribuirii active a datelor între memoria fizică și swap.

Concluzia urmează: dacă erorile de paginare din memorie pentru un anumit proces apar prea des și regulat, Computerul nu are suficientă memorie fizică.

Pentru a face mai convenabil monitorizarea proceselor care provoacă erori frecvente ale paginilor din memorie, le puteți marca cu steaguri. În acest caz, procesele selectate se vor muta în partea de sus a listei, iar în graficul erorilor de pagină lipsă vor fi reprezentate printr-o curbă portocalie.

Merită să rețineți că alocarea memoriei depinde de o serie de alți factori, iar monitorizarea erorilor de pagina-out-of-memory nu este cea mai bună sau singura modalitate de a identifica problemele. Cu toate acestea, poate servi ca un bun punct de plecare pentru observație.

  1. Cum se determină prioritatea firelor în Windows?

Priorități

Sistemul de operare Windows implementează programarea priorităților preventive, atunci când fiecărui fir i se atribuie o anumită valoare numerică - o prioritate, în conformitate cu care procesorul îi este alocat. Firele cu aceleași priorități sunt programate conform algoritmului Round Robin. Un avantaj important al sistemului este capacitatea de a preempționa firele care rulează în modul kernel - codul sistemului executiv este complet reintre. Numai firele care dețin un spinlock nu sunt preemptate (consultați „Sincronizarea firelor”). Prin urmare, spinlock-urile sunt folosite cu mare grijă și sunt setate pentru o perioadă minimă de timp.

Sistemul oferă 32 de niveluri de prioritate. Șaisprezece valori de prioritate (16-31) corespund grupului de prioritate în timp real, cincisprezece valori (1-15) sunt pentru fire normale și o valoare de 0 este rezervată pentru firul de zero a paginii de sistem (vezi Figura 6.2). ).

Orez. 6.2. Prioritățile firului

Pentru a scuti utilizatorul de nevoia de a-și aminti valorile numerice ale priorităților și de a putea modifica planificatorul, dezvoltatorii au introdus în sistem stratul de abstractizare prioritar. De exemplu, clasa de prioritate pentru toate firele de execuție ale unui anumit proces poate fi setată folosind un set de parametri constanți ai funcției SetPriorityClass, care poate avea următoarele valori:

  • timp real (REALTIME_PRIORITY_CLASS) - 24
  • ridicat (HIGH_PRIORITY_CLASS) - 13
  • peste normal (ABOVE_NORMAL_PRIORITY_CLASS) 10
  • normal (NORMAL_PRIORITY_CLASS) - 8
  • sub normal (BELOW_NORMAL_PRIORITY_CLASS) - 6
  • și inactiv (IDLE_PRIORITY_CLASS) 4

Prioritatea relativă a unui fir este setată de parametri similari ai funcției SetThreadPriority:

Un set de șase clase de prioritate de proces și șapte clase de prioritate de fir formează 42 de combinații posibile și ne permite să formăm așa-numita prioritate de bază a firului.

Prioritatea de bază implicită a unui proces și a unui fir primar este valoarea din mijlocul intervalelor de prioritate a procesului ( 24, 13, 10, 8, 6 sau 4). Modificarea priorității unui proces presupune modificarea priorităților tuturor firelor sale, în timp ce prioritățile lor relative rămân neschimbate.

Prioritățile de la 16 la 31 nu sunt cu adevărat priorități în timp real, deoarece suportul soft în timp real al Windows nu oferă nicio garanție cu privire la sincronizarea firelor. Acestea sunt pur și simplu priorități mai mari care sunt rezervate pentru firele de execuție de sistem și acele fire de execuție cărora li se acordă o astfel de prioritate de către un utilizator cu drepturi administrative. Cu toate acestea, prezența priorităților în timp real, precum și preemptibilitatea codului kernelului, localizarea paginilor de memorie (a se vedea „Funcționarea managerului de memorie”) și o serie de caracteristici suplimentare - toate acestea vă permit să rulați soft în timp real aplicații, de exemplu, multimedia, în mediul de operare Windows. Firul sistemului cu prioritate zero este ocupat cu ștergerea paginilor de memorie. Firele de utilizare obișnuite pot avea priorități de la 1 la 15.


Informații conexe.


Ați conectat un dispozitiv nou, dar funcționează lent sau vechiul dispozitiv nu mai funcționează sau nu funcționează corect. Ce să faci în aceste cazuri? Reinstalezi totul? Este supărător și nu este întotdeauna necesar. Cum să afli care este motivul și cum să-l elimini? Foarte simplu. Cert este că în familia de sisteme de operare Windows, și nu numai, există o anumităManager de dispozitiv, de fapt, un manager foarte necesar și util, dacă îi poți numi așa. Iată-l, ne va ajuta să aflăm care este cauza problemei, iar foaia mea de cheat ne va ajuta să rezolvăm problema. Deci, în cele menționate mai susManager de dispozitiv urme de erori în funcționarea dispozitivelor rămân sub formă de coduri. Cunoscând codul de eroare, nu este dificil să determinați cauza problemei. Pentru cei neinițiați, codurile sunt doar numere de neînțeles și fără sens. Dar unui utilizator informat, ei pot spune multe. Voi încerca, pe cât îmi pot, să fac lumină asupra acestui subiect.


Pentru a vedea erorile dispozitivului, trebuie mai întâi să intrăm în Managerul de dispozitive. Se face așa. ConectarePanoul de control din meniuÎncepe ( poate,Mele calculator , tasta dreapta -Proprietăți Manager de dispozitiv, sau puteți face acest lucru specificând o comandă înexecuta , dar de ce complica totul). Dacă intrăm prinPanou management , atunci calea este:Sistem - Echipament - Manager dispozitive . Selectați intrând în meniumanager de dispozitiv , tipul de dispozitiv care ne interesează (tastatură, imprimantă, modem etc.), faceți dublu clic pe el, ca urmare vom vedea dispozitivele incluse în acest tip. Selectați dispozitivul de care avem nevoie și faceți dublu clic pe el. Priviți coloana din fila Despregeneral, starea dispozitivului. Dacă există o problemă cu funcționarea dispozitivului, aceasta va fi afișată aici ca un cod de eroare. Deci vedem numere și numere. Ce înseamnă ele? Mai jos ofer o listă completă de erori, cu o scurtă descriere a erorii și posibilele soluții. Codul de eroare este evidențiat cu roșu, descrierea acestuia cu albastru și soluția cu negru.

Codul 1Există o problemă cu configurarea dispozitivului, setările sunt incorecte sau driverul lipsește. Faceți clic pe butonul Actualizați driverul , pentru a lansa vrăjitorulActualizare hardware . Dacă nu există driver, instalați-l.

Codul 3Driverul dispozitivului este deteriorat sau nu există suficientă RAM pentru ca dispozitivul să funcționeze corect.1. Să eliminăm driverul deteriorat și să instalăm unul nou. Pentru a face acest lucru: Proprietăți - Driver - Ștergere, apoi urmați instrucțiunile vrăjitorului. Reporniți. Să deschidem din noumanager de dispozitiv Acţiune Actualizați configurația hardware și urmați instrucțiunile maestrului. 2. Dacă problema este lipsa memoriei virtuale, închideți aplicațiile care rulează pentru a elibera memorie. Pentru a verifica starea memoriei trebuie să mergem laManager de activități , pentru a face acest lucru, apăsați comanda rapidă de la tastaturăCtrl+Shift+Esc.Putem vizualiza setările memoriei virtuale făcând clic dreaptaComputerul meu Proprietăți - Avansat - Performanță - Setări (Opțiuni) . Puteți încerca să măriți fișierul de swap (am descris cum se face acest lucru într-unul dintre articolele mele anterioare de pe blog), dar aceasta este departe de a fi o măsură radicală. Va trebui să vă măriți memoria RAM. Cum se face acest lucru este un subiect separat dincolo de scopul acestei postări.

Codul 10În secțiunea de registru există un parametru corespunzător dispozitivuluiFailReasonString,valoarea acestui parametru este afișată în datele de eroare, adică dacă nu există niciun parametru ca atare, atunci apare un cod de eroare, cu alte cuvinte, dispozitivul nu poate fi pornit. Actualizați driverul ca mai sus. Sau instalați unul mai nou.

Codul 12Nu este nevoie de resurse pentru acest dispozitiv. Dezactivați alte dispozitive de lucru, cel puțin unul, pentru a face acest lucru, utilizați expertul de depanare, care, dacă urmați instrucțiunile acestuia, va dezactiva dispozitivul aflat în conflict. (Permiteți-mi să vă reamintesc pe scurt: Proprietăți - General - Depanare.)

Codul 14Necesită repornirea computerului pentru ca acest dispozitiv să funcționeze.

Codul 16Este imposibil să identificați resursele necesare pentru ca dispozitivul să funcționeze; dispozitivul nu este complet configurat. Trebuie să alocați resurse suplimentare dispozitivului. Dar acest lucru se poate face fără probleme dacă dispozitivul îi aparținePlug and Play.

Proprietăți - Resurse. Dacă există o resursă cu semnul ? în lista de resurse, selectați-o pentru a o atribui dispozitivului selectat. Dacă resursa nu poate fi modificată, faceți clicModificați setările , dacă această funcție nu este disponibilă, debifațiConfigurare automată

Codul 18Reinstalați driverul dispozitivului. Încercăm să actualizăm driverul sau să-l eliminăm și o facem ca în exemplul cucod 3.

Codul 19Nu există suficiente informații în registry despre setările dispozitivului sau setările sunt corupte. FugiExpert de depanare și urmați instrucțiunile sale, dacă nu vă ajută, reinstalați dispozitivul așa cum este menționat mai sus. (cod 3). Sau, dacă asta nu ajută, descărcațiUltima configurație bună cunoscută. Dacă acest lucru nu ajută, aveți nevoie de ajutorul unui specialist, la fel cum trebuie să editați registrul de sistem. Fără cunoștințe și experiență, nu aveți nimic de făcut pe cont propriu, orice administrator de sistem vă va confirma acest lucru. Cel care este informat și capabil, știe să o facă singur, fără mine. Și pentru o persoană fără experiență, este mai bine să nu încerce. Registrul este inima sistemului de operare și numai un specialist cu experiență, sau sub îndrumarea acestuia, ar trebui să efectueze operațiuni pe acesta. Nu vreau să jignesc pe nimeni în niciun fel, dar dacă nu ați lucrat cu registrul de sistem și dacă vă prețuiți computerul, sfatul meu este să uitați drumul până acolo. Nu scriu pentru profesioniști, nu au nevoie de el, ci pentru utilizatorul obișnuit. Desigur, pot scrie acolo cum și ce să fac, dar aceasta va fi o explicație manuală și dacă vă deteriorați computerul ca urmare a celei mai mici greșeli, eu voi fi de vină. Nu am nevoie de asta deloc și nici tu.

Codul 21 Dispozitivul este eliminat din sistem, adică sistemul de operare încearcă să elimine dispozitivul, dar procesul nu s-a încheiat încă.


Faceți o pauză de câteva secunde și apăsați tasta


Codul 22 Dispozitivul este dezactivat. Aparatul trebuie să fie pornit.Acțiune - Activare și urmați instrucțiunile suplimentare.


Codul 24 Dispozitivul lipsește sau este instalat incorect, driverul funcționează defectuos, este posibil ca dispozitivul să fi fost pregătit pentru îndepărtare. Scoateți dispozitivul și instalați din nou.


Codul 28 Fără șofer. Instalați driverul. Pentru a face acest lucru, trebuie să actualizați driverul, urmați pașii ca în instrucțiunile pentru Codul 1.


Codul 29Dispozitiv dezactivat . Trebuie să permiteți dispozitivului să funcționeze setăriBIOSCitiți instrucțiunile de utilizare a dispozitivului.


Cod 31Sistemul nu a putut încărca driverele pentru acest dispozitiv . Actualizați driverele așa cum este descris mai sus.


Cod 32Driverul pentru acest dispozitiv este dezactivat în registrul de sistem . Dezinstalați și reinstalați driverul (descris mai sus)


Cod 33Sistemul de operare nu poate determina resursele pentru aceasta dispozitive . Configurați dispozitivul sau înlocuiți-l.


Cod 34Sistemul de operare nu poate detecta setările dispozitive . Consultați documentația furnizată cu echipamentul și configurați manual configurația în fila Resurse.


Cod 35Firmware-ul PC-ului nu are informațiile necesare pentru corectare funcționarea dispozitivului . Trebuie actualizatBIOS.Pentru instrucțiuni despre cum să faceți acest lucru, contactați furnizorul dvs. sau, mai bine, utilizați serviciile unui tehnician cu experiență.


Cod 36Dispozitivul necesită o întrerupere pentru a funcționa.PCIiar dispozitivul este configurat să întrerupăISA,sau invers . Setările trebuie modificateBIOScontactați un tehnician cu experiență.


Cod 37Sistemul de operare nu recunoaște driverul pentru acest dispozitiv . Reinstalați driverul (descris mai sus).


Cod 38Sistemul de operare nu poate încărca driverul pentru dispozitiv deoarece, versiunea anterioară a driverului rămâne în memorie . Trebuie să reporniți computerul. Rulați Expertul de depanare dacă nu pornește (Proprietăți - General - Depanare) și urmați instrucțiunile expertului. După aceea, există o repornire obligatorie.


Cod 39Sistemul de operare nu poate încărca driverul dispozitivului. Șoferul este avariat sau nu există deloc . Reinstalați driverul așa cum este descris mai sus.


Cod 40Nu există acces la echipament deoarece nu există informații în registrul de sistem sau informațiile conțin o eroare . Reinstalați driverul.


Cod 41Dispozitivul nu a fost detectat . Rulați Expertul de depanare (descris mai sus), dacă acest lucru nu ajută, actualizați configurația hardware (vezi mai sus) sau actualizați driverul. Dacă nu, instalați o versiune mai nouă a driverului.


Cod 42Sistemul are deja un astfel de driver. Adică există două dispozitive diferite cu același nume, posibil din cauza unei erori . Reporniți computerul.


Cod 43Oprirea dispozitivului din cauza problemelor de funcționare . Rulați Expertul de depanare și urmați instrucțiunile acestuia.


Cod 44O aplicație sau un serviciu v-a oprit dispozitivul . Reporniți computerul.


Cod 45Dispozitivul nu este conectat . Conectați-vă dispozitivul.


Cod 46Această eroare apare atunci când sistemul de operare se închide. Nu trebuie să faceți nimic, data viitoare când porniți sistemul de operare totul va funcționa.


Cod 47 Dispozitivul a fost pregătit pentru îndepărtarea în siguranță, dar nu a fost încă îndepărtat (de exemplu, o unitate flash) . Scoateți dispozitivul, apoi conectați-vă din nou, reporniți computerul.


Cod 48Dispozitivul, sau mai degrabă software-ul său, este blocat . Actualizați driverul sau instalați unul nou.


Cod 49Dispozitivul nu poate fi pornit deoarece are un registru mare de sistem care depășește parametrii acceptabili de registry . Eliminați dispozitivele care nu sunt utilizate din registry. Puteți face acest lucru: Manager dispozitive - Vizualizare - Afișați dispozitivele ascunse. Aici veți vedea dispozitive ascunse care nu sunt conectate la computer. Selectați dispozitivele pe care doriți să le eliminați, faceți clic pe Proprietăți pentru dispozitiv - Driver - Eliminare, apoi urmați instrucțiunile expertului și, în final, reporniți computerul.


Un ghid pentru eliminarea oricăror viruși de pe un computer cu propriile mâini. Toate metodele de eliminare a virușilor care funcționează efectiv și au fost testați în practică, instrucțiuni pas cu pas cu ilustrații - simple și accesibile chiar și pentru un școlar + tutoriale video + program ultraiso pentru a crea programe de descărcare + link-uri utile către instrumente în lupta împotriva virușilor. Descărcați arhiva

În ultimul meu articol „” am vorbit despre capabilitățile Windows 7 Resource Monitor (Resource Monitor), am explicat cum să-l folosești pentru a monitoriza distribuția resurselor sistemului între procese și servicii și, de asemenea, am menționat că poate fi folosit pentru a rezolva anumite probleme. probleme - de exemplu, pentru a analiza consumul de memorie. Acesta este exact ceea ce va discuta acest articol.

Un pic despre memorie

Înainte de a începe analiza, voi vorbi pe scurt despre modul în care este controlată memoria. Acest lucru vă va face mai ușor să înțelegeți ce informații sunt prezentate în Windows 7 Resource Monitor.

Windows 7 Memory Manager creează un sistem de memorie virtuală care constă din RAM fizică disponibilă și un fișier de pagină pe hard disk. Acest lucru permite sistemului de operare să aloce blocuri de memorie cu lungime fixă ​​(pagini) cu adrese secvențiale în memoria fizică și virtuală.

Lansarea Windows 7 Resource Monitor

Pentru a lansa Windows 7 Resource Monitor, deschideți meniul Start, tastați „Resmon.exe” în bara de căutare și faceți clic pe . În fereastra care se deschide, selectați fila „Memorie” (Fig. A).

Figura A: Fila Memorie din Windows 7 Resource Monitor oferă informații detaliate de alocare a memoriei.

Tabelul de procese

Fila Memorie conține un tabel de procese (Figura B) care listează toate procesele care rulează și împarte utilizarea memoriei în mai multe categorii.


Figura B: Informațiile despre utilizarea memoriei pentru fiecare proces sunt împărțite în mai multe categorii.

Coloana „Imagine”

Coloana „Imagine” indică numele fișierului executabil al procesului. Procesele rulate de aplicații sunt foarte ușor de recunoscut - de exemplu, procesul „notepad.exe” aparține în mod clar Notepad-ului. Procesele numite „svchost.exe” reprezintă diverse servicii ale sistemului de operare. Numele serviciului apare în paranteze lângă numele procesului.

Coloana ID proces

Coloana Process ID (PID) indică numărul procesului - o combinație unică de numere care vă permite să identificați procesul care rulează.

Coloana „Finalizat”.

Coloana Commit indică cantitatea de memorie virtuală, în kiloocteți, pe care sistemul a rezervat-o pentru acest proces. Aceasta include atât memoria fizică utilizată, cât și paginile stocate în fișierul de paginare.

Coloana „Set de lucru”

Coloana Set de lucru indică cantitatea de memorie fizică în kiloocteți utilizată de proces la un moment dat. Setul de lucru este format din memorie publică și privată.

Coloana „General”

Coloana Partajabil indică cantitatea de memorie fizică în kiloocteți pe care acest proces o partajează cu alții. Partajarea unui singur segment de memorie sau a unei pagini de schimb pentru procesele conexe poate economisi spațiu de memorie. Aceasta stochează fizic doar o copie a paginii, care este apoi mapată la spațiul de adrese virtuale al altor procese care o accesează. De exemplu, toate procesele inițiate de DLL-urile de sistem - Ntdll, Kernel32, Gdi32 și User32 - folosesc memoria partajată.

Coloana „Privat”

Coloana Privată indică cantitatea de memorie fizică, în kiloocteți, utilizată exclusiv de acest proces. Această valoare vă permite să determinați câtă memorie are nevoie pentru a funcționa o anumită aplicație.

Coloana „Erori ale paginii lipsă din memorie/sec.”

În coloana „Erori ale paginii epuizate de memorie/sec.” (Hard Faults/sec) arată numărul mediu de erori de pagină din memorie pe secundă în ultimul minut. Dacă un proces încearcă să folosească mai multă memorie fizică decât este disponibilă în prezent, sistemul scrie unele dintre date de pe memorie pe disc - în fișierul de pagină. Accesul ulterior la datele salvate pe disc se numește o eroare de pagină din memorie.

Ce înseamnă erori de pagina din memorie?

Acum că aveți o idee despre ce informații sunt colectate în tabelul Procese, să vedem cum le puteți utiliza pentru a monitoriza alocarea memoriei. Când rulează aplicații și lucrează cu fișiere, managerul de memorie monitorizează dimensiunea setului de lucru a fiecărui proces și înregistrează cererile de resurse de memorie suplimentare. Pe măsură ce setul de lucru al unui proces crește, dispecerul potrivește aceste solicitări cu nevoile nucleului și ale altor procese. Dacă spațiul de adrese disponibil este insuficient, dispecerul reduce dimensiunea setului de lucru prin stocarea datelor de pe memorie pe disc.

Mai târziu, la citirea acestor date de pe disc, apare o eroare de memorie lipsită de pagină. Acest lucru este destul de normal, dar dacă apar erori simultan pentru diferite procese, sistemul necesită timp suplimentar pentru a citi datele de pe disc. Erorile prea frecvente de pagina-out-of-memory reduc, în consecință, performanța sistemului. Probabil ați experimentat încetiniri neașteptate în toate aplicațiile, care apoi s-au oprit brusc. Această încetinire sa datorat aproape sigur redistribuirii active a datelor între memoria fizică și swap.

Concluzia urmează: dacă erori de paginare din memorie pentru un anumit proces apar prea des și regulat, computerul nu are suficientă memorie fizică.

Pentru a face mai convenabilă monitorizarea proceselor care provoacă erori frecvente ale paginilor din memorie, le puteți marca cu steaguri. În acest caz, procesele selectate se vor muta în partea de sus a listei, iar în graficul erorilor de pagină lipsă vor fi reprezentate printr-o curbă portocalie.

Merită să rețineți că alocarea memoriei depinde de o serie de alți factori, iar monitorizarea erorilor de pagina-out-of-memory nu este cea mai bună sau singura modalitate de a identifica problemele. Cu toate acestea, poate servi ca un bun punct de plecare pentru observație.

Tabelul „Memorie fizică”

Tabelul Procese oferă informații detaliate despre alocarea memoriei între procesele individuale, iar tabelul Memorie fizică oferă o imagine de ansamblu a utilizării RAM. Componenta sa cheie este histograma unică prezentată în Fig. C.


Figura C: Histograma din tabelul Memorie fizică oferă o privire de ansamblu asupra distribuției memoriei în Windows 7.

Fiecare secțiune a histogramei este indicată de propria sa culoare și reprezintă un grup specific de pagini de memorie. Pe măsură ce sistemul este utilizat, managerul de memorie mută datele între aceste grupuri în fundal, menținând un echilibru delicat între memoria fizică și cea virtuală pentru a se asigura că toate aplicațiile rulează eficient. Să aruncăm o privire mai atentă asupra histogramei.

Secțiunea „Echipament rezervat”

În stânga se află secțiunea „Hardware Reserved”, indicată cu gri: aceasta este memoria alocată pentru nevoile hardware-ului conectat, pe care o folosește pentru a interacționa cu sistemul de operare. Memoria rezervată pentru hardware este blocată și nu poate fi accesată de managerul de memorie.

De obicei, cantitatea de memorie alocată echipamentului variază de la 10 la 70 MB, dar această cifră depinde de configurația specifică a sistemului și, în unele cazuri, poate ajunge la câteva sute de megaocteți. Componentele care afectează cantitatea de memorie rezervată includ:

;
componente ale plăcii de bază - cum ar fi Advanced Programmable I/O Interrupt Controller (APIC);
plăci de sunet și alte dispozitive care efectuează intrare/ieșire mapată în memorie;
magistrală PCI Express (PCIe);
placi video;
diverse chipseturi;
unități flash.

Unii utilizatori se plâng că sistemele lor rezervă o cantitate anormală de memorie pentru hardware-ul lor. Nu am întâlnit niciodată o astfel de situație și, prin urmare, nu pot garanta eficacitatea soluției propuse, dar mulți notează că actualizarea versiunii BIOS poate rezolva problema.

Secțiunea „În uz”.

Secțiunea În uz, afișată cu verde, reprezintă cantitatea de memorie utilizată de sistem, drivere și procesele care rulează. Cantitatea de memorie utilizată este calculată ca valoarea „Total” minus suma indicatorilor „Modificat”, „Standby” și „Liber”. La rândul său, valoarea „Total” este indicatorul „RAM instalată” minus indicatorul „Echipament rezervat”.

Secțiunea „Schimbată”

Secțiunea „Modificat” este evidențiată în portocaliu, ceea ce reprezintă memoria care a fost modificată, dar nu a fost utilizată. De fapt, nu este folosit, dar poate fi folosit oricând dacă este nevoie din nou. Dacă memoria nu a fost folosită o perioadă lungă de timp, datele sunt transferate în fișierul de pagină, iar memoria intră în categoria „În așteptare”.

Secțiunea „Așteptare”

Secțiunea În așteptare, afișată cu albastru, reprezintă paginile de memorie care au fost eliminate din seturile de lucru, dar sunt încă asociate cu acestea. Cu alte cuvinte, categoria „În așteptare” este de fapt un cache. Paginile de memorie din această categorie au o prioritate de la 0 la 7 (maximum). Paginile asociate cu procese cu prioritate ridicată au prioritate maximă. De exemplu, procesele partajate au prioritate mare, astfel încât paginile asociate acestora au cea mai mare prioritate în categoria În așteptare.

Dacă un proces necesită date dintr-o pagină în așteptare, managerul de memorie returnează imediat pagina respectivă la setul de lucru. Cu toate acestea, toate paginile din categoria În așteptare sunt disponibile pentru înregistrarea datelor din alte procese. Când un proces necesită memorie suplimentară și nu există suficientă memorie liberă, managerul de memorie selectează pagina de așteptare cu cea mai mică prioritate, o inițializează și o alocă procesului solicitant.

Secțiunea „gratuit”

Categoria Free, indicată cu albastru, reprezintă pagini de memorie care nu au fost încă alocate niciunui proces sau care au fost eliberate atunci când un proces se încheie. Această secțiune arată atât memoria nefolosită, cât și cea eliberată, dar, de fapt, memoria neutilizată încă aparține unei alte categorii - „Pagini zero”, care se numește așa deoarece aceste pagini sunt inițializate la zero și gata de utilizare.

Despre problema memoriei libere

Acum că aveți o înțelegere de bază a modului în care funcționează managerul de memorie, să luăm un moment pentru a aborda o concepție greșită comună despre sistemul de gestionare a memoriei în Windows 7. După cum puteți vedea din Figura 1. C, Secțiunea de memorie liberă este una dintre cele mai mici din histogramă. Cu toate acestea, este o greșeală să presupunem pe această bază că Windows 7 consumă prea multă memorie și că sistemul nu poate funcționa corect dacă există atât de puțină memorie liberă.

De fapt, este chiar invers. În contextul abordării Windows 7 cu privire la gestionarea memoriei, memoria liberă este inutilă. Cu cât se folosește mai multă memorie, cu atât mai bine. Prin maximizarea memoriei și mutarea constantă a paginilor de la o categorie la alta folosind un sistem prioritar, Windows 7 îmbunătățește eficiența și previne ca datele să ajungă în fișierul de pagină, prevenind erorile din afara paginii să încetinească performanța.

Monitorizarea memoriei

Doriți să vedeți sistemul de gestionare a memoriei Windows 7 în acțiune? Reporniți computerul și, imediat după pornire, deschideți Monitorul resurselor Windows 7 Accesați fila Memorie și acordați atenție raportului de secțiuni din histograma memoriei fizice.

Apoi începeți să lansați aplicațiile. În timp ce alergați, urmăriți schimbarea histogramei. După ce ați lansat cât mai multe aplicații posibil, începeți să le închideți una câte una și urmăriți cum se modifică raportul secțiunilor din histograma memoriei fizice.

Făcând acest experiment extrem, veți înțelege modul în care Windows 7 gestionează memoria de pe computerul dvs. și veți putea folosi Windows 7 Resource Monitor pentru a monitoriza alocarea memoriei în condiții normale de operare zilnică.

Ce crezi?

Îți place ideea de a folosi Windows 7 Resource Monitor pentru a monitoriza alocarea memoriei? Împărtășește-ți părerea în comentarii!

Când un proces începe în Windows, multe dintre paginile care afișează imaginile EXE și DLL pot fi deja în memorie deoarece sunt utilizate de alte procese. Paginile cu imagini inscriptibile sunt marcate „copy-on-write”, astfel încât să poată fi partajate până când trebuie modificate. Dacă sistemul de operare recunoaște un EXE care a fost deja executat, poate înregistra tiparul de legături către pagină (folosind o tehnologie pe care Microsoft o numește Super-Fetch). Această tehnologie încearcă să pompeze multe dintre paginile necesare în avans (chiar dacă procesul nu a primit încă erori de pagină asupra lor). Acest lucru reduce latența lansărilor de aplicații (citirea paginilor de pe disc se suprapune cu execuția codului de inițializare a imaginilor). Această tehnologie îmbunătățește performanța de ieșire a discului, deoarece driverele de disc pot organiza mai ușor operațiunile de citire (pentru a reduce timpul necesar de căutare). Acest proces de paginare preventivă este utilizat în timpul pornirii sistemului, precum și atunci când o aplicație de fundal vine în prim-plan și când sistemul se trezește din hibernare.

Paginare de preluare anticipată este acceptată de managerul de memorie, dar este implementată ca o componentă separată a sistemului. Paginile paginate nu sunt inserate în tabelul de pagini al procesului, ci sunt inserate într-o listă de așteptare din care pot fi introduse rapid în proces (fără accesarea discului).

Paginile nemapate sunt ușor diferite - nu sunt inițializate prin citirea dintr-un fișier. În schimb, prima dată când o pagină nemapată este accesată, managerul de memorie oferă o nouă pagină fizică (asigurându-se că conținutul acesteia este completat cu zerouri din motive de securitate). În cazul erorilor de pagină ulterioare, pagina nemapată poate fi nevoie să fie găsită în memorie sau poate fi citită din fișierul de pagină.

Paginarea la cerere în managerul de memorie este controlată de erori de pagină. Fiecare eroare provoacă o întrerupere a nucleului. Nucleul construiește apoi un descriptor independent de mașină (care raportează ce sa întâmplat) și îl transmite managerului de memorie executiv. Managerul de memorie verifică apoi validitatea accesului. Dacă pagina eșuată se încadrează în regiunea comisă, caută adresa în lista VAD și găsește (sau creează) intrarea tabelului de pagini a procesului. În cazul unei pagini partajate, managerul de memorie utilizează intrarea tabelului de pagină prototip (asociată cu obiectul segment) pentru a popula noua intrare în tabelul paginii de proces.

Formatul elementului tabel de pagini variază în funcție de arhitectura procesorului. Pentru procesoarele x86 și x64, elementele paginii afișate sunt prezentate în Fig. 11.17. Dacă un element este marcat valid, atunci conținutul său este interpretat de hardware (astfel încât adresa virtuală să poată fi tradusă în pagina fizică corectă). Paginile neredate au și ele elementele lor, dar sunt marcate ca nevalide și hardware-ul ignoră restul elementului. Formatul software este ușor diferit de cel hardware și este determinat de managerul de memorie. De exemplu, pentru o pagină neredată (care trebuie poziționată și resetată înainte de utilizare), acest fapt este notat în elementul tabel de pagini.


Doi biți importanți din intrarea tabelului de pagini sunt actualizați direct de hardware. Acestea sunt bitul de acces (A) și bitul modificat (D). Acești biți urmăresc utilizarea unei anumite mapări de pagină pentru a accesa pagina și dacă pagina poate fi modificată prin acel acces. Acest lucru îmbunătățește de fapt performanța sistemului, deoarece managerul de memorie poate folosi bitul de acces pentru a implementa paginarea LRU (Least-Recently Used). Principiul LRU este că acele pagini care au fost neutilizate cel mai mult timp au cea mai mică probabilitate de a fi reutilizate în viitorul apropiat. Bitul de acces permite managerului de memorie să determine dacă pagina a fost accesată. Bitul „modificat” îi spune managerului de memorie că este posibil ca pagina să fi fost modificată (sau, mai important, că nu a fost modificată). Dacă pagina nu a fost modificată de când a fost citită de pe disc, atunci managerul de memorie nu trebuie să-și scrie conținutul pe disc (înainte de a o folosi pentru altceva).

Ambele arhitecturi x86 și x64 folosesc o intrare de tabel de pagină pe 64 de biți (vezi Figura 11.17).

Fiecare eroare de pagină poate fi clasificată în una din cinci categorii:

1. Pagina nu este fixă.

2. O încercare de a accesa o pagină cu o încălcare a permisiunii.

3. O încercare de a modifica o pagină de copiere la scriere.

1. Este necesar să se mărească stiva.

2. Pagina este înghețată, dar nu este afișată în prezent.

Primul și al doilea caz sunt erori de programare. Dacă un program încearcă să folosească o adresă care nu are o mapare validă sau încearcă să efectueze o operațiune ilegală (cum ar fi încercarea de a scrie pe o pagină numai în citire), aceasta se numește o încălcare a accesului și de obicei duce la terminarea procesului . O încălcare a accesului este adesea rezultatul unor valori invalide ale pointerului, inclusiv accesul la memoria care a fost dealocată și detașată din proces.

Al treilea caz are aceleași simptome ca și al doilea (încercarea de a scrie pe o pagină numai în citire), dar gestionarea sa este diferită. Deoarece pagina a fost marcată ca copy-on-write, managerul de memorie nu raportează o încălcare a accesului. În schimb, creează o copie privată a paginii pentru procesul curent și apoi returnează controlul firului care a încercat să scrie în pagină. Firul repetă operația de scriere, care se va finaliza acum fără o eroare de pagină.

Al patrulea caz apare atunci când un fir de execuție împinge o valoare în stiva sa și lovește o pagină care nu a fost încă alocată. Managerul de memorie recunoaște acest lucru ca fiind un caz special. Atâta timp cât există spațiu în paginile virtuale rezervate pentru stivă, managerul de memorie va furniza pagini noi, le va elimina și le va mapa pe proces. Când firul de execuție reia execuția, va încerca să acceseze din nou, iar de data aceasta va avea succes.

Și, în sfârșit, al cincilea caz este o greșeală normală de pagină. Cu toate acestea, are mai multe subopțiuni. Dacă o pagină este mapată la un fișier, managerul de memorie trebuie să se uite la structurile sale de date (cum ar fi tabelul de pagină prototip asociat cu obiectul segment) pentru a se asigura că nu există o copie a acesteia în memorie. Dacă există o copie (de exemplu, într-un alt proces, în lista de așteptare sau în lista de pagini modificate), atunci o va face pur și simplu partajată (poate fi nevoit să o marcheze ca pagină de copiere la scriere pentru faceți acest lucru dacă se presupune că modificările nu sunt partajate). Dacă nu există încă o copie, managerul de memorie va aloca o pagină fizică gratuită și o va pregăti pentru copierea paginii fișierului de pe disc pe ea, cu excepția cazului în care o altă pagină este transferată de pe disc în acel moment (caz în care trebuie doar să așteptați până transferul este finalizat).

Dacă administratorul de memorie poate gestiona o eroare de pagină prin localizarea paginii în memorie (în loc să o citească de pe disc), eroarea se numește eroare soft. Dacă aveți nevoie de o copie de pe disc, atunci aceasta este o greșeală gravă. Erorile soft sunt mult mai ieftine și au un impact redus asupra performanței aplicației (comparativ cu erorile dure). Erorile soft pot apărea deoarece pagina partajată a fost deja mapată la un alt proces sau pur și simplu are nevoie de o nouă pagină zero, sau pagina dorită a fost eliminată din setul de lucru al procesului, dar este re-solicitată înainte de a fi reutilizată. Erorile soft pot apărea și deoarece paginile au fost comprimate pentru a crește efectiv dimensiunea memoriei fizice. Pentru majoritatea configurațiilor CPU, este mai eficient să comprimați memoria și I/O pe sistemele actuale decât să suportați I/O costisitoare (în termeni de performanță și putere), care necesită citirea unei pagini de pe disc.

Când o pagină fizică nu mai este mapată la tabelul de pagini al niciunui proces, aceasta intră în una dintre cele trei liste: gratuită, modificată sau rezervată. Acele pagini care nu vor mai fi necesare niciodată (cum ar fi paginile de stivă ale procesului de terminare) sunt eliberate imediat. Acele pagini care sunt susceptibile de a avea erori de pagină din nou ajung fie în lista modificată, fie în lista de așteptare (în funcție de faptul dacă bitul „modificat” a fost setat pentru orice intrare din tabelul de pagini care a afișat pagina respectivă de când a fost citită ultima dată de pe disc) . Paginile din lista modificată vor fi în cele din urmă scrise pe disc și apoi mutate în lista de rezervă.

Managerul de memorie poate aloca pagini după cum este necesar (folosind o listă de pagini gratuite sau de rezervă). Înainte de a aloca o pagină și de a o copia de pe disc, managerul de memorie verifică întotdeauna listele de pagini de rezervă și modificate pentru a vedea dacă pagina este deja în memorie. Schema de paginare înainte în Windows convertește erorile grave viitoare în erori soft (prin citirea paginilor care ar putea fi necesare și plasându-le în lista de pagini de așteptare). Managerul de memorie în sine efectuează o cantitate mică de paginare înainte - accesează grupuri de pagini secvențiale (mai degrabă decât pagini individuale). Paginile suplimentare sunt imediat plasate în lista de pagini de așteptare. Acest lucru nu este o risipă, deoarece costul general al managerului de memorie este mult mai mic decât costul efectuării operațiunilor I/O. Citirea unui întreg grup de pagini este puțin mai costisitoare decât citirea unei singure pagini.

Elementele tabelului de pagini din Fig. 11.17 se referă la numerele de pagină fizice (nu virtuale). Pentru a actualiza o intrare de tabel de pagini (și un director de pagini), nucleul trebuie să utilizeze adrese virtuale. Windows mapează tabelele de pagini și directoarele de pagini pentru procesul curent la spațiul de adrese virtuale kernel folosind elementul de auto-hartă din directorul de pagini (Figura 11.18). Prin maparea unui element de director de pagină la un director de pagină (auto-hartă), obținem adrese virtuale care pot fi folosite pentru a face referire la elemente de director de pagină (Fig. 11.18, a) și elemente de tabel de pagini (Fig. 11.18, b). Auto-harta ocupă 8 MB de adrese virtuale de kernel pentru fiecare proces (pe procesoare x86). Pentru simplitate, figura prezintă un element de auto-hartă x86 pentru intrări PTE pe 32 de biți (Intrări de tabel de pagină). De fapt, Windows folosește înregistrări PTE pe 64 de biți, astfel încât sistemul poate profita de mai mult de 4 GB de memorie fizică. Cu intrări PTE pe 32 de biți, elementul de auto-hartă folosește o singură intrare PDE (Page-Directory Entry) în directorul paginii și, prin urmare, ocupă doar 4 MB de adrese în loc de 8 MB.