void i386_init(void) { extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); cprintf("6828 decimal is %o octal!\n", 6828); // Lab 2 memory management initialization functions mem_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Acquire the big kernel lock before waking up APs // Your code here: lock_kernel(); // Starting non-boot CPUs boot_aps(); // Start fs. ENV_CREATE(fs_fs, ENV_TYPE_FS); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. //<<<<<<< HEAD ENV_CREATE(user_icode, ENV_TYPE_USER); //======= // ENV_CREATE(user_dumbfork, ENV_TYPE_USER); //>>>>>>> lab4 #endif // TEST* // Should not be necessary - drains keyboard because interrupt has given up. kbd_intr(); // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); //bluesea //经测试,下面的语句会输出:edata f0114300, end f0114970 //因此,edata < end, [edata, end)之间是bss段, kernel需要用的global variable. // > end之后的内存可以用于boot_alloc //cprintf("edata %x, end %x\n", edata, end); cprintf("6828 decimal is %o octal!\n", 6828); // Lab 2 memory management initialization functions mem_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Acquire the big kernel lock before waking up APs // Your code here: lock_kernel(); // Starting non-boot CPUs boot_aps(); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. //ENV_CREATE(user_primes, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); ENV_CREATE(user_dumbfork, ENV_TYPE_USER); #endif // TEST* // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); cprintf("372 decimal is %o octal!\n", 372); // Lab 2 memory management initialization functions mem_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Acquire the big kernel lock before waking up APs // Your code here: lock_kernel(); // Starting non-boot CPUs boot_aps(); // Should always have idle processes at first. int i; for (i = 0; i < NCPU; i++) ENV_CREATE(user_idle, ENV_TYPE_IDLE); // ENV_CREATE(user_yield, ENV_TYPE_USER); // ENV_CREATE(user_yield, ENV_TYPE_USER); // ENV_CREATE(user_yield, ENV_TYPE_USER); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. ENV_CREATE(user_primes, ENV_TYPE_USER); #endif // TEST* // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { /* __asm __volatile("int $12"); */ extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); cprintf("6828 decimal is %o octal!\n", 6828); extern char end[]; end_debug = read_section_headers((0x10000+KERNBASE), (uintptr_t)end); // Lab 2 memory management initialization functions x64_vm_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Acquire the big kernel lock before waking up APs // Your code here: //Starting non-boot CPUs lock_kernel(); boot_aps(); // Start fs. ENV_CREATE(fs_fs, ENV_TYPE_FS); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. //ENV_CREATE(user_icode, ENV_TYPE_USER); // Should not be necessary - drains keyboard because interrupt has given up. //kbd_intr(); //ENV_CREATE(user_primes, ENV_TYPE_USER); //ENV_CREATE(user_testpteshare, ENV_TYPE_USER); //ENV_CREATE(user_testfdsharing, ENV_TYPE_USER); //ENV_CREATE(user_testbss, ENV_TYPE_USER); //ENV_CREATE(user_spawnhello, ENV_TYPE_USER); ENV_CREATE(user_icode, ENV_TYPE_USER); //ENV_CREATE(user_testshell, ENV_TYPE_USER); //ENV_CREATE(user_testfile, ENV_TYPE_USER); //ENV_CREATE(user_primespipe, ENV_TYPE_USER); //ENV_CREATE(user_testkbd, ENV_TYPE_USER); #endif // TEST* // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { /* __asm __volatile("int $12"); */ extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); cprintf("6828 decimal is %o octal!\n", 6828); #ifdef VMM_GUEST /* Guest VMX extension exposure check */ { uint32_t ecx = 0; cpuid(0x1, NULL, NULL, &ecx, NULL); if (ecx & 0x20) panic("[ERR] VMX extension exposed to guest.\n"); else cprintf("VMX extension hidden from guest.\n"); } #endif #ifndef VMM_GUEST extern char end[]; end_debug = read_section_headers((0x10000+KERNBASE), (uintptr_t)end); #endif // Lab 2 memory management initialization functions x64_vm_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); #ifndef VMM_GUEST // Lab 4 multiprocessor initialization functions lapic_init(); #endif // Lab 4 multitasking initialization functions pic_init(); // Lab 6 hardware initialization functions time_init(); pci_init(); // Acquire the big kernel lock before waking up APs // Your code here: #ifndef VMM_GUEST // Starting non-boot CPUs boot_aps(); #endif cprintf("\nAdding idle"); ENV_CREATE(user_idle, ENV_TYPE_IDLE); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else //start fs cprintf("\nAdding FILE SYSTEM"); ENV_CREATE(fs_fs,ENV_TYPE_FS); #if defined(TEST_EPT_MAP) test_ept_map(); #endif cprintf("\nAdding ICODE"); ENV_CREATE(user_icode,ENV_TYPE_USER); #endif // Should not be necessary - drains keyboard because interrupt has given up. // kbd_intr(); // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); cprintf("6828 decimal is %o octal!\n", 6828); // cprintf("6828 decimal is %o octal!%n\n%n", 6828, &chnum1, &chnum2); // cprintf("pading space in the right to number 22: %-8d.\n", 22); // cprintf("chnum1: %d chnum2: %d\n", chnum1, chnum2); // cprintf("%n", NULL); // memset(ntest, 0xd, sizeof(ntest) - 1); // cprintf("%s%n", ntest, &chnum1); // cprintf("chnum1: %d\n", chnum1); // Lab 2 memory management initialization functions mem_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Acquire the big kernel lock before waking up APs // Your code here: lock_kernel(); // Starting non-boot CPUs boot_aps(); #ifdef USE_TICKET_SPIN_LOCK unlock_kernel(); spinlock_test(); lock_kernel(); #endif // Should always have idle processes at first. int i; for (i = 0; i < NCPU; i++) ENV_CREATE(user_idle, ENV_TYPE_IDLE); #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. //ENV_CREATE(user_primes, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); //ENV_CREATE(user_yield, ENV_TYPE_USER); //ENV_CREATE(user_dumbfork, ENV_TYPE_USER); ENV_CREATE(user_hello, ENV_TYPE_USER); #endif // TEST* // Schedule and run the first user environment! sched_yield(); }
void i386_init(void) { extern char edata[], end[]; // Before doing anything else, complete the ELF loading process. // Clear the uninitialized global data (BSS) section of our program. // This ensures that all static/global variables start out zero. memset(edata, 0, end - edata); // Initialize the console. // Can't call cprintf until after we do this! cons_init(); // Lab 2 memory management initialization functions mem_init(); // Lab 3 user environment initialization functions env_init(); trap_init(); // Lab 4 multiprocessor initialization functions mp_init(); lapic_init(); // Lab 4 multitasking initialization functions pic_init(); // Lab 6 hardware initialization functions time_init(); pci_init(); // Acquire the big kernel lock before waking up APs // Your code here: lock_kernel(); // Starting non-boot CPUs boot_aps(); // Should always have idle processes at first. int i; for (i = 0; i < NCPU; i++) ENV_CREATE(user_idle, ENV_TYPE_IDLE); // Start fs. ENV_CREATE(fs_fs, ENV_TYPE_FS); #if !defined(TEST_NO_NS) // Start ns. ENV_CREATE(net_ns, ENV_TYPE_NS); #endif #if defined(TEST) // Don't touch -- used by grading script! ENV_CREATE(TEST, ENV_TYPE_USER); #else // Touch all you want. ENV_CREATE(user_icode, ENV_TYPE_USER); #endif // TEST* // Should not be necessary - drains keyboard because interrupt has given up. kbd_intr(); // Schedule and run the first user environment! sched_yield(); }