緩存(cache)淺析

一、什麼是緩存?

        緩存是介於中央處理器和主存儲器之間的高速小容量存儲器,不屬於主存的一部分。 (速度快、容量小、由硬件實現)

        緩存用來存儲一些常用或即將用到的數據或指令,當CPU需要這些數據或指令的時候直接從緩存中讀取,這樣比CPU到內存甚至硬盤中讀取要快得多,能夠大幅度提升CPU的處理速度(節省時間/提高效率)。

二、爲什麼要有緩存?

        由於CPU的存取速度很快,而內存的速度很慢,爲了不讓CPU每次都在運行相對緩慢的內存中操作,緩存就作爲一箇中間者出現了。有些常用的數據或是地址,就直接存在緩存中,這樣,下一次調用的時候就不需要再去內存中去找了,CPU首先會在Cache中讀,如果Cache命中,也叫Cache hit,CPU就可以極快的得到該地址處的值。如果cache miss 也就是沒有命中,它就會通過總線在內存中去讀,並把連續的一塊單元加載到Cache中,下次好使用。

        緩存的大小也是很小的,不能存放大量的數據,並且緩存中存放的數據會因爲CPU的訪問而被替代,比如某個數據開始被cpu頻繁訪問,但後來不再頻繁,那這個數據的空間會被其他訪問頻繁的數據所佔據。緩存又可以分爲一級和二級緩存,一級的速度大於二級的速度。

        因此CPU在訪問數據時,先到緩存中看有沒有,沒有的話再到內存中讀取。

形象比喻:做手術時,醫生(CPU)從護士手裏取手術刀等器件,護士(Cache)可以在手上放幾把常用的,這樣醫生需要的時候如果護士手上就有,速度就快很多。如果護士手上沒有醫生所需要的器件,那就需要醫生自己去工具箱(內存)裏找所需的器件,這樣的話就浪費了時間。

三、二級緩存

        內存分爲RAM(隨機存取存儲器)和ROM(只讀存儲器),一個是隨即讀取內存,一個是隻讀內存(BIOS是寫進ROM的),RAM中的數據可讀可寫,但斷電就消失,而ROM的數據只允許一次寫入永久只能讀,斷電了還是存在的。

        最初的緩存生產成本很高,價格昂貴,所以爲了存儲更多的數據,又不希望成本過高,就出現了二級緩存的概念,他們採用的並不是一級緩存的SRAM(靜態RAM),而是採用了性能比SRAM稍差一些,但是比內存更快的DRAM(動態RAM)

RAM分爲兩類:

  • SRAM(靜態隨機存儲器):它是一種具有靜止存取功能的內存,其內部機構比DRAM複雜,可以做到不刷新電路即能保存它內部存儲的數據。靜態:不需要刷新
  • DRAM(動態隨機存儲器):是最爲常見的系統內存。我們使用的電腦和手機的運行內存都是DRAM。DRAM使用電容存儲,DRAM 只能將數據保持很短的時間。爲了保持數據,所以必須隔一段時間刷新一次。動態:定時刷新數據


四、Cache/主存系統的讀操作原理 

       CPU與cache之間的數據交換是以”字”爲單位,而cache與主存之間的數據交換是以”塊”爲單位,一個塊由若干字組成,是定長的。

        CPU進行存儲器讀操作時,根據主存地址可分成命中和未命中兩種情況。對於前者,從Cache中可直接讀到所需的數據;對於後者,需訪問主存,並將訪問單元所在的整個塊從內存中全部調入Cache,接着要修改Cache標記。若Cache已滿,需按一定的替換算法(隨機淘汰還有或者LRU淘汰),替換掉一箇舊塊(Cache Line 單元)。

        當CPU試圖讀取主存一個字時,發出此字內存地址同時到達cache和主存,此時cache控制邏輯依據地址的標記部分進行判斷此字當前是否在cache中。若是(命中),此字立即遞交給CPU,若否(未命中),則要用主存讀取週期把這個字從主存讀出送到CPU,與此同時把含有這個字的整個數據塊從主存讀出送到cache中。由於程序的存儲器訪問具有局部性,當爲滿足一次訪問需求而取來一個數據塊時,下面的多次訪問很可能是讀取此塊中的其它字。

       Cache讀操作原理

說明:

  • 當CPU向內存讀取或寫入數據時,這個數據也被存儲進高速緩衝存儲器(緩存)。 
  • 當CPU再次需要這些數據時,就從高速緩衝存儲器(緩存)讀取數據,而不是訪問較慢的內存。 
  • 如果需要的數據在cache(緩存)中沒有,再去內存中查找。 

        計算機中所有程序的運行都是在內存中進行的,只要計算機在運行中,CPU就會把運算的數據調到內存中進行運算,當運算結束後,CPU再把結果傳送出去,內存的運行也決定了計算機的穩定運行。

 

補充:

  • 硬盤中的數據會先寫入內存才能被CPU使用。
  • 內存+緩存 -> 內存儲空間 
  • 硬盤 -> 外存儲空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章