Linux 共享对象如何检测它是在标准内核还是实时内核上执行?

How can a Linux shared object detect if it is being executed on a standard or real time kernel?

我想知道是否有一段 C 代码允许共享对象“检测”它是在标准平台上执行还是在实时平台上执行Linux(以便相应地采取行动)。我不是在要求一些微妙的实时能力测试,而是更像是简单地检查调度程序是否被“标记”为实时(比如信任“自动声明”调度程序的类型,如果有意义的话)。

感谢您的帮助。

你的问题是问一个对象如何检测“它是在标准平台上还是在实时平台上执行”。我认为这与它也有些模棱两可的要求不同,即调度程序是否“标记”为实时。平台(第一)部分询问是否已在内核中应用并启用实时抢占补丁;调度程序 class(第二部分)可以应用于任何 Linux 系统,其中 SCHED_RR and/or SCHED_FIFO classes 可用。所以

    1. Real-time platform answer:
        Look for the existence of the node /sys/kernel/realtime, available in
the real-time preemption patch since 2011 (PATCH 293/295).  If it exists, you
are running on a CONFIG_PREEMPT_RT patched kernel.  The current Linux 5.x
patch may be found at http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.10/.
    
    2. Real-time scheduled on current thread answer:
        An explanation and working example are given on the
pthread_getschedparam(3) man page.  The C program example there allows
you to determine if a thread in your process is currently scheduled
with either the SCHED_RR or SCHED_FIFO policies.