gpt4 book ai didi

linux-kernel - 为什么交换关闭时我的 pte 不显示页面

转载 作者:行者123 更新时间:2023-12-04 04:24:43 25 4
gpt4 key购买 nike

我遍历任务的 vm_area_struct 区域并尝试获取相应的结构页面 *(页面),但 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);

最佳答案

pte_none 检查 pte 中没有值,pte_present 检查存在标志。

#define pte_none(pte)           (!pte_val(pte))
#define pte_present(pte) (pte_isset((pte), L_PTE_PRESENT))

所以换出页面的条件是!pte_present && !pte_none

在您的情况下,您将所有空 ptes 解释为换出...

关于linux-kernel - 为什么交换关闭时我的 pte 不显示页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30231560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com