据我所知,Linux的特点是内核抢占,这意味着执行系统调用的线程可以被抢占,并被重新调度到下一个时期运行.
这让我想知道,当系统调用中的线程被重新调度时,它们是否具有任何类型的提升的优先级.
例如,假设我有一个带有SCHED_OTHER且优先级为20(0表示最低,139表示最高)的Userland进程.该进程使用标准的Read系统调用从sysfs读取SMBus设备文件.现在,当它读取SMBus设备时,SMBus控制器需要一次接收一个字节,因此定时很重要,我们不能在接收字节之间等待太长时间,否则SMBus事务将超时.
现在,当从设备接收字节时,线程被重新调度(要么Hibernate ,要么被更高优先级的线程抢占,等等).当线程被重新调度时,它是否仍然具有初始的低优先级20?这似乎是一个问题,它应该被视为更高的,因为它是与设备接口和时间是关键的(似乎我希望它被视为具有RT优先级).我还没有发现任何迹象表明线程在这些上下文中获得了"提升"的优先级.