#define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8
pid_t pid pid_t pgrp uid_t uid,euid, ... gid_t gid,egid, ...
# define INIT_TASK_SIZE 2048*sizeof(long)
...
union task_union {
struct task_struct task;
unsigned long stack[INIT_TASK_SIZE/sizeof(long)];
};
#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
struct task_struct *next_task, *prev_task;
#define INIT_TASK(tsk) ...
union task_union init_task_union = { INIT_TASK(init_task_union.task) };
#define init_task (init_task_union.task)
#define PIDHASH_SZ (4096 >> 2) extern struct task_struct *pidhash[PIDHASH_SZ]; #define pid_hashfn(x) ((((x) >> 8) ^ (x)) & (PIDHASH_SZ - 1))
struct task_struct *pidhash_next; struct task_struct **pidhash_pprev;
struct list_head run_list;
struct list_head {
struct list_head *next, *prev;
};
struct __wait_queue {
unsigned int flags;
struct task_struct * task;
struct list_head task_list;
};
typedef struct __wait_queue wait_queue_t;
struct thread_struct thread;
struct thread_struct
unsigned long esp0, eip, esp, fs, gs;
unsigned long debugreg[8];
unsigned long cr2, trap_no, error_code;
2 ? SW 0:00 [keventd]
3 ? SW 0:00 [kapm-idled]
4 ? SWN 0:00 [ksoftirqd_CPU0]
5 ? SW 4:45 [kswapd]
6 ? SW 0:00 [kreclaimd]
7 ? SW 0:00 [bdflush]
8 ? SW 0:00 [kupdated]
9 ? SW< 0:00 [mdrecoveryd]
10 ? SW 0:00 [phpd_notify]
14 ? SW 0:40 [kjournald]
80 ? SW 0:00 [khubd]