X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/509574b18a3373030cd0d7b979499499ff06dd9b..61bcf0c65dac58d2f29ab40e016489c89ec8eec0:/lunaix-os/kernel/sched.c?ds=inline diff --git a/lunaix-os/kernel/sched.c b/lunaix-os/kernel/sched.c index 8e5eecb..a93c9bb 100644 --- a/lunaix-os/kernel/sched.c +++ b/lunaix-os/kernel/sched.c @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -30,9 +31,11 @@ void sched_init() { size_t pg_size = ROUNDUP(sizeof(struct proc_info) * MAX_PROCESS, 0x1000); - assert_msg(vmm_alloc_pages( - KERNEL_PID, &__proc_table, pg_size, PG_PREM_RW, PP_FGPERSIST), - "Fail to allocate proc table"); + + for (size_t i = 0; i <= pg_size; i += 4096) { + uintptr_t pa = pmm_alloc_page(KERNEL_PID, PP_FGPERSIST); + vmm_set_mapping(PD_REFERENCED, &__proc_table + i, pa, PG_PREM_RW); + } sched_ctx = (struct scheduler){ ._procs = (struct proc_info*)&__proc_table, .ptable_len = 0, @@ -49,22 +52,10 @@ run(struct proc_info* proc) // FIXME: 这里还是得再考虑一下。 // tss_update_esp(__current->intr_ctx.esp); - - if (__current->page_table != proc->page_table) { - __current = proc; - cpu_lcr3(__current->page_table); - // from now on, the we are in the kstack of another process - } else { - __current = proc; - } - apic_done_servicing(); - signal_dispatch(); - asm volatile("pushl %0\n" - "jmp soft_iret\n" ::"r"(&__current->intr_ctx) - : "memory"); + "jmp switch_to\n" ::"r"(proc)); // kernel/asm/x86/interrupt.S } void