Linux中task_struct结构体字段分析

task_struct是Linux内核中的重要数据结构,用于存储进程信息。它包含多个字段,如处理器信息、资源限制、错误号、调试寄存器、执行域、个性信息、执行文件格式、退出代码、调度数据、信号处理、进程队列指针、时间数据、信号量、上下文环境、文件系统数据、内存管理以及页面管理等。通过对这些字段的详细分析,可以深入了解Linux内核如何管理和调度进程。
摘要由CSDN通过智能技术生成


task_struct:是Linux内核的一种数据结构。它放在RAM(运行内存)里并包含着进程的信息。每个进程都把自己的信息放在task_struct数据结构里。

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等四种。结构定义在include/linux/binfmts.h中(core_dump、load_shlib(fd)、load_binary、use_count)。

(9) int exit_code,exit_signal;  //引起进程退出的返回代码exit_code,引起错误的信号名exit_signal。

(10) int dumpable:1;  //布尔量,表示出错时是否可以进行memory dump。

(11) int did_exec:1;  //按POSIX要求设计的布尔量,区分进程是正在执行老程序代码,还是在执行execve装入的新代码。

(12) int tty_old_pgrp;  //进程显示终端所在的组标识。

(13) struct tty_struct *tty;  //指向进程所在的显示终端的信息。如果进程不需要显示终端,如0号进程,则该指针为空。结构定义在include/linux/tty.h中。

(14) struct wait_queue *wait_chldexit;  //在进程结束时,或发出系统调用wait4后,为了等待子进程的结束,而将自己(父进程)睡眠在该队列上。结构定义在include/linux/wait.h中。

3、 调度数据成员
(1) volatile long states;  //表示进程的当前状态:
? TASK_RUNNING:正在运行或在就绪队列run-queue中准备运行的进程,实际参与进程调度。
? TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号(signal)或定时中断唤醒后进入就绪队列run-queue。
? TASK_UNINTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,不可由其它进程通过信号(signal)或定时中断唤醒。
? TASK_ZOMBIE:表示进程结束但尚未消亡的一种状态(僵死状态)。此时,进程已经结束运行且释放大部分资源,但尚未释放进程控制块。
?TASK_STOPPED:进程被暂停,通过其它进程的信号才能唤醒。导致这种状态的原因有二,或者是对收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信号的反应,或者是受其它进程的ptrace系统调用的控制而暂时将CPU交给控制进程。
? TASK_SWAPPING: 进程页面被交换出内存的进程。
(2) unsigned long flags;  //进程标志:
?PF_ALIGNWARN 打印“对齐”警告信息。
?PF_PTRACED 被ptrace系统调用监控。
?PF_TRACESYS 正在跟踪。
?PF_FORKNOEXEC 进程刚创建,但还没执行。
?PF_SUPERPRIV 超级用户特权。
?PF_DUMPCORE dumped core。
?PF_SIGNALED 进程被信号(signal)杀出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值