如何为用户线程提供比内核线程更高的优先级(work_queues)

时间:2012-05-06 18:30:34

标签: multithreading linux-kernel kernel thread-priority

我正在运行一个应用程序,其中某些用户线程不能被内核抢占。我将解释我的设置: OS: Linux 2.6.32内核

内核级别: 1.有很多模块被编入内核。 2.Work_queues也在一些模块中初始化(我猜想为work_queues创建了单独的线程) 3.如果我得到任何硬件中断,我会在我的isr中将这个工作排队到任何这些初始化的work_queue中。

申请级别: 有多个并行运行的线程,其中一些线程的优先级高于进程中的任何其他线程。(甚至内核)

目标: 1.如果我得到任何硬件中断,将自动调用isr,其中将为任何work_queue排队工作。但是,如果在此期间运行更高优先级的用户级线程,我不希望调度这些work_queues。但是,某些用户不应该通过kernel中的任何work_queue处理来抢占级别线程。现在,我发现内核优先于任何其他用户线程。 2.我在内核中有多个work_queues。如何为不同的工作队列赋予不同的优先级。我没有看到任何api为内核中的work_queues设置优先级。

1 个答案:

答案 0 :(得分:1)

内核模式线程必须始终可以抢占用户线程,因为内核模式线程需要响应硬件事件。这是设计的。

如果您的用户模式线程需要与硬件进行交互或者是实时的,因此不能预先占用,请考虑将它们作为内核模式线程。

如果您只是遇到由于线程在关键操作期间被调度而导致错误而导致的错误导致另一个线程践踏您的操作,那么您应该实现锁定。

如果您有打破linux内核基本设计的自定义需求,则需要更改内核模式调度程序的行为。

相关问题