进程相关函数的数据结构为:进程描述符task_struct
管理这个数据结构的为各种等待队列、执行队列等。
// 下面是任务(进程)数据结构,或称为进程描述符。
// long state 任务的运行状态(-1不可运行,0可运行(就绪),>0已停止)。
// long counter 任务运行时间计数(递减)(滴答数),运行时间片。
// long priority 优先数。任务开始运行时counter=priority,越大运行越长。
// long signal 信号位图,每个比特位代表一种信号,信号值=位偏移值+1。
// 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 pgrp 进程组号。
// long session 会话号。
// long leader 会话首领。
// int groups[NGROUPS] 进程所属组号。一个进程可属于多个组。
// task_struct *p_pptr 指向父进程的指针。
// task_struct *p_cptr 指向最新子进程的指针。
// task_struct *p_ysptr 指向比自己后创建的相邻进程的指针。
// task_struct *p_osptr 指向比自己早创建的相邻进程的指针。
// 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 timeout 内核定时超时值。
// long alarm 报警定时值(滴答数)。
// long utime 用户态运行时间(滴答数)。
// long stime 系统态运行时间(滴答数)。
// long cutime 子进程用户态运行时间。
// long cstime 子进程系统态运行时间。
// long start_time 进程开始运行时刻。
// struct rlimit rlim[RLIM_NLIMITS] 进程资源使用统计数组。
// unsigned int flags; 各进程的标志,在下面第149行开始定义(还未使用)。
// 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节点结构指针。
// struct m_inode * library 被加载库文件i节点结构指针。
// unsigned long close_on_exec 执行时关闭文件句柄位图标志。(参见include/fcntl.h)
// struct file * filp[NR_OPEN] 文件结构指针表,最多32项。表项号即是文件描述符的值。
// struct desc_struct ldt[3] 局部描述符表。0-空,1-代码段cs,2-数据和堆栈段ds&ss。
// struct tss_struct tss 进程的任务状态段信息结构。
// ======================================
105 struct task_struct {
106 /* these are hardcoded - don't touch */
107 long state; /* -1 unrunnable, 0 runnable, >0 stopped */
108 long counter;
109 long priority;
110 long signal;
111 struct sigaction sigaction[32];
112 long blocked; /* bitmap of masked signals */
113 /* various fields */
114 int exit_code;
115 unsigned long start_code,end_code,end_data,brk,start_stack;
116 long pid,pgrp,session,leader;
117 int groups[NGROUPS];
118 /*
119 * pointers to parent process, youngest child, younger sibling,
120 * older sibling, respectively. (p->father can be replaced with
121 * p->p_pptr->pid)
122 */
123 struct task_struct *p_pptr, *p_cptr, *p_ysptr, *p_osptr;
124 unsigned short uid,euid,suid;
125 unsigned short gid,egid,sgid;
126 unsigned long timeout,alarm;
127 long utime,stime,cutime,cstime,start_time;
128 struct rlimit rlim[RLIM_NLIMITS];
129 unsigned int flags; /* per process flags, defined below */
130 unsigned short used_math;
131 /* file system info */
132 int tty; /* -1 if no tty, so it must be signed */
133 unsigned short umask;
134 struct m_inode * pwd;
135 struct m_inode * root;
136 struct m_inode * executable;
137 struct m_inode * library;
138 unsigned long close_on_exec;
139 struct file * filp[NR_OPEN];
140 /* ldt for this task 0 - zero 1 - cs 2 - ds&ss */
141 struct desc_struct ldt[3];
142 /* tss for this task */
143 struct tss_struct tss;
144 };
Linux-进程-数据结构
最新推荐文章于 2024-08-27 18:59:31 发布