作業系統關於中斷的實現

2021-05-21 19:30:39 字數 1307 閱讀 3169

/*interrupt, trap and exception handling in windows nt

static void mask_and_ack_8259a(unsigned int irq)

else 

spin_unlock_irqrestore(&i8259a_lock, flags);

return;

spurious_8259a_irq:

...看到了吧,根本沒有設定什麼tpr 暫存器,僅僅保證當前中斷不會重入就完事了,linux 憑什麼敢這麼幹?屏的就是它強大的軟中斷機制,它的軟中斷 機制真的很強大嗎?事實上真的很強大,softirq 在硬體中斷完了後緊接著執行,但是如果softirq 太多怎麼辦(事實上真的很多,因為它除了當前中 斷外並不遮蔽任何中斷),太多了的話對於windows 就沒有辦法了,畢竟它不能總在執行dpc 過程(它在任意上下文,會造成使用者執行緒飢餓),對於linux ,專門有乙個ksoftirqd 核心執行緒,這個執行緒擁有執行緒上下文,可隨意延遲。windows 實現的比較商業化,它盡量和硬體統一,硬體提供 什麼功能,它就虛擬什麼功能,而linux 則實現比較靈活,它可能根本不買硬體的賬,再乙個是為了移植性,試想萬一對應硬體平台沒有實現中斷優先順序怎麼 辦?

在windows 對於虛擬中斷的實現裡面每當乙個中斷來臨時,就可能設定pic 的tpr 暫存器,前提是當前正在處理更高優先順序中斷,用此相對低優先順序中斷 的優先順序設定完tpr 後然後再通過這個優先順序變形(位運算)後或上當前遮蔽字後設定pic 的遮蔽暫存器,最後就把這個相對低優先順序的中斷pending , 以備將來分發。將來分發時就是用tpr 暫存器取反與上pending 暫存器,然後取左邊第乙個不是0 的,就是要處理的第乙個未決中斷,看來windows 的實現是很複雜的,這樣的好處就是,系統設計複雜了,但是驅動開發簡單了,開發人員不用觸及真實中斷了。

solaris 是個中斷執行緒化的巨猛系統,每個cpu 都有個lpi ,這個概念等同於windows 的irql ,但是不同的是,它將中斷執行緒化了,中斷有了 自己的上下文,每個cpu 有15 個lpi 級別,10 以上的保留,10 以下的每個ipl 對應乙個執行緒池(也就是乙個鍊錶),中斷來臨時,由cpu 當前的ipl 和它需要的ipl 決定它將分配到那個佇列的執行緒執行,當前cpu 的ipl 將需要之下ipl 的中斷遮蔽(是否這樣要看在哪個硬體平台,簡單說,不管ipl 還是irql 都是虛擬出來的概念,理解時可以考慮虛擬記憶體原理),但是也就一瞬間,因為它喚醒相應執行緒就把ipl 恢復了,ipl 是和中斷執行緒一一對 應的。solaris 上有中斷優先順序的概念,這其實也是它原來只在sparc 執行,而sparc 擁有硬體中斷優先順序控制機制的緣故吧。linux 卻不能保 證硬體有這樣的機制。怎麼樣,它的實現更純粹些。

作業系統 中斷

寫在前面 參考中斷 中斷是指cpu對i o裝置發來的中斷訊號的一種響應。cpu暫停正在執行的程式,保留cpu環境後,自動地去執行該i o裝置的中斷處理程式。執行完後,再回到斷點,繼續執行原來的程式。i o裝置可以是字元裝置,也可以是塊裝置 通訊裝置。由於中斷時由外部裝置引起的,故又稱外中斷。在作業系...

作業系統 中斷

中斷是指計算機在執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得cpu暫時中斷當前正在執行的程式而轉去執行相應的事件處理程式,待處理完畢後又返回原來被中斷處繼續執行或排程新的程序執行的過程。引起中斷發生的事件被稱為中斷源。中斷源向cpu發出的請求中斷處理訊號稱為中斷請求,而cpu收到中斷...

作業系統 中斷

中斷是改變處理器執行指令順序的一種事件。這樣的事件與cpu晶元內外部硬體電路產生的電訊號相對應。有了中斷後,使cpu可以與其他裝置並行工作,能有效提高cpu的利用率,改善系統效能,支援系統的非同步性。中斷的型別 分為 同步中斷 內部中斷或異常 非同步中斷 外部中斷 1 同步中斷是當指令執行時由cpu...