Loading

page_print

Lab: page tables

参照freewalk()的写法,遍历页表,取出每一个页表项,判断PTE_V位对有效的页表项进行输出和递归,直到到达第三层,也就是物理地址那层。

使用PTE2PA完成页表项到物理地址的转换

void vmprint_helper(pagetable_t pg,int lev)
{
    int i,j;
    for(i=0;i<512;++i)
    {
        pte_t pte = pg[i];
        if(pte & PTE_V)
        {
        pagetable_t pa = (pagetable_t)PTE2PA(pte);
        for (j = 0; j < lev;++j)
        {
            printf("..");
            if(j<lev-1)
            printf(" ");
        }
        printf("%d: pte %p pa %p\n", i, pte, pa);
        if(lev<3)
            vmprint_helper(pa, lev + 1);
        }
    }
}

void vmprint(pagetable_t pg)
{
    printf("page table %p\n", pg);
    vmprint_helper(pg, 1);
}  
posted @ 2021-07-26 01:29  traver  阅读(35)  评论(0编辑  收藏  举报