3

我像这样运行一个用户应用程序:

char *buf = malloc(sizeof(int) * 100000);
int *a = (int *)buf;
int i = 0;
for(; i < 100000; i++)
{
    a[i] = i;
}

我认为它肯定会触发页面错误,因为 malloc 在我们接触这些数据之前不会分配真正的物理空间。

我修改了 linux kernel(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”是我传入内核的用户应用程序 pid,“current”是内核的宏

但是这条线从未触发,因为当内核处理页面错误时,当前的 pid 不会是触发页面错误的用户应用程序的 pid。

我想问当用户应用程序中发生页面错误时,内核处理此错误时的当前pid是什么

4

0 回答 0