X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fpalloc.c;h=177001f3c1c4b4ae622422be84f356217ac6dcf5;hb=94d17ee9287aec1c4c9ee37ca02615e8293a5f3a;hp=cef065ae98f11a9e7cac3cee0971a4435949c1ef;hpb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999;p=pintos-anon diff --git a/src/threads/palloc.c b/src/threads/palloc.c index cef065a..177001f 100644 --- a/src/threads/palloc.c +++ b/src/threads/palloc.c @@ -9,8 +9,8 @@ #include #include "threads/init.h" #include "threads/loader.h" -#include "threads/mmu.h" #include "threads/synch.h" +#include "threads/vaddr.h" /* Page allocator. Hands out memory in page-size (or page-multiple) chunks. See malloc.h for an allocator that @@ -35,18 +35,16 @@ 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. */ @@ -54,7 +52,7 @@ palloc_init (void) /* Free memory. */ uint8_t *free_start = pg_round_up (&_end); - uint8_t *free_end = ptov (ram_pages * PGSIZE); + 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; @@ -107,7 +105,8 @@ palloc_get_multiple (enum palloc_flags flags, size_t page_cnt) return pages; } -/* Obtains and returns a single free page. +/* Obtains a single free page and returns its kernel virtual + address. If PAL_USER is set, the page is obtained from the user pool, otherwise from the kernel pool. If PAL_ZERO is set in FLAGS, then the page is filled with zeros. If no pages are