[so] intrebari tema 5

Ioana Cutcutache so@cursuri.cs.pub.ro
Fri, 7 Jan 2005 11:13:53 +0200



> As mai avea cateva nelamuriri in legatura cu tema 5.
>
> Cum pot intercepta accesul la zona de memorie respectiva din biblioteca?
> De ex, cum pot intercepta in biblioteca faptul ca o intructiune in
> program de genul
> pointer[1000] = 10
> a accesat zona de memorie de la adresa 1000(in cadrul segementelor mele)
> ?

Tu vei avea nevoie sa interceptezi aceste accese atunci cand pagina
respectiva nu este in memoria fizica, ca sa o aduci in memorie, sau cand nu
are drept de acces corespunzator. Pentru a face interceptarea, dupa cum am
mai zis, trebuie sa pui protectii corespunzatoare pe pagini si un handler
pentru exceptie. In handler poti sa aflii si adresa care a generat exceptia.

> In cazul in care s-a incercat accesul la o pagina care nu era in
> memorie si s-a generat page fault, operatia trebuie facuta dupa ce
> pagina a fost adusa in memorie?
> De ex, daca s-a incercat
> pointer[100] = 10;
> Se genereaza page fault, dupa care se seteaza pointer de 100  = 10
> ?
> Daca da, cum as putea sa fac acest lucru? Adica sa retin valoarea
> respectiva, in cazul meu 10.

In mod automat dupa ce se genereaza exceptia si ea este tratata, se continua
prin reexecutia instructiunii care a generat exceptia.