#pragma once #include "boucane.hpp" #define MAX_TASK 5 #define TASK_VMA 0x0 #if (TASK_VMA % 0x7) #error TASK_VMA value is not 4096 bits aligned! #endif // DO NOT CHANGE THE FOLLOWING STRUCTURE WITHOUT CONCIDERING UPDATING // THE SWITCH FUNCTION INTO scheduler_asm.S typedef struct { u64 rax, rbx, rcx, rdx; u64 cs, rip; u64 ss, rsp, rbp; u64 rsi, rdi; u64 ds, es, fs, gs; u64 eflags; u64 rsp0; u64 r8,r9,r10,r11,r12,r13,r14,r15; } __attribute__((packed)) REGS; // DO NOT CHANGE THE FOLLOWING STRUCTURE WITHOUT CONCIDERING UPDATING // THE SWITCH FUNCTION INTO scheduler_asm.S typedef struct { u64* pml4; REGS registers; u32 id; u32 pid; u32 size; } __attribute__((packed)) PROC; extern char show_ticks; extern "C" void clock(); void schedule(); void create_task(void*task, u32 size); void scheduler_start();