How to display physical memory
in OS kernel code, a physical address is uint64, but it is often being cast as a void, or char, then carry around. I think this makes a lot of interface like memset, memcpy, etc more convenient to use.
void vmprint_helper(pagetable_t *pagetable*, char* prefix, int level) {
// there are 2^9 = 512 PTEs in a page table.
for(int k = 0; k < 512; k++) {
pte_t pte = pagetable[k];
if(pte & PTE_V) {
printf(“%s%d: pte %p pa %p\n”, prefix, k, pte, PTE2PA(pte));
int next_level = level - 1;
if (level > 0) {
uint64 child = PTE2PA(pte);
pagetable_t pt = (pagetable_t)child;
vmprint_helper(pt, print_prefix(next_level), next_level);
}
}
}
}
void vmprint(pagetable_t *pagetable*)
{
printf(“page table %p\n”, pagetable);
vmprint_helper(pagetable, “..”, 2);
}Another reason cast uint64 to void* is easy to print. (see above code about how to print page tables)
Last updated
Was this helpful?