As stated previously, the Linux Page Fault exception handler must distinguish exceptions caused by programming errors from those caused by a reference to a page that legitimately belongs to the process address space but simply hasn't been allocated yet.
The memory region descriptors allow the exception handler to
perform its job quite efficiently. The
do_page_fault( ) function, which is the Page
Fault interrupt service routine for the 80 × 86 architecture, compares
the linear address that caused the Page Fault against the memory regions
current process; it can thus
determine the proper way to handle the exception according to the scheme
that is illustrated in Figure
Figure 9-4. Overall scheme for the Page Fault handler
In practice, things are a lot more complex because the Page Fault handler must recognize several particular subcases that fit awkwardly into the overall scheme, and it must distinguish several kinds of legal access. A detailed flow diagram of the handler is illustrated in Figure 9-5.
no_context are labels appearing in
do_page_fault( ) that should help you to
relate the blocks of the flow diagram to specific lines of code.
do_ page_fault( ) function
accepts the following input parameters:
regs address of a
pt_regs structure containing the values of the microprocessor ...