进程
Linux 内核把进程称为任务 (task), 进程的虚拟地址空间分为用户虚拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,每个进程有独立的用户虚拟地址空间。
进程描述符 task_struct 被定义在sched.h头文件中:include\linux\sched.h
其中重要的成员变量如下:
成员 | 描述 |
---|---|
volatile long state; | 进程的状态。 -1 unrunnable, 0 runnable, >0 stopped |
void *stack; | 指向内核栈 |
pid_t pid; | 全局的进程号 |
pid_t tgid; | 全局的线程组标识符 |
struct pid_link pids[PIDTYPE_MAX]; | 进程号,进程组标识符和会话标识符 |
struct task_struct __ rcu *real_parent; struct task_struct __rcu *parent; |
real_parent指向真实的父进程。 parent 指向父进程:如果进程被另一个进程(通常是调试器) 使用系统调用ptrace跟踪,那么父进程是跟踪进程,否则和 real_parent相同 |
char comm[TASK_COMM_LEN]; | 进程名称 |
int prio,static_prio,normal_prio; unsigned int rt__priority; unsigned int policy; |
调度策略和优先级 |
cpumask_t cpus_allowed; | 允许进程在哪些处理器上运行 |
struct mm_struct *mm, *active_mm; | 指向内存描述符 进程:mm 和 active_mm指向同一个内存描述符 内核线程:mm是空指针,当内核线程运行时, active_mm指向从进程借用的内存描述符 |
struct fs struct *fs; | 文件系统信息,主要是进程的根目录和当前工作目录 |
struct files_struct *files; | 打开文件表 |
struct nsproxy *nsproxy; | 命名空间 |