task_struct:
task_struct是Linux系统中的任务结构指针,定义在头文件include/linux/sched.h中,保存着用于控制和管理进程的所有信息,主要包括进程当前的运行状态信息,信号,进程号,父进程号,运行时间累计值,正在使用的文件和本任务的局部描述符一级卡任务状态段信息。
task_struct结构:
struct task_struct
{
long state; //任务的运行状态
long counter; //任务运行时间计数(递减),运行的时间片;
long priority; //运行优先数;
long signal; //信号
struct sigaction sigaction[32]; //信号执行属性结构,对应信号将要执行的操作和标志信息;
long blocked; //进程信号屏蔽码;
int exit_code ;//任务停止执行后的退出码,其父进程会来取;
unsigned long start_code;//代码段地址
unsigned long end_code;//代码长度(字节数);
unsigned long end_data;//代码长度+数据长度(字节数);
unsigned long brk; //总长度(字节数);
unsigned long start_stack;//堆栈段低址;
long pid;//进程标识号(进程号)
long father; //父进程号
long pgrp; //进程组号;
long session;//会话号;
long leader;//会话首领;
unsigned short uid;//用户标识号(用户ID)
unsigned short euid;//有效用户ID;
unsigned short suid;//保存的用户ID;
unsigned short gid;//组标识号(组ID);
unsigned short egid;//有效组ID;
unsigned short sgid;//保存的组ID;
long alarm;//报警定时值;
long utime;//用户态运行时间;
long stime; //系统态运行时间;
long cutime;//子进程用户态运行时间;
long cstime;//子进程系统态运行时间;
long start_time;//进程开始运行时刻;
unsigned short used_math;//标志;是否使用了协处理器;
int tty;//进程使用tty终端的子设备号;-1表示没有使用;;
unsigned short umask;//文件创建属性屏蔽位;
struct m_inode *pwd; //当前工作目录i节点结构指针;
struct m_inode *root;//根目录i节点结构指针;
struct m_inode *executable;//执行文件i节点结构指针;
unsigned long close_on_exec;//执行时关闭文件句柄位图标志;
struct file * filp[NR_OPEN];//文件结构指针表,最多32项;表项号即为文件描述符的值;
struct desc_struct ldt[3];//局部描述符表;0---empty;1--代码段cs;2---数据段和堆栈段ds&ss;
struct tss_struct tss;//进程的任务状态段信息结构;
};
task_struct中的字段的含义解释:
(1)long state:该字段含有进程当前的状态代号;
进程正在处于就绪状态或者运行状态: state=TASK_RUNNING;
进程正在处于阻塞状态;state=TASK_INTERRUPTIBLE或者state=TASK_UNINTERRUPTIBLE;
进程处于停止状态:state=TASK_STOPPED;
进程处于终止状态时:state=TASK_ZOMBIE;
(2)long counter:进程的剩余运行时间;进程开始运行时counter =priority;为时间片;
(3)long priority:进程运行的时间片,用来给counter赋值;
(4)long signal:为进程当前所收到信号的位图,共32个比特位,每一个比特位代表一种信号。信号值 = 位偏移值+1;
注:Linux内核最多有32个信号;
(5)struct sigaction sigaction[32];用来保存各信号所使用的的操作和属性,数组的每一项对应一个信号;
(6)long blocked:进程当前不想处理的信号的阻塞位图,与signal类似,每一个比特位代表一种被阻塞的信号;
(7)int exit :用来保存进程终止时的退出码;在子进程终止后:父进程可以查询这个退出码;
(8)usigned long start_code:为进程代码在CPU线性地址空间中的开始地址;
(9)unsigned long end_code:保存进程代码的字节长度值;
(10)unsigned long end_data:进程代码长度+数据长度;
(11)unsigned long brk:进程的代码和数据的总字节长度值(指针值),还包含未初始化的数据段bss;
(12)unsigned long start_stack:指向进程逻辑地址空间中堆栈的起始处;
(13)long pid:进程号:用来唯一的标识进程;
(14)long father:创建本进程的父进程的进程号;
(15)unsigned short uid:指拥有该进程的用户的标识号;
(16)long alarm:进程的报警定时值;
(17)long utime:累计进程在用户态运行的时间;
注:作者水平有限,如有问题,请留言,谢谢!!