我可以在我的流程中进行实时调度(但不会影响其他人)吗?

时间:2011-10-07 09:27:29

标签: c linux real-time scheduling

根据我的问题here我想将SCHED_RRpthread_setschedparam一起用于Linux应用程序中的线程。但是,这个has effects even on kernel modules我目前无法解决。

我发现http://www.icir.org/gregor/tools/pthread-scheduling.html表示我可以使用PTHREAD_SCOPE_PROCESS属性创建我的主题,但我还没有找到有关此主题的更多信息。

这适用于(Angstrom)Linux,内核版本2.6.32吗? (如何)这将影响我的流程与其他流程竞争的方式?是否可以让我的流程与实时调度竞争,但其他流程不会受到影响?

(因为我正在使用boost线程,我不能简单地尝试这个......)

1 个答案:

答案 0 :(得分:3)

使用PTHREAD_SCOPE_PROCESS创建的线程将共享相同的内核线程( http://lists.freebsd.org/pipermail/freebsd-threads/2006-August/003674.html

但是,SCHED_RR必须在root权限进程下运行。

  

轮转;争用范围为系统的线程   (PTHREAD_SCOPE_SYSTEM)是实时(RT)调度类,如果是   调用进程的有效用户ID为0.这些线程,如果没有   被更高优先级的线程抢占,如果他们没有屈服或   块,将执行由系统确定的时间段。    SCHED_RR用于具有进程争用范围的线程   (PTHREAD_SCOPE_PROCESS)或其调用进程没有   有效用户ID为0基于TS调度类。

但是,基于您的链接问题,我认为您正面临更深层次的问题。您是否尝试过将内核设置为“抢占式”?抢占应该允许内核强制安排运行您的进程,从而允许更灵敏地运行某些内核部件。这不应该影响IRQ,可能会禁用你的IRQ吗?

我想到的另一件事可能是你没有足够快地获取你的SPI数据,并且内核中数据的buffor变满了,因此数据丢失了。尝试增加这些缓冲区。