Law*_*uly 2 c linux kernel real-time hard-real-time
我刚刚构建并设置了一个应用了RT补丁的vanilla Linux内核.一切都很顺利,我现在可以正确启动进入新内核.
令我疑惑的是:我有一个我在C中制作的模拟器程序,我希望它以硬实时模式执行,新内核应该允许它.可能整个模拟器不需要以实时优先级运行,但内部的一些任务可以.
我怎么能做到这一点?我认为只是运行该程序是行不通的.
如果您询问如何在实时上下文中运行某些线程,而将其他线程作为传统的时间共享线程,那么您只需要正确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负载并且无法在不重启的情况下停止运行.)