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


計算機體係結構5_緩存一致性協議

一,AMD64緩存一致性協議

        通過緩存一致性協議保證各個緩存之間,緩存與主存之間,多處理器之間的數據一致性。AMD64的緩存一致性協議為MOESI(modified, owned, 

exclusive,shared,invalid)協議。

               

                 當cache line沒有保存有效的數據時,被稱作invalid,有效的數據可以來自主存或者其他處理器的緩存。

                 

                 當cache line保存的數據為最近,最新的,被拷貝的數據在主存中也為最近,最新的數據,同時其他處理器沒有持有此數據的拷貝,

                 稱作exclusive

                  

                 當cache line保存的數據為最近,最新的,其他處理器持有此數據的拷貝,稱作shared。當其他處理器以owned模式持有此數據,則當前數

                 據在主存中也為最近最新的。

                 

                  當cache line保存的數據為最近,最新的,在主存中的數據為過時的,沒有其他處理器持有此數據的拷貝,稱作modified

                  

                  當cache line保存的數據為最近,最新的,稱作owned。owned與shared相似之處在於,其他處理器可以持有此數據最近,最新的拷貝,

                  與shared不同在於,主存中此數據可能為過時的。一份數據隻可以有一個處理器持有其owned狀態,其他處理器對此數據持有shared狀態。

二,AMD64緩存一致性狀態圖

        下圖為軟件觀點的,多種訪存操作驅動的MOESI狀態圖:

                          

                 

                     為了保證內存的一致性,其他具有內部緩存的處理器在緩存數據時,需要獲取最新的數據拷貝,此拷貝可以在主存中或者在其他

                     處理器的內部緩存中。當一個設備訪存miss時,探測其他設備的是否持有此數據最新的拷貝,此操作稱作probe。如果其他設備、

                     中持有此數據最新的拷貝,它將其提供給請求設備,否則主存提供最新的數據。

                     

                     主要有兩類設備probe方式:

                         read probe,指示其他設備請求數據出於讀意圖。

                         write probe,指示其他設備請求數據出於修改意圖。

                      圖7-2指出,由probe導致的狀態轉移包含probe的發起設備和接收設備。一些read probe由那些打算緩存此數據的設備發起,另外一些

                      發起的read probe並不是為了緩存此數據,如I/O設備。

                      

                      讀命中不會導致MOESI狀態轉移,寫命中通常導致MOESI狀態轉移到modified狀態。如果cache line已經為modified狀態,寫命中不會改變

                      它的狀態。

    參考:

             AMD64 Architecture Programmer’s Manual Volume 2: System Programming

最後更新:2017-04-03 14:54:06

  上一篇:go 平方根是否為整數
  下一篇:go 信息係統項目管理師考試之曆年真題資源大放送(附帶個人珍藏論文)