天天看點

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

pci裝置向“可cache的存儲器空間”進行讀操作的過程相對簡單。對于x86處理器或者powerpc處理器,如果通路的資料在cache中命中,cpu會通知fsb總線,pci裝置所通路的資料在cache中。

如果cache行的狀态為m時,response agent在response phase階段,要求snoop agents将cache中資料回寫到存儲器,并将cache行狀态更改為e。snoop agents在data phase,将cache中資料回寫給存儲器控制器,同時為host主橋提供資料。snoop agents也可以直接将資料提供給host主橋,不需要進行資料回寫過程,也不更改cache行狀态,但是采用這種方法會提高cache memory系統的設計難度。

如果pci裝置通路的資料沒有在cache中命中,snoop agents會通知fsb總線,pci裝置所通路的資料不在cache中,此時存儲器控制器(response agent)将在data phase向host主橋提供資料。

pci裝置向“可cache的”存儲器區域進行寫操作,無論對于powerpc處理器還是x86處理器,都較為複雜。當host主橋通過fsb将資料發送給存儲器控制器時,在這個系統總線上的所有cpu都需要對這個pci寫操作進行監聽,并根據監聽結果,合理地改動cache行狀态,并将資料寫入存儲器。

下文以圖3?7所示的smp處理器系統為例,說明pci裝置對“可cache的存儲器空間”進行dma寫的實作過程。

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

在圖3?7所示的處理器系統中,存在4個cpu,這4個cpu通過一條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主橋通路的位址沒有在cpu的cache中命中,host主橋可以簡單地将資料寫入存儲器。當host主橋通路的存儲器位址在cache中命中時,cache行的狀态可以為s、e或者為m,此時處理器系統的處理過程相對較為複雜,下一節将專門讨論這種情況。