天天看點

DMA(direct memory access)直接記憶體通路

DMA(Direct Memory Access),這裡的 memory,指的是計算機的記憶體,自然與外存(storage)相對。這裡的關鍵詞在 Direct (直接),與傳統的相對低效的,需要通過 CPU 來通路記憶體(此為 indirect,間接)的方式相對。
  • DMA 實際上是盜用了總線時間來傳輸資料,而且由于是硬體處理,是以大大加速了資料複制速度!

1. 基本概念

  • 輔存狹義上是平時講的硬碟,準确地說,是外部存儲器(需要通過 I/O 系統與之交換資料,全稱為輔助儲存設備)。
  • RAM 與 ROM:計算機記憶體儲器的兩種型号
    • RAM-RamdomAccessMemory易揮發性随機存取存儲器,高速存取,讀寫時間相等,且與位址無關,如計算機記憶體等。
    • ROM-Read Only Memory隻讀存儲器。斷電後資訊不丢失,如計算機啟動用的 BIOS 晶片。存取速度很低,(較RAM而言)且不能改寫。由于不能改寫資訊,不能更新,現已很少使用。
    • ROM 和 RAM 是計算機記憶體儲器的兩種型号,ROM表示的是隻讀存儲器,即:它隻能讀出資訊,不能寫入資訊,計算機關閉電源後其内的資訊仍舊儲存,一般用它存儲固定的系統軟體和字庫等。RAM表示的是讀寫存儲器,可其中的任一存儲單元進行讀或寫操作,計算機關閉電源後其内的資訊将不在儲存,再次開機需要重新裝入,通常用來存放作業系統,各種正在運作的軟體、輸入和輸出資料、中間結果及與外存交換資訊等,我們常說的記憶體主要是指RAM。

2. CPU 操作外設:傳統方式與 DMA 方式

一直不明白DMA(直接記憶體存儲)

  • 傳統方式:CPU 操作外設時,将外設的資料讀到内部寄存器中,再将資料傳送至記憶體中,之是以還要講資料送到記憶體,在于 CPU 内部寄存器數量很少,一般都是靠 RAM 來臨時存儲大量的代碼和資料的。
    • CPU 工作的核心就是一個 PC 指針,PC 指針指向什麼位址,CPU 就會把相應位址處的二進制資料送至内部譯碼器進行譯碼後運作,
    • RAM 是一個臨時存放代碼和資料的地方,CPU 要執行代碼時,就要到記憶體(RAM)中去取指令。
  • DMA:在現代作業系統中,外設有資料到來時,基本上都采用中斷方式通知CPU,作業系統響應中斷,然後再從外設讀取資料,這時,如果外設的資料比較頻繁,那麼是否每到一個資料都中斷一次呢??這樣 CPU 就非常頻繁地被外調中斷打斷,作業系統在進行中斷時要浪費一定時間,而且 CPU 讀外部 IO 速度也很慢,這樣的話,大量時間被用在了響應中斷上,而去排程其它任務的時間減少,讓人感覺系統響應速度不夠,也會影響外設的資料傳輸速度(如果外設傳輸速度太快,作業系統就有可能丢失部分資料),由此引出 DMA 的機制:

    外設直接将一塊資料放在了 RAM 中,然後再産生一次中斷,這樣作業系統直接将記憶體中的那塊資料傳給想要擷取這塊資料的一個任務(或者放在記憶體的另一空閑部分),此時,系統就少了頻繁響應外設中斷的開銷,也少了讀取外設 IO 的時間開銷(讀取 RAM 比讀取外設 IO 要快很多),這就是 DMA 的作用所在!

繼續閱讀