Physical pages that have been shared between processes are swapped out separately from ordinary pages. When the swap daemon attempts to swap out shared pages, it uses shm_segs, a vector of pointers to shmid_ds data structures to look through the shared pages for good candidates for swapping. For each shmid_ds there is a list of vm_area_struct structures which each describe how the virtual memory of a particular process is related to this shared memory area. Just like non-shared memory, the page table entries must be modified to show that the page is in the swap file. However, the page tables of all of the sharing processes must be modified before the page is written to the swap file and freed. The page table entries for each process are found by following the vm_mm pointer in each vm_area_struct structure. points at the level 1 page table for the process.