當前位置: 華文星空 > 知識

會不會有兩個中斷絕對同時發出,cpu會如何處理?

2021-06-11知識

題主的問題表達的不太正確,不過要問的內容還是很清晰的,先回答一下:

1. 整個一個鍵盤共一個中斷 ,甚至是跟別的裝置共用一個中斷,不管是什麽鍵盤。

機械鍵盤,並不是一個鍵位對應著一個中斷。如果是PS/2的,只有一個中斷。如果是USB的,那麽實際上是USB控制器輪詢的(雖然叫中斷傳輸),所以從作業系統驅動的層面上,根本看不到「同時來了兩個中斷」的事件。

由於主流的機械鍵盤都是USB的,USB-HID型別的裝置,單次只能上報8字節的報文,處理6-9個按鍵,所以,同時按下兩個鍵,那麽作業系統在某個輪訓周期內,看到的是一個HID report裏新包含了兩個鍵。

但是即使這樣,驅動也是從前往後掃描report然後依次上報的(從keycode1到keycode6),所以從驅動到作業系統軟體這個層次上,按鍵時間是依次上報的。

2. 不管鍵盤同時按下幾個鍵,鍵盤硬體是可以處理的。

這個解釋起來比較長,我在這個問題裏回答過:

電路掃描動作也是從上到下的,所以,即使同時按下兩個鍵,硬體也是依次上報。

3. 不談鍵盤,只說兩個中斷,中斷控制器不會同時上報兩個中斷。

以x86上最古老的8259控制器來說,它的中斷是有優先級的:

沒配置優先級的情況下,從IRQ0到IRQ7依次排列,所以即使硬體上同時來了兩個中斷,那麽8259A也是按照優先級依次上報的,不會同時上報兩個中斷。

(4)優先權判別器PR
若某中斷請求正在被處理,8259A外部又有新的中斷請求,則由優先權判別器將新進入的中斷請求和當前正在處理的中斷進行比較,以決定哪一個優先級更高。若新的中斷請求比正在處理的中斷級別高,由PR透過控制邏輯向CPU發出中斷申請INT,正在處理的中斷自動被禁止,先處理級別高的中斷

對於高級一點的LoAPIC,建議看Intel的手冊,配置過於復雜,但也是有優先級的。

所以,對於題主的問題,答案就是:不會有兩個中斷同時發出。