希望以上回答對(duì)你有所幫助。如果還有其他問(wèn)題,請(qǐng)隨時(shí)提問(wèn)。作者: sinside 時(shí)間: 2023-11-17 09:38
DMA 與 CPU 同時(shí)訪(fǎng)問(wèn)總線(xiàn)有如下幾種方法:
1. 總線(xiàn)時(shí)分復(fù)用。
這種總線(xiàn)的訪(fǎng)問(wèn)權(quán)被分成多個(gè)時(shí)間片,CPU 和 DMA 分別使用不同的時(shí)間片。這種方法在早期的 DMA 中很常見(jiàn)。當(dāng)時(shí)的 CPU 沒(méi)有指令流水線(xiàn),每個(gè)指令周期需要許多時(shí)鐘周期才能完成,但只有其中小部分時(shí)鐘周期訪(fǎng)存。這時(shí)候 DMA 可以利用 CPU 訪(fǎng)存的間隙時(shí)間,實(shí)現(xiàn) DMA 與 CPU 并行。類(lèi)似的做法也存在于比較現(xiàn)代的系統(tǒng)中,通過(guò)插入等待狀態(tài)來(lái)實(shí)現(xiàn) CPU 和 DMA 交替訪(fǎng)問(wèn)總線(xiàn)。
2. 矩陣總線(xiàn)。
矩陣總線(xiàn)每一個(gè)訪(fǎng)存設(shè)備和每一組內(nèi)存設(shè)備分別占據(jù)一個(gè)端口,只要兩個(gè)訪(fǎng)存設(shè)備訪(fǎng)問(wèn)的不是同一個(gè)端口就可以互不沖突。如果內(nèi)存被分為多塊使用多個(gè)總線(xiàn)端口的話(huà),只要 DMA 和 CPU 不同時(shí)訪(fǎng)問(wèn)同一塊內(nèi)存,兩者就可以相安無(wú)事。幾乎所有基于 ARM 的芯片都用了矩陣總線(xiàn)作為系統(tǒng)總線(xiàn)。
3. 指令緩存。
現(xiàn)在大多數(shù)的 CPU 都有緩存。此時(shí)只要 CPU 需要訪(fǎng)問(wèn)的的指令已經(jīng)存入了緩存,CPU 便不需要去系統(tǒng)總線(xiàn)取指。此時(shí)總線(xiàn)完全空閑,DMA 可以獨(dú)占訪(fǎng)問(wèn)總線(xiàn)。