[so] [Memorie Virutuala][Ce determina Segmentation fault]

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Fri Apr 8 11:52:52 EEST 2016


"Tiberiu IORGULESCU (25243) via so" <so at cursuri.cs.pub.ro> writes:
> Am o intrebare:
>
> Cum se prinde sistemul de operare daca sa dea sau nu sigsegv (sau ce
> se intampla de fapt in spate atunci cand se aloca o pagina?).
>
> De exemplu, daca eu aloc o zona de memorie, ea nu se afla nici in
> memoria fizica (datorita "demand paging"), nici in memoria secundara,
> deci in tabela de pagini presupun ca flag-ul de validitate ar trebui
> sa fie invalid. Si atunci de unde stie daca a fost alocata de mine?
> Sau care e diferenta intre asta si cazul in care pur si simplu incerc
> sa scriu la o adresa oarecare din spatiul meu virtual, fara sa fi
> alocat nimic acolo?

Pagina este marcată absentă în tabela de pagini. Se generează page fault
de MMU, care face trap în kernel (sistemul de operare). Acesta
investighează niște informații interne pe care le are despre paginile
procesului și vede că pagina virtuală în cauză a fost rezervată anterior
de procesul curent (kernel-ul gestionează informațiile despre spațiile
de adresă ale proceselor). Sistemul de operare deduce că pagina a fost
alocată prin demand paging și atunci realizează alocarea de memorie
fizică și maparea acesteia la pagina virtuală.

Dacă sistemul de operare ar fi dedus, după trap-ul dat de MMU, că pagina
virtuală este complet nevalidă (adică nu a fost rezervată anterior)
atunci ar fi trimis excepție/SIGSEGV către procesul care a generat page
fault-ul/trap-ul.

Răzvan


More information about the so mailing list