Linux kernel 选择Linux内核中的下一个任务
从驱动程序中的随机位置选择当前CPU将执行的下一个任务(进程)最安全的方法是什么 我看到struct task\u struct(来自sched.h)包含next\u task成员,我认为执行该任务的一个好方法是使用current宏获取当前任务,并使用该成员选择下一个任务 但是,我看到函数\u schedule()以不同的方式执行该任务-使用cpu\u rq之类的函数 那么,正确的方法是什么?方法之间的区别是什么 顺便说一下,我看到了“当前”任务的两种不同定义Linux kernel 选择Linux内核中的下一个任务,linux-kernel,scheduler,Linux Kernel,Scheduler,从驱动程序中的随机位置选择当前CPU将执行的下一个任务(进程)最安全的方法是什么 我看到struct task\u struct(来自sched.h)包含next\u task成员,我认为执行该任务的一个好方法是使用current宏获取当前任务,并使用该成员选择下一个任务 但是,我看到函数\u schedule()以不同的方式执行该任务-使用cpu\u rq之类的函数 那么,正确的方法是什么?方法之间的区别是什么 顺便说一下,我看到了“当前”任务的两种不同定义 在sched.h中:#定义当前值(
#定义当前值(0+当前值集[smp\U处理器id())
#定义当前get_current()
,它返回perpu_read_stable(当前任务)
从驱动程序中的随机位置 注意:记住要包含 下一个任务现在已“选择”在当前CPU上运行。:-) 更严肃地说,
不涉及调度程序,
驾驶员无法准确确定(在所有操作条件下)
将在CPU上计划的下一个任务。
我看到struct
task\u struct
(来自sched.h)包含下一个任务成员,我认为执行该任务的一个好方法是使用当前宏获取当前任务,并使用该成员选择下一个任务
next\u task
指针仅用于维护系统中所有任务的全局链接列表。不要混淆下一个要安排的任务或诸如此类的事情 参考文献:
-
- .
current
的两个定义(即(0+当前设置[smp\u处理器id()])
和perpu\u读取稳定(当前任务)
)之间有什么区别
目前(Linux内核4.4),以下2个是当前
current
- 在堆栈上维护,以便快速检索
- 默认情况下,在正常操作模式下使用
- 触发系统调用以查找当前进程的tid/pid
- 当内核已启用lockdep调试时使用
包含当前CPU上活动的当前任务的详细信息
/* random place in a driver */
msleep_interruptible(20);