X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Finit.c;h=458f67cb2bbd7a7424950d8a219c9f08747c30f8;hb=4aef5aa2e21ef46c7fcfe03f81b8dd8c60c64286;hp=8ee50a2731b8730a2abef9caa4b88f747a8cce51;hpb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999;p=pintos-anon diff --git a/src/threads/init.c b/src/threads/init.c index 8ee50a2..458f67c 100644 --- a/src/threads/init.c +++ b/src/threads/init.c @@ -9,6 +9,7 @@ #include #include #include "devices/kbd.h" +#include "devices/input.h" #include "devices/serial.h" #include "devices/timer.h" #include "devices/vga.h" @@ -16,8 +17,8 @@ #include "threads/io.h" #include "threads/loader.h" #include "threads/malloc.h" -#include "threads/mmu.h" #include "threads/palloc.h" +#include "threads/pte.h" #include "threads/thread.h" #ifdef USERPROG #include "userprog/process.h" @@ -45,15 +46,8 @@ uint32_t *base_page_dir; If true, use multi-level feedback queue scheduler. */ bool enable_mlfqs; -#ifdef VM -/* -rndpg: - If false (default), use LRU page replacement policy. - If true, use random page replacement policy. */ -bool enable_random_paging; -#endif - #ifdef FILESYS -/* -f: Format the filesystem? */ +/* -f: Format the file system? */ static bool format_filesys; #endif @@ -97,6 +91,9 @@ main (void) argv = read_command_line (); argv = parse_options (argv); + /* Set random seed if parse_options() didn't. */ + random_init (0); + /* Initialize memory system. */ palloc_init (); malloc_init (); @@ -108,13 +105,11 @@ main (void) gdt_init (); #endif - /* Set random seed if parse_options() didn't. */ - random_init (0); - /* Initialize interrupt handlers. */ intr_init (); timer_init (); kbd_init (); + input_init (); #ifdef USERPROG exception_init (); syscall_init (); @@ -126,7 +121,7 @@ main (void) timer_calibrate (); #ifdef FILESYS - /* Initialize filesystem. */ + /* Initialize file system. */ disk_init (); filesys_init (format_filesys); #endif @@ -195,8 +190,9 @@ paging_init (void) /* Store the physical address of the page directory into CR3 aka PDBR (page directory base register). This activates our new page tables immediately. See [IA32-v2a] "MOV--Move - to/from Control Registers" and [IA32-v3] 3.7.5. */ - asm volatile ("mov %%cr3, %0" :: "r" (vtop (base_page_dir))); + 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))); } /* Breaks the kernel command line into words and returns them as @@ -225,7 +221,10 @@ read_command_line (void) /* Print kernel command line. */ printf ("Kernel command line:"); for (i = 0; i < argc; i++) - printf (" %s", argv[i]); + if (strchr (argv[i], ' ') == NULL) + printf (" %s", argv[i]); + else + printf (" '%s'", argv[i]); printf ("\n"); return argv; @@ -257,14 +256,9 @@ parse_options (char **argv) #ifdef USERPROG else if (!strcmp (name, "-ul")) user_page_limit = atoi (value); -#endif -#ifdef VM - else if (!strcmp (name, "-rndpg")) - enable_random_paging = true; #endif else PANIC ("unknown option `%s' (use -h for help)", name); - } return argv; @@ -366,9 +360,6 @@ usage (void) " -mlfqs Use multi-level feedback queue scheduler.\n" #ifdef USERPROG " -ul=COUNT Limit user memory to COUNT pages.\n" -#endif -#ifdef VM - " -rndpg Use random page replacement policy.\n" #endif ); power_off (); @@ -376,7 +367,7 @@ usage (void) /* Powers down the machine we're running on, - as long as we're running on Bochs or qemu. */ + as long as we're running on Bochs or QEMU. */ void power_off (void) { @@ -394,6 +385,8 @@ power_off (void) for (p = s; *p != '\0'; p++) outb (0x8900, *p); + asm ("cli; hlt"); + printf ("still running...\n"); for (;;); }