【摘要】:当CPU发现对应页目录项或页表项的存在位标志为0,或当前进程没有访问指定页面的权限。该出错码指出了异常是由于页不存在引起的还是违反了访问权限引起的;在发生异常时CPU的当前特权层;以及是读操作还是写操作。出错码的格式是一个32位的长字,但只用了最后3个比特位。分别说明导致异常发生时的原因:CR2。如果在页异常处理程序执行期间允许发生另一个页异常,那么处理程序应该将CR2压入堆栈中。
4.7.1 Linux缺页中断的时机
当处理器在转换线性地址到物理地址的过程中检测到以下两种条件时,就会发生缺页异常中断。
当CPU发现对应页目录项或页表项的存在位(Present)标志为0,或当前进程没有访问指定页面的权限。
对于页异常处理中断,CPU提供了两项信息用来诊断页异常和从中恢复运行。
(1)放在堆栈上的出错码。该出错码指出了异常是由于页不存在引起的还是违反了访问权限引起的;在发生异常时CPU的当前特权层;以及是读操作还是写操作。出错码的格式是一个32位的长字,但只用了最后3个比特位。分别说明导致异常发生时的原因:
位2(U/S):0表示在超级用户模式下执行,1表示在用户模式下执行。
位1(W/R):0表示读操作,1表示写操作。
位0(P):0表示页不存在,1表示页级保护。
(2)CR2(控制寄存器2)。CPU将造成异常的用于访问的线性地址存放在CR2中。异常处理程序可以使用这个地址来定位相应的页目录和页表项。如果在页异常处理程序执行期间允许发生另一个页异常,那么处理程序应该将CR2压入堆栈中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。