1.什么是中斷?
中斷是由硬體或軟體所發送的一種稱為IRQ(中斷求救)的信號,CPU會對這一信號進行回應,
2.為什么引入中斷?
中斷在作業系統中有著特殊重要的地位,它是多道程式得以實作的基礎,沒有中斷就沒有多道程式,另一方面也是設備管理的基礎,為了提高處理機的利用率和實作CPU與I/O設備并行執行,必需有中斷的支持,是整個I/O系統的基礎,
3.中斷什么時候發生?
(1)當I/O設備向CPU發來中斷信號,
(2)CPU內部的事件,如:行程在運算中發生了上溢或下溢,或者程式出錯:非法指令,地址越界,電源故障等,
4.中斷發生時CPU做什么,中斷機制做什么?
當CPU接收到中斷請求時,會對該請求進行回應,然后轉向中斷處理程式,由它來執行相應的處理,處理完之后解除相應行程的阻塞狀態,
中斷機制主要進行如下操作:
(1)測定是否有未相應的中斷信號
每當設備完成一個資料塊(可以是一個字符或者字)的讀入或輸出時,設備控制器就會向處理機發送一個中斷請求信號,請求將要輸入的資料傳送到記憶體緩沖區或者將要輸出的資料傳送到設備控制器,
每次有一道指令執行后,處理機都會檢測,是否存在未回應的上面提到的設備控制器所發出的中斷信號,
有的話就會停止原有行程,準備轉到中斷處理程式,準備將處理機的控制權交給中斷處理程式,反之繼續執行下一條指令
(2)保護中斷行程的CPU環境
上面提到要轉交處理機的控制權,在這之前需要保護被中斷的CPU中正在運行的行程資訊,以方便中斷處理結束之后能夠繼續回來執行最初的行程,
首先,通常由硬體將處理機狀態字(PSW)和保存在程式計數器(PS)中的下一條指令的地址保存到中斷保留區(堆疊)中,這樣就保存了之后恢復行程所需要的資訊
然后,將CPU的現場資訊(暫存器和段暫存器)內容都壓入中斷堆疊中(中斷處理時可能會用到這些),
(3)轉入相應的設備處理程式
處理機對中斷源進行測驗,確定本次中斷的I/O設備,向提供中斷信號的設備發送確認信號,
該設備收到確認信號之后,就會取消它所發出的中斷請求信號,之后將相應的設備中斷處理程式的入口地址裝入程式計數器中,
這樣當處理機運行時,便可自動轉向中斷處理程式,
(4)中斷處理
不同設備有不同的中斷處理程式,
該程式先從設備控制器中讀出設備狀態,判斷本次中斷型別,
正常完成中斷的話,中斷程式就作結束處理,
還是例外結束中斷的話,就根據發生例外的原因做相應處理,
(5)恢復CPU的現場并退出中斷
處理完成后就要恢復CPU現場,退出中斷,有兩種情況:
①若采用了屏蔽(禁止)中斷方式,就會回傳中斷行程,
②若采用的是嵌套方式,若沒有優先級更高的中斷請求I/O,中斷結束后回傳原行程,反之將會去處理更高優先級的中斷請求,
當回傳到被中斷行程,可將保存在中斷的斷堆疊中的被中斷行程現場資訊取出,放入暫存器中,資訊包括:程式下一次要執行的指令的地址N+1、PWS、通用暫存器和段暫存器的內容,
5.中斷和系統呼叫有什么異同?
中斷分兩種,硬中斷和軟中斷;硬中斷是實實在在的硬體發出的中斷,cpu檢測到發生中斷后,保護現場,查找中斷向量地址,執行中斷服務程式,之后,重新選擇行程進行調度,軟中斷是由指令執行程序中發出的中斷,但是并沒有中斷向量表,而是有對應的散轉表,查找對應的中斷號,轉中斷服務程式,之后的和硬中斷相同,
系統呼叫是軟中斷的一種,
6.為什么說中斷機制是一種C/S模式?
C/S是客戶端發出請求,服務端進行處理后回應請求,
中斷機制是外設發出中斷請求,然后CPU進行相應的處理并回應請求,
從機制上來看十分相似,
7.什么是IRQ?這個號是由誰分配的?
IRQ(Interrupt ReQuest),是中斷請求號,計算機每個組成組件都會擁有一個獨立的IRQ,除了使用PCI總線的PCI卡之外,每一組件都會單獨占用一個 IRQ,且不能重復使用,電腦周邊硬體需要處理器去執行某些作業時,該硬體就會發出一個硬體信號,通知處理器作業,而這個信號就是IRQ,
系統會自動為外部設備分配IRQ號
8.從來串列中,可以看出每個CPU核心被中斷的次數,列舉幾個設備的中斷次數
從圖中可以看出IRQ號為1的設備,被CPU8中斷了327次,從后面的i8042可以看出表示的是控制鍵盤和滑鼠的鍵盤控制器,
9.什么是硬中斷,有哪幾種型別?什么是軟中斷?
硬中斷:
硬中斷由硬體產生,每個設備或者設備集都有自己的IRQ(中斷請求),
硬體中斷又可以分為內中斷和外中斷,
處理中斷的驅動是需要運行在CPU上的,在多核處理機上,一個中斷只能中斷一顆CPU,
硬中斷可以直接中斷CPU,硬中斷可以中斷軟中斷,
對于時鐘中斷,內核調度代碼會將當前正在運行的行程掛起,從而讓其他的行程運行,他的存在是為了讓調度器可以調度多任務,
軟中斷:
軟中斷是當前行程產生的,
通常,軟中斷是一些對IO的請求,
軟中斷僅與內核聯系,
軟中斷不會直接中斷CPU,
10.如何對中斷進行負載均衡,盡可能讓中斷在每個CPU上發生,以提升系統的性能?
使用linux的實用程式Irqbalance,它主要是用于分發中斷請求到CPU核心上,有助于性能的提升,
rqbalance是用戶空間用于優化中斷的一個工具,通過周期性的(默認10s)統計各個cpu上的中斷情況,重新對中斷進行再分配,實作各個cpu上中斷負載相對均衡,中斷均衡是建立再“object tree”的基礎之上的,object tree則是通過系統的拓撲結構建立的分層結構,根據系統結構屬性NUMA node/packet/cache affinity可以將系統劃分為自上而下的四層:node->package->cache->cpu,
Irqbalance對于包含多個核心的系統來說是非常有用的,因為通常中斷只被第一個CPU核心服務,暫時了解這些,具體后面會繼續進行學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47908.html
標籤:其他
上一篇:從熱門新聞“微信封號→申訴無果→當事人走向極端”淺談資料安全
下一篇:Python自學感想
