Opis funkcji swap_out_vma

Funkcja:

static int swap_out_vma(struct mm_struct * mm, struct vm_area_struct * vma, unsigned long address, int count)

dostaje jako parametry:

Funkcja swap_out_vma sprawdza czy dany obszar VMA ma ustawione flagi:
VM_LOCKED lub VM_RESERVED.
Jeśli tak to nic nie robi z tym obszarem, bo flagi te oznaczają, że dany obszar nie może być zabrany z pamięci. W przeciwnym przypadku zaczyna wymianę ramek wchodzących w skład tego VMA i w tym celu wywołuje funkcję:

swap_out_pgd, która z kolei woła funkcję:   swap_out_pmd

Zadaniem tych dwóch funkcji jest wymiana wszystkich lub tylko count ramek należących do danego VMA. Toteż dla każdej ramki, o ile jest to poprawna ramka i nie ma ustawionej flagi zabraniającej wymiany, wołana jest funkcja:

try_to_swap_out

Funkcja try_to_swap_out dla zadanej ramki robi co następuje:
jeśli ramka ta przed chwilą była używana, procesor ustawił jej flagę dostępu, to zostawia ją w pamięci, ale kasuje tę flagę i zwiększa wiek o 3. W przeciwnym przypadku podejmuje się wymiany. Strona jest wymieniana jeśli jest na nią miejsce w obszarze wymiany. (to jest niewielkie uproszczenie, ale dobrze odzwierciedla całość).


Tomasz Szymko 27 listopada 2001