Usuwanie pojedynczej strony z pamięci (cd.)
Sprawdzane są kolejno przypadki:
jeśli age = 0 to sprawdzamy dalej; wpp. postarzamy ją i zwracamy niepowodzenie próby zwolnienia ramki
bit ACCESSED = 1 ? czyścimy ten bit, odmładzamy stronę i zgłaszamy niepowodzenie
bit DIRTY = 1 ?
- strona ma kopię na dysku (sprawdzamy w tablicy swap_cache), to odmładzamy stronę i kasujemy kopię dyskową, bo jest już nieaktualna. Strona była zmodyfikowana niedawno, skoro nieaktualna kopia nie była jeszcze skasowana. Nie kasujemy bitu DIRTY i zwracamy niepowodzenie.
- strona nie ma kopii dyskowej, jest dostatecznie stara. Pobieramy wolną ramkę pamięci pomocniczej z urządzenia wymiany, zapisujemy na niej kopię strony (funkcja rw_swap_page), uaktualniamy tablicę stron procesu oraz sprzętowy bufor translacji (TLB, Translation Lookaside Buffer). W tablicy stron procesu wpisujemy dane o miejscu w pamięci pomocniczej, gdzie znajdzie się strona, oraz czyścimy bit PRESENT tej strony. Zwracamy sukces, tzn. zwalniamy ramkę.