//print_pgdir - print the PDT&PT void print_pgdir(int (*printf) (const char *fmt, ...)) { printf("-------------------- BEGIN --------------------\n"); size_t left, right = 0, perm; while ((perm = get_pgtable_items(0, NPDEENTRY, right, vpd, &left, &right)) != 0) { printf("PDE(%03x) %08x-%08x %08x %s\n", right - left, left * PTSIZE, right * PTSIZE, (right - left) * PTSIZE, perm2str(perm)); size_t l, r = left * NPTEENTRY; while ((perm = get_pgtable_items(left * NPTEENTRY, right * NPTEENTRY, r, vpt, &l, &r)) != 0) { printf(" |-- PTE(%05x) %08x-%08x %08x %s\n", r - l, l * PGSIZE, r * PGSIZE, (r - l) * PGSIZE, perm2str(perm)); } } printf("--------------------- END ---------------------\n"); }
/** * Print the page table. * If no current->mm->pgdir, print boot_pgdir, or print the pgdir of the current user process instead. */ void print_pgdir(int (*printf)(const char *fmt, ...)) { printf("-------------------- BEGIN --------------------\n"); size_t left, right = 0, perm; pde_t* pgdir = boot_pgdir; if (current != NULL && current->mm != NULL && current->mm->pgdir != NULL) { pgdir = current->mm->pgdir; } while ((perm = get_pgtable_items(0, NPDEENTRY, right, pgdir, &left, &right)) != 0) { printf("PDE(%03x) %08x-%08x %08x %s\n", right - left, left * PTSIZE, right * PTSIZE, (right - left) * PTSIZE, perm2str(perm)); size_t l, r = left * NPTEENTRY; while ((perm = get_pgtable_items_2 (left * NPTEENTRY, right * NPTEENTRY, r, pgdir, &l, &r)) != 0) { printf(" |-- PTE(%05x) %08x-%08x %08x %s\n", r - l, l * PGSIZE, r * PGSIZE, (r - l) * PGSIZE, perm2str(perm)); } } printf("--------------------- END ---------------------\n"); }