1

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

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

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

目标:1.如果我收到任何硬件中断,将自动调用isr,其中工作将排队等待任何work_queue。但是,如果在此期间运行更高优先级的用户级线程,我不希望调度这些work_queues。即,某些用户级线程不应被内核中的任何工作队列处理抢占。现在,我观察到内核比任何其他用户线程都具有优先级。2.我在内核中有多个work_queues。如何为不同的工作队列赋予不同的优先级。我还没有看到任何api为内核中的work_queues设置优先级。

4

1 回答 1

1

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

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

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

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

于 2012-05-10T08:37:34.637 回答