作者: 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 時, 那效能...