Linux kernel 选择Linux内核中的下一个任务

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中:#定义当前值(

从驱动程序中的随机位置选择当前CPU将执行的下一个任务(进程)最安全的方法是什么

我看到struct task\u struct(来自sched.h)包含next\u task成员,我认为执行该任务的一个好方法是使用current宏获取当前任务,并使用该成员选择下一个任务

但是,我看到函数\u schedule()以不同的方式执行该任务-使用cpu\u rq之类的函数

那么,正确的方法是什么?方法之间的区别是什么

顺便说一下,我看到了“当前”任务的两种不同定义

  • 在sched.h中:
    #定义当前值(0+当前值集[smp\U处理器id())

  • current.h中更流行的一个:
    #定义当前get_current()
    ,它返回
    perpu_read_stable(当前任务)

  • 对于我最初的解决方案,这两个宏听起来都不错,但怎么可能有两个同名的宏呢?它们之间有什么区别?

    选择当前CPU将执行的下一个任务(进程)最安全的方法是什么,
    从驱动程序中的随机位置

    注意:记住要包含

    下一个任务现在已“选择”在当前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调试时使用
  • 这两种方法都返回a
    包含当前CPU上活动的当前任务的详细信息

       /* random place in a driver */
        msleep_interruptible(20);