2

據我所知有實施底半部在Linux的多種機制:的Linux底半搶佔

  • 軟中斷
  • taslket
  • 工作隊列
  • 螺紋IRQ(request_threaded_irq())

哪一個都具有可調度性的特點。 我從文獻中得不到的是他們的優先的可能性。什麼樣的任務可以搶佔各種不同的下半部分實現?

更具體地說,我對線程的irqs和workqueues感興趣。有多少人可以確信,一旦計劃完成一個線程IRQ或一個工作隊列在完成之前是不會被搶佔的,即一次運行?什麼類型的任務能夠搶佔他們?

例如,Robert Love開發的Linux內核說明只有上半部分可以搶佔softirqs,所以我會說softirqs在大多數時候完成一次(或者如果它們被搶佔,那隻會非常短時間)。

我的目標是定性評估兩個操作之間在同一個線程irq或workqueue之間的時間。特別是讀取i2c數據和讀取系統時鐘之間的時間。

謝謝。

回答

0

錯誤和線程IRQ處理程序在進程上下文中運行並且可以被搶佔。當它們可以被搶佔時實際上取決於你的內核配置(CONFIG_PREEMPTCONFIG_PREEMPT_VOLUNTARY)以及你在處理線程上設置的實時優先級。

你不能認爲你的工作隊伍或你的下半場不會被打斷。這意味着如果您與上半部分共享資源,則必須使用正確的鎖定。