Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 相同优先级任务上的内核抢占_Linux Kernel_Kernel_Scheduling - Fatal编程技术网

Linux kernel 相同优先级任务上的内核抢占

Linux kernel 相同优先级任务上的内核抢占,linux-kernel,kernel,scheduling,Linux Kernel,Kernel,Scheduling,有人可以通过清晰的解释或任何参考链接帮助我理解内核如何处理具有相同优先级的任务的抢占。假设我有三个高优先级的任务A、B和C 任务(A) { 高优先级 读取异步消息 } 任务(B) { 高优先级 发送异步消息 } 任务(C) { 高优先级 绘制过程 } 在这种情况下,将考虑处理哪个任务,以及它是如何被抢占的?一般的调度顺序是 内核直接在内核上下文中调用函数schedule(),或者在设置了TIF_NEED_RESCHED标志并且内核从中断上下文返回时调用函数 此函数调用pick_next_task

有人可以通过清晰的解释或任何参考链接帮助我理解内核如何处理具有相同优先级的任务的抢占。假设我有三个高优先级的任务A、B和C

任务(A) { 高优先级 读取异步消息 }

任务(B) { 高优先级 发送异步消息 }

任务(C) { 高优先级 绘制过程 }


在这种情况下,将考虑处理哪个任务,以及它是如何被抢占的?

一般的调度顺序是

  • 内核直接在内核上下文中调用函数
    schedule()
    ,或者在设置了
    TIF_NEED_RESCHED
    标志并且内核从中断上下文返回时调用函数
  • 此函数调用
    pick_next_task()
    以接收任务,该任务将抢占当前正在运行的任务
  • pick_next_task()
    按优先级降序调用每个调度程序类“
    pick_next_task()
    ,直到其中一个返回任务。注意,优先级是指“优先级”(例如,软实时或正常),而不是“进程”级别
  • CFS的方法(常规进程的调度器)是为每个进程提供等量的虚拟运行时。虚拟运行时是一个进程的实时运行时,以其优先级(进程优先级)加权。所以CFS类返回的任务具有较少的虚拟运行时

  • 对于调度器,不管进程在做什么,它发送或接收什么消息。所以,在一般情况下,如果您的进程具有相同的优先级,那么运行时间较少的进程将在下一次
    schedule()
    调用时抢占另一个进程。

    谢谢rasen。CFS如何评估进程的虚拟运行时。它是否取决于流程使用的资源。我想通过CFS了解这个选择标准,以查找处理虚拟运行时另外两点:)1)这是否意味着任务选择时不考虑用户分配的优先级2)理想情况下两个任务是否可能具有相同的虚拟运行时0。运行时间仅取决于处理器时间、进程运行时间。它在计时器中断处理程序中增加。1.进程优先级用作实际运行时的权重。因此,具有更高优先级的进程将获得更高的实际运行时间。2.是的,这是可能的。在这种情况下,调度器可以选择其中的任何一个。CFS schedular提到这个用户的优先级、NICE值和任务的rt优先级,它们之间有什么关系?所以最后得出的(最小)vruntime是任务调度所考虑的,是吗?我不知道,用户的优先级是什么。Nice值,也称为niceness,是范围为-20..19的值。价值越大,优先级越低。仅允许root用户设置负值。rt_优先级是实时优先级。对于实时进程,该值的范围为0..100。对于非实时进程,精确性直接映射在rt_优先级的101..140范围内。CFS调度非实时进程。我可以建议你读一些关于日程安排的书。Robert Love在Linux内核开发中提供了关于这个主题的一个很好的章节。