コード例 #1
0
ファイル: pmm.c プロジェクト: TySag/project
//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");
}
コード例 #2
0
ファイル: pmm.c プロジェクト: haozhun/ucore_plus
/**
 * 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");
}