psw: 狀態寄存器
pc: r7, 通用寄存器r7, 程序計數器,從r7寄存器指示的內存地址中讀取指令,解釋而且執行該指令,處理完成後r7將指向容納下一條指令的內存地址函數
周邊設備發出的請求以及CPU內部特定的事件,以中斷或者陷入的形式加以處理。
執行中的進程將暫停運行,轉而處理髮生的中斷或者陷入,等待處理完成後,再繼續運行被暫停的進程。
系統調用經過陷入機制實現。編碼
當週邊設備發出請求時候,暫停執行中的進程,轉而執行與請求相對應的處理。等待處理完成後再恢復被暫停的進程。對中斷請求進行處理的函數稱爲中斷處理函數spa
中斷請求類型:
(1)塊設備處理完成通知
(2)終端輸入
(3)時鐘中斷3d
若是沒有中斷的機制,提出請求的進程必須按期檢查是否發出了處理結束的通知,這種方式稱爲輪詢。與處理器相比,周邊設備的處理速度比較慢,輪詢花費的時間變長。code
中斷是一種對進程運行和異步事件進行高效處理的機制。blog
中斷處理函數由內核進程負責執行,在運行用戶進程時候發生中斷的場景,經過硬件切換到內核進程。進程
被中斷的進程的數據暫存於內核棧之中。當中斷處理函數結束後,將恢復內核棧中的數據,繼續處理被中斷的進程。事件
陷入和中斷相同點:都會引發執行進程的暫停和恢復處理
不一樣點:陷入是由CPU內部事件引發的內存
當程序執行發生了異常時候,設置PSW的陷入位,表示陷入被觸發。
異常狀況:
(1)被0除
(2)訪問了未被分配的區域
(3)總線超時
由於存在陷入機制,因此用戶程序沒必要每次都確認異常狀況,或者逐一處理。當異常出現時候,會觸發陷入,自動執行共用的處理。當某種陷入發生時候,若是但願在對其進行適當的處理後繼續原有的操做,能夠定義獨自的陷入處理函數來實現。
由內核進程觸發的陷入,一般由獨自定義的陷入處理函數處理,內核程序在執行可能會觸發陷入的指令以前,將變量nofault
設定爲與此陷入相對應的處理函數的地址,當陷入發生時候,nofault
指向的處理函數將自動運行。
用戶程序觸發的陷入最終做爲信號被處理。經過對信號設定處理函數,在異常發生時候能夠進行獨自處理。
系統調用:用戶執行彙編器的sys
指令後觸發表示系統調用的陷入,系統調用存在多種類型,經過sys
指令的第一個參數指定,有的系統調用還帶有本身的參數,參數的指定方法由於系統調用種類的不一樣而不一樣。sys
指令爲彙編器的模擬指令,實際觸發陷入機制的指令爲trap
, 指令的低位比特含有表示陷入種類的值,彙編器將sys
指令和第一個參數,編碼爲trap
指令。
從用戶進程切換到內核進程而且進行相應處理的過程,都是利用陷入實現的。
中斷含有0到7的中斷優先級,當PSW中的處理器優先級大於或者等於中斷優先級時候,中斷不會被處理。
周邊設備將持續發出中斷請求,直處處理器優先級降低,該中斷獲得處理。
(注:中斷優先級數值越大,表示處理器將越有可能執行該中斷事件)
處理器優先級能夠經過spln()
函數進行變動spl0~spl7
執行中斷處理函數時候,處理器優先級被設置爲中斷優先級的值,在處理過程當中也能夠提升處理器優先級。
可是,用小於中斷優先級執行中斷處理函數會致使一些問題。
在運行中斷處理函數時候,若是再次收到相同類型的中斷請求,中斷與由中斷處理引發的反作用在發生的順序上,會出現逆轉。以下:
陷入的優先級至關於中斷優先級的8, 不管當前處理器的優先級的值是多少,當發生陷入時候,都會立刻獲得處理。
中斷和陷入向量是一些預設的PSW的值和pc值的存放地址。內核進程在開始處理中斷和陷入時候會使用這些預設值設置PSW和pc寄存器。
中斷和陷入由發生處處理結束基本遵循相同的處理流程:
(1)中斷或者陷入發生;
(2)將當前的PSW和pc保存於內核棧;
(3)從向量指定的地址讀取PSW和pc;
(4)執行call或者trap;
(5)執行中斷處理函數或者陷入處理函數;
(6)從內核棧中恢復PSW和pc