<p dir="ltr"></p>
<p dir="ltr">2016-04-02 14:48 GMT+03:00 Mihai Catalin Arsenescu via so <<a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a>>:<br>
> Buna ziua / Salut,</p>
<p dir="ltr">Salutare,</p>
<p dir="ltr">> 1. Fie cazul in care se scrie intr-o pagina care nu a fost alocata in<br>
> RAM(STATE_NOT_ALLOC).<br>
> Din enunt:<br>
> <quote><br>
> În momentul generării unui page fault și a alocării unei pagini<br>
> fizice, pagina virtuală este marcată read-only. Dacă accesul a fost de<br>
> scriere, se va genera un nou page fault și se va marca pagina<br>
> read-write. Astfel, un acces de citire la o pagină nemapată va genera<br>
> un page fault, iar pagina va fi mapată și marcată read-only. Un acces<br>
> de scriere la o pagină nemapată va genera două page fault-uri, iar<br>
> pagina va fi mapată și marcată read-write.<br>
> </quote><br>
> 1.1. Nu inteleg cum putem stii ce acces a fost; eu nu gasesc in<br>
> structura siginfo_t un camp care sa reflecte acest lucru. Acest<br>
> comportament(2 semnale la write) trebuie luat ca atare? Adica la un<br>
> acces de write se va apela de 2 ori handler-ul nostru fara ca noi sa<br>
> implementam acest lucru? Daca da, cum stim ca apelul este de write<br>
> sau read ?</p>
<p dir="ltr">Simulatorul trebuie să știe ce protecție are fiecare pagină, doar el este entitatea care gestionează paginile virtuale.</p>
<p dir="ltr">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.</p>
<p dir="ltr">> 1.2. Luand in calcul<br>
> <quote>Pentru a implementa logica de demand paging și cea de swapping<br>
> trebuie să interceptați page fault-urile produse în momentul unui<br>
> acces nevalid la o zonă de memorie. La interceptarea page<br>
> fault-urilor, folosiți modificări succesive ale drepturilor paginilor<br>
> pentru a implementa logica temei. La început, paginile nu au niciun<br>
> drept (PROTECTION_NONE).</quote>,<br>
> se vrea implementat urmatorul comportament?<br>
> <comportament><br>
> La primul acces la o memorie nemapata: se mapeaza in RAM si se face READ_ONLY<br>
> La al doilea acces(primul acces la o memorie mapata): se muta in RAM<br>
> si se face READ_WRITE.<br>
> </comportament></p>
<p dir="ltr">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.</p>
<p dir="ltr">> 1.3. Putem primi page fault pentru o pagina care se afla in RAM? Daca<br>
> da, acesta se datoreaza permisiunilor de acces?</p>
<p dir="ltr">Da, pentru ambele întrebări.</p>
<p dir="ltr">> 2. Prin mapare peste RAM se intelege demaparea din memorie<br>
> virtuala(unmap) si maparea(mmap) peste descriptorul de fisier RAM ?</p>
<p dir="ltr">Da.</p>
<p dir="ltr">Adrian</p>