从驱动程序中的随机位置选择当前CPU将执行的下一个任务(进程)的最安全方法是什么?
我看到 struct task_struct (来自sched.h)包含一个 next_task 成员,并认为执行该任务的一个好方法是使用当前宏,并使用该成员选择下一个。
但是,我看到函数 __ schedule()以不同的方式执行该任务 - 使用cpu_rq等函数...
那么,正确的方法和方法之间的区别是什么?
顺便说一句,我看到了"当前"的两种不同定义。任务。
在sched.h中:#define current (0+current_set[smp_processor_id()])
来自current.h的更受欢迎的一个:#define current get_current()
返回percpu_read_stable(current_task)
对于我原来的解决方案,两者听起来都不错,但是有两个同名的宏怎么可能呢?它们之间有什么区别?
答案 0 :(得分:0)
选择当前CPU将执行的下一个任务(进程)的最安全的方式是什么,
来自驱动程序中的随机位置?
/* random place in a driver */ msleep_interruptible(20);
注意:请记住
#include <linux/delay.h>
。
接下来的任务已被选中&#34;在当前的CPU上运行。 : - )
更严重的是, 不涉及调度程序,
驾驶员无法准确确定(在所有操作条件下)
将在CPU上安排的下一个任务。
我看到struct task_struct
(来自sched.h)包含一个next_task成员,并认为执行该任务的一个好方法是使用当前宏获取当前任务,并使用该成员选择下一个。
next_task
指针仅用于维护系统中所有任务的全局链接列表 不要把它混淆为下一个要安排的任务或类似的事情。
<子>
参考文献:
- introduction to Linux Processes
- details of the process descriptor and the task structure。
子>
current
的两个定义之间有什么区别,即(0+current_set[smp_processor_id()]
和percpu_read_stable(current_task)
?
目前( Linux内核4.4 ),
的唯一与架构无关的定义
以下2是current
这两个都返回
task_struct
包含当前CPU上当前任务的详细信息。