使用Linux进行实时编程

时间:2012-05-08 16:24:51

标签: c linux kernel real-time hard-real-time

我刚刚构建并设置了一个应用了RT补丁的vanilla Linux内核。一切都很顺利,我现在可以正确启动到新内核。

让我想知道的是:我有一个我在C中制作的模拟器程序,我希望它以硬实时模式执行,新内核应该允许它。可能整个模拟器不需要以实时优先级运行,但内部的一些任务可以。

我怎样才能做到这一点?我认为只是运行程序就行不通。

1 个答案:

答案 0 :(得分:7)

如果您询问如何在实时上下文中运行某些线程,而将其他线程作为传统的时间共享线程,那么您只需要设置schedulers properly using sched_setscheduler

分时线程希望成为SCHED_OTHER;实时模拟器线程希望为SCHED_FIFOSCHED_RR

在Linux上,为了以实时优先级运行,您的用户必须具有允许此操作的资源限制(man 2 rlimit)。特别是,您的rtprio rlimit必须设置为您需要的最高优先级。或者,您可以以root身份运行该应用程序。在使用PAM的Linux系统中,通常通过向/etc/security/limits.conf

添加适当的行来实现
    @realtime   -  rtprio     99

这会将rtprio限制授予实时组的实时优先级99。然后,您将实时组添加到/etc/groups,并确保您的用户在该组中。

(因为这似乎是你第一次这样做,你可能还想要一个“死人的开关”高优先级实时线程,以确保你的模拟器不会失控,使系统无法使用...如果您正在模拟高CPU负载,您可能会获得ACTUAL高CPU负载并且无法在没有重新启动的情况下停止运行。)

相关问题