0

这更像是一个理论问题,因为我试图了解内核调度程序是如何工作的(但在中等优先级 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 的进程的锁时也会挂起。

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

先感谢您。:)

4

1 回答 1

0

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

于 2019-12-15T11:49:02.673 回答