From 0063530fd78995b3fff0b031432197b37df3b2eb Mon Sep 17 00:00:00 2001 From: bobcao3 Date: Tue, 6 Sep 2016 21:50:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0panic=5Ftext=E5=92=8C?= =?UTF-8?q?=E5=A4=9A=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86=E7=9A=84=E5=87=86?= =?UTF-8?q?=E5=A4=87=E5=B7=A5=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/arch/i686/Basic/safe.c | 15 +++++++++++++++ kernel/arch/i686/Basic/safe.h | 1 + kernel/arch/i686/Basic/task.c | 20 ++++++++++++++++++++ kernel/arch/i686/Basic/task.h | 10 ++++++++++ 4 files changed, 46 insertions(+) diff --git a/kernel/arch/i686/Basic/safe.c b/kernel/arch/i686/Basic/safe.c index a95bfed..ad83e9c 100644 --- a/kernel/arch/i686/Basic/safe.c +++ b/kernel/arch/i686/Basic/safe.c @@ -58,6 +58,21 @@ void panic(pt_regs* regs) { __asm__ volatile ("jmp fatal_halt"); } +void panic_text(char* str) { + kputs("============= KERNEL PANIC ============="); + #ifdef DEBUG + kprintf("[ Kernel debug enabled\r\n"); + #endif + kprintf("[ Boot Ticks: %d\r\n[ Mills From boot: %d\r\n", tick, millis_from_boot); + kputs(str); + kputs("=============== INFO END ==============="); + kputs("System Halted due to fatal error"); + + // 在遇到这种问题的时候我们需要使用jmp + // 这个情况下栈可能是乱的,调用可能不工作 + __asm__ volatile ("jmp fatal_halt"); +} + static void cs_assert(pt_regs* regs) { if (regs->cs == 0x08) { // This is the kernel CS // TODO: 理论上这里要设定一个应急栈 diff --git a/kernel/arch/i686/Basic/safe.h b/kernel/arch/i686/Basic/safe.h index 96ff01d..8f9487c 100644 --- a/kernel/arch/i686/Basic/safe.h +++ b/kernel/arch/i686/Basic/safe.h @@ -30,6 +30,7 @@ extern void fatal_halt(); extern void panic(pt_regs* regs); +extern void panic_text(char* str); void Init_Safe(); diff --git a/kernel/arch/i686/Basic/task.c b/kernel/arch/i686/Basic/task.c index ac7f3c9..efe5970 100644 --- a/kernel/arch/i686/Basic/task.c +++ b/kernel/arch/i686/Basic/task.c @@ -35,6 +35,26 @@ void taska() { volatile char sta[4096]; volatile void* sta_st; +task_node* current; +task_node tska, tskb; + +void create_process() { + // Allocation is kind of crappy now.. + uint32_t phy_p = Memory_SearchFree(); + if (!Memory_AllocPhy(phy_p)) panic_text("Can not assign memory to create process!"); + + + +} + +void insert_node(void* stack_top, task_node* dst) { + dst->next = current->next; + dst->prev = current; + current->next = dst; + + dst->meta = false; + dst->ptr = (task_t*)stack_top; +} void create_task(task_t* model, void* stack_top, void* eip) { kprintf("New task, esp=0x%x\r\n", stack_top); diff --git a/kernel/arch/i686/Basic/task.h b/kernel/arch/i686/Basic/task.h index 169724b..8516d58 100644 --- a/kernel/arch/i686/Basic/task.h +++ b/kernel/arch/i686/Basic/task.h @@ -22,6 +22,7 @@ #include "config.h" #include "Basic/types.h" +#include "Basic/memory.h" #include "debug.h" typedef volatile struct _task_t { @@ -41,6 +42,15 @@ typedef volatile struct _task_t { uint32_t ss; } task_t; +typedef volatile struct _task_node { + struct _task_node* prev; + task_t* ptr; + bool meta; // meta = true表示当前node是一个空进程(标志用进程) + struct _task_node* next; +} task_node; + +extern task_node* current; + extern void taskb(); extern volatile char stb[4096]; extern volatile void* stb_st;