Lab: page tables
Print a page table
参照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);
}