软件与Cache
Cache是提高CPU性能的一種技術手段,通過Cache存儲器把程序頻繁用到的指令和數據存儲起來,等再次訪問該指令或數據時CPU可以直接從Cache中讀取而不用訪問主存從而能提高程序運行的效率。
Cache背后的理論基礎是程序運行的“局部性”原理,
“程序局部性原理”包括 時間局部性?? 和 空間局部性。
時間局部性 的主要表現為剛被訪問過的指令或數據很可能在最近的將來再次被訪問,編程語言的循環結構是時間局部性產生的主要原因。
空間局部性 描述的是:若一個存儲單元被訪問則其相鄰的存儲單元也被訪問,軟件程序的順序執行及語言中的數組結構是空間局部性產生的主要原因。
在硬件設計方面cache的實現大體上分為兩種:
虛擬cache和物理cache
存儲虛擬地址的cache叫虛擬cache,這種cache存儲編譯程序時產生的虛擬地址對應的存儲器單元內容,其優點是匹配速度快,因為在CPU MMU地址轉換前即可對cache進行訪問,其缺點為因為不同虛擬地址可對應相同的物理地址而導致的cache別名問題。
物理cache存儲經由MMU轉換后的物理地址對應的存儲器單元內容。
?
cache的具體實現方法包括:
? 直接映射cache,組相連cache和全映射cache ,其中直接映射cache的實現最簡單,全映射cache的實現最難,而組相連cache的實現居于以上兩者之間。
從軟件的角度來說編寫應用程序的程序員是看不見cache的,只有編寫操作系統等系統軟件的程序員才能看見cache。以linux OS為例,在linux引導啟動時必須對cache進行初始化工作,包括對指令/數據cache的各行進行invalidate操作。
不同體系結構的cache實現方法的不同導致操作系統對其cache的失效操作也不盡相同,如對I386體系結構來說體系結構在其內部實現了cache失 效操作所以linux就無需進行重復的cache失效操作,但對MIPS等RISC體系結構linux引導啟動代碼必須實現cache初始化操作。
?
另一方面在linux中訪問外圍設備時必須屏蔽cache,一般情況下體系結構提供特殊指令訪問I/O設備寄存器及內存,而這些指令實現了屏蔽cache的操作
?
系統軟件能夠感覺到cache的另一點是對設備進行DMA操作時。無論是對設備進行DMA寫還是從設備DMA讀取,都必須在啟動DMA操作之前進行cache失效操作。
?
參考
軟件與Cache? http://www.eefocus.com/neubhs/blog/08-02/143389_de387.html
轉載于:https://www.cnblogs.com/ajian005/archive/2011/02/17/2753868.html
總結
- 上一篇: 成昆和玄冥二老三人能不能破金刚伏魔圈?
- 下一篇: 哲学是什么?(选自:苏菲的世界)