printk("kernel[%s] task pid is %d\n", name, pid);
}
+// 从multiboot.S进入这里
void root_task_entry() {
sti();
+ // 有一点点垃圾事情需要处理
+ // 之前内核初始化都是在关中断下进行的
+ // 这就段时间有可能按键盘,然而键盘不把数据读出来就不会触发下一次中断
+ // 所以得先清空一下键盘
+ inb(0x60);
+
kernel_task("init", init_task_entry);
kernel_task("test", init_task_entry);
kernel_task("user", user_task_entry);
init_root_tsk();
task_union_cache = kmem_cache_create("task_union", sizeof(task_union), PAGE_SIZE);
- if (0 == task_union_cache) panic("setup tasks failed. out of memory");
+ if (0 == task_union_cache) {
+ panic("setup tasks failed. out of memory");
+ }
}
-task_union *alloc_task_union() { return (task_union *)kmem_cache_alloc(task_union_cache, 0); }
-
-inline task_union *get_next_tsk() { return 0; }
+task_union *alloc_task_union() {
+ task_union *task;
+ task = (task_union *)kmem_cache_alloc(task_union_cache, 0);
+ return task;
+}
void switch_to() {
LoadCR3(current->cr3);