2012-03-03 106 views
1

大多數人都知道DMA和高速緩存可能是一個愚蠢的問題......我只知道高速緩存將內存存儲到更接近您可以訪問的地方,因此您不必爲I/O.DMA與高速緩存區別

但是DMA呢?它可讓您以較少的延遲訪問主內存?

有人可以解釋兩者之間的差異,或爲什麼我只是困惑?

回答

3

DMA是一種硬件設備,可以在不使用CPU指令的情況下移入/移出內存。

例如,硬件設備(可以說,您的PCI聲音設備)想要播放音頻。您可以:

  1. 通過CPU mov指令一次寫入一個單詞。
  2. 配置DMA設備。您給它一個起始地址,一個目的地和要複製的字節數。現在轉移發生在CPU做別的東西而不是勺子餵養音頻設備。

DMA可能非常複雜(分散收集等),並且因總線類型和系統而異。

0

我的第一個答案完全同意,並有一些共同的補充...

在大多數DMA硬件還可以設置它做存儲器到存儲器的傳輸 - 也並不總是涉及到外部設備。也取決於系統,可能需要或可能不需要在軟件之前(或傳輸之後)同步CPU高速緩存,因爲DMA傳輸到/從內存中傳輸的數據可能在不知道CPU高速緩存的情況下完成。

做任何DMA的好處是,CPU可以同時做其他事情。 當然,當CPU也需要訪問內存時,只有一個可以訪問,另一個必須等​​待。

Mem to mem DMA通常用於嵌入式系統以提高性能,或者可能根本無法訪問某些內存部分。

要回答這個問題,DMA和CPU緩存是完全不同的東西,不可比。

2

我知道它有點晚,但回答這個問題將幫助像我這樣的人我同意上述答案,我認爲這個問題是關於緩存。

所以是緩存存儲信息的地方更接近內存,這可能是早期計算的結果。無論何時在高速緩存中找到數據,它將被稱爲高速緩存命中,並且只要沒有找到(高速緩存未命中),處理器就會繼續計算所需的值。設備也可以訪問這些數據,這就是爲什麼在啓動時我們通常會使緩存數據無效,因此緩存行很乾淨。我們還會在啓動時刷新緩存數據,以便將所有緩存數據寫回到主內存以供cpu使用,之後我們會處理以重置或初始化緩存。

DMA(直接內存訪問),是的它可以讓你訪問主內存。但我認爲更好的定義是,它允許您訪問只能由處理器訪問的系統寄存器。 @Ronnie和@Yann Ramin都是正確的,因爲DMA可以是一個設備硬件,所以它可以被串行外設用來訪問系統寄存器,但它也可以用於內存到內核之間的內存傳輸。

您可以從維基百科進一步閱讀DMA,瞭解DMA可以訪問系統內存的模式。我將簡單地解釋它

突發模式:DMA完全控制總線,CPU在此期間處於空閒狀態。數據以突發(整體)傳輸而不中斷。

週期竊取模式:此數據一次傳輸一個字節,傳輸速度慢,但CPU不閒置。