From 25ba3cffc8f8252699ad7f5f2075d177c3473f8c Mon Sep 17 00:00:00 2001 From: acevest Date: Sun, 7 Nov 2021 16:38:59 +0800 Subject: [PATCH] =?utf8?q?fix=20=E5=9C=A8=E5=86=85=E6=A0=B8=E5=88=9D?= =?utf8?q?=E5=A7=8B=E5=8C=96=E9=98=B6=E6=AE=B5=E6=8C=89=E9=94=AE=E7=9B=98?= =?utf8?q?=E5=AF=BC=E8=87=B4=E5=90=8E=E7=BB=AD=E6=97=A0=E6=B3=95=E8=A7=A6?= =?utf8?q?=E5=8F=91=E9=94=AE=E7=9B=98=E4=B8=AD=E6=96=AD=E7=9A=84=E9=97=AE?= =?utf8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- kernel/init.c | 7 +++++++ kernel/sched.c | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/kernel/init.c b/kernel/init.c index 2dd393d..073c542 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -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); diff --git a/kernel/sched.c b/kernel/sched.c index fd0bb48..43e3432 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -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); -- 2.44.0