具有Cache的計(jì)算機(jī),當(dāng)CPU需要進(jìn)行存儲(chǔ)器存取時(shí),首先檢查所需數(shù)據(jù)是否在Cache中。如果存在,則可以直接存取其中的數(shù)據(jù)而不必插入任何等待狀態(tài),這是最佳情況,稱為高速命中;
當(dāng)CPU所需信息不在Cache中時(shí),則需切換存取主儲(chǔ)器,由于速度較慢,需要插入等待,這種情況稱高速未命中;
在CPU存取主存儲(chǔ)器的時(shí)候,按照最優(yōu)化原則將存儲(chǔ)信息同時(shí)寫(xiě)入到Cache中以保證下次可能的高速緩存命中。
因此,同一數(shù)據(jù)可能同時(shí)存儲(chǔ)在主存儲(chǔ)器和Cache中。同樣,按照優(yōu)化算法,可以淘汰Cache中一些不常使用的數(shù)據(jù)。
傳統(tǒng)的Socket架構(gòu)通常采用兩級(jí)緩沖結(jié)構(gòu),即在CPU中集成了一級(jí)緩存(L1Cache),在主板上裝二級(jí)緩存(L2 Cache),而SlotⅠ架構(gòu)下的L2 Cache則與CPU做在同一塊電路板上,以內(nèi)核速度或者內(nèi)核速度的一半運(yùn)行,速度比Socket下的以系統(tǒng)外頻運(yùn)行的L2 Cache更快,能夠更大限度發(fā)揮高主頻的優(yōu)勢(shì),當(dāng)然對(duì)Cache工藝要求也更高。
?CPU首先在L1 Cache中查找數(shù)據(jù),如找不到,則在L2Cache中尋找。
?若數(shù)據(jù)在L2 Cache中,控制器在傳輸數(shù)據(jù)的同時(shí),修改L1Cache;
?若數(shù)據(jù)既不在L1 Cache中,又不在L2 Cache中,Cache控制器則從主存中獲取數(shù)據(jù),將數(shù)據(jù)提供給CPU的同時(shí)修改兩級(jí)Cache。
?K6-Ⅲ則比較特殊,64KB L1 Cache,256KB Full Core Speed L2 Cache,原先主板上的緩存實(shí)際上就成了L3 Cache。
根據(jù)有關(guān)測(cè)試表明:
當(dāng)512K2MB的三級(jí)緩存發(fā)揮作用時(shí),系統(tǒng)性能還可以有2%10%的提高;
Tri-level成為PC系統(tǒng)出現(xiàn)以來(lái)提出的解決高速CPU與低速內(nèi)存之間瓶頸最為細(xì)致復(fù)雜的方案;而且,今后Cache的發(fā)展方向也是大容。
在主存-Cache存儲(chǔ)體系中,所有的指令和數(shù)據(jù)都存在主存中,Cache只是存放主存中的一部分程序塊和數(shù)據(jù)塊的副本,只是一種以塊為單位的存儲(chǔ)方式。
Cache和主存被分為塊,每塊由多個(gè)字節(jié)組成。
由上述的程序局部性原理可知,Cache中的程序塊和數(shù)據(jù)塊會(huì)使CPU要訪問(wèn)的內(nèi)容在大多數(shù)情況下已經(jīng)在Cache中,CPU的讀寫(xiě)操作主要在CPU和Cache之間進(jìn)行。
CPU訪問(wèn)存儲(chǔ)器時(shí),送出訪問(wèn)單元的地址,由地址總線傳送到Cache控制器中的主存地址寄存器MAR,主存-Cache地址轉(zhuǎn)換機(jī)構(gòu)從MA獲取地址并判斷該單元內(nèi)容是否已在Cache中存有副本,如果副本已存在于Cache中,即命中。當(dāng)命中時(shí),立即把訪問(wèn)地址變換成它在Cache中的地址,然后訪問(wèn)Cache。
?存儲(chǔ)體由若跟個(gè)存儲(chǔ)單元組成,存儲(chǔ)單元由多個(gè)存儲(chǔ)元件組成
?存儲(chǔ)體----存儲(chǔ)單元(存儲(chǔ)一串二進(jìn)制串)----存儲(chǔ)元件(存儲(chǔ)一個(gè)0/1)
?存儲(chǔ)單元:存放一串二進(jìn)制代碼。
?存儲(chǔ)字:存儲(chǔ)單元中的二進(jìn)制代碼
?存儲(chǔ)字長(zhǎng):存儲(chǔ)單元中二進(jìn)制代碼位數(shù)。
?存儲(chǔ)單元按照地址進(jìn)行尋址
?MAR:存儲(chǔ)器地址寄存器,反應(yīng)存儲(chǔ)單元個(gè)數(shù)。保存了存儲(chǔ)體的地址(存儲(chǔ)單元的編號(hào)),反應(yīng)了存儲(chǔ)單元的個(gè)數(shù)。所以MAR的位數(shù)和存儲(chǔ)單元的個(gè)數(shù)有關(guān)。
?MDR:存儲(chǔ)器數(shù)據(jù)寄存器,反應(yīng)存儲(chǔ)字長(zhǎng)(存儲(chǔ)單元長(zhǎng)度)。保存了要送入CPU中的數(shù)據(jù)或要保存到存儲(chǔ)體中的數(shù)據(jù)或者剛剛從存儲(chǔ)體中取出來(lái)來(lái)的數(shù)據(jù)。這個(gè)寄存器的長(zhǎng)度和存儲(chǔ)單元的長(zhǎng)度相同。
如果CPU要訪問(wèn)的內(nèi)容不在Cache中,即不命中,則CPU轉(zhuǎn)去直接訪問(wèn)主存,并將包含此存儲(chǔ)單元的整個(gè)數(shù)據(jù)塊(包括該塊數(shù)據(jù)的地址信息)傳到Cache中,使得以后的若干次對(duì)內(nèi)存的訪問(wèn)可轉(zhuǎn)化為對(duì)Cache的訪問(wèn)。
若Cache存儲(chǔ)器已滿,則需在替換控制部件的控制下,根據(jù)某種替換算法/策略,用此塊信息替換掉Cache中原來(lái)的某塊信息。
之前記得當(dāng)時(shí)面試的時(shí)候讓我用golang手寫(xiě)緩存管理算法,哈哈哈。
所以,要想提高系統(tǒng)效率,必須提高Cache命中率,而Cache命中率的提高則取決于Cache的映像方式和Cache刷新算法等一系列因素,同時(shí)Cache中內(nèi)容應(yīng)與主存中的部分保持一致,也就是說(shuō),如果主存中的內(nèi)容在調(diào)入Cache之后發(fā)生了變化,那么它在Cache中的映像也應(yīng)該隨之發(fā)生相應(yīng)改變,反之,當(dāng)CPU修改了Cache中的內(nèi)容后,主存中的相應(yīng)內(nèi)容也應(yīng)作修改。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163854 -
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211800 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7494瀏覽量
87981 -
Cache
+關(guān)注
關(guān)注
0文章
129瀏覽量
28346
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論