使用Linux进行实时编程

Law*_*uly 2 c linux kernel real-time hard-real-time

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

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

我怎么能做到这一点?我认为只是运行该程序是行不通的.

and*_*soj 7

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

分时线程想成为SCHED_OTHER; 实时模拟器线程想成为SCHED_FIFOSCHED_RR.

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

    @realtime   -  rtprio     99

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

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