2012-02-25 34 views
0

我知道一個ISR需要非常快,並且應該很快處理一箇中斷。但我不明白相同的原因。爲什麼要滿足這個條件?而且,爲了做到這一點,ISR代碼有什麼限制嗎?通常,什麼都不應該包含在ISR的代碼中?什麼都不能在中斷服務程序?

感謝

回答

2

我知道一個ISR需要非常快速,應該處理的 很快中斷。但我不明白的 相同

最嚴格的要求的原因是,一個ISR不能塊 - 它無法入睡。所以你不能使用信號量。

每個中斷都與硬件有關。想想一個網絡設備。它有一個非常小的內存,然而它以高速接收幀。你最好把它的東西快速複製到主內存中,否則這些幀會壓倒設備,並且會造成畫面溢出。

+0

因此,我可以將其視爲中斷處理程序以非常快的速度從I/O設備接收數據,因此它必須將其寫入內存,否則我們可能會丟失一些數據。對?如果是的話,我們如何確保我們的ISR速度足夠快以至於框架不會泄漏? – 2012-02-25 08:35:49

+0

@DeeptiJain你不能。只要確保其速度儘可能快。 – cnicutar 2012-02-25 08:37:17

+0

非常感謝..要學習新東西 – 2012-02-25 08:39:51

4

當ISR執行時,不能在同一個CPU上執行線程,所以線程調度會受到影響,執行時間越長,影響就越大。根據實現(軟件和硬件)的不同,在執行ISR時可能會禁用所有中斷(或較低優先級的中斷),這意味着如果ISR需要很長時間才能完成,其他中斷可能處理得不夠快,這意味着會出現延遲甚至錯過中斷。

還有一些其他的事情要考慮:

  1. 使用鎖ISR中
  2. ISR中
  3. 感人分頁內存

如果您獲得了在ISR鎖,可以是已經鎖定,如果沒有其他ISR或CPU釋放該鎖,則可能會進入無限循環。

如果您觸摸交換到磁盤的內存頁面,則可能會遇到類似的情況,因爲頁面錯誤處理程序可能無法將該頁面從磁盤移動到內存(如果它在某個線程中執行的話)並且該線程無法執行,因爲與ISR相比,該線程的優先級較低並且從不計劃。

+0

謝謝亞歷克斯,我希望我可以標記多個答案是正確的。 – 2012-02-25 08:41:45

相關問題