閱讀56 返回首頁    go 阿裏雲 go 技術社區[雲棲]


3.3.3 PCI設備對可Cache的存儲器空間進行DMA讀寫

PCI設備向“可Cache的存儲器空間”進行讀操作的過程相對簡單。對於x86處理器或者PowerPC處理器,如果訪問的數據在Cache中命中,CPU會通知FSB總線,PCI設備所訪問的數據在Cache中。

首先HOST主橋發起存儲器讀總線事務,並在Request Phase中,提供地址。Snoop AgentSnoop Phase進行總線監聽,並通過HIT#HITM#信號將監聽結果通知給Response Agent。如果Cache行的狀態為E時,Response Agent將提供數據,而CPU不必改變Cache行狀態。如果Snoop Agent可以直接將數據提供給HOST主橋,無疑數據訪問的延時更短,但是采用這種方法無疑會極大的提高Cache Memory係統的設計難度,因此采用這種數據傳送方式的處理器並不多。

如果Cache行的狀態為M時,Response AgentResponse Phase階段,要求Snoop AgentsCache中數據回寫到存儲器,並將Cache行狀態更改為ESnoop AgentsData Phase,將Cache中數據回寫給存儲器控製器,同時為HOST主橋提供數據。Snoop Agents也可以直接將數據提供給HOST主橋,不需要進行數據回寫過程,也不更改Cache行狀態,但是采用這種方法會提高Cache Memory係統的設計難度。

如果PCI設備訪問的數據沒有在Cache中命中,Snoop Agents會通知FSB總線,PCI設備所訪問的數據不在Cache中,此時存儲器控製器(Response Agent)將在Data PhaseHOST主橋提供數據。

PCI設備向“可Cache的”存儲器區域進行寫操作,無論對於PowerPC處理器還是x86處理器,都較為複雜。當HOST主橋通過FSB將數據發送給存儲器控製器時,在這個係統總線上的所有CPU都需要對這個PCI寫操作進行監聽,並根據監聽結果,合理地改動Cache行狀態,並將數據寫入存儲器。

下文以3?7所示的SMP處理器係統為例,說明PCI設備對“可Cache的存儲器空間”進行DMA寫的實現過程。

3.3.3 PCI設備對可Cache的存儲器空間進行DMA讀寫 - maoxingbing - 毛毛蟲的爹

3?7所示的處理器係統中,存在4CPU,這4CPU通過一條FSB連接在一起,而CPU之間使用MESI協議進行Cache一致性處理,而HOST主橋和存儲器控製器與FSB直接相連。HOST主橋向存儲器控製器傳遞數據時,需要處理Cache的一致性。

在這個處理器係統中,當PCI設備,如PCI設備01,進行DMA寫操作時,數據將首先到達HOST主橋,而HOST主橋將首先接管該PCI設備數據訪問並將其轉換為FSB總線事務,並在Request Phase中,提供本次FSB總線事務的地址。CPU將在Snoop Phase對這個地址進行監聽,判斷當前地址在Cache中的命中情況。

HOST主橋訪問的地址不在Cache中命中時,此時在處理器係統中,所有CPU都沒有驅動HIT#HITM#信號,HIT#HITM#信號都為1,表示HOST主橋訪問的地址沒有在CPUCache中命中,HOST主橋可以簡單地將數據寫入存儲器。當HOST主橋訪問的存儲器地址在Cache中命中時,Cache行的狀態可以為SE或者為M,此時處理器係統的處理過程相對較為複雜,下一節將專門討論這種情況。


目前Cortex A8/A9IntelNehelem處理器支持這種方式。

最後更新:2017-04-03 16:48:39

  上一篇:go 2.3 PCI橋與PCI設備的配置空間
  下一篇:go Linux係統信息查看命令大全