X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fthreads%2Fpalloc.c;h=4fc8394c8f078a20c5a48722c36e3e022658620e;hp=d5d513fec06871cbca165e1cfadfadc4895b5330;hb=a03618133f7df0954802a470a4bee7674f7aed45;hpb=4391570c999cec9592799ada19df5f91683da58a diff --git a/src/threads/palloc.c b/src/threads/palloc.c index d5d513f..4fc8394 100644 --- a/src/threads/palloc.c +++ b/src/threads/palloc.c @@ -7,7 +7,6 @@ #include #include #include -#include "threads/init.h" #include "threads/loader.h" #include "threads/synch.h" #include "threads/vaddr.h" @@ -37,24 +36,18 @@ struct pool /* Two pools: one for kernel data, one for user pages. */ static struct pool kernel_pool, user_pool; -/* Maximum number of pages to put in user pool. */ -size_t user_page_limit = SIZE_MAX; - static void init_pool (struct pool *, void *base, size_t page_cnt, const char *name); static bool page_from_pool (const struct pool *, void *page); -/* Initializes the page allocator. */ +/* Initializes the page allocator. At most USER_PAGE_LIMIT + pages are put into the user pool. */ void -palloc_init (void) +palloc_init (size_t user_page_limit) { - /* End of the kernel as recorded by the linker. - See kernel.lds.S. */ - extern char _end; - - /* Free memory. */ - uint8_t *free_start = pg_round_up (&_end); - uint8_t *free_end = ptov (ram_pages * PGSIZE); + /* Free memory starts at 1 MB and runs to the end of RAM. */ + uint8_t *free_start = ptov (1024 * 1024); + uint8_t *free_end = ptov (init_ram_pages * PGSIZE); size_t free_pages = (free_end - free_start) / PGSIZE; size_t user_pages = free_pages / 2; size_t kernel_pages;