2014年5月25日 星期日

什麼是DMA ?

什麼是DMA?
如果你上網搜尋DMA,相信你可以找到很詳細的解釋。例如下方的解釋。

直接記憶體存取Direct Memory AccessDMA)是電腦科學中的一種記憶體存取技術。它允許某些電腦內部的硬體子系統(電腦外設),可以獨立地直接讀寫系統記憶體,而不需繞道中央處理器CPU

簡單來說,就是搬資料,不需要用到CPU的指令。換言之,搬資料時,CPU不用知道。要怎麼做可以確保搬的資料不會錯。

1.要知道原始資料的位置。
2.要知道目地的位置。
3.要知道要搬多少資料長度。

這個跟你找搬家公司一樣。你要先告訴搬家公司你家的地址。然後告訴他你新家的地址。然後再告訴他,你家的哪些搬東西要搬走。之後搬家公司就可以開始搬。主人不用每一樣都要告訴他怎麼搬。

所以搬家公司就是控制器(controller),舊家是地址,新家是目地。傢俱是資料。詳細清楚搬家內容後,就開始搬,這就是DMA

所以要看懂DMA的設計,就是找兩個地址一個資料長度。然後就沒有了。很多人告訴我,他設計的DMA有多複雜又多複雜。很難看懂。我請他畫 Bus,請他告訴我定址空間。然後請他告訴我,他的DMA控制器的哪一段是記錄兩個地址和資料長度。之後我在 Bus diagram上,告訴他DMA如何在 Bus上移動。一清二楚,有沒有做錯,一目瞭然。
那兩個地址,一個資料長度誰給?誰給不重要,重要是「搬資料時,CPU不用知道」,這就是DMA

或許有人覺得他設計的DMA比較複雜,較難懂。就像有人家裏東西多、種類多。所以找比較多搬家公司,有人專門負責搬黃金、有人專門搬傢俱、有人專門搬家電,搬家時,你家會不會很熱鬧?當然會,只看搬黃金的,會很複雜嗎?只看搬傢俱的,會很複雜嗎?做好一套DMA後,再來就簡單了。初學者不用擔心會很複雜。

另外會增加DMA複雜度的是arbter(仲裁器),它會決定是哪個DMA的需求會被滿足。把這個部份程式和DMA的程式分開來研讀,相信初學者就可以解決DMA的問題。

沒有留言:

張貼留言