Cleanup comments and fit setupkvm on same page as kmap, which aligns lots of other things
This commit is contained in:
parent
14835ec987
commit
9e4272c14e
1 changed files with 6 additions and 10 deletions
16
vm.c
16
vm.c
|
@ -92,10 +92,9 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
|
|||
|
||||
// The mappings from logical to virtual are one to one (i.e.,
|
||||
// segmentation doesn't do anything). There is one page table per
|
||||
// process, plus one that's used when a CPU is not running any
|
||||
// process (kpgdir). A user process uses the same page table as
|
||||
// the kernel; the page protection bits prevent it from using
|
||||
// anything other than its memory.
|
||||
// process, plus one that's used when a CPU is not running any process
|
||||
// (kpgdir). A user process uses the same page table as the kernel; the
|
||||
// page protection bits prevent it from accessing kernel memory.
|
||||
//
|
||||
// setupkvm() and exec() set up every page table like this:
|
||||
// 0..KERNBASE: user memory (text+data+stack+heap), mapped to some free
|
||||
|
@ -108,10 +107,9 @@ mappages(pde_t *pgdir, void *va, uint size, uint pa,
|
|||
// 0xfe000000..0: mapped direct (devices such as ioapic)
|
||||
//
|
||||
// The kernel allocates memory for its heap and for user memory
|
||||
// between kernend and the end of physical memory (PHYSTOP).
|
||||
// The virtual address space of each user program includes the kernel
|
||||
// (which is inaccessible in user mode). The user program sits in
|
||||
// the bottom of the address space, and the kernel at the top at KERNBASE.
|
||||
// between KERNBASE+end and the end of physical memory (PHYSTOP).
|
||||
// The user program sits in the bottom of the address space, and the
|
||||
// kernel at the top at KERNBASE.
|
||||
static struct kmap {
|
||||
void *virt;
|
||||
uint phys_start;
|
||||
|
@ -134,14 +132,12 @@ setupkvm(char* (*alloc)(void))
|
|||
if((pgdir = (pde_t*)alloc()) == 0)
|
||||
return 0;
|
||||
memset(pgdir, 0, PGSIZE);
|
||||
k = kmap;
|
||||
if (p2v(PHYSTOP) > (void*)DEVSPACE)
|
||||
panic("PHYSTOP too high");
|
||||
for(k = kmap; k < &kmap[NELEM(kmap)]; k++)
|
||||
if(mappages(pgdir, k->virt, k->phys_end - k->phys_start,
|
||||
(uint)k->phys_start, k->perm, alloc) < 0)
|
||||
return 0;
|
||||
|
||||
return pgdir;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue