【发布时间】:2016-12-09 20:25:25
【问题描述】:
即使页表项已经存在,我也想故意生成页面错误。
所以我清除了_PAGE_PRESENT 位以生成页面错误。
这是我写的内核代码:
pte = get_locked_pte(mm, addr, &ptl);
entry = *pte;
entry = pte_clear_flags(entry, _PAGE_PRESENT);
set_pte_at(mm, addr, pte, entry);
pte_unmap_unlock(pte, ptl);
flush_tlb_range(vma, vma->vm_start, vma->vm_end);
但是,此代码不起作用。我想要的页面错误不会发生。我想确切地知道如何触发页面错误。
谢谢。
【问题讨论】:
-
你想写内核代码还是用户态代码?
-
您是否正在编写内核代码来触发用户级代码中的页面错误?
-
以上代码为内核代码。在上面的代码中,“addr”是用户空间的地址。
-
@JungsikChoi 你如何检查它没有发生?
标签: c linux memory-management linux-kernel virtual-memory