大多數人都知道DMA和高速緩存可能是一個愚蠢的問題......我只知道高速緩存將內存存儲到更接近您可以訪問的地方,因此您不必爲I/O.DMA與高速緩存區別
但是DMA呢?它可讓您以較少的延遲訪問主內存?
有人可以解釋兩者之間的差異,或爲什麼我只是困惑?
大多數人都知道DMA和高速緩存可能是一個愚蠢的問題......我只知道高速緩存將內存存儲到更接近您可以訪問的地方,因此您不必爲I/O.DMA與高速緩存區別
但是DMA呢?它可讓您以較少的延遲訪問主內存?
有人可以解釋兩者之間的差異,或爲什麼我只是困惑?
DMA是一種硬件設備,可以在不使用CPU指令的情況下移入/移出內存。
例如,硬件設備(可以說,您的PCI聲音設備)想要播放音頻。您可以:
mov
指令一次寫入一個單詞。DMA可能非常複雜(分散收集等),並且因總線類型和系統而異。
我的第一個答案完全同意,並有一些共同的補充...
在大多數DMA硬件還可以設置它做存儲器到存儲器的傳輸 - 也並不總是涉及到外部設備。也取決於系統,可能需要或可能不需要在軟件之前(或傳輸之後)同步CPU高速緩存,因爲DMA傳輸到/從內存中傳輸的數據可能在不知道CPU高速緩存的情況下完成。
做任何DMA的好處是,CPU可以同時做其他事情。 當然,當CPU也需要訪問內存時,只有一個可以訪問,另一個必須等待。
Mem to mem DMA通常用於嵌入式系統以提高性能,或者可能根本無法訪問某些內存部分。
要回答這個問題,DMA和CPU緩存是完全不同的東西,不可比。
我知道它有點晚,但回答這個問題將幫助像我這樣的人我同意上述答案,我認爲這個問題是關於緩存。
所以是緩存存儲信息的地方更接近內存,這可能是早期計算的結果。無論何時在高速緩存中找到數據,它將被稱爲高速緩存命中,並且只要沒有找到(高速緩存未命中),處理器就會繼續計算所需的值。設備也可以訪問這些數據,這就是爲什麼在啓動時我們通常會使緩存數據無效,因此緩存行很乾淨。我們還會在啓動時刷新緩存數據,以便將所有緩存數據寫回到主內存以供cpu使用,之後我們會處理以重置或初始化緩存。
DMA(直接內存訪問),是的它可以讓你訪問主內存。但我認爲更好的定義是,它允許您訪問只能由處理器訪問的系統寄存器。 @Ronnie和@Yann Ramin都是正確的,因爲DMA可以是一個設備硬件,所以它可以被串行外設用來訪問系統寄存器,但它也可以用於內存到內核之間的內存傳輸。
您可以從維基百科進一步閱讀DMA,瞭解DMA可以訪問系統內存的模式。我將簡單地解釋它
突發模式:DMA完全控制總線,CPU在此期間處於空閒狀態。數據以突發(整體)傳輸而不中斷。
週期竊取模式:此數據一次傳輸一個字節,傳輸速度慢,但CPU不閒置。