寫在前面 本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。 正文: 在上一篇中,說到了中斷,於是呢,我又去看看關於中斷的相關章節,整理出一篇博文來。 1.為什麼要有中斷 中斷在操作系統中有著特殊且重要的地位,中斷是多道程式得以實現的基礎,沒有中斷,就不可能有多 ...
寫在前面
本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。
正文:
在上一篇中,說到了中斷,於是呢,我又去看看關於中斷的相關章節,整理出一篇博文來。
1.為什麼要有中斷
中斷在操作系統中有著特殊且重要的地位,中斷是多道程式得以實現的基礎,沒有中斷,就不可能有多道程式。因為進程之前的切換時通過中斷來完成的。另一方面來說,中斷也是設備管理的基礎。
為了提高處理機的利用率和實現cpu與IO設備的並行執行,也必須有中斷基礎的支持。
2.中斷向量表
為了處理上方便,通常為每種設備配以相應的中斷處理程式,並把中斷處理程式的入口地址放在中斷向量表的一個表項中。且為每一個設備的中斷請求規定一個中斷號,它直接對應於中斷向量表中的一個表項。
【也就是說每個設備有一個中斷程式,這個中斷程式呢,又放在中斷表中,如何卻別不同設備的中斷程式呢,通過中斷號去區分】
上面僅僅是一個潦草的圖哈~
當IO設備發來中斷請求信號時,由中斷控制器確定改請求的中斷號,根據改設備的中斷號去查找中斷向量表,從中獲取到設備中斷處理程式的入口地址,轉去執行中斷處理程式。
3.中斷優先順序
中斷信號源非常多,每個中斷源對於服務要求的緊急程式並不相同。為此,系統需要為他們分別規定不同的優先順序,所以就出現了中斷優先順序的概念。
4.對於多中斷源的處理
1.屏蔽/禁止中斷
當處理機正在處理一個中斷時,將屏蔽到其他所有中斷,執行完改中斷後再去順序執行其他到來的中斷程式。
2.嵌套中斷
嵌套中斷主要是針對與中斷優先順序而言,cpu總是先響應最高優先順序的中斷請求,高優先順序的中斷請求可以搶占正在運行的低優先順序的中斷的處理及。所以,會造成多重中斷的情況。也就是嵌套中斷。
5. 對IO設備的控制方式
對設備的控制,早期使用輪詢的可編程IO方式,後來發展為使用中斷的可編程IO方式。接著又出現了DMA。無論怎麼樣,都是為了抽離出cpu和IO,減少cpu對IO控制的干預。
1.使用輪詢的可編程IO方式
顧名思義,啟動輸入設備輸入數據的時候,cpu不斷去詢問,當有一個字元輸入完成後,cpu立馬將數據寄存器中的數據取出,送入記憶體單元中。這樣便完成了一個字元的IO。接著去啟動讀取下一個數據。
可以看到這種方式的效率非常低,再輸入期間,cpu一直在詢問,大部分事件都處於等待IO設備完成數據IO的迴圈測試中。不能去執行其他任務
2.使用中斷的可編程IO方式
中斷的可編程IO方式實現了cpu與IO設備的並行工作,當某個進程要啟動IO設備工作的時候,便由CPU向相應的設別控制器發出一條IO命令,然後立即回來執行當前程式。設備驅動程式按照這個指令去執行相應的程式。執行完畢後,向cpu發送一條中斷信號。cpu再取走數據,放入記憶體指定位置中。總結下就是:
1.cpu發出IO命令,繼續工作
2.設備驅動程式執行IO命令,輸入數據
3.輸入完成,產生中斷信號,通知cpu取走數據
註意:中斷方式是以位元組為單位讀取數據的,沒完成一個位元組的IO時候,便產生一次中斷。和上一種方式相比,省去了cpu不斷詢問的時間。
3.DMA
DMA即直接存儲器訪問方式,DMA和中斷方式不同地方在於:
1.數據傳輸的基本單位是數據塊。(在cpu和IO設備之前,每次傳送至少一個數據塊)
2.傳送的數據從設備直接送入記憶體,不需要cpu從數據寄存器中取出放入記憶體
3.僅在傳送數據塊開始或者結束的時候,需要cpu干預。【整個數據的傳送時在控制器的控制下完成的。】
DMA控制器的組成
1.主機與DMA控制器的介面
2.DMA控制器與塊設備的介面
3.IO控制邏輯。
書上的圖
可以看出,關於對於IO設備的控制方式,從單個字元到按塊去傳輸,都是為了提高cpu的利用率。
關於中斷的相關的知識點就總結到這裡了,如果錯誤歡迎指出哦~
不驕不躁,保持學習