2012-05-06 44 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