modify each page in usertests countfree()
get rid of static for walk() and freewalk()
This commit is contained in:
parent
050a69610a
commit
8b9b799937
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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));
|
||||||
|
|
Loading…
Reference in a new issue