DMA(Direct Memory Access):直接內(nèi)存訪問(wèn)
Posted on 2024-12-14 00:00 Further_Step 閱讀(197) 評(píng)論(0) 收藏 舉報(bào) 來(lái)源
DMA(Direct Memory Access):直接內(nèi)存訪問(wèn)
一、傳統(tǒng)CPU存取數(shù)據(jù)
CPU不直接存取外設(shè)的原因主要有兩點(diǎn):
- 速度差異:CPU的處理速度遠(yuǎn)高于外設(shè),無(wú)法直接同步。
- 格式多樣性:外設(shè)數(shù)據(jù)格式種類(lèi)繁多,需要轉(zhuǎn)換才能被CPU處理。
傳統(tǒng)CPU獲取數(shù)據(jù)的步驟如下:
- 加載外設(shè)數(shù)據(jù)到內(nèi)存:外設(shè)數(shù)據(jù)首先被加載到內(nèi)存中,因?yàn)閮?nèi)存的速度最接近CPU。
- 檢查Cache:CPU檢查Cache是否有需要的數(shù)據(jù)。
- 如果命中,直接返回?cái)?shù)據(jù)。
- 如果未命中,從內(nèi)存獲取數(shù)據(jù)(這里暫時(shí)不考慮MMU)。
- 返回?cái)?shù)據(jù):將數(shù)據(jù)返回給CPU。
二、認(rèn)識(shí)DMA
1、什么是DMA
DMA(Direct Memory Access)即直接存儲(chǔ)器訪問(wèn),通過(guò)內(nèi)部控制器實(shí)現(xiàn)內(nèi)存和外設(shè)之間的數(shù)據(jù)傳輸。DMA的引入使得CPU可以專(zhuān)注于內(nèi)存數(shù)據(jù)的處理,而數(shù)據(jù)的搬運(yùn)工作由DMA硬件完成。
- 開(kāi)始傳輸時(shí)刻:DMA向CPU申請(qǐng)總線周期的占用時(shí)間。
- 結(jié)束傳輸時(shí)刻:DMA向CPU發(fā)送中斷請(qǐng)求,請(qǐng)求CPU處理數(shù)據(jù)。
2、DMA的工作模式、數(shù)據(jù)傳輸方式、尋址模式
工作模式:
- 直接模式:DMA直接從源地址到目的地址傳輸數(shù)據(jù)。
- FIFO模式:數(shù)據(jù)累計(jì)存儲(chǔ)在FIFO緩沖器中,達(dá)到閾值后一次性發(fā)送。
數(shù)據(jù)傳輸方式:
- 單字傳送:每次傳輸一個(gè)字或字節(jié),傳輸后歸還總線控制權(quán)。
- 塊傳送:連續(xù)占用多個(gè)總線周期進(jìn)行批量傳送。
尋址模式:
- 增量尋址:發(fā)送完數(shù)據(jù)后,繼續(xù)發(fā)送下一個(gè)地址的數(shù)據(jù)。
- 非增量尋址:需要軟件配置下一個(gè)數(shù)據(jù)的地址。
3、為什么要使用DMA
- 減輕CPU負(fù)擔(dān):將固定任務(wù)交給DMA,提高系統(tǒng)效率。
- 提高吞吐率:DMA具備高效操作能力,提升IO效率。
三、DMA數(shù)據(jù)傳輸
1、準(zhǔn)備階段
-
DMA控制器初始化:
- 配置DMA內(nèi)存緩沖區(qū)的首地址。
- 配置DMA傳輸方向。
- 配置DMA交換量。
-
接口初始化:
- I/O設(shè)備的尋址信息。
2、傳輸請(qǐng)求
3、數(shù)據(jù)傳送
- DMA控制器向總線發(fā)送讀/寫(xiě)命令,向I/O接口發(fā)響應(yīng)信號(hào),數(shù)據(jù)交互由內(nèi)存和設(shè)備接口完成。
4、善后處理
- DMA控制器在傳輸結(jié)束時(shí)向CPU發(fā)送中斷,CPU重新接管總線控制權(quán)。
四、DMA保證與內(nèi)存中數(shù)據(jù)一致性方法
一、使用緩存一致性協(xié)議
- 硬件機(jī)制:如MESI協(xié)議,確保CPU緩存和內(nèi)存數(shù)據(jù)一致性。
- 緩存刷新和無(wú)效操作:軟件可以觸發(fā)緩存操作以確保數(shù)據(jù)一致性。
二、使用同步機(jī)制
- 中斷和輪詢:DMA傳輸完成后通過(guò)中斷或輪詢進(jìn)行數(shù)據(jù)一致性檢查。
- 信號(hào)量和互斥鎖:在多處理器或多線程環(huán)境中使用同步機(jī)制。
三、數(shù)據(jù)校驗(yàn)和錯(cuò)誤檢測(cè)
- 校驗(yàn)和計(jì)算:在傳輸前后計(jì)算校驗(yàn)和,確保數(shù)據(jù)完整性。
- 錯(cuò)誤檢測(cè)和糾正碼(ECC):支持ECC的系統(tǒng)可以檢測(cè)并糾正數(shù)據(jù)錯(cuò)誤。
四、合理的內(nèi)存管理和訪問(wèn)控制
- 內(nèi)存保護(hù):通過(guò)設(shè)置內(nèi)存訪問(wèn)權(quán)限,限制DMA訪問(wèn)。
- 內(nèi)存分配和釋放:合理管理內(nèi)存,避免數(shù)據(jù)不一致和內(nèi)存泄漏。
通過(guò)以上方法,DMA可以有效地保證數(shù)據(jù)在內(nèi)存中的一致性,提高系統(tǒng)的整體性能和可靠性。
浙公網(wǎng)安備 33010602011771號(hào)