00001
00011 #ifndef __KERN_THREAD_H__
00012 #define __KERN_THREAD_H__
00013
00014 #include <list.h>
00015 #include <task.h>
00016 #include <register.h>
00017 #include <timer.h>
00018
00019
00020 typedef enum
00021 {
00022
00023 THREAD_STATE_UNSCHEDULED = 0,
00024
00025 THREAD_STATE_READY,
00026
00027 THREAD_STATE_RUNNING,
00028
00029 THREAD_STATE_WAITING
00030 } ThreadState;
00031
00032
00033 #define THREAD_QUANTUM_INITIAL (TIMER_HZ / 10)
00034
00035 typedef unsigned int ThreadQuantum;
00036
00037
00038 typedef struct Thread
00039 {
00040
00041 ListNode schedulerList;
00042
00043 ListNode threadList;
00044
00045 int id;
00046
00047 Task * task;
00048
00049 ThreadState state;
00050
00051 ThreadQuantum quantum;
00052
00053 Registers registers;
00054
00055 void (* waitingHandler) (struct Thread *, void *);
00056
00057 void * waitingData;
00058 } Thread;
00059
00067 extern int thread_manager_initialize (void);
00068
00076 extern Thread * thread_current (void);
00077
00087 extern Thread * thread_create (Task * task);
00096 extern void thread_destroy (Thread *);
00097
00107 extern Thread * thread_fork (Task * task);
00118 extern void thread_exit (Thread * thread, int exitStatus);
00119
00129 extern Thread * thread_find (int id);
00130
00131 #endif
00132