X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Finit.c;h=b89b282435ffa4fd284c776049dcc4c45a60c66c;hb=0fd3a243b790dd1cfc9e0a40c57dddde56cf344d;hp=5961deba3e6f8d82cd0e75abab89321d87cda597;hpb=49c19e58aa14fba779bfe331b1ebaba62d31dfa5;p=pintos-anon diff --git a/src/threads/init.c b/src/threads/init.c index 5961deb..b89b282 100644 --- a/src/threads/init.c +++ b/src/threads/init.c @@ -13,6 +13,7 @@ #include "devices/serial.h" #include "devices/timer.h" #include "devices/vga.h" +#include "devices/rtc.h" #include "threads/interrupt.h" #include "threads/io.h" #include "threads/loader.h" @@ -71,23 +72,17 @@ main (void) /* 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 %'zu kB RAM...\n", ram_pages * PGSIZE / 1024); - /* Break command line into arguments and parse options. */ argv = read_command_line (); argv = parse_options (argv); - /* Set random seed if parse_options() didn't. */ - random_init (0); + /* Initialize ourselves as a thread so we can use locks, + then enable console locking. */ + thread_init (); + console_init (); + + /* Greet user. */ + printf ("Pintos booting with %'zu kB RAM...\n", ram_pages * PGSIZE / 1024); /* Initialize memory system. */ palloc_init (); @@ -189,7 +184,7 @@ paging_init (void) new page tables immediately. See [IA32-v2a] "MOV--Move to/from Control Registers" and [IA32-v3a] 3.7.5 "Base Address of the Page Directory". */ - asm volatile ("movl %0, %%cr3" :: "r" (vtop (base_page_dir))); + asm volatile ("movl %0, %%cr3" : : "r" (vtop (base_page_dir))); } /* Breaks the kernel command line into words and returns them as @@ -257,6 +252,16 @@ parse_options (char **argv) else PANIC ("unknown option `%s' (use -h for help)", name); } + + /* Initialize the random number generator based on the system + time. This has no effect if an "-rs" option was specified. + + When running under Bochs, this is not enough by itself to + get a good seed value, because the pintos script sets the + initial time to a predictable value, not to the local time, + for reproducibility. To fix this, give the "-r" option to + the pintos script to request real-time execution. */ + random_init (rtc_get_time ()); return argv; }