/* -r: Reboot after kernel tasks complete? */
static bool reboot_when_done;
+/* -ul: Maximum number of pages to put into palloc's user pool. */
+static size_t user_page_limit = SIZE_MAX;
+
static void ram_init (void);
static void paging_init (void);
printf ("Pintos booting with %'zu kB RAM...\n", ram_pages * PGSIZE / 1024);
/* Initialize memory system. */
- palloc_init ();
+ palloc_init (user_page_limit);
malloc_init ();
paging_init ();
/* 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. */
PAL_USER = 004 /* User page. */
};
-/* Maximum number of pages to put in user pool. */
-extern size_t user_page_limit;
-
-void palloc_init (void);
+void palloc_init (size_t user_page_limit);
void *palloc_get_page (enum palloc_flags);
void *palloc_get_multiple (enum palloc_flags, size_t page_cnt);
void palloc_free_page (void *);