我正在编写程序来计算linux系统中页面错误的时间.更确切地说,时间内核执行该功能__do_page_fault.
并不知我写了两个全局变量,命名pfcount_at_beg和pfcount_at_end,当功能,增加一次__do_page_fault在函数的不同地点被执行.
为了说明,修改后的功能如下:
unsigned long pfcount_at_beg = 0;
unsigned long pfcount_at_end = 0;
static void __kprobes
__do_page_fault(...)
{
struct vm_area_sruct *vma;
... // VARIABLES DEFINITION
unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
pfcount_at_beg++; // I add THIS
...
...
// ORIGINAL CODE OF THE FUNCTION
...
pfcount_at_end++; // I add THIS
}
Run Code Online (Sandbox Code Playgroud)
我预计pfcount_at_end的值小于pfcount_at_beg的值.
因为,我认为,每次内核执行代码指令时pfcount_at_end++,它都必须执行pfcount_at_beg++(每个函数都从代码的最开始处开始).
另一方面,由于return这两行代码之间存在许多条件.
然而,结果反过来说.值pfcount_at_end大于pfcount_at_beg.的值.
我用来printk通过自定义打印这些内核变量syscall.我写了用户级程序来调用system …