Next: Funkcja try_to_swap_out()
Up: Listy active_list, inactive_dirty_list oraz
Previous: inactive_dirty_list
  Spis tresci
Każda strona należy do pewnej strefy (page->zone), związanej z algorytmem bliźniaków.
Strefy posiadają listy nieaktywnych czystych stron czyli zone->inactive_clean_list.
Strony, które znajdują się na takiej liście mogą w każdej chwili zostać zwolnione, ponieważ
albo zostały one zapisane na urządzeniu swappującym, albo są mapami plików, które można w każdej
chwili ściągnąć z dysku jeżeli ktoś się do nich odwoła.
Czyli są to strony gotowe do zwolnienia, ale zajmujące jeszcze miejsce w pamięci.
W tej sytuacji jeżeli np. algorytm bliźniaków będzie potrzebował przy alokowaniu pamięci
wolnych stron, w którejś strefie wywołuje funkcję reclaim_page(zone), która zwraca stronę
gotową do zwolnienia (czyli wywołania __free_page(page)).
Funkcja reclaim_page() (plik mm/vmscan.c) wykonuje następujące czynności:
struct page * reclaim_page(zone_t *zone)
for each in zone->inactive_clean_list do
jeżeli strona ma ustawiony bit PG_referenced
wstaw stronę na listę active_list
continue;
jeżeli strona ma ustawiony bit PG_dirty
wstaw stronę na listę inactive_dirty_list
continue;
del_page_from_inactive_clean_list(page)
/* usuwamy stronę z list; teraz już do żadnej nie należy */
jeżeli strona ma swoje cache
/* niszczymy dodatkowe struktury związane ze swappowaniem strony */
__delete_from_swap_cache(page);
return page;
if (page->mapping)
/* strona jest mapą pliku, więc trzeba ustawić odpowiednie informacje w strukturach danych inodów */
__remove_inode_page(page);
return page;
Poniższy diagram pokazuje zależności między listami i rodzaje migracji stron między nimi:
Łukasz Heldt
2001-12-18