From adccdaa096506319be60879767a5a973d012e758 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Wed, 3 Sep 2014 17:20:39 +0200 Subject: Improved Multiprocessing / Multitasking code --- kernel/acpi.c | 2 +- kernel/kernel.c | 11 ++++++----- kernel/shell.c | 15 +++++++++++++++ kernel/task.c | 13 +++++-------- kernel/vesa.c | 4 +--- kernel/vmem.c | 10 +++++----- 6 files changed, 33 insertions(+), 22 deletions(-) diff --git a/kernel/acpi.c b/kernel/acpi.c index 398a7ec..29d6f6e 100644 --- a/kernel/acpi.c +++ b/kernel/acpi.c @@ -140,7 +140,7 @@ void acpi_read_rsdt(acpi_rsdt *rsdt,smp_processors *procdata) bool acpi_find(smp_processors *procdata) { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Looking for RSDP Table"); - char *search=0x90000; //will be 16 bit aligned; + char *search=0x9f000; //will be 16 bit aligned; procdata->processors=0; procdata->boot=0; diff --git a/kernel/kernel.c b/kernel/kernel.c index 6931ad1..a582563 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -14,16 +14,17 @@ void int_kb_handler(); //void int_floppy_handler(); uint32_t read_eip(); +uint32_t c1,c2,c3; volatile uint8_t proc; +uint32_t cpu_counter[SMP_MAX_PROC]; + void kernel_ap() { - uint32_t cpu_counter=0; proc++; uint8_t p=proc; - - while(1)PutString("%d", p*100,580,0b1111100000000000, (cpu_counter++)); + while(1)cpu_counter[p]++; } // // KERNEL MAIN @@ -44,7 +45,8 @@ void kernel_main(uint32_t initial_stack, int mp) asm volatile("jmp kernel_ap"); } - proc=0; + proc=c1=c2=c3=0; + for(int i=0;i %d.",i,cpu_counter[i]); + } + } + else if(1==strcmp(command,"TASKS",0)) + { + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d %d %d",c1,c2,c2); + } else if(1==strcmp(command,"ALLOC",0)) { uint32_t *malloc= pmmngr_alloc_block(); diff --git a/kernel/task.c b/kernel/task.c index 9aad903..c2f3bd5 100644 --- a/kernel/task.c +++ b/kernel/task.c @@ -9,14 +9,14 @@ int started; uint64_t task_system_clock; +uint32_t c1,c2,c3; + void task_test1() { - uint32_t c; while(1) { - c++; - while(1)PutString("t1: %d", 00,500,0b1111100000000000, (c++)); + c1++; } } @@ -27,8 +27,7 @@ void task_test2() while(1) { - c++; - while(1)PutString("t2: %d", 100,500,0b1111100000000000, (c++)); + c2++; } @@ -40,9 +39,7 @@ void task_test3() while(1) { - c++; - while(1)PutString("t3: %d",200,500,0b1111100000000000, (c++)); - + c3++; } } diff --git a/kernel/vesa.c b/kernel/vesa.c index 55c400c..74d3435 100644 --- a/kernel/vesa.c +++ b/kernel/vesa.c @@ -126,8 +126,6 @@ void PutFont(char c, int x,int y, int color) int fnt=0x126-0x20; if(c>=0x20&&c<=0x126)fnt=c-0x20; - - int posx, posy, sizex=8, sizey=10; @@ -187,7 +185,7 @@ void PutConsoleNL() { console_x=0; console_y++; - if(console_y>=console_lines)console_y=0; + if(console_y>=console_lines-5)console_y=0; for(int i=0;i