根据我的问题,我想在Linux应用程序中对我的线程使用SCHED_RR和pthread_setschedparam。然而,这个我目前无法解决的has effects even on kernel modules。
我已经找到了http://www.icir.org/gregor/tools/pthread-scheduling.html,它说我可以用PTHREAD_SCOPE_PROCESS属性创建我的线程,但我还没有找到关于这方面的更多信息。
这是否适用于(Angstrom) Linux,内核版本2.6.32?(如何)这会影响我的进程与其他进程竞争的方式吗?这是让我的进程与实时调度竞争,而其他进程不受影响的方式吗?
(因为我使用的是boost线程,所以我不能简单地尝试...)
发布于 2011-10-07 18:12:35
使用PTHREAD_SCOPE_PROCESS创建的线程将共享相同的内核线程( http://lists.freebsd.org/pipermail/freebsd-threads/2006-August/003674.html )
但是,SCHED_RR必须在根特权进程下运行。
轮询;如果调用进程的有效用户id为0,则争用范围为系统(PTHREAD_SCOPE_SYSTEM)的线程属于实时(RT)调度类。如果这些线程没有被更高优先级的线程抢占,并且如果它们不让步或阻塞,它们将在系统确定的一段时间内执行。对于争用范围为process (PTHREAD_SCOPE_PROCESS)的线程或其调用进程的有效用户id不为0的线程,SCHED_RR基于TS调度类。
然而,基于你的相关问题,我认为你面临着一个更深层次的问题。你有没有试过把你的内核设置成更“抢先”的?抢占应该允许内核强制调度您的进程退出运行,从而允许某些内核部分更具响应性。这应该不会影响IRQ,也许是什么东西禁用了你的IRQ?
我在想的另一件事是,可能你没有足够快地获取你的SPI数据,并且你的数据在内核中的buffor变满了,因此数据丢失。也试着增加这些缓冲区。
https://stackoverflow.com/questions/7685354
复制相似问题