Linux之进程的PCB——task_struct

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:累计进程在用户态运行的时间;



注:作者水平有限,如有问题,请留言,谢谢!!

你可能感兴趣的:(Linux)