linux下 task_struct结构体详谈

task_struct是Linux内核中表示进程的关键数据结构,它包含了进程的状态、标识符、优先级、上下文数据、I/O状态信息、记账信息等。通过分析task_struct的成员,如states、flags、priority等,可以详细了解进程的运行状态和调度策略。每个进程的PCB(进程控制块)由task_struct表示,并以链表形式存在于内核中。理解task_struct对于系统管理和优化至关重要。
摘要由CSDN通过智能技术生成

        linux中的进程代表着处于执行期的程序以及它所管理资源的总称,因此,进程与程序是两码事,task_str是linux内核的一种数据结构,会被装载到RAM里并且包含着进程的信息,linux中每一个进程都由一个task_struct结构体来定义,即我们所说的PCB,是对进程控制的唯一有效手段,了解task_struct的结构是非常有用的,每一个进程都把它的信息放到task_struct这个数据结构里,task_struct包含以下内容:

     (1)进程状态:记录进程在等待、运行或死锁

     (2)进程标识符:描述本进程的唯一标识符,用来区别其他进程

     (3)优先级:相对于其他进程的优先级

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

     (5)内存指针:包含程序代码和进程相关数据的指针,还有其他进程共享的内存块的指针

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

     (7)I/0状态信息:包含显示的I/0请求,分配给I/0设备和被进程使用的文件列表

     (8)记账信息:包含处理器的时间总和,使用的时钟数总和,时间限制,记账号等;

       保存进程信息的数据结构叫做task_struct,并且可以在include/linux/sched.h里找到它,所有运行在系统里的进程都以task_struct链表的形式存在内核里;

可通过ps aux[axj]  |  grep  进程id   查看进程信息


下面给出task_struct中的部分成员介绍:

    1.调度数据成员

(1)volatile long states;(表示进程当前状态)

      TASK_RUNNING(就绪):正在运行或在就绪队列中准备运行的进程

      TASK_INTERRUPTIBLE(浅度睡眠):处于等待队列中的进程,资源有效时唤醒,也可由其它进程通过信号或定时中断唤醒后进入就绪队列

      TASK_UNINTERRUPTIBLE(深度睡眠):处于等待队列中的进程,资源有效时唤醒,不可由其它进程通过信号或定时中断唤醒

      TASK_STOPPED(暂停):进程被暂停,原因有二,一是对收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信号的反应,二是受其它进程的ptrace系统调用的控制而暂时将 CPU交给控制进程

      TASK_ZOMBIE(僵死):表示进程结束但尚未消亡的一种状态(僵死状态),进程已结束运行且释放大部分资源,但尚未释放进程控制块

      TASK_SWAPPING:进程页面被交换出内存的进程

(2)unsigned long flags;(进程标志)

      PF_PTRACED:被ptrace系统调用监控

      PF_TRACESYS:正在跟踪

      PF_FORKNOEXEC:进程刚创建,但还未执行

      PF_SUPERPRIV:超级用户特权

      PF_SIGNALED:进程被信号(signal)杀死

      PF_STARTING:进程正被创建

      PF_EXI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值