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