Swapping Out System V Shared Memory Pages
System V shared memory is an inter-process communication mechanism which allows two or more
processes to share virtual memory in order to pass information amongst themselves.
How processes share memory in this way is described in more detail in
the section on inter-process communication.
For now it is enough to say that each area of System V shared memory is described by
a shmid_ds data structure.
This contains a pointer to a list of vm_area_struct data structures, one for each process
sharing this area of virtual memory.
The vm_area_struct data structures describe where in each processes virtual memory this area
of System V shared memory goes.
Each vm_area_struct data structure for this System V shared memory is linked together using
the vm_next_shared and vm_prev_shared pointers.
Each shmid_ds data structure also contains a list of page table entries each of which describes the
physical page that a shared virtual page maps to.
The kernel swap daemon also uses a clock algorithm when swapping out
System V shared memory pages.
Each time it runs it remembers which page of which shared virtual memory area it last
swapped out.It does this by keeping two indices, the first is an index into the set
of shmid_ds data structures, the second into the list of page table entries
for this area of System V shared memory. This makes
sure that it fairly "victimizes" the areas of System V shared memory.
The kernel swap daemon must modify the page table of every process sharing an area
of virtual memory to reflect that a page has been moved from memory to the swap file
because the physical page frame number for any given virtual page of System V shared
memory is contained in the page tables of all of the processes sharing this area of
For each shared page it is swapping out, the kernel swap daemon finds the page table
entry in each of the sharing process' page tables (by following a pointer from each vm_area_struct data structure).
If this process' page table entry for this page of System V shared memory is valid, it converts it into
an invalid but swapped out page table entry and reduces this (shared) page's count of users by one.
The format of a swapped out System V shared page table entry contains an index into the set of shmid_ds
data structures and an index into the page table entries for this area of System V shared memory.
If the page's count is zero after the page tables of the sharing processes have all been modified, the
shared page can be written out to the swap file.
The page table entry in the list pointed at by the
shmid_ds data structure for this area of System V shared memory is replaced by a swapped out page
A swapped out page table entry is invalid but contains an index into the set of open swap files and the offset
in that file where the swapped out page can be found.
This information will be used when the page has to be brought back into physical memory.