Hardware
硬體 I/O 期間搶占如何工作?
假設我有一個使用 SPI 或其他通信協議的設備與執行 Linux 的電腦(例如 Raspberry Pi)進行通信。為使通信成功,不允許中斷,否則將錯過發送或接收數據的時間視窗。但是,Linux 不正是這樣做的嗎?中斷一個程序並執行上下文切換以執行下一個程序?如果由於某種原因在我描述的情況下沒有發生這種情況,為什麼不發生,為什麼桌面沒有凍結?
另外,我們如何保證對等點在時鐘信號變高或變低時準確地寫入/讀取數據?如果對等方正在做其他事情而不是在時鐘變化時監控時鐘怎麼辦?即使在 Arduino 中,當 Arduino 可能在做其他事情時,如何通過 Serial 將任何數據保存在某個緩衝區中?
這就是中斷優先級的來源:
一個中斷只能中斷一個較低優先級的中斷(後台處理是最低優先級)。搶占式中斷的優先級會低於時間關鍵型中斷,因此不會被任務切換中斷,任務切換只需要等待即可。
系統(硬體和核心)設計人員必須遵循一些規則才能完成這項工作。
- 時間關鍵中斷具有更高的優先級。
- 高優先級的中斷必須盡其所能,盡快讓開。例如,只是轉移數據,或者更好地設置硬體來轉移數據。然後它可以請求低優先級中斷或正常程序來進行處理。