Linux26进程的状态 00163 00164: Task state bitmask, note! these bits are also 00165: *encoded in fs/ proc/array c: get task stateo 00166 00167: * We have two separate sets of flags: task->state 00168: is about runnability while task ->exit state are 00169: about the task exiting Confusing, but this way 00170: modifying one set can t modify the other one by 00171:* mistake 00172: include/ linux/sched. h 00173: #define TASK RUNNING 0 00174: *define TASK INTERRUPtIble 1 00175: *define TASK UNINTERRUPTIBLE 2 00176: #define TASK STOPPED 00177: #define TASK TRACED 8 00178:/* in tsk->exit state k 00179: #define EXIT ZOMBIE 1 00180: #define EXIT DEAD 32 简单过一下,与状态相关的一些宏 00181:/ in tsk->state again 1)组合状态 00182: #define taSK dead 2)状态判断 00183:# define TAsK WAKEKILL1283)状态设置 2021/2/6 Linux操作系统分析 8/65 嵌入式系统实验室 EMBEDDED SYSTEM LAB口RAT口RY SU:MDU INTHUTE OR AOVANCLD STUOY D USTt
2021/2/6 Linux操作系统分析 8/65 Linux2.6进程的状态 简单过一下,与状态相关的一些宏 1)组合状态 2)状态判断 3)状态设置 include/linux/sched.h
进程状态转换图 一个既在的 EXIT ZOMBIE 进程调用fork 或者 来创建一个 EXIT DEAD 或者 新井程 TASK DEAD 调度器选择一个tsk: schedule call Task context switch 进程调用 do exit0 forks 终止执行 TASK RU卟G TASK RUNNING 〔就绪,但是没 〔正在运行 有在运行〕 进程被高优先级的 进程抢占 进程睡眠在等待特定事件 TASK INTERRUP TIBLE 或是资源的等待队列上 事件发生或资源可用,进 程被唤醒并被放到运 TASK UNINTERRUP TIBLE 队列上 〔等待中
2021/2/6 Linux操作系统分析 9/65 进程状态转换图 EXIT_ZOMBIE 或者 EXIT_DEAD 或者 TASK_DEAD
标识一个进程 令使用进程描述符地址 ≯进程和进程描述符之间有非常严格的一一对应关系 使得用32位进程描述符地址标识进程非常方便 ☆使用PID( Process id,PID) 每个进程的PID都存放在进程描述符的pid域中 2021/2/6 Linux操作系统分析 10/65 嵌入式系统实验室 EMBEDDED SYSTEM LAB口RAT口RY SU:MDU INTHUTE OR AOVANCLD STUOY D USTt
2021/2/6 Linux操作系统分析 10/65 标识一个进程 ❖使用进程描述符地址 ➢进程和进程描述符之间有非常严格的一一对应关系, 使得用32位进程描述符地址标识进程非常方便 ❖使用PID (Process ID,PID) ➢每个进程的PID都存放在进程描述符的pid域中
进程的PID 令进程的pid字段 01095: pid t pid; 01096 pid t tgid 00024: typedef_ kernel_pid_t pid t; include/linux/types. h 00014: typedef int kernel_pid t; includelasm-XXX/posix types YYY. h Pid最大值,参见 kernel/pid.c 0005: int pid max= PID MAX DEFAULT;顺序使用 88 00024:/ 循环使用 00025: This controls the default maximum pid allocated to a process 00026:*/ includellinux/threads. h 00027: #define PID_MAX_DEFAULT(CONFIG_BASE_SMALL 0x1000: 0x8000) 2021/2/6 Linux操作系统分析 1165 嵌入式系统实验室 EM日 EDDED SYSTEM LA日口 RATORY
2021/2/6 Linux操作系统分析 11/65 进程的PID ❖进程的pid字段 Pid最大值,参见kernel/pid.c 顺序使用 && 循环使用 include/linux/types.h include/asm-XXX/posix_typesYYY.h include/linux/threads.h
stuct pid ☆阅读 include/ inux/pid. h中 “ What is struct pid? struct upid t Try to keep pid chain in the same cacheline as nr for find pid * int n struct pid namespace *ns struct hist node pid chain: struct pid a tomic t count k lists of tasks that use this pid */ struct hlist head tasks [PiDtYPE MAX]: struct rcu head rcu unsigned int level struct upid numbers [l]; static inline pid t pid nr(struct pid *pid pid t nr =0 if (pid nr= pid->numbe rs [o].nr; 2021/2/6 Linux操作系统分析 return nri
2021/2/6 Linux操作系统分析 12/65 stuct pid ❖阅读include/linux/pid.h中 ➢“What is struct pid?