作者: yvb 2014-01-08 02:10:00
page fault时, a应该尚未被修改,也尚无法被修改,所以如何检查?如果就这么return回去,仍会执行同指令,结果再度page fault吧.
作者: yvb 2014-01-08 12:34:00
真奇怪, 有文章被系统暗黑掉了... @.@判断page fault后续状况的问题, 我以为会相当复杂, 而且会是machine dependant; 最主要是要分析 ip 指向的指令做什么...比方 x86 的 mov 指令, 多种寻址法的指令长度都不尽相同...不知原PO是实作在什么平台上, 有什么kernel函式协助分析指令,或是我想太多, 其实光就 pt_regs 就足以判断?还有一些问题: (1) 造成 page fault 的是 userspace process还是 kernel thread? (2) handler改值前后, 需要切换 RO 吗?(3) 除了 mov, 其它如 add, xchg 等又是如何?关于 x86 指令集分析的处理, 不知原PO是自行包办,或是如何叫用 kernel 哪些函式来协助完成?问题 (1) 应改为 造成 page fault 的是 kernel thread,process 的 user space 或 kernel space ?此外还有更复杂的情况, 比方 a 为 int, 那么*(((char *)&a)+2)=1 或是 *(int *)(((char *)&a)-2)=-1 之类.当然, 如果一堆变量 b, c, ... 都和 a 同 page 时, 那效能...