完全抢占式内核,进程处于D状态

问题描述 投票:0回答:1

这更多是一个理论上的问题,因为我试图了解内核调度程序的工作方式(但是在运行中优先级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个回答
0
投票

处于D状态的进程已退出运行队列,因此无法抢占(无论其状态如何)。不间断的睡眠是指无法被信号唤醒,并且与抢占无关。

© www.soinside.com 2019 - 2024. All rights reserved.