轉載:https://blog.csdn.net/as02446418/article/details/47913387
內存緩存
高速緩存(英語:cache,英語發音:/kæʃ/ kash [1][2][3],簡稱緩存),其原始意義是指訪問速度比一般隨機存取存儲器(RAM)快的一種RAM,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。
原理
Cache一詞來源於1967年的一篇電子工程期刊論文。其作者將法語詞“cache”賦予“safekeeping storage”的涵義,用於電腦工程領域。
當CPU處理數據時,它會先到Cache中去尋找,如果數據因之前的操作已經讀取而被暫存其中,就不需要再從隨機存取存儲器(Main memory)中讀取數據——由於CPU的運行速度一般比主內存的讀取速度快,主存儲器周期(訪問主存儲器所需要的時間)為數個時鍾周期。因此若要訪問主內存的話,就必須等待數個CPU周期從而造成浪費。
提供“緩存”的目的是為了讓數據訪問的速度適應CPU的處理速度,其基於的原理是內存中“程序執行與數據訪問的局域性行為”,即一定程序執行時間和空間內,被訪問的代碼集中於一部分。為了充分發揮緩存的作用,不僅依靠“暫存剛剛訪問過的數據”,還要使用硬件實現的指令預測與數據預取技術——盡可能把將要使用的數據預先從內存中取到緩存里。
CPU的緩存曾經是用在超級計算機上的一種高級技術,不過現今電腦上使用的的AMD或Intel微處理器都在芯片內部集成了大小不等的數據緩存和指令緩存,通稱為L1緩存(L1 Cache即Level 1 On-die Cache,第一級片上高速緩沖存儲器);而比L1更大容量的L2緩存曾經被放在CPU外部(主板或者CPU接口卡上),但是現在已經成為CPU內部的標准組件;更昂貴的CPU會配備比L2緩存還要大的L3緩存(level 3 On-die Cache第三級高速緩沖存儲器)。
概念的擴充
如今緩存的概念已被擴充,不僅在CPU和主內存之間有Cache,而且在內存和硬盤之間也有Cache(磁盤緩存),乃至在硬盤與網絡之間也有某種意義上的Cache──稱為Internet臨時文件夾或網絡內容緩存等。凡是位於速度相差較大的兩種硬件之間,用於協調兩者數據傳輸速度差異的結構,均可稱之為Cache。
地址鏡像與變換
主條目:CPU緩存#組相聯
由於主存容量遠大於CPU緩存的容量,因此兩者之間就必須按一定的規則對應起來。地址鏡像就是指按某種規則把主存塊裝入緩存中。地址變換是指當按某種鏡像方式把主存塊裝入緩存后,每次訪問CPU緩存時,如何把主存的物理地址(Physical address)或虛擬地址(Virtual address)變換成CPU緩存的地址,從而訪問其中的數據。
緩存置換策略
主條目:CPU緩存#置換策略、分頁和緩存文件置換機制
主存容量遠大於CPU緩存,磁盤容量遠大於主存,因此無論是哪一層次的緩存都面臨一個同樣的問題:當容量有限的緩存的空閑空間全部用完后,又有新的內容需要添加進緩存時,如何挑選並舍棄原有的部分內容,從而騰出空間放入這些新的內容。解決這個問題的算法有幾種,如最久未使用算法(LRU)、先進先出算法(FIFO)、最近最少使用算法(LFU)、非最近使用算法(NMRU)等,這些算法在不同層次的緩存上執行時擁有不同的效率和代價,需根據具體場合選擇最合適的一種。
磁盤緩存
16MB緩沖區的硬盤
磁盤緩存(Disk Buffer)或磁盤快取(Disk Cache)實際上是將下載到的數據先保存於系統為軟件分配的內存空間中(這個內存空間被稱之為“內存池”),當保存到內存池中的數據達到一個程度時,便將數據保存到硬盤中。這樣可以減少實際的磁盤操作,有效的保護磁盤免於重復的讀寫操作而導致的損壞。
磁盤緩存是為了減少CPU透過I/O讀取磁盤機的次數,提升磁盤I/O的效率,用一塊內存來儲存存取較頻繁的磁盤內容;因為內存的存取是電子動作,而磁盤的存取是I/O動作,感覺上磁盤I/O變得較為快速。
相同的技巧可用在寫入動作,我們先將欲寫入的內容放入內存中,等到系統有其它空閑的時間,再將這塊內存的資料寫入磁盤中。
大小
現在的磁盤通常有32MB或64MB緩存。舊的硬盤則有8MB或16MB。