如果是計算機專業出身的同學,都聽過一個概念,中斷比輪詢要好、DMA比中斷要好。
中斷比輪詢要好,是容易理解的:
在輪詢中,CPU是死循環執行對IO端口的檢測,這種模式,大量的浪費了CPU(因爲CPU除了處理外設之外,更多的時間應該用於對內存的操作,如計算等)。
而中斷方式,則沒有死循環的浪費,CPU可以正常做別的事情,等到外部設備數據來了,就會主動由設備控制器發出中斷(設備控制器預先需要註冊對應的中斷控制號)
但是,爲什麼DMA比中斷要好呢?
嘿嘿。不幸的是,這個問題本身就是錯的。oh my god!
DMA和中斷不是同一個層級的概念。DMA本身也會用到中斷。
DMA之所以比中斷快,是因爲,在DMA機制下,進行外設讀寫操作的指令是由DMA控制器完成,而不是由主機的CPU完成!
DMA方式下,中斷已經成爲了,DMA開始或完成的一個通知信號(讀寫指令由DMA控制器完成)。而在“純中斷”模式下,中斷是啓動主機CPU開始外設讀寫的信號(讀寫指令out_p(),in_p()由主機CPU執行)!