根据我的问题here我想将SCHED_RR
与pthread_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线程,我不能简单地尝试这个......)
答案 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变满了,因此数据丢失了。尝试增加这些缓冲区。