操作系统缓存机制
起源
在每個指令周期中,CPU至少會訪問內存一次,來抓取下一條執行的指令,而且經常會附帶著更多次的訪問,來獲取操作數,以及存儲結果。而CPU執行指令的速度就因此大大受限于對內存的訪問速度,而且隨著CPU的速度提高大大快于內存的訪問速度提高,這個問題會越來越嚴重。理論上來說,我們可以制造一種存取速度與CPU寄存器相同的內存,但那樣的話內存就會相當昂貴,所以為了解決這個問題,就需要利用短時間內指令的聚合特性來設計一個在CPU和主存之間工作的緩存。
緩存工作原理
緩存持有主存的一部分拷貝,當處理器試圖訪問內存中的一個地址時,會首先判斷該地址中的內容是不是已經在緩存中了,如果是的話,則數據直接從緩存傳送到處理器中,不是不是的話,則首先將該指令以及該指令附近的數據讀取到緩存中,然后再從緩存中讀取數據到處理器中。
緩存設計
1.緩存大小
合理的緩存大小可以大大加快cpu訪問數據的速度
2.緩存單次數據交換大小
起初隨著緩存單次交換數據增長,緩存命中率會增加,因為更多目標數據附近的數據被加載到了緩存中,但是隨著緩存單次交換數據繼續增長,性能反而會下降,這是因為此時將過多的數據從內存中加載到緩存中,這個數據交換花費了過多時間,而緩存命中率并不會繼續顯著的增加。
3.緩存替換算法
緩存替換算法是當一塊新的內存數據被加載到緩存中時,來確定將哪部分緩存中已經存在的數據交換回去,好的緩存替換算法會維持緩存的一個高命中率,但是算法本身也會耗費時間,所以需要權衡。
數據局部性
數據局部性原理是緩存能大幅度提高性能的原理
數據局部性在以下四個方面中起作用
1.除了占整個程序小部分的跳轉指令(調用函數),以及條件分支,大部分程序都是線性執行,這代表在大部分情況下,當前要執行的下一條指令就在當前指令的后面。
2.許多循環指令都是在短時間內執行大量的重復指令,這些指令都聚集在相對接近的地址段中。
3.在許多程序的運算中,都會處理線性數據結構,如數組,以及C語言中的結構體,這些數據結構item的地址都是連續的
歡迎關注我的github https://github.com/luckyCatMiao
總結
- 上一篇: PLSQL Developer解决科学计
- 下一篇: 计算机行业绩效管理,【计算机仿真论文】计