From 05a6f2fcf4556ba9f3d0384c07554c387f6efba2 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Tue, 4 Jul 2017 22:23:37 +0200 Subject: got scheduling of task A and B working (now graphics output and termination is broken) --- src/kernel/kernel.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src/kernel/kernel.c') diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index 9a9f32e..b9beeb1 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -26,6 +26,8 @@ #include "text_widget.h" #include "window.h" +#include "tasks.h" + static jmp_buf panic_jmp_buf; static void handle_keyboard_event( keyboard_event_t *event, void *context ); @@ -53,6 +55,9 @@ typedef struct { static global_context_t global_context; +static void funcA( ); +static void funcB( ); + // must be first entry in kernel.bin (0x8800) as stage 2 of // the boot loader expects the entry point to be here! void kernel_main( void ) @@ -83,9 +88,19 @@ void kernel_main( void ) goto TERMINATE; } + // TODO: two demo tasks for now, later we should do something useful in a task + task_manager_t task_manager; + task_manager_init( &task_manager ); + task_t taskA; + task_init( &taskA, GDT_CODE_SEGMENT_SELECTOR, &funcA ); + task_manager_add_task( &task_manager, &taskA ); + task_t taskB; + task_init( &taskB, GDT_CODE_SEGMENT_SELECTOR, &funcB ); + task_manager_add_task( &task_manager, &taskB ); + puts( "Initializing interrupts" ); interrupt_t interrupt; - interrupts_init( &interrupt ); + interrupts_init( &interrupt, GDT_CODE_SEGMENT_SELECTOR, &task_manager ); puts( "Initializing drivers" ); driver_manager_init( &global_context.driver_manager ); @@ -362,3 +377,17 @@ static void handle_mouse_event( mouse_event_t *event, void *context ) break; } } + +static void funcA( ) +{ + while( true ) { + printf( "A" ); + } +} + +static void funcB( ) +{ + while( true ) { + printf( "B" ); + } +} -- cgit v1.2.3-54-g00ecf