在我的大学里,我正在从事一个涉及一些内核编程的项目。其中一部分是可加载的内核模块,它为某些给定的中断注册中断处理程序。
现在我有中断处理程序和小任务使用的共享数据结构,我想知道我是否可以确定小任务的执行顺序与它们计划的顺序相同还是未定义?
例如,我的中断处理程序会不时被调用t1
,t2
每次调用都会执行tasklet_schedule(&customTasklet);
。现在,我可以确定当时安排的tasklett1
会先执行吗?
在我的大学里,我正在从事一个涉及一些内核编程的项目。其中一部分是可加载的内核模块,它为某些给定的中断注册中断处理程序。
现在我有中断处理程序和小任务使用的共享数据结构,我想知道我是否可以确定小任务的执行顺序与它们计划的顺序相同还是未定义?
例如,我的中断处理程序会不时被调用t1
,t2
每次调用都会执行tasklet_schedule(&customTasklet);
。现在,我可以确定当时安排的tasklett1
会先执行吗?
计划tasklet
存储在列表中;系统按FIFO顺序读取此列表,因此: yest1
之前执行t2
。
这里有一些代码来理解机制。
编辑
正如CL所提醒的,每个 CPU 都有一个 tasklet 列表;因此,当您调度一个 tasklet 时,您是在活动 CPU 上调度它。所以 tasklet 在同一个 CPU 上序列化。如果您安排t1
un CPU1 和t2
CPU2 可能会发生t2
之前执行的情况t1
。