Linux-进程-数据结构

进程相关函数的数据结构为:进程描述符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 };

猜你喜欢

转载自blog.csdn.net/bear_miao/article/details/78820382