Opis przydzielania procesowi pamięci fizycznej

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