Библиотека сайта rus-linux.net
The book is available and called simply "Understanding The Linux Virtual Memory Manager". There is a lot of additional material in the book that is not available here, including details on later 2.4 kernels, introductions to 2.6, a whole new chapter on the shared memory filesystem, coverage of TLB management, a lot more code commentary, countless other additions and clarifications and a CD with lots of cool stuff on it. This material (although now dated and lacking in comparison to the book) will remain available although I obviously encourge you to buy the book from your favourite book store :-) . As the book is under the Bruce Perens Open Book Series, it will be available 90 days after appearing on the book shelves which means it is not available right now. When it is available, it will be downloadable from http://www.phptr.com/perens so check there for more information.
To be fully clear, this webpage is not the actual book.
Next: 11.6 Page Replacement Policy Up: 11. Page Frame Reclamation Previous: 11.4 Shrinking all caches   Contents   Index
max_mapped pages have been found in the page cache,
swap_out() is called to start swapping out process pages. Starting
mm_struct pointed to by
swap_mm and the
swap_address, the page tables are searched
nr_pages have been freed.
All process mapped pages are examined regardless of where they are in the
lists or when they were last referenced but pages which are part of the
active_list or have been recently referenced will be skipped
over. The examination of hot pages is a bit costly but insignificant in
comparison to linearly searching all processes for the PTEs that reference
Once it has been decided to swap out pages from a process, an attempt will
be made to swap out at least
SWAP_CLUSTER number of pages and the
full list of
mm_structs will only be examined once to avoid
constant looping when no pages are available. Writing out the pages in bulk
increases the chance that pages close together in the process address space
will be written out to adjacent slots on disk.
swap_mm is initialised to point to
init_mm and the
swap_address is initialised to 0 the first time it is used. A
task has been fully searched when the
swap_address is equal to
TASK_SIZE. Once a task has been selected to swap pages from,
the reference count to the
mm_struct is incremented so that it
will not be freed early and
swap_out_mm() is called with the
mm_struct as a parameter. This function walks each
VMA the process holds and calls
swap_out_vma() for it. This
is to avoid having to walk the entire page table which will be largely
swap_out_pmd() walk the
page tables for given VMA until finally
is called on the actual page and PTE.
try_to_swap_out() first checks to make sure the page is not part
active_list, been recently referenced or part of a zone
that we are not interested in. Once it has been established this is a page
to be swapped out, it is removed from the page tables of the process and
further work is performed. It is at this point the PTE is checked to see if
it is dirty. If it is, the
struct page flags will be updated
to reflect that so that it will get laundered. Pages with buffers are not
handled further as they can not be swapped out to backing storage so the PTE
for the process is simply established again and the page will be flushed later.
The process of allocating space in the backing storage and swapping pages out is discussed further in Chapter 12.
Next: 11.6 Page Replacement Policy Up: 11. Page Frame Reclamation Previous: 11.4 Shrinking all caches   Contents   Index Mel 2004-02-15