Salut! Multumesc pentru clarificari! Am inteles acum ce trebuie facut.
O zi frumoasa, Vlad 2018-04-21 16:14 GMT+03:00 Adrian Șendroiu <[email protected]>: > Salut, > > > Nu imi este foarte clar ce date ar trebui sa copiez mai exact dupa ce am > > facut apelul mmap pe adresa corespunzatoare si cu permisiunile > specificate. > > Initial, am crezut ca trebuie sa deschid executabilul in modul read si > sa ma > > folosesc de acel "offset" pentru a stii de unde mai exact copiez datele > din > > executabil in memorie. Apoi, am observat insa ca exista 2 segmente cu o > > aceeasi valoare pentru offset. > > În urma unui fault tu pornești de la o adresă virtuală - adresa unde > s-a făcut fault-ul. Mai departe poți să obții segmentul care conține > acea adresă. Apoi acel segment are un offset în fișier. > > Punând toate astea cap la cap, trebuie să faci ca în pagina în care > s-a făcut fault să ajungă datele corespunzătoare din fișier. Poți face > asta fie cu mmap direct peste fișier (variantă care merge pe Linux, > dar pe Windows n-o să meargă) sau cu alocarea unei pagini goale (în > sensul de mmap cu MAP_ANONYMOUS) + copierea datelor din fișier cu read > sau altceva. > > > Mai mult, nu inteleg ce este cu acel "file_size" si a cui proprietate > este > > mai exact. A intregului fisier? A unei portiuni de fisier corespunzatoare > > segmentului? Iar daca este a doua varianta, inseamna ca noi ar trebui sa > > copiem de la (size-urile segmentelor precedente + offestul segmentului > > curent)? > > E proprietatea segmentului respectiv. Trebuie să copiezi de la > offsetul respectiv + ce mai aduni ca să ajungi la pagina din segment > unde a fost fault-ul. În general nu ai treabă cu celelalte segmente. >
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
