Memory Management Walk Through
Page Tables
Page TableCreating kernel address space
Allocate a kernel stack for each process
void
procinit(void)
{
struct proc *p;
initlock(&pid_lock, “nextpid”);
for(p = proc; p < &proc[NPROC]; p++) {
initlock(&p->lock, “proc”);
// Allocate a page for the process’s kernel stack.
// Map it high in memory, followed by an invalid
// guard page.
char *pa = kalloc();
if(pa == 0)
panic(“kalloc”);
uint64 va = KSTACK((int) (p - proc));
kvmmap(va, (uint64)pa, PGSIZE, PTE_R | PTE_W);
p->kstack = va;
}
kvminithart();
}
TLB cache
Physical Memory Allocation
xv6 buddy allocatorProcess Address Space
How exec works
How exec() worksexec worksHow stack look after pushing args?

Find PA from VA
Exercises
Last updated