Wszystko co do tej pory opisałem dotyczyło wirtualnej
pamięci procesu. W szczególności nigdzie nie pisałem żeby proces
wpisywał cokolwiek do pamięci fizycznej. Więc jak to się dzieje, że
operując ,,tylko'' na pamięci wirtualnej, proces cokolwiek potrafi zrobić?
Otóż w czasie gdy proces odwołuje się do swojej pamięci pod jakiś adres
wirtualny, procesor tłumaczy ten adres na adres fizyczny i próbuje
wykonać żądaną operację na fizycznej komórce pamięci odpowiadającej
podanemu adresowi wirtualnemu. W tym momencie procesor zaprotestuje, bo
przecież pod danym adresem nic nie ma! Protest objawi się wygenerowaniem
wyjątku braku strony (ang. page fault). Na szczęście jądro Linuxa
przejmuje obsługę tego wyjątku i nie grozi nam totalna klapa.
Obsługą brakującej strony zajmuje się procedura do_page_fault.
Jej zadaniem jest rozpoznanie przyczyny wystąpienia tego wyjątku.
W naszym przypadku przyczyną17jest brak strony w pamięci. Wobec czego zostaje znaleziony
VMA do którego należy dany adres i zostaje wywołana funkcja
skojarzona18
z tym VMA, która załaduje odpowiednią stronę do pamięci19.
Zainteresowanym szczegółami technicznymi
proponuję zajrzeć do poniższych funkcji:
-- do_page_fault jest ona w pliku fault.c
-- handle_mm_fault jest ona w pliku memory.c
-- handle_pte_fault jest ona w pliku memory.c
-- do_no_page jest ona w pliku memory.c
Tomasz Szymko 27 listopada 2001