diff --git a/src/kernel/interrupts.cpp b/src/kernel/interrupts.cpp index 7ea9a0d..38032e2 100644 --- a/src/kernel/interrupts.cpp +++ b/src/kernel/interrupts.cpp @@ -113,7 +113,6 @@ print_stacktrace(int skip = 0) addr_t isr_handler(addr_t return_rsp, cpu_state regs) { - log::debug(logs::task, "Starting RSP %016lx", return_rsp); console *cons = console::get(); switch (static_cast(regs.interrupt & 0xff)) { @@ -284,10 +283,8 @@ isr_handler(addr_t return_rsp, cpu_state regs) print_stacktrace(2); while(1) asm("hlt"); } - *reinterpret_cast(0xffffff80fee000b0) = 0; - log::debug(logs::task, "Returning RSP %016lx", return_rsp); return return_rsp; } diff --git a/src/kernel/interrupts.s b/src/kernel/interrupts.s index 2796de1..3fd68ec 100644 --- a/src/kernel/interrupts.s +++ b/src/kernel/interrupts.s @@ -80,19 +80,10 @@ gdt_load: pop rax %endmacro -%macro load_kernel_segments 0 - mov ax, 0x10 ; load the kernel data segment - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax -%endmacro - extern isr_handler global isr_handler_prelude isr_handler_prelude: push_all_and_segments - ;load_kernel_segments mov rdi, rsp call isr_handler @@ -108,7 +99,6 @@ extern irq_handler global irq_handler_prelude irq_handler_prelude: push_all_and_segments - load_kernel_segments call irq_handler @@ -205,45 +195,18 @@ global taskA taskA: push rbp mov rbp, rsp - push 0x123456789abcdef0 - push 0x0fedcba987654321 + mov rax, 0xaaaaaaaaaaaaaaaa + +.loop: + syscall + jmp .loop + +global taskB +taskB: + push rbp + mov rbp, rsp + mov rax, 0xbbbbbbbbbbbbbbbb .loop: - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop syscall - nop - nop - nop - nop - nop - nop jmp .loop diff --git a/src/kernel/scheduler.cpp b/src/kernel/scheduler.cpp index f2ea537..5188a70 100644 --- a/src/kernel/scheduler.cpp +++ b/src/kernel/scheduler.cpp @@ -18,11 +18,7 @@ char taskBstack3[stack_size]; uint64_t taskAcount = 0; extern "C" void taskA(); - -void taskB() -{ - while (1); -} +extern "C" void taskB(); scheduler::scheduler(lapic *apic) : @@ -68,6 +64,8 @@ create_process(uint16_t pid, void *stack0, void *stack3, void (*rip)()) void scheduler::start() { + log::info(logs::task, "Starting scheduler."); + m_apic->enable_timer(isr::isrTimer, 128, quantum, false); m_processes.append({0, 0}); // The kernel idle task diff --git a/src/kernel/wscript b/src/kernel/wscript index 1143eb6..f13f81a 100644 --- a/src/kernel/wscript +++ b/src/kernel/wscript @@ -29,7 +29,11 @@ def build(bld): return node.path_from(node.ctx.launch_node()) def run(self): from subprocess import check_output - args = self.env.objdump + ["--source", "-D", self.inputs[0].abspath()] + args = self.env.objdump + [ + "--source", + "-D", + "-M", "intel", + self.inputs[0].abspath()] with file(self.outputs[0].abspath(), 'w') as output: output.write(check_output(args))