task_struct结构体, 理解结构体中的各个字段的含义

task_struct:

为了管理进程,操作系统必须对每个进程所做的事情进行清楚的描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块(PCB)。

在linux操作系统下这就是task_struct结构 ,所属的头文件#include <sched.h>每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操作系统都能够跟踪这个结构的信息,宰割结构是linux内核汇总最重要的数据结构,下面我们会详细的介绍。
这个进程的主要信息:

1、与进程相关的唯一标识符,区别正在执行的进程和其他进程

2、状态:描述进程的状态,因为进程有阻塞、挂起、运行等好几个状态,所以都有个表示符来记录进程的执行状态。

3、优先级:如果有好几个进程正在执行,就涉及到进程的执行的先后顺序,这和进程的优先级这个标识符有关。

4、程序计数器:程序中即将被执行指令的下一条地址。

5、内存指针:程序代码和进程相关数据的指针。

6、上下文数据:进程执行时处理器的寄存器中的数据。

7、I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

8、记账信息:包括处理机的时间总和,记账号等等。

保存进程信息的数据结构叫tast_struct,进程的信息可以通过/proc系统文件夹查看。要获取PID为400的进程信息,你需要查看/proc/400这个文件夹。

接下来就来给出一些task_struct各个字段的介绍:
task_struct //进程描述符

Struct task_struct

{

1、支持对称多处理器方式(SMP)时的数据成员

(1)int processor; //进程正在使用的CPU

(2)int last_processor; //进程最后一次使用的CPU

(3)int lock_depth; //上下文切换时系统内核锁的深度

2、其他数据成员

(1)unsigned short used_math; //是否使用MPU

(2)char comm[16]; //进程正在运行的可执行文件的文件名

(3)struct rlimit rlim[RLIM_NLIMITS]; //结构rlimit用于资源管理,定义在linux/include/linux/resource.h中,成员共有两项:rlim_cur是资源的当前最大数目;rlim_max是资源可有的最大数目。

(4)int errno; //最后一次出错的系统调用错误号,0表示无错误。系统调用返回时,全程量也拥有该错误。

(5)long debugreg[8]; //保存INTEL CPU调试寄存器的值,在ptrace系统调用中使用。

(6)struct exec_domain *exec_domain; //Linux可以运行由80386平台其它UNIX操作系统生成的符合iBCS2标准的程序。关于此类程序与Linux程序差异的消息就由exec_domain结构保存。

(7)unsigned long personality; //Linux 可以运行由80386平台其它UNIX操作系统生成的符合iBCS2标准的程序。 Personality进一步描述进程执行的程序属于何种UNIX平台的“个性”信息。通常有PER_Linux、PER_Linux_32BIT、 PER_Linux_EM86、PER_SVR3、PER_SCOSVR3、PER_WYSEV386、PER_ISCR4、PER_BSD、 PER_XENIX和PER_MASK等,

(8)struct linux_binfmt *binfmt; //指向进程所属的全局执行文件格式结构,共有a。out、script、elf和java等四种。结构定义在incl

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值