2015-12-04 62 views
1

我試圖確保在發生特定硬件中斷後儘快執行唯一的用戶進程。Linux(或其他* nix):將中斷附加到用戶空間

我知道這樣做的一種機制是編寫一個小的內核模塊,它在讀取處理程序中睡眠時導出設備。該模塊還註冊了一個irq處理程序,它除了喚醒進程之外什麼也不做。然後從用戶的角度來看,讀取該設備塊直至出現相關中斷。 (1)在具有主線內核的現代CPU上,您能否可靠地期望內核看到中斷和用戶進程重新獲得控制權之間的亞毫秒級延遲?

(2)主線內核上是否有更低的延遲機制?

+0

你的方法似乎沒問題。我不確定亞毫秒級的延遲,但它可能與「輕」內核可用(您可以隨時在您的機器上測試)。但可靠性是實時系統的一個屬性。非RT操作系統不提供任何關於響應時間的擔保。 – Tsyvarev

+0

分毫秒可能很難實現,但無論如何你需要RT修補程序https://rt.wiki.kernel.org/index.php/Main_Page – OznOg

+0

對不起,編輯澄清,我試圖理解如何在非實時定向內核上儘可能降低這種延遲。還有其他的技巧嗎?或者這是最好的可以做到的? – Alex

回答

1

PREEMPT_RT patch應用到內核並編譯它配置完全可搶佔通過make menuconfig

這將允許你有線程中斷(即中斷處理程序作爲內核線程執行)。然後,您可以爲您的特定中斷處理程序(使用ps aux檢查其PID)和您的特定進程分配最大優先級(即RT prio> 50),並將優先級設置爲較低的優先級。

+0

謝謝!我聽說過PREEMPT_RT。如果可以保證該設備只有一個irq處理程序,那麼PREEMPT_RT修補程序的其他任何功能都可以提供幫助嗎? – Alex

+0

是的,如果你應用PREEMPT_RT並且你在內核配置中選擇完全搶佔,那麼在運行時你會爲每個IRQ獲得一個單獨的線程。 – Claudio

相關問題