O eroare de pagină este un fel de excepție hardware care apare într-un computer cu memorie virtuală bazată pe paginare în momentul accesării unei pagini de memorie care nu este inclusă în spațiul de adrese al procesului de către unitatea de gestionare a memoriei . Accesarea acestei pagini poate fi validă din punct de vedere logic, dar poate necesita adăugarea acesteia la tabelul paginii și, eventual, încărcarea din spațiul de stocare secundar ( hard disk ) în RAM. Detectarea erorilor de pagină este gestionată de hardware (unitatea de gestionare a memoriei) și gestionată de software, de obicei parte a nucleului sistemului de operare [1] . În timpul procesării erorilor de pagină, sistemul de operare încearcă să plaseze pagina necesară în memoria principală și să o pună la dispoziție procesului sau oprește programul în cazul unui acces invalid la memorie.
În ciuda numelui, erorile de pagină valide sunt o parte normală a oricărui sistem de operare care utilizează memorie virtuală, inclusiv sisteme OpenVMS , Microsoft Windows și UNIX . De fapt, acestea sunt pur și simplu semnale necesare sistemului de operare pentru a aloca memorie programelor care rulează.
Eșecul paginii, care în sistemele asemănătoare Linux se numește light ( eng. minor ) [2] , iar în Windows - software ( eng. soft ) [3] , înseamnă că pagina necesară este fie deja în RAM, dar nu este marcată în bloc de gestionare a memoriei așa cum este încărcat sau este nou alocat și nu a fost niciodată utilizat. Managerul de excepții din sistemul de operare trebuie doar să adauge o intrare la tabelul de pagini pentru pagina solicitată și să indice că aceasta este încărcată în memorie. Încărcarea paginii de pe disc nu este necesară. Eșecul apare în următoarele cazuri [3] :
Deoarece aceste defecțiuni nu sunt supuse latenței accesului la disc, ele sunt procesate mai rapid decât defecțiunile majore sau hardware.
Eșecul paginii , numit major pe sistemele asemănătoare Linux [ 2 ] și greu pe Windows [3] , este mecanismul principal folosit de sistemul de operare pentru a aloca memorie programelor la cerere. Sistemul de operare întârzie încărcarea porțiunilor unui program de pe disc până când programul încearcă să le acceseze și astfel generează o eroare de pagină. Dacă pagina nu este încărcată în memorie în momentul defecțiunii, atunci eșecul se numește eșec major sau hardware. Managerul de erori de pagină din sistemul de operare trebuie să găsească spațiu liber în RAM: fie o pagină liberă, fie o pagină ocupată. Pagina ocupată poate aparține unui alt proces. În acest caz, sistemul de operare trebuie să șteargă datele paginii pe disc (dacă nu a fost deja schimbată) și să marcheze pagina din tabelul de pagini al procesului ca fiind lipsită de memorie. Odată ce spațiul liber devine disponibil, sistemul de operare poate încărca datele pentru noua pagină în memorie, poate adăuga adresa fizică a acesteia la tabelul de pagini al procesului original și poate marca pagina ca fiind în memorie. Necesitatea accesării discului face ca gestionarea unor astfel de defecțiuni să fie mult mai lentă în comparație cu cele ușoare.
Dacă apare o eroare de pagină la accesarea unei adrese care nu aparține spațiului de adrese virtuale al procesului, adică nu poate exista o pagină în memorie corespunzătoare acestei adrese, atunci această eroare se numește o eroare de pagină invalidă . În acest caz, gestionarea erorilor de pagină a sistemului de operare va transmite de obicei o eroare de segmentare procesului de origine, indicând că accesarea a fost invalidă. Acest lucru face ca blocul de cod care a făcut apelul nevalid să se blocheze . Un exemplu de referință nevalidă este dereferința unui pointer nul . Un pointer nul este un pointer care nu se referă la niciun obiect. Este de obicei reprezentat ca un pointer către adresa 0. Majoritatea sistemelor de operare nu includ pagina care conține adresa zero în spațiul de adrese de proces, așa că încercările de a citi sau de a scrie memoria printr-un pointer nul duc la o eroare a paginii nevalide.