modify each page in usertests countfree()

get rid of static for walk() and freewalk()
This commit is contained in:
Robert Morris 2020-08-07 05:32:48 -04:00
parent 050a69610a
commit 8b9b799937
4 changed files with 11 additions and 9 deletions

View file

@ -20,6 +20,7 @@ static void wakeup1(struct proc *chan);
extern char trampoline[]; // trampoline.S extern char trampoline[]; // trampoline.S
// initialize the proc table at boot time.
void void
procinit(void) procinit(void)
{ {
@ -145,8 +146,8 @@ freeproc(struct proc *p)
p->state = UNUSED; p->state = UNUSED;
} }
// Create a page table for a given process, // Create a user page table for a given process,
// with no user pages, but with trampoline pages. // with no user memory, but with trampoline pages.
pagetable_t pagetable_t
proc_pagetable(struct proc *p) proc_pagetable(struct proc *p)
{ {

View file

@ -97,7 +97,7 @@ struct proc {
// these are private to the process, so p->lock need not be held. // these are private to the process, so p->lock need not be held.
uint64 kstack; // Virtual address of kernel stack uint64 kstack; // Virtual address of kernel stack
uint64 sz; // Size of process memory (bytes) uint64 sz; // Size of process memory (bytes)
pagetable_t pagetable; // Page table pagetable_t pagetable; // User page table
struct trapframe *trapframe; // data page for trampoline.S struct trapframe *trapframe; // data page for trampoline.S
struct context context; // swtch() here to run process struct context context; // swtch() here to run process
struct file *ofile[NOFILE]; // Open files struct file *ofile[NOFILE]; // Open files

View file

@ -16,9 +16,7 @@ extern char etext[]; // kernel.ld sets this to end of kernel code.
extern char trampoline[]; // trampoline.S extern char trampoline[]; // trampoline.S
/* /*
* create a direct-map page table for the kernel and * create a direct-map page table for the kernel.
* turn on paging. called early, in supervisor mode.
* the page allocator is already initialized.
*/ */
void void
kvminit() kvminit()
@ -70,7 +68,7 @@ kvminithart()
// 21..39 -- 9 bits of level-1 index. // 21..39 -- 9 bits of level-1 index.
// 12..20 -- 9 bits of level-0 index. // 12..20 -- 9 bits of level-0 index.
// 0..12 -- 12 bits of byte offset within the page. // 0..12 -- 12 bits of byte offset within the page.
static pte_t * pte_t *
walk(pagetable_t pagetable, uint64 va, int alloc) walk(pagetable_t pagetable, uint64 va, int alloc)
{ {
if(va >= MAXVA) if(va >= MAXVA)
@ -278,7 +276,7 @@ uvmdealloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz)
// Recursively free page-table pages. // Recursively free page-table pages.
// All leaf mappings must already have been removed. // All leaf mappings must already have been removed.
static void void
freewalk(pagetable_t pagetable) freewalk(pagetable_t pagetable)
{ {
// there are 2^9 = 512 PTEs in a page table. // there are 2^9 = 512 PTEs in a page table.

View file

@ -2251,9 +2251,12 @@ countfree()
int n = 0; int n = 0;
while(1){ while(1){
if((uint64)sbrk(4096) == 0xffffffffffffffff){ uint64 a = (uint64) sbrk(4096);
if(a == 0xffffffffffffffff){
break; break;
} }
// modify the memory to make sure it's really allocated.
*(char *)(a - 1) = 1;
n += 1; n += 1;
} }
sbrk(-((uint64)sbrk(0) - sz0)); sbrk(-((uint64)sbrk(0) - sz0));