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_HEAD和TIP_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系列文章大纲-优快云博客
原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!