task_struct结构体成员详解

本文详细探讨了task_struct结构体,它是进程控制块(PCB)的核心组成部分。内容涵盖进程状态、标识符、标记符、亲属关系、ptrace系统调用、进程调度和地址空间等多个方面,揭示了操作系统如何通过PCB实现进程管理和调度。
摘要由CSDN通过智能技术生成

1:引言

进程就是程序动态运行的实例,它是承担分配系统资源的实体。我们也可以把进程当成是由一组元素组成的实体,进程的两个基本的元素时程序代码和与代码相关联的数据集合。在进程执行时,都可以被表征为一下元素:

  • 标识符:与进程相关的唯一标识符,用来区别正在执行的进程和其他进程。
  • 状态:描述进程的状态,因为进程有挂起,阻塞,运行等好几个状态,所以都有个标识符来记录进程的执行状态。
  • 优先级:如果有好几个进程正在执行,就涉及到进程被执行的先后顺序的问题,这和进程优先级这个标识符有关。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:程序代码和进程相关数据的指针。
  • 上下文数据:进程执行时处理器的寄存器中的数据。
  • I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表等。
  • 记账信息:包括处理器的时间总和,记账号等等。

上面的内容可以参考《操作系统精髓与设计原理》。

操作系统对进程的控制就是通过对上面的这些元素的控制来控制操作系统的,但这些信息都不是单独存放的,而是存放在一个叫做PCB(进程控制块)数据结构中,这个数据结构是一种结构体,由操作系统创建和管理,下面我们就通过了解一下task_struct来看一看操作系统是怎么通过进程控制块来对进程进行控制和调度的吧。

2:task_struct源码成员解析

首先我们直接附上task_struct所定义在的头文件sched.h的链接吧:
http://lxr.free-electrons.com/source/include/linux/sched.h

关于task_struct的实现大家可以参考源码!
下面我们就来介绍一下tast_struct中复杂的成员吧:

进程状态

volatile long state;/* -1 unrunnable, 0 runnable, >0 stopped */

上面这个变量就是描述进程状态的成员,结合C语言我们学到的知识volatile关键字是降低编译器对代码的优化,是state变量一直从变量的内存中读取内容而不是寄存器;从而保证对操作系统状态实时访问的稳定性。

state成员的可能取值如下

 /*
  * Task state bitmask. NOTE! These bits are also
  * encoded in fs/proc/array.c: get_task_state().
  *
  * We have two separate sets of flags: task->state
  * is about runnability, while task->exit_state are
  * about the task exiting. Confusing, but this way
  * modifying one set can't modify the other one by
  * mistake.
  */
 #define TASK_RUNNING            0
 #define TASK_INTERRUPTIBLE      1
 #define TASK_UNINTERRUPTIBLE    2
 #define TASK_STOPPED            4
 #define TASK_TRACED             8

/* in tsk->exit_state */
 #define EXIT_DEAD               16
 #define EXIT_ZOMBIE             32
 #define EXIT_TRACE              (EXIT_ZOMBIE | EXIT_DEAD)

/* in tsk->state again */
 #define TASK_DEAD               64
 #define TASK_WAKEKILL           128    /** wake on signa
  • 16
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值