A reference to an invalid page is called a
Reason for Fault
Result
Accessing a page that isn’t resident in memory but is on disk in a page file or a mapped file
Allocate a physical page, and read the desired page from disk and into the relevant working set
Accessing a page that is on the standby or modified list
Transition the page to the relevant process, session, or system working set
Accessing a page that isn’t committed (for example, reserved address space or address space that isn’t allocated)
Access violation
Accessing a page from user mode that can be accessed only in kernel mode
Access violation
Writing to a page that is read-only
Access violation
Accessing a demand-zero page
Add a zero-filled page to the relevant working set
Writing to a guard page
Guard-page violation (if a reference to a user-mode stack, perform automatic stack expansion)
Writing to a copy-on-write page
Make process-private (or session-private) copy of page, and replace original in process, session, or system working set
Writing to a page that is valid but hasn’t been written to the current backing store copy
Set Dirty bit in PTE
Executing code in a page that is marked as no execute
Access violation (supported only on hardware platforms that support no execute protection)
The following section describes the four basic kinds of invalid PTEs that are processed by the access fault handler. Following that is an explanation of a special case of invalid PTEs, prototype PTEs, which are used to implement shareable pages.
Invalid PTEs
If the valid bit of a PTE encountered during address translation is zero, the PTE represents an invalid page—one that will raise a memory management exception, or page fault, upon reference. The MMU ignores the remaining bits of the PTE, so the operating system can use these bits to store information about the page that will assist in resolving the page fault.
The following list details the four kinds of invalid PTEs and their structure. These are often referred to as
Page file The desired page resides within a paging file. As illustrated in Figure 10-26, 4 bits in the PTE indicate in which of 16 possible page files the page resides, and 20 bits (in x86 non-PAE; more in other modes) provide the page number within the file. The pager initiates an in-page operation to bring the page into memory and make it valid. The page file offset is always non-zero and never all 1s (that is, the very first and last pages in the page file are not used for paging) in order to allow for other formats, described next.
Demand zero This PTE format is the same as the page file PTE shown in the previous entry, but the page file offset is zero. The desired page must be satisfied with a page of zeros. The pager looks at the zero page list. If the list is empty, the pager takes a page from the free list and zeroes it. If the free list is also empty, it takes a page from one of the standby lists and zeroes it.
Virtual address descriptor This PTE format is the same as the page file PTE shown previously, but in this case the page file offset field is all 1s. This indicates a page whose definition and backing store, if any, can be found in the process’s virtual address descriptor (VAD) tree. This format is used for pages that are backed by sections in mapped files. The pager finds the VAD that defines the virtual address range encompassing the virtual page and initiates an in-page operation from the mapped file referenced by the VAD. (VADs are described in more detail in a later section.)
Transition The desired page is in memory on either the standby, modified, or modified-no-write list or not on any list. As shown in Figure 10-27, the PTE contains the page frame number of the page. The pager will remove the page from the list (if it is on one) and add it to the process working set.