[英]Real-time programming with Linux
我刚刚构建并设置了带有RT补丁的Vanilla Linux内核。 一切正常,我现在可以正确启动到新内核了。
让我感到奇怪的是:我有一个用C编写的模拟器程序,并且希望它在硬实时模式下执行,这是新内核所允许的。 整个模拟器可能不需要以实时优先级运行,但是其中的某些任务确实需要。
我怎么能做到这一点? 我认为仅仅运行程序是行不通的。
如果您询问如何在实时上下文中运行某些线程,而其他线程则作为常规的分时线程,那么您所需sched_setscheduler
就是使用sched_setscheduler
正确设置其调度程序 。
分时线程希望为SCHED_OTHER
; 实时模拟器线程希望为SCHED_FIFO
或SCHED_RR
。
在Linux上,为了以实时优先级运行,您的用户必须具有允许的资源限制( man 2 rlimit )。 特别是,您的rtprio
rlimit必须设置为所需的最高优先级。 或者,您可以以root用户身份运行该应用程序。 在具有PAM的linux系统中,这通常是通过在/etc/security/limits.conf
添加适当的行来完成的
@realtime - rtprio 99
这会将rtprio限制授予实时组最高实时优先级99。 然后,您将一个实时组添加到/etc/groups
并确保您的用户在该组中。
(而且,由于这似乎是您第一次这样做,因此,您可能还需要一个“死人的开关”高优先级实时线程,以确保您的模拟器不会失控并渲染系统无法使用...如果您正在模拟高CPU负载,则可能会获得ACTUAL高CPU负载,并且如果不重新启动就无法停止操作。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.