40 lines
1020 B
C
40 lines
1020 B
C
|
#include <defs.h>
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include <console.h>
|
||
|
#include <kdebug.h>
|
||
|
#include <picirq.h>
|
||
|
#include <trap.h>
|
||
|
#include <clock.h>
|
||
|
#include <intr.h>
|
||
|
#include <pmm.h>
|
||
|
#include <proc.h>
|
||
|
#include <kmonitor.h>
|
||
|
|
||
|
int kern_init(void) __attribute__((noreturn));
|
||
|
void grade_backtrace(void);
|
||
|
|
||
|
int
|
||
|
kern_init(void) {
|
||
|
extern char edata[], end[];
|
||
|
memset(edata, 0, end - edata);
|
||
|
|
||
|
cons_init(); // init the console
|
||
|
|
||
|
const char *message = "(THU.CST) os is loading ...";
|
||
|
cprintf("%s\n\n", message);
|
||
|
|
||
|
print_kerninfo();
|
||
|
pmm_init(); // init physical memory management
|
||
|
pic_init(); // init interrupt controller
|
||
|
idt_init(); // init interrupt descriptor table
|
||
|
proc_init(); // init process table
|
||
|
clock_init(); // init clock interrupt
|
||
|
intr_enable(); // enable irq interrupt
|
||
|
|
||
|
schedule(); //let init proc run
|
||
|
while (do_wait(1, NULL) == 0) {
|
||
|
schedule();
|
||
|
}
|
||
|
}
|