Processes
1 进程描述符
about 1.7k size, save in a list named task list.
include/linux/sched.h
struct task_struct { volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ void *stack; atomic_t usage; unsigned int flags; /* per process flags, defined below */ unsigned int ptrace; int lock_depth; /* BKL lock depth */ #ifdef CONFIG_SMP #ifdef __ARCH_WANT_UNLOCKED_CTXSW int oncpu; #endif #endif int prio, static_prio, normal_prio; unsigned int rt_priority; ...
2 分配进程描述符
from 2.6 slab alloc task_struct.
arch/arm/include/asm/thread_info.h
struct thread_info { struct task_struct *task; /* main task structure */ struct exec_domain *exec_domain;/* execution domain */ unsigned long flags; /* thread_info flags (see TIF_*) */ mm_segment_t addr_limit; /* user-level address space limit */ __u32 cpu; /* current CPU */ int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */ struct restart_block restart_block; };
若堆栈向下增长,只需在栈底创建一个struct thread_info,此时sp指向struct task_strcut *task(详见fork)。