From 8147d9944862a46fd0ea684c3189c1b874f8105a Mon Sep 17 00:00:00 2001 From: db Date: Thu, 11 Jul 2019 20:02:19 +0800 Subject: [PATCH] my solution to lab5 --- .../Backup/init(738).c | 172 ++++++++++++++++++ .../Untitled Project.bookmarks.xml | 14 +- .../Untitled Project.sip_sym | Bin 1215512 -> 305432 bytes .../Untitled Project.sip_xm | Bin 540 -> 540 bytes .../Untitled Project.siproj_settings.xml | 44 ++--- .../Untitled Project.siwork | Bin 63680 -> 63637 bytes 6 files changed, 201 insertions(+), 29 deletions(-) create mode 100644 lab/Untitled Project.si4project/Backup/init(738).c diff --git a/lab/Untitled Project.si4project/Backup/init(738).c b/lab/Untitled Project.si4project/Backup/init(738).c new file mode 100644 index 0000000..0086895 --- /dev/null +++ b/lab/Untitled Project.si4project/Backup/init(738).c @@ -0,0 +1,172 @@ +/* See COPYRIGHT for copyright information. */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void boot_aps(void); + + +void +i386_init(void) +{ + // 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. + 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(); +} + +// While boot_aps is booting a given CPU, it communicates the per-core +// stack pointer that should be loaded by mpentry.S to that CPU in +// this variable. +void *mpentry_kstack; + +// Start the non-boot (AP) processors. +static void +boot_aps(void) +{ + extern unsigned char mpentry_start[], mpentry_end[]; + void *code; + struct CpuInfo *c; + + // Write entry code to unused memory at MPENTRY_PADDR + code = KADDR(MPENTRY_PADDR); + memmove(code, mpentry_start, mpentry_end - mpentry_start); + + // Boot each AP one at a time + for (c = cpus; c < cpus + ncpu; c++) { + if (c == cpus + cpunum()) // We've started already. + continue; + + // Tell mpentry.S what stack to use + mpentry_kstack = percpu_kstacks[c - cpus] + KSTKSIZE; + // Start the CPU at mpentry_start + lapic_startap(c->cpu_id, PADDR(code)); + // Wait for the CPU to finish some basic setup in mp_main() + while(c->cpu_status != CPU_STARTED) + ; + } +} + +// Setup code for APs +void +mp_main(void) +{ + // We are in high EIP now, safe to switch to kern_pgdir + lcr3(PADDR(kern_pgdir)); + cprintf("SMP: CPU %d starting\n", cpunum()); + + lapic_init(); + env_init_percpu(); + trap_init_percpu(); + xchg(&thiscpu->cpu_status, CPU_STARTED); // tell boot_aps() we're up + + // Now that we have finished some basic setup, call sched_yield() + // to start running processes on this CPU. But make sure that + // only one CPU can enter the scheduler at a time! + // + // Your code here: + lock_kernel(); + + sched_yield(); + // Remove this after you finish Exercise 6 + for (;;); +} + +/* + * Variable panicstr contains argument to first call to panic; used as flag + * to indicate that the kernel has already called panic. + */ +const char *panicstr; + +/* + * Panic is called on unresolvable fatal errors. + * It prints "panic: mesg", and then enters the kernel monitor. + */ +void +_panic(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + if (panicstr) + goto dead; + panicstr = fmt; + + // Be extra sure that the machine is in as reasonable state + asm volatile("cli; cld"); + + va_start(ap, fmt); + cprintf("kernel panic on CPU %d at %s:%d: ", cpunum(), file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); + +dead: + /* break into the kernel monitor */ + while (1) + monitor(NULL); +} + +/* like panic, but don't */ +void +_warn(const char *file, int line, const char *fmt,...) +{ + va_list ap; + + va_start(ap, fmt); + cprintf("kernel warning at %s:%d: ", file, line); + vcprintf(fmt, ap); + cprintf("\n"); + va_end(ap); +} diff --git a/lab/Untitled Project.si4project/Untitled Project.bookmarks.xml b/lab/Untitled Project.si4project/Untitled Project.bookmarks.xml index c8b9cb1..3b64d5a 100644 --- a/lab/Untitled Project.si4project/Untitled Project.bookmarks.xml +++ b/lab/Untitled Project.si4project/Untitled Project.bookmarks.xml @@ -1,7 +1,7 @@ - - - - + + + + diff --git a/lab/Untitled Project.si4project/Untitled Project.sip_sym b/lab/Untitled Project.si4project/Untitled Project.sip_sym index ca00bffebd9c4baf7d199b6dbe9ddd0b20188c80..291c4c230161787551b46c99022faa98cf9cfe11 100644 GIT binary patch delta 17 YcmbO+!)wMRp@tU57N!>FEi4i%0YQugf&c&j delta 7864 zcmeIwF%5t)5J1tipnwS()qyI8Gr)EhxW2-R)5k)K#wX?PlX>%Bl;!%9F@a#7; zUu7%npG72v710GbCJR4wI$&tRK`GXl)MYZ?=!GHVu*DSz_82D|*&B$EA>p8deja7nHaDZ?+pPG%W;xOhO@J=#o&2E3yeI$m+7ws- delta 202 zcmWm2O$vfg6o%n*@lx2RQqUW;1|w@E)IeK6Htk0wqKF3l%^EkqICU{CrKR|K;5oc} zwXU^)5|I)b3rt}B*holpV9-T|DQuCf> diff --git a/lab/Untitled Project.si4project/Untitled Project.siproj_settings.xml b/lab/Untitled Project.si4project/Untitled Project.siproj_settings.xml index ca84b35..b87292c 100644 --- a/lab/Untitled Project.si4project/Untitled Project.siproj_settings.xml +++ b/lab/Untitled Project.si4project/Untitled Project.siproj_settings.xml @@ -1,22 +1,22 @@ - - - - - - - - - + + + + + + + + + diff --git a/lab/Untitled Project.si4project/Untitled Project.siwork b/lab/Untitled Project.si4project/Untitled Project.siwork index 031bc258d1a2c35c95eb894d30f2372273a30b5a..7187890192dd0a363a7f591b2ffd5f6739d00ff1 100644 GIT binary patch delta 6380 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