00001
00011 #ifndef __KERN_TASK_H__
00012 #define __KERN_TASK_H__
00013
00014 #include <list.h>
00015 #include <frame.h>
00016 #include <scheduler.h>
00017
00018
00019 #define EXECNAME_LIMIT 256
00020
00021 #define EXECVEC_ARGV_LIMIT 256
00022
00023 #define EXECVEC_BUFFER_LIMIT 4096
00024
00025 struct Thread;
00026
00027 typedef struct Task
00028 {
00029
00030 ListNode taskList;
00031
00032 struct Task * parentTask;
00033
00034 List childTasks;
00035
00036 Frame * pageTable;
00037
00038 List pageTables;
00039
00040 List memoryRegions;
00041 struct Thread * mainThread;
00042
00043 List threads;
00044
00045 Resource exitResource;
00046
00047 int exitId;
00048
00049 int exitStatus;
00050 } Task;
00051
00052
00059 extern int task_manager_initialize (void);
00060
00061
00068 extern Task * task_current (void);
00069
00078 extern Task * task_create (Task * parent);
00079
00080
00089 extern void task_destroy (Task * task);
00090
00091
00099 extern Task * task_fork (void);
00100
00101
00102 extern int task_exec (Task * task, char * execname, char ** execvec);
00103
00114 extern void task_exit (Task *);
00115
00116 #endif
00117