X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Finit.c;h=ef67071aec53daceb476b02faf3af4fe48fd7824;hb=059da604af2d69cf3a765df3d63db693edf51d3b;hp=9774493d9e31f8af5687d421d3f0d987e17f389f;hpb=34a1a2cf11500505e74ae5796e88de0d8de00958;p=pintos-anon diff --git a/src/threads/init.c b/src/threads/init.c index 9774493..ef67071 100644 --- a/src/threads/init.c +++ b/src/threads/init.c @@ -62,27 +62,33 @@ int main (void) NO_RETURN; int main (void) { - /* Initialize everything needed for printf() first. */ + /* Clear BSS and get machine's RAM size. */ ram_init (); + + /* Initialize ourselves as a thread so we can use locks. */ thread_init (); + + /* Initialize the console so we can use printf(). */ vga_init (); serial_init_poll (); console_init (); /* Greet user. */ - printf ("Pintos booting with %'zd kB RAM...\n", ram_pages * (PGSIZE / 1024)); + printf ("Pintos booting with %'zu kB RAM...\n", ram_pages * PGSIZE / 1024); /* Parse command line. */ argv_init (); - /* Initialize memory system, segments, paging. */ + /* Initialize memory system. */ palloc_init (); + malloc_init (); paging_init (); + + /* Segmentation. */ #ifdef USERPROG tss_init (); gdt_init (); #endif - malloc_init (); /* Set random seed if argv_init() didn't. */ random_init (0); @@ -122,14 +128,15 @@ main (void) #endif } #else + /* Run the compiled-in test function. */ test (); #endif + /* Finish up. */ if (do_power_off) power_off (); - - /* Terminate this thread. */ - thread_exit (); + else + thread_exit (); } /* Clear BSS and obtain RAM size from loader. */ @@ -222,9 +229,11 @@ argv_init (void) #ifdef USERPROG else if (!strcmp (argv[i], "-ex")) initial_program = argv[++i]; + else if (!strcmp (argv[i], "-ul")) + user_page_limit = atoi (argv[++i]); #endif #ifdef FILESYS - else if (!strcmp (argv[i], "-f")) + else if (!strcmp (argv[i], "-f")) format_filesys = true; else if (!strcmp (argv[i], "-ci")) { @@ -250,6 +259,7 @@ argv_init (void) " -d CLASS[,...] Enable the given classes of debug messages.\n" #ifdef USERPROG " -ex 'PROG [ARG...]' Run PROG, passing the optional arguments.\n" + " -ul USER_MAX Limit user memory to USER_MAX pages.\n" #endif #ifdef FILESYS " -f Format the filesystem disk (hdb or hd0:1).\n"