【Linux】task_struct结构体成员中字段介绍

本文介绍了Linux操作系统如何管理进程,重点解析了task_struct结构体,包括进程标识符、状态、优先级、程序计数器、内存指针、上下文数据、I/O状态信息和记账信息等关键字段,阐述了进程控制块PCB在Linux下的实现,并详细讨论了进程状态的表示及调度策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

任何计算机系统都包含一个基本的程序集合,成为操作系统(OS)。操作系统包括:
(1)内核:进程管理、内存管理、文件管理、驱动管理……
(2)其他程序:函数库、shell程序……


那么计算机是如何管理进程的呢?

总结起来就是先把进程描述起来,用struct结构体,再把进程组织起来,用链表或者更高效的数据结构。


什么是进程呢?


概念

  • 课本内容:程序的一个执行实例,正在执行的程序等;
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体;

描述进程的PCB

进程信息被放在一个叫做进程控制块的数据结构中,可理解为进程属性的集合,课本上叫做PCB(process control block),Linux操作系统下的PCB是:task_struct。

task_struct内容分类

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

每一个PCB都包含这些信息,它定义在下图文件的sched.h中。
这里写图片描述


下面让我们来看一下sched.h中对task_struct的结构体成员们:

进程状态

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

上面这个变量就是描述进程状态的成员,其中volatile关键字是降低编译器对代码的优化,使得state变量一直从变量的内存中读取内容而不是寄存器;从而保证对操作系统状态实时访问的稳定性。
state成员的可能取值如下:

/*
  * Task state bitmask. NOTE! These bits are also
  * encoded in fs/
`struct goodix_ts_data`是gt9xx触摸屏驱动中的一个结构体,用于保存触摸屏设备的相关信息。该结构体的定义如下: ``` struct goodix_ts_data { struct i2c_client *client; // I2C客户端对象 struct input_dev *input_dev; // 输入设备对象 struct regulator *vdd; // 电压调节器对象 struct delayed_work work; // 延迟工作对象 u8 config[GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH]; // 触摸屏配置数据 u32 gtp_fw_version; // 触摸屏固件版本号 u16 max_x; // 触摸屏最大X坐标 u16 max_y; // 触摸屏最大Y坐标 u32 irq_flags; // 中断标志 u32 point_num; // 触摸点数量 bool suspended; // 睡眠状态标志 bool use_irq; // 是否使用中断 u8 irq_gpio; // 中断GPIO u8 rst_gpio; // 复位GPIO u16 swap_xy; // 交换X和Y坐标标志 u16 invert_x; // X坐标反转标志 u16 invert_y; // Y坐标反转标志 u16 filter; // 滤波器系数 u16 max_touch_num; // 最大触摸点数量 u16 gesture; // 手势识别标志 u16 fw_check_sum; // 固件校验和 struct mutex mutex; // 互斥信号量 struct workqueue_struct *wq; // 工作队列 struct completion cts_complete;// 完成信号量 }; ``` 该结构体中包含了触摸屏设备的I2C客户端对象、输入设备对象、电压调节器对象、中断标志、触摸点数量等信息。其中,`config`数组用于保存触摸屏的配置数据,`max_x`和`max_y`表示触摸屏的最大X坐标和最大Y坐标。`irq_flags`表示中断标志,`point_num`表示触摸点数量,`use_irq`表示是否使用中断。`invert_x`和`invert_y`表示X坐标和Y坐标是否翻转,`filter`表示滤波器系数,`max_touch_num`表示最大触摸点数量,`gesture`表示手势识别标志,`fw_check_sum`表示固件校验和等。总之,`struct goodix_ts_data`结构体保存了gt9xx触摸屏驱动中所需的各种参数和信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值