【问题标题】:fully preemptive kernel and process stuck in D state完全抢占式内核和进程卡在 D 状态
【发布时间】:2020-03-18 12:31:05
【问题描述】:

这更像是一个理论问题,因为我试图了解内核调度程序的工作原理(但在中等优先级 RT 任务运行时,我也遇到了 hang_task 问题 - 而且 CPU 中有交换进程转储)。我正在使用带有 RT 补丁的内核(完全抢占式内核)。

  1. 如果进程进入 D 状态(由于来自 RAM 的 sys_read,例如来自 procfs),它是否可能被更高优先级的 RT 任务抢占(可能多次),因此它将保持D状态然后恢复阅读?如果有读取的 RAM 有问题,我不确定这是如何工作的。

  2. 那么,接下来会发生什么,卡在D状态的进程其实是处于不间断睡眠状态,如果被抢占,是不是在等待重新调度呢?可以在不同的 CPU 上重新调度吗?特别是如果有交换任务存在,他们不会做一些事情来恢复处于 D 状态的进程吗?

我对这一切有点困惑,因为我的进程只从 RAM 中读取,并且以某种方式其他任务试图从中获取 rt-mutex 锁,然后我得到了 hang_task 问题。但是总是有一些(看似)空闲的 CPU 内核。为什么读取 RAM 需要这么长时间?有时 RCU 线程在等待从 procfs 执行 sys_read 的进程的锁时也会挂起。

我知道有很多问题,但我需要以某种方式连接我脑海中的拼图。任何帮助表示赞赏。

提前谢谢你。 :)

【问题讨论】:

    标签: linux kernel real-time scheduler preemptive


    【解决方案1】:

    卡在 D 状态的进程不在运行队列中,因此不能被抢占(无论他的状态如何)。不间断睡眠是指不能被信号唤醒,与抢占无关。

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 2015-03-05
      • 2014-08-25
      • 2017-03-05
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2019-03-30
      相关资源
      最近更新 更多