根据Linux源代码和本主题: do system calls execute inside a software interrupt handler in entirety?
似乎有些系统调用完全在中断处理程序中处理(不考虑vDSO系统调用)。这意味着系统调用会阻止所有其他任务执行,直到它阻塞信号量或导致收益。
我的问题:Linux PREEMPT_RT补丁是否更正了这些调用以及如何解决?
文档说:
将中断处理程序转换为可抢占的内核线程:RT-Preempt补丁处理内核线程上下文中的软中断处理程序,它由task_struct表示,就像常见的用户空间进程一样。但是,也可以在内核上下文中注册IRQ。
(来源:https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions)
它似乎被推迟到一个线程,但修补的Linux内核中的swi_handler代码(arm)仍然在处理程序中调用sys_ *函数。
假设系统调用由具有特权的内核线程(ring 0 / supervisor)处理,该内核线程是否具有与调用线程相同的执行优先级?
避免优先级倒置是有意义的。