From: <sam...@us...> - 2008-08-11 16:42:20
|
Revision: 318 http://aceos.svn.sourceforge.net/aceos/?rev=318&view=rev Author: samueldotj Date: 2008-08-11 16:42:24 +0000 (Mon, 11 Aug 2008) Log Message: ----------- Added thread.c and task.c Added Paths: ----------- src/include/kernel/pm/ src/include/kernel/pm/task.h src/include/kernel/pm/thread.h src/kernel/pm/task.c src/kernel/pm/thread.c Added: src/include/kernel/pm/task.h =================================================================== --- src/include/kernel/pm/task.h (rev 0) +++ src/include/kernel/pm/task.h 2008-08-11 16:42:24 UTC (rev 318) @@ -0,0 +1,33 @@ +/*! \file include/kernel/pm/task.h + \brief task related strcutrues and function declarations +*/ + +#ifndef _TASK_H_ +#define _TASK_H_ + +#include <ace.h> +#include <ds/list.h> +#include <sync/spinlock.h> +#include <kernel/mm/vm.h> +#include <kernel/pm/thread.h> + +typedef struct task +{ + SPIN_LOCK lock; /*lock for the entire structure*/ + int reference_count; + + VIRTUAL_MAP_PTR virtual_map; /*virtual map for this task*/ + + THREAD_PTR thread_head; /*threads in the same task*/ +}TASK, * TASK_PTR; + +#ifdef __cplusplus + extern "C" { +#endif + + +#ifdef __cplusplus + } +#endif + +#endif Added: src/include/kernel/pm/thread.h =================================================================== --- src/include/kernel/pm/thread.h (rev 0) +++ src/include/kernel/pm/thread.h 2008-08-11 16:42:24 UTC (rev 318) @@ -0,0 +1,44 @@ +/*! + \file include/kernel/pm/thread.h + \brief Thread related structures and functions +*/ +#ifndef _THREAD_H_ +#define _THREAD_H_ + +#include <ace.h> +#include <ds/list.h> +#include <sync/spinlock.h> +#include <kernel/pm/task.h> + +typedef enum +{ + THREAD_STATE_READY = 1, /*thread is ready to run*/ + THREAD_STATE_RUN = 2, /*thread is running*/ + THREAD_STATE_TERMINATE = 3, /*thread is terminating*/ + THREAD_STATE_SLEEP = 4, /*thread is sleeping*/ +}THREAD_STATE; + + +typedef struct thread +{ + SPIN_LOCK lock; /*lock for the entire structure*/ + int reference_count; + + TASK_PTR task; /*back pointer to task*/ + LIST thread_queue; /*threads in the same task*/ + + THREAD_STATE thread_state; /*Run State*/ +}THREAD, * THREAD_PTR; + + +#ifdef __cplusplus + extern "C" { +#endif + +THREAD_PTR GetCurrentThread(); + +#ifdef __cplusplus + } +#endif + +#endif Added: src/kernel/pm/task.c =================================================================== --- src/kernel/pm/task.c (rev 0) +++ src/kernel/pm/task.c 2008-08-11 16:42:24 UTC (rev 318) @@ -0,0 +1,4 @@ +/*! + \file task.c + \brief +*/ \ No newline at end of file Added: src/kernel/pm/thread.c =================================================================== --- src/kernel/pm/thread.c (rev 0) +++ src/kernel/pm/thread.c 2008-08-11 16:42:24 UTC (rev 318) @@ -0,0 +1,27 @@ +/*! + \file thread.c + \brief Thread management +*/ + +#include <pm/thread.h> + +/* +Thread's execution context in kernel mode + ------- Page align + thread structure + ------- Guard Page + xxxxxxx + ------- Stack page + kernel stack +*/ + +/*gets the current kernel stack position*/ +#define GET_KERNEL_STACK(kstack) asm volatile("movl %%esp, %0":"=m"(kstack)) + +/*! Get Current Thread*/ +THREAD_PTR GetCurrentThread() +{ + BYTE * kstack; + GET_KERNEL_STACK( kstack ); + kstack = PAGE_ALIGN( kstack ) - (2 * PAGE_SIZE); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |