At fork time:
	For all data and stack pages:
		For resident pages:
			Mark shared bit in parent PTE.
			Increment link count in CMAP.
			Copy parent PTE to child PTE.
		For swapped pages:
			Mark shared bit in parent PTE.
			Indicate fill from swap and shared in child PTE.

At fault time:
	If the faulted page was resident and shared:
		If the link count in CMAP is > 1:
			Allocate new page.
			Copy old page to new page.
			Create new PTE for the new page.
			Decrement link count in old CMAP.
		If the link count in CMAP == 1:
			Unmark shared bit in PTE.
	If the faulted page is on swap and shared:
		Swap the page in.
		For every process sharing the page:
			Mark the PTE as shared and resident.

During allocation of a page which is not gone:
	For each data or stack page which has a link count > 1:
		For each non-owner sharing the page:
			Mark the PTE as fill from swap and shared.

On exit or shrinking:
	If a resident shared page is owned by this process:
		Find a new owner for the page.

Issues:
	What if the owner of a swapped page exits or shrinks.
