mrpre
发表于 2016-11-29 11:02
回复 15# mordorwww
哥们你找到在哪里更新进程页目录了吗,我也有这个疑问。
我一个进程在系统调用中调用了vmalloc, vmalloc只更新了init_mm的页目录、页表;并没有更新进程的页目录和页表。
g_v_pk = 1;
ptr = vmalloc(PAGE_SIZE);
if(ptr)
{
*((u32*)ptr) = 1;
vfree(ptr);
}
g_v_pk = 0;
我在 do_page_fault 时加入
if(g_v_pk)
{
printk("do_page_fault address:%lx\n",address);
}
神奇的是,我在给ptr赋值时,没有产生缺页中断。
mrpre
发表于 2016-11-29 11:16
回复 21# mrpre
更奇怪的是,执行了*((u32*)ptr) = 1;
之后,进程对应的页目录还是空。。。我cpu是mips,难道检测到地址是vmalloc的地址,就直接查询了init_mm页表?