【发布时间】:2020-03-18 12:31:05
【问题描述】:
这更像是一个理论问题,因为我试图了解内核调度程序的工作原理(但在中等优先级 RT 任务运行时,我也遇到了 hang_task 问题 - 而且 CPU 中有交换进程转储)。我正在使用带有 RT 补丁的内核(完全抢占式内核)。
如果进程进入 D 状态(由于来自 RAM 的 sys_read,例如来自 procfs),它是否可能被更高优先级的 RT 任务抢占(可能多次),因此它将保持D状态然后恢复阅读?如果有读取的 RAM 有问题,我不确定这是如何工作的。
那么,接下来会发生什么,卡在D状态的进程其实是处于不间断睡眠状态,如果被抢占,是不是在等待重新调度呢?可以在不同的 CPU 上重新调度吗?特别是如果有交换任务存在,他们不会做一些事情来恢复处于 D 状态的进程吗?
我对这一切有点困惑,因为我的进程只从 RAM 中读取,并且以某种方式其他任务试图从中获取 rt-mutex 锁,然后我得到了 hang_task 问题。但是总是有一些(看似)空闲的 CPU 内核。为什么读取 RAM 需要这么长时间?有时 RCU 线程在等待从 procfs 执行 sys_read 的进程的锁时也会挂起。
我知道有很多问题,但我需要以某种方式连接我脑海中的拼图。任何帮助表示赞赏。
提前谢谢你。 :)
【问题讨论】:
标签: linux kernel real-time scheduler preemptive