]> Zhao Yanbai Git Server - kernel.git/commitdiff
fix 在内核初始化阶段按键盘导致后续无法触发键盘中断的问题
authoracevest <zhaoyanbai@126.com>
Sun, 7 Nov 2021 08:38:59 +0000 (16:38 +0800)
committeracevest <zhaoyanbai@126.com>
Sun, 7 Nov 2021 08:38:59 +0000 (16:38 +0800)
kernel/init.c
kernel/sched.c

index 2dd393d8f689016a10b4a353ec32bd0660de5f4c..073c542359540fbc870233b4cc001746f0f835c4 100644 (file)
@@ -145,9 +145,16 @@ void kernel_task(char *name, void *entry) {
     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);
index fd0bb48da93a0aa6e4ec3259370ab9f2c9a0729c..43e3432102e3e99ee7cfe6dcf3ed7a86cad0bd09 100644 (file)
@@ -79,12 +79,16 @@ void setup_tasks() {
     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);