高速緩沖存儲器

高速緩沖存儲器

中央處理器和主存儲器間高速小容量存儲器
高速緩沖存儲器( Cache )其原始意義是指存取速度比一般随機存取記憶體( RAM )來得快的一種RAM,一般而言它不像系統主記憶體那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術,也有快取記憶體的名稱。[1]在計算機存儲系統的層次結構中,介于中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。
  • 中文名:高速緩沖存儲器
  • 外文名:
  • 适用領域:計算機
  • 所屬學科:
  • 英文名:Cache
  • 所處位置:中央處理器和主存儲器之間
  • 作用:信息的調度和傳送

概述

存儲器的高速緩沖存儲器存儲了頻繁訪問的 RAM 位置的内容及這些數據項的存儲地址。當處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。如果存有該地址,則将數據返回處理器;如果沒有保存該地址,則進行常規的存儲器訪問。

Cache的出現是基于兩種因素:首先,是由于CPU的速度和性能提高很快而主存速度較低且價格高,第二就是程序執行的局部性特點。因此,才将速度比較快而容量有限的SRAM構成Cache,目的在于盡可能發揮CPU的高速度。很顯然,要盡可能發揮CPU的高速度就必須用硬件實現其全部功能。 

Cache與主存之間可采取多種地址映射方式,直接映射方式是其中的一種。在這種映射方式下,主存中的每一頁隻能複制到某一固定的Cache頁中。由于Cache塊(頁)的大小為16B,而Cache容量為16KB。因此,此Cache可分為1024頁。可以看到,Cache的頁内地址隻需4位即可表示;而Cache的頁号需用10位二進制數來表示;在映射時,是将主存地址直接複制,現主存地址為1234E8F8(十六進制),則最低4位為Cache的頁内地址,即1000,中間10位為Cache的頁号,即1010001111。Cache的容量為16KB決定用這14位編碼即可表示。題中所需求的Cache的地址為10100011111000。 

Cache中的内容随命中率的降低需要經常替換新的内容。替換算法有多種,例如,先入後出(FILO)算法、随機替換(RAND)算法、先入先出(FIFO)算法、近期最少使用(LRU)算法等。這些替換算法各有優缺點,就以命中率而言,近期最少使用(LRU)算法的命中率最高。 

作用

在計算機技術發展過程中,主存儲器存取速度一直比中央處理器操作速度慢得多,使中央處理器的高速處理能力不能充分發揮,整個計算機系統的工作效率受到影響。有很多方法可用來緩和中央處理器和主存儲器之間速度不匹配的矛盾,如采用多個通用寄存器、多存儲體交叉存取等,在存儲層次上采用高速緩沖存儲器也是常用的方法之一。很多大、中型計算機以及新近的一些小型機、微型機也都采用高速緩沖存儲器。

高速緩沖存儲器的容量一般隻有主存儲器的幾百分之一,但它的存取速度能與中央處理器相匹配。根據程序局部性原理,正在使用的主存儲器某一單元鄰近的那些單元将被用到的可能性很大。因而,當中央處理器存取主存儲器某一單元時,計算機硬件就自動地将包括該單元在内的那一組單元内容調入高速緩沖存儲器,中央處理器即将存取的主存儲器單元很可能就在剛剛調入到高速緩沖存儲器的那一組單元内。于是,中央處理器就可以直接對高速緩沖存儲器進行存取。在整個處理過程中,如果中央處理器絕大多數存取主存儲器的操作能為存取高速緩沖存儲器所代替,計算機系統處理速度就能顯著提高。

原理

高速緩沖存儲器通常由高速存儲器、聯想存儲器、替換邏輯電路和相應的控制線路組成(見圖)。在有高速緩沖存儲器的計算機系統中,中央處理器存取主存儲器的地址劃分為行号、列号和組内地址三個字段。于是,主存儲器就在邏輯上劃分為若幹行;每行劃分為若幹的存儲單元組;每組包含幾個或幾十個字。高速存儲器也相應地劃分為行和列的存儲單元組。二者的列數相同,組的大小也相同,但高速存儲器的行數卻比主存儲器的行數少得多。

聯想存儲器用于地址聯想,有與高速存儲器相同行數和列數的存儲單元。當主存儲器某一列某一行存儲單元組調入高速存儲器同一列某一空着的存儲單元組時,與聯想存儲器對應位置的存儲單元就記錄調入的存儲單元組在主存儲器中的行号。當中央處理器存取主存儲器時,硬件首先自動對存取地址的列号字段進行譯碼,以便将聯想存儲器該列的全部行号與存取主存儲器地址的行号字段進行比較:若有相同的,表明要存取的主存儲器單元已在高速存儲器中,稱為命中。

硬件就将存取主存儲器的地址映射為高速存儲器的地址并執行存取操作;若都不相同,表明該單元不在高速存儲器中,稱為脫靶,硬件将執行存取主存儲器操作并自動将該單元所在的那一主存儲器單元組調入高速存儲器相同列中空着的存儲單元組中,同時将該組在主存儲器中的行号存入聯想存儲器對應位置的單元内。

當出現脫靶而高速存儲器對應列中沒有空的位置時,便淘汰該列中的某一組以騰出位置存放新調入的組,這稱為替換。确定替換的規則叫替換算法,常用的替換算法有:最近最少使用法(LRU)、先進先出法(FIFO)和随機法(RAND)等。替換邏輯電路就是執行這個功能的。另外,當執行寫主存儲器操作時,為保持主存儲器和高速存儲器内容的一緻性,對命中和脫靶須分别處理:①寫操作命中時,可采用寫直達法(即同時寫入主存儲器和高速存儲器)或寫回法(即隻寫入高速存儲器并标記該組修改過。

淘汰該組時須将内容寫回主存儲器);②寫操作脫靶時,可采用寫分配法(即寫入注存儲器并将該組調入高速存儲器)或寫不分配法(即隻寫入主存儲器但不将該組調入高速存儲器)。

高速緩沖存儲器的性能常用命中率來衡量。影響命中率的因素是高速存儲器的容量、存儲單元組的大小、組數多少、地址聯想比較方法、替換算法、寫操作處理方法和程序特性等。采用高速緩沖存儲器技術的計算機已相當普遍。有的計算機還采用多個高速緩沖存儲器,如系統高速緩沖存儲器、指令高速緩沖存儲器和地址變換高速緩沖存儲器等,以提高系統性能。随着主存儲器容量不斷增大,高速緩沖存儲器的容量也越來越大。

浏覽器緩存

緩存用于存儲一些臨時的文件。在浏覽網頁的過程中,網頁會自動存儲在用戶的硬盤上。下次再浏覽相同的網站的時候,系統會自動從硬盤中調出該網頁,既節省了時間也減少了網絡的交換。用戶可以自行設定緩存方便其上網的需要。電腦中還存在高速緩沖存儲器和硬盤緩存。緩存的種類:本地服務器緩存、網頁緩存、硬盤緩存、一級高速緩存、二級高速緩存。 

簡單理解

cache是一個高速小容量的臨時存儲器,可以用高速的靜态存儲器芯片實現,或者集成到CPU芯片内部,存儲CPU最經常訪問的指令或者操作數據。

cache的基本原理

CPU與cache之間的數據交換是以字為單位,而cache與主存之間的數據交換是以塊為單位。一個塊由若幹定長字組成的。當CPU讀取主存中一個字時,便發出此字的内存地址到cache和主存。此時cache控制邏輯依據地址判斷此字當前是否在 cache中:若是,此字立即傳送給CPU;若非,則用主存讀周期把此字從主存讀出送到CPU,與此同時,把含有這個字的整個數據塊從主存讀出送到cache中。由始終管理cache使用情況的硬件邏輯電路來實現LRU替換算法 

地址鏡像與變換

由于主存容量遠大于高速緩存的容量,因此兩者之間就必須按一定的規則對應起來。高速緩存的地址鏡像就是指按什麼規則把主存塊裝入高速緩存中。地址變換是指當按某種鏡像方式把主存塊裝入高速緩存後,每次訪問高速緩存時,如何把主存的物理地址或虛拟地址變換成高速緩存的地址,從而訪問高速緩存中的數據。 

鏡像和變換的方式有四種:直接鏡像、全相連鏡像、組相連鏡像、區段相連鏡像。 

Buffer和Cache的區别

buffer與cache操作的對象就不一樣。 

buffer(緩沖)是為了提高内存和硬盤(或其他I/0設備)之間的數據交換的速度而設計的。 

cache(緩存)是為了提高cpu和内存之間的數據交換速度而設計,也就是平常見到的一級緩存、二級緩存、三級緩存。 

cpu在執行程序所用的指令和讀數據都是針對内存的,也就是從内存中取得的。由于内存讀寫速度慢,為了提高cpu和内存之間數據交換的速度,在cpu和内存之間增加了cache,它的速度比内存快,但是造價高,又由于在cpu内不能集成太多集成電路,所以一般cache比較小,以後intel等公司為了進一步提高速度,又增加了二級cache,甚至三級cache,它是根據程序的局部性原理而設計的,就是cpu執行的指令和訪問的數據往往在集中的某一塊,所以把這塊内容放入cache後,cpu就不用在訪問内存了,這就提高了訪問速度。當然若cache中沒有cpu所需要的内容,還是要訪問内存的。 

緩沖(buffers)是根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反複尋道,從而提高系統性能。linux有一個守護進程定期清空緩沖内容(即寫入磁盤),也可以通過sync命令手動清空緩沖。舉個例子吧:我這裡有一個ext2的U盤,我往裡面cp一個3M的MP3,但U盤的燈沒有跳動,過了一會兒(或者手動輸入sync)U盤的燈就跳動起來了。卸載設備時會清空緩沖,所以有些時候卸載一個設備時要等上幾秒鐘。 

修改/etc/sysctl.conf中的vm.swappiness右邊的數字可以在下次開機時調節swap使用策略。該數字範圍是0~100,數字越大越傾向于使用swap。默認為60,可以改一下試試。--兩者都是RAM中的數據。 

簡單來說,buffer是即将要被寫入磁盤的,而cache是被從磁盤中讀出來的。 

buffer是由各種進程分配的,被用在如輸入隊列等方面。一個簡單的例子如某個進程要求有多個字段讀入,在所有字段被讀入完整之前,進程把先前讀入的字段放在buffer中保存。 

cache經常被用在磁盤的I/O請求上,如果有多個進程都要訪問某個文件,于是該文件便被做成cache以方便下次被訪問,這樣可提高系統性能。

讀取命中率

CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問内存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1Cache的命中率為80%。也就是說CPU從L1Cache中找到的有用數據占數據總量的80%,剩下的20%從L2Cache讀取。由于不能準确預測将要執行的數據,讀取L2的命中率也在80%左右(從L2讀到有用的數據占總數據的16%)。那麼還有的數據就不得不從内存調用,但這已經是一個相當小的比例了。在一些高端領域的CPU(像Intel的Itanium)中,我們常聽到L3Cache,它是為讀取L2Cache後未命中的數據設計的—種Cache,在擁有L3Cache的CPU中,隻有約5%的數據需要從内存中調用,這進一步提高了CPU的效率。

為了保證CPU訪問時有較高的命中率,Cache中的内容應該按一定的算法替換。一種較常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段時間内最少被訪問過的行淘汰出局。因此需要為每行設置一個計數器,LRU算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出Cache,提高Cache的利用率。

工作原理

高速緩沖存儲器通常由高速存儲器、聯想存儲器、替換邏輯電路和相應的控制線路組成。在有高速緩沖存儲器的計算機系統中,中央處理器存取主存儲器的地址劃分為行号、列号和組内地址三個字段。于是,主存儲器就在邏輯上劃分為若幹行;每行劃分為若幹的存儲單元組;每組包含幾個或幾十個字。高速存儲器也相應地劃分為行和列的存儲單元組。二者的列數相同,組的大小也相同,但高速存儲器的行數卻比主存儲器的行數少得多。

聯想存儲器用于地址聯想,有與高速存儲器相同行數和列數的存儲單元。當主存儲器某一列某一行存儲單元組調入高速存儲器同一列某一空着的存儲單元組時,與聯想存儲器對應位置的存儲單元就記錄調入的存儲單元組在主存儲器中的行号。

當中央處理器存取主存儲器時,硬件首先自動對存取地址的列号字段進行譯碼,以便将聯想存儲器該列的全部行号與存取主存儲器地址的行号字段進行比較:若有相同的,表明要存取的主存儲器單元已在高速存儲器中,稱為命中,硬件就将存取主存儲器的地址映射為高速存儲器的地址并執行存取操作;若都不相同,表明該單元不在高速存儲器中,稱為脫靶,硬件将執行存取主存儲器操作并自動将該單元所在的那一主存儲器單元組調入高速存儲器相同列中空着的存儲單元組中,同時将該組在主存儲器中的行号存入聯想存儲器對應位置的單元内。

當出現脫靶而高速存儲器對應列中沒有空的位置時,便淘汰該列中的某一組以騰出位置存放新調入的組,這稱為替換。确定替換的規則叫替換算法,常用的替換算法有:最近最少使用法(LRU)、先進先出法(FIFO)和随機法(RAND)等。替換邏輯電路就是執行這個功能的。另外,當執行寫主存儲器操作時,為保持主存儲器和高速存儲器内容的一緻性,對命中和脫靶須分别處理:

①寫操作命中時,可采用寫直達法(即同時寫入主存儲器和高速存儲器)或寫回法(即隻寫入高速存儲器并标記該組修改過。淘汰該組時須将内容寫回主存儲器);

②寫操作脫靶時,可采用寫分配法(即寫入主存儲器并将該組調入高速存儲器)或寫不分配法(即隻寫入主存儲器但不将該組調入高速存儲器)。高速緩沖存儲器的性能常用命中率來衡量。影響命中率的因素是高速存儲器的容量、存儲單元組的大小、組數多少、地址聯想比較方法、替換算法、寫操作處理方法和程序特性等。

采用高速緩沖存儲器技術的計算機已相當普遍。有的計算機還采用多個高速緩沖存儲器,如系統高速緩沖存儲器、指令高速緩沖存儲器和地址變換高速緩沖存儲器等,以提高系統性能。随着主存儲器容量不斷增大,高速緩沖存儲器的容量也越來越大。

相關詞條

相關搜索

其它詞條