[so] [Tema3][General]

Adrian Stanciu adrian.stanciu.pub at gmail.com
Sat Apr 2 15:27:10 EEST 2016


2016-04-02 14:48 GMT+03:00 Mihai Catalin Arsenescu via so <
so at cursuri.cs.pub.ro>:
> Buna ziua / Salut,

Salutare,

> 1. Fie cazul in care se scrie intr-o pagina care nu a fost alocata in
> RAM(STATE_NOT_ALLOC).
> Din enunt:
> <quote>
> În momentul generării unui page fault și a alocării unei pagini
> fizice, pagina virtuală este marcată read-only. Dacă accesul a fost de
> scriere, se va genera un nou page fault și se va marca pagina
> read-write. Astfel, un acces de citire la o pagină nemapată va genera
> un page fault, iar pagina va fi mapată și marcată read-only. Un acces
> de scriere la o pagină nemapată va genera două page fault-uri, iar
> pagina va fi mapată și marcată read-write.
> </quote>
> 1.1. Nu inteleg cum putem stii ce acces a fost; eu nu gasesc in
> structura siginfo_t un camp care sa reflecte acest lucru. Acest
> comportament(2 semnale la write) trebuie luat ca atare? Adica la un
> acces de write se va apela de 2 ori handler-ul nostru fara ca noi sa
> implementam acest lucru? Daca da, cum stim ca apelul este de write
> sau read ?

Simulatorul trebuie să știe ce protecție are fiecare pagină, doar el este
entitatea care gestionează paginile virtuale.

Dacă pagina este nealocată, la un acces de scriere se generează un page
fault pentru care pagina este mapată în RAM cu protecție read-only. Imediat
se generează un nou page fault din cauza protecției iar pagina este marcată
read-write. În acest moment operația de scriere se poate realiza cu succes.

> 1.2. Luand in calcul
> <quote>Pentru a implementa logica de demand paging și cea de swapping
> trebuie să interceptați page fault-urile produse în momentul unui
> acces nevalid la o zonă de memorie. La interceptarea page
> fault-urilor, folosiți modificări succesive ale drepturilor paginilor
> pentru a implementa logica temei. La început, paginile nu au niciun
> drept (PROTECTION_NONE).</quote>,
> se vrea implementat urmatorul comportament?
> <comportament>
> La primul acces la o memorie nemapata: se mapeaza in RAM si se face
READ_ONLY
> La al doilea acces(primul acces la o memorie mapata): se muta in RAM
> si se face READ_WRITE.
> </comportament>

Da, pentru primul acces. Al doilea fault apare la un acces de scriere dar
pagina este deja în RAM (dacă între timp nu a fost mutată în swap), deci se
modifică doar protecția ei.

> 1.3. Putem primi page fault pentru o pagina care se afla in RAM? Daca
> da, acesta se datoreaza permisiunilor de acces?

Da, pentru ambele întrebări.

> 2. Prin mapare peste RAM se intelege demaparea din memorie
> virtuala(unmap) si maparea(mmap) peste descriptorul de fisier RAM ?

Da.

Adrian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20160402/143cca13/attachment.html>


More information about the so mailing list