在我的大学,我正在开发一个涉及内核编程的项目。其中一部分是可加载内核模块,它为某些给定的中断注册中断处理程序。
现在我有中断处理程序和tasklet使用的共享数据结构,我想知道我是否可以确定tasklet的执行顺序与它们的调度顺序相同还是未定义?
例如,我的中断处理程序在时间t1
和时间t2
被调用,每次调用都执行tasklet_schedule(&customTasklet);
。现在,我可以确定首先执行在t1
安排的tasklet吗?
答案 0 :(得分:2)
预定tasklet
存储在列表中;系统以 FIFO 顺序读取此列表,因此:t1
之前执行是t2
。
这里some code了解机制。
修改强>
正如 CL 提醒的那样,每个CPU都有一个tasklet列表;因此,当您编写一个tasklet时,您将在活动CPU上进行调度。因此,tasklet在同一个CPU上被序列化。如果您在CPU2上安排t1
un CPU1和t2
,可能会在t2
之前执行t1
。