我像这样运行用户应用程序:
char *buf = malloc(sizeof(int) * 100000);
int *a = (int *)buf;
int i = 0;
for(; i < 100000; i++)
{
a[i] = i;
}
我认为它肯定会触发页面错误,因为在我们触摸这些数据之前,malloc不会分配真实的物理空间。
我修改了linux内核(3.17.6) mm / memory.c:handle_pte_fault()就像这样
if (targetPid == current->pid)
printk(KERN_ALERT "soso : targetPid : %d, current->pid : %d\n", targetPid, current->pid);
这里“tartgetPid”是我传入内核的用户app pid, “current”是内核的宏
但这行永远不会触发,因为当内核处理页面错误时,它的当前pid将不会是触发页面错误的用户应用程序的pid。
我想问一下 当用户应用程序发生页面错误时,当内核处理此错误时,当前的pid是什么