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=eab41e4811b15d074acf74ab27592d9eb56bb678;hb=a03618133f7df0954802a470a4bee7674f7aed45;hpb=f415a37905c57f61b444806bf84f5405184452aa diff --git a/src/threads/palloc.c b/src/threads/palloc.c index eab41e4..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" @@ -35,26 +34,20 @@ struct pool }; /* Two pools: one for kernel data, one for user pages. */ -struct pool kernel_pool, user_pool; - -/* Maximum number of pages to put in user pool. */ -size_t user_page_limit = SIZE_MAX; +static struct pool kernel_pool, user_pool; 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;