Task_struct结构体

Task_struct是Linux中每个进程的核心数据结构,它包含了进程的状态、调度信息、通讯状况、上下文、内存信息等多个方面。文章详细剖析了Task_struct的结构,包括进程状态如TASK_RUNNING、TASK_INTERRUPTIBLE等,以及信号处理、调度策略等内容,并提及了环境变量的设置与获取函数setenv、getenv和putenv的作用和限制。
摘要由CSDN通过智能技术生成

1.Task_struct结构体
inux系统中的每个进程都有一个名为task_struct的数据结构,它相当于“进程控制块(PCB)”。
内核在为每个进程分配Task_struct结构的内存空间时,实际上一次性分配两个连续的 内存页面(共8KB),其底部约1KB空间存放Task_struct结构,上面的7KB空间存放进程系统空间堆栈。 如图所示 :

这里写图片描述

在进行剖析task_struct的定义之前,我们先按照我们的理论推一下它的结构:
1、进程状态 ,将纪录进程在等待,运行,或死锁
2、调度信息, 由哪个调度函数调度,怎样调度等
3、进程的通讯状况
4、因为要插入进程树,必须有联系父子兄弟的指针, 当然是task_struct型
5、时间信息, 比如计算好执行的时间, 以便cpu 分配
6、标号 ,决定改进程归属
7、可以读写打开的一些文件信息
8、 进程上下文和内核上下文
9、处理器上下文
10、内存信息

(1)long state //任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。

(2)long counter //任务运行时间计数(递减)(滴答数),运行时间片。

(3)long priority //运行优先数。任务开始运行时counter = priority,越大运行 越长。

(4)long signal //信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。

(5)struct sigaction sigaction[32] //信号执行属性结构,对应信号将要执行的操作和标志信息。

(6)long blocked //进程信号屏蔽码(对应信号位图)。
  
(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_SUPE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值