我查看任务的vm_area_struct区域并尝试获取相应的struct page *(pages),但RAM中不存在某些页面:pte_present(* pte)返回0.我无法理解这种行为,因为我没有交换区域,所以我认为所有用户空间虚拟空间都映射到RAM中的显示页面。有人可以解释一下吗?
static struct page * get_page(unsigned long addr)
{
pgd_t *pgd;
pte_t *pte;
pud_t *pud;
pmd_t *pmd;
struct page *pg;
struct mm_struct *mm = current->mm;
pgd = pgd_offset(mm, addr);
if (pgd_none_or_clear_bad(pgd)) {
goto err;
}
pud = pud_offset(pgd, addr);
if (pud_none(*pud) || pud_bad(*pud)) {
goto err;
}
pmd = pmd_offset(pud, addr);
if (pmd_none(*pmd) || pmd_bad(*pmd)) {
goto err;
}
pte = pte_offset_map(pmd, addr);
if (!pte) {
goto err;
}
if (!pte_present(*pte)) {
PR("pte is not present\n");
goto err;
}
pg = pte_page(*pte);
if (!pg) {
pte_unmap(pte);
goto err;
}
pte_unmap(pte);
答案 0 :(得分:0)
pte_none检查pte中没有值,pte_present检查存在标志。
cache: false, // we do not need any browser posibble caches here..
success: callback,
// remove this line: jsonpCallback: 'jsonCallback',
因此换出页面的条件为#define pte_none(pte) (!pte_val(pte))
#define pte_present(pte) (pte_isset((pte), L_PTE_PRESENT))
在你的情况下,你将所有空的ptes解释为交换出来......
答案 1 :(得分:0)
可能是一个小页错误,其中保留了内存区域,但尚未分配数据。