根据Linux源代码和这个主题: 系统调用是否完全在软件中断处理程序中执行?
似乎某些系统调用完全在中断处理程序内部处理(不考虑 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)处理,这个内核线程是否具有与调用线程相同的执行优先级?
避免优先级倒置是有意义的。