date: 2014-09-24 19:09函数
注:本文展现的代码来自2.4.0版本的内核,入口函数do_page_fault定义在<arch/mm/fault.c>中。指针
整体处理流程:blog
备注:进程
读取CR2寄存器获取出错地址? CPU在发出页面异常时,会将对应的地址存到CR2寄存器中,在页面异常的处理程序中就能够从CR2中读取到出错地址。由于要读取CR2寄存器,C语言没法作到,只能经过嵌入式汇编实现。it
当前进程的用户空间还没有创建? 前面讲过,每一个进程都对应一个mm_struct结构,该结构是对进程整个用户空间的抽象。在每一个进程的进程控制块即task_struct结构体中,有一个指针(mm)指向该进程的mm_struct结构。若是该指针为NULL,即表示当前进程的用户空间还没有创建(在后面讲进程调度与切换时,咱们还会看到另外一个状况:内核进程的mm指针也为NULL)。date