"Tiberiu IORGULESCU (25243) via so" <[email protected]> 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 _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
