据我了解,Linux具有内核抢占功能,这意味着执行系统调用的线程可以被抢占并重新安排在下一个纪元上运行。
这让我想知道系统调用中的线程在重新调度时是否具有任何提升的优先级。
例如,假设我有一个带有 SCHED_OTHER 的用户态进程,优先级为 20(0 是最低的,139 是最高的)。该进程使用标准读取系统调用从 sysfs 读取 i2c eeprom 文件。现在,当它读取 eeprom 时,i2c 控制器需要一次接收每个字节,因此计时很重要,我们不能在接收字节之间等待太久,否则 i2c 事务将超时。
现在,当从 eeprom 接收字节时,线程会被重新调度(要么休眠,要么被更高优先级的线程抢占,等等)。当线程被重新调度时,它是否仍然具有初始的低优先级 20?这似乎是一个问题,应该被视为更高,因为它与设备连接并且计时至关重要(似乎我希望它被视为具有 rt 优先级)。我还没有发现任何表明线程在这些上下文中获得“提升”优先级的信息。