5.3 IPIPE: Xenomai/Linux双核交互之ipipe_flags

5.3 IPIPE: Xenomai/Linux双核交互之ipipe_flags

5.3.1 IPIPE改造struct thread_info之ipipe_flags

struct task_struct 是Linux内核用来描述一个进程或线程的最核心的数据结构。每个任务(这里可以理解为进程或者线程)都有一个对应的 task_struct 实例。它包含了任务的所有信息,比如状态、进程ID (PID)、调度信息以及其他特定于任务的各种信息。

struct task_struct 中包含了struct thread_info结构体(CONFIG_THREAD_INFO_IN_TASK=y,否则struct thread_info在内核栈的栈底)。struct thread_info 包含了低级别的任务数据,这些数据是汇编代码(entry.S)需要立即访问的。当从用户空间切换到内核空间时(如执行系统调用或发生中断),内核需要快速获取当前线程的一些基本信息来正确地保存现场(即当前执行环境的状态)并进行上下文切换。因此,这些信息必须存储在一个可以被迅速定位和访问的位置。

struct thread_info中的flags是一个标志位字段,用于存储与线程相关的低级别的状态信息或配置选项。例如,它可能用来标记线程是否被抢占、是否需要重新调度等。不同的位可以代表不同的含义,例如TIF_SIGPENDING、TIF_NEED_RESCHED等宏定义。这些宏定义以TIF_为前缀,意思是Thread Info Flags!

如上图,IPIPE在struct thread_info中新增了ipipe_flags,用于Xenomai/Linux双内核之间进行交互。

如下图,ipipe_flags不同的位可以代表不同的含义,例如TIP_MAYDAY、TIP_NOTIFY、TIP_HEADTIP_USERINTRET等4中情况。这些宏定义以TIP_为前缀,猜测意思是Thread Info Primary,因为Primary代表Head域。

5.3.2 ipipe_flags之TIP_HEAD

TIP_HEAD最简单,最好理解,代表进程当前运行在Head域。

当从root域迁移到head域,利用ipipe_set_ti_thread_flag设置TIP_HEAD;

当从head域进入root域,利用ipipe_clear_thread_flag清除TIP_HEAD.

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-优快云博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值