天天看點

計算機cpu和外設的平等性--DMA簡述

我一向認為計算機内部cpu沒有什麼特殊的,它和磁盤以及網卡一樣,算是一種裝置,它們共同連接配接于總線 上,同樣擁有一定的智能,不過這個論點隻是宏觀上的,cpu的智能化要比别的外設更高一些,真的是這樣嗎?其實這真的是把cpu給慣壞了,另外它們雖然都 連接配接于總線,可是總線也是千差萬别的,并不像理想中的那樣連在一根線上,正是這些混雜又精細的特性讓人們以為cpu是中心,而外設隻是附屬。 

當你了解了DMA之後,你可能會有不同的想法,因為DMA控制器可以讓外設直接通路記憶體,這樣是不是外設更像cpu了啊,因為按照cpu中心論這種所謂的 正常,隻有cpu才可以存取記憶體的,外設必須通過cpu才可以存取記憶體,其實任何裝置不單單是cpu都可以存取記憶體,最最關鍵的就是争搶到通路記憶體的總 線。計算機一般的執行過程都是cpu從記憶體中取到要執行的指令,然後按照cpu内部的硬體邏輯進行執行,這包括指令隊列,預取,分支預測等等機制,然後 cpu會将一些資料存到記憶體同時也可能從記憶體讀取資料,好像記憶體就是專門為cpu服務的,而作為外設,它們隻能被動的接受cpu從記憶體中讀取然後發送過來 的指令,它們不能自己像cpu那樣取指令甚至預取指令,然後它們上面有資料要讀取的時候,必須中斷cpu,然後通過cpu幫忙将資料讀到記憶體中,cpu也 隻能不厭其煩的幫外設傳導資料。這種不平等性到底讓誰受了益,cpu嗎?cpu也和我們人這樣争權奪利嗎?它非要争奪主機闆的霸主嗎?是的,它争到了,然後 我們看看這個官好不好當,cpu不能潛心做自己的事,不時地要被網卡,磁盤之類的和它本來要平等的外設打斷或者要不時地幫它們從記憶體傳輸資料,這就是做主 子的代價,其實cpu很希望平等,這樣架構也更和諧,可是人的本性--統治欲注入了計算機的設計中,最終導緻了cpu中心論。按照樸實的設計思想,誰搶到 總線誰就可以走路,這也是很顯然的,畢竟路在腳下,走路是正常的。争搶總線的時候也沒有必要誰讓着誰,誰搶到是誰的,再進一步,可是實作多車道并行不悖, 甚至雙向多車道。按照樸實的設計,計算機系統就是幾個機關一條路,機關之間互相合作為民服務,大路共享。記憶體就是一個倉庫,誰都可以存取東西,隻要處理好 沖突就可以,其實很簡單,就是占路,保證同時隻有一個機關的代理可以控制一條單向單車道的路,如果實作了雙向多車道,那就必須在記憶體這個倉庫内部實作并發 沖突處理了。幸運的是,這種模型已經存在了,就是DMA,外設可以直接存取記憶體而不需要cpu的幫忙,這樣可以實作更加好的視訊,音頻效果,因為省去了 cpu這個二傳手,效率總是會高些,另外裝置可以直接對記憶體取指了,設定預取都可能,這樣對顯示卡是很有好處的,顯示卡可以像cpu一樣實作複雜的處理,其實 GPU在某些領域已經超越了cpu,GPU隻是外設革命的開端而已,最終我相信,共和政體在計算機系統一定會成為現實。以前的外設的指令都是cpu發來 的,然後外設被動執行,這樣外設可以執行的指令就會受到限制進而限制外設的功能和性能,比如雖然外設想這麼或者那麼幹,需要兩個指令的配合,可是cpu卻 遲遲不給外設發送指令,外設想當的被動不自主,DMA實作以來外設可以自己取指了,這樣外設就可以實作更為複雜的邏輯了,一個和DMA無關的例子就是 SISC的TCQ機制,它可以實作複雜的指令隊列進而實作高效的磁盤低級排程,如果應用DMA特性,這個TCQ将會更加高效又簡單的被使用。從樸實的角度 講聯系DMA的概念,cpu不過是一個DMA裝置罷了,隻不過目前的系統實作下,它總是很長時間的占用總線。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274141

繼續閱讀