2012-05-06 38 views
1

我运行的应用程序,其中某些用户线程必须不受内核。我被抢占的解释我的设置: 操作系统:Linux的 2.6.32内核如何给高优先级用户线程不是内核线程(work_queues)

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

应用水平: 有并行运行,其中一些优先级高于进程中的任何其他线程多线程(即使内核)

目的: 1.如果我得到任何硬件中断, ISR将被自动调用其中的工作将被排队等待任何work_queue.But,我不希望这些work_queues的调度,如果更高优先级的用户级线程是time.ie期间运行,某些用户级线程不应该受到任何work_queue抢占在kernel.Now中处理,我已经观察到内核获得优先于任何其他用户线程。 2.I有kernel.How多个work_queues我能给出见过任何API为内核work_queues设置优先级不同的工作queues.I还没有不同的优先级。

+0

特别是任何操作系统? –

+0

我使用Linux 2.6.32内核。 – GoT

回答

1

由于内核模式线程需要响应硬件事件,所以用户线程必须始终能够被内核模式线程预占。这是设计。

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

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

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

+0

照你说的,我怎么能实现内核和用户模式线程之间的锁? – GoT

+1

你如何实现锁定取决于你正在尝试做的。例如,如果您的用户模式线程正在访问文件系统,请考虑使用文件系统事务。如果你自己的线程互相摔倒,请考虑使用关键部分(http://en.wikipedia.org/wiki/Critical_section)。理想情况下,所有关键活动都应该由内核模式线程执行。将关键任务或内核任务委托给用户模式线程可能会破坏linux的安全模型,从而产生严重的安全隐患。 – SecurityMatt