Cache 的功能
高速緩沖存儲(chǔ)器,是一個(gè)相對(duì)于主存來說容量很小、速度特快、用靜態(tài)存儲(chǔ)器器件實(shí)現(xiàn)的存儲(chǔ)器系統(tǒng)。它的作用在于緩解主存速度慢、跟不上CPU讀寫速度要求的矛盾。它是把CPU最近最可能用到的少量信息(數(shù)據(jù)或指令)從主存復(fù)制到cache中,當(dāng)CPU下次再用這些信息時(shí),它就不必訪問慢速的主存,而直接從快速的cache中得到,從而提高了得到這些信息的速度,使CPU有更高的運(yùn)行效率。
Cache 的工作原理
Cache的工作原理是基于程序訪問的局部性。對(duì)大量典型程序運(yùn)行情況的分析結(jié)果表明,在一個(gè)較短的時(shí)間間隔內(nèi),由程序產(chǎn)生的地址往往集中在存儲(chǔ)器邏輯地址空間的很小范圍內(nèi)。指令地址的分布本來就是連續(xù)的,再加上循環(huán)程序段和子程序段要重復(fù)執(zhí)行多次。因此,對(duì)這些地址的訪問就自然地具有時(shí)間上集中分布的傾向。此外。對(duì)數(shù)組的存儲(chǔ)和訪問以及工作單元的選擇都可以使存儲(chǔ)器地址相對(duì)集中。這種對(duì)局部范圍的存儲(chǔ)器地址頻繁訪問,而對(duì)此范圍以外的地址則訪問甚少的現(xiàn)象,就稱為程序訪問的局部性。
根據(jù)程序的局部性原理,可以在主存和CPU之間設(shè)置一個(gè)速度更高但容量較小的存儲(chǔ)器,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入這個(gè)存儲(chǔ)器,供CPU在一段時(shí)間內(nèi)使用,這對(duì)提高程序的運(yùn)行速度有很大的作用。
因此,高速緩存的成功和失敗就取決于將哪些內(nèi)容放到Cache中。根據(jù)局部性原理,在訪問存儲(chǔ)器的某個(gè)字后,并將該字和它的相鄰單元從低速的大容量存儲(chǔ)器系統(tǒng)中讀到高速緩存中。這樣,下次訪問它時(shí),可以訪問得快一些。如果,在一個(gè)短的時(shí)間片內(nèi),需要對(duì)這個(gè)塊中的字訪問k次,CPU就只要訪問低速存儲(chǔ)器一次,另外k-1次就可以訪問快速的高速緩存,訪問次數(shù)越多,總體性能就越好。
Cache 的結(jié)構(gòu)
硬盤的組成
Cache 的結(jié)構(gòu),如圖6.13所示。主存由2n個(gè)單元構(gòu)成,地址碼的位數(shù)為n,主存分成若干個(gè)塊,每塊有2b個(gè)字節(jié)。同樣Cache分成若干塊,每塊內(nèi)又包含若干個(gè)字,它們的塊大小相同(即塊內(nèi)的字?jǐn)?shù)相同)。由于Cache的塊數(shù)c遠(yuǎn)小于主存的塊數(shù)m,因此,一個(gè)緩存塊不能惟一地、永久地只對(duì)應(yīng)一個(gè)主存塊,故每個(gè)緩存塊需設(shè)一個(gè)標(biāo)記用來表示當(dāng)前存放的是哪一個(gè)主存塊,該標(biāo)記的內(nèi)容相當(dāng)于主存塊的編號(hào)。CPU讀信息時(shí),要將主存地址的高m位 (或m位中的一部分)與緩存塊的標(biāo)記進(jìn)行比較,以判斷所讀的信息是否已在緩存中。
Cache的容量與塊長(zhǎng)是影響Cache效率的重要因素,通常用“命中率”來衡量Cache的效率。命中率是指CPU要訪問的信息已在Cache內(nèi)的比率。一般而言,Cache容量越大,其CPU的命中率就越高。當(dāng)然也沒必要太大,太大會(huì)增加成本,而且當(dāng)Cache容量達(dá)到一定值時(shí),命中率已不因容量的增大而有明顯的提高。因此,Cache容量是總成本價(jià)與命中率的折中值。如80386的主存最大容量為4GB,與其配套的Cache容量為16KB或32KB,其命中率可達(dá)95%以上。
圖6.13 Cache/主存存儲(chǔ)空間的基本結(jié)構(gòu).
Cache 的工作流程
高速緩存的工作流程如圖6.14所示,由工作流程圖可知,當(dāng)CPU送出主存地址(大)后,經(jīng)過地址映像變換機(jī)構(gòu)的比較后,得到比較結(jié)果是否命中,如果命中,就將此大地址變換成Cache地址(?。┖笏偷紺ache,以選中所需要的字,并將該字傳送到CPU數(shù)據(jù)總線;如果不命中,即去主存將所需的字讀出后送到數(shù)據(jù)總線,同時(shí),將此字的所在塊(若干個(gè)字)讀出,在送到Cache前,還要判斷,如果Cache中可以裝入就直接寫入,如不能裝入就調(diào)用替換策略。
圖6.14 Cache的工作流程
csche的三種地址映像方式
為了把信息放到Cache中,必須應(yīng)用某種函數(shù)或規(guī)則把主存地址映象到Cache,這種地址的邏輯對(duì)應(yīng)關(guān)系稱作地址映象。當(dāng)信息按這種映象關(guān)系裝入Cache后,執(zhí)行程序時(shí),應(yīng)將主存地址變換成Cache地址,這個(gè)變換過程叫作地址變換,地址映象和地址變換是密切相關(guān)的。Cache的地址映象方式主要有全相聯(lián)映象、直接映象和組相聯(lián)映象三種。
1.全相聯(lián)映像
如圖6.15所示,這種主存與cache的地址映像關(guān)系比較簡(jiǎn)單,它允許主存中的一個(gè)字塊映像到cache存儲(chǔ)器的任何一個(gè)字塊位置上,也允許從確實(shí)已被占滿的cache存儲(chǔ)器中替換出任何一個(gè)字塊。
圖6.15全相聯(lián)映像
圖6.16為地址變換過程示意,可以將主存地址分成兩段,主存塊號(hào)和塊內(nèi)地址,將cache的地址分成cache塊號(hào)和塊內(nèi)地址,兩者的塊內(nèi)地址即字地址且相同。
圖6.16 全相聯(lián)映像的地址變換
全相聯(lián)映像的優(yōu)點(diǎn)是塊沖突率低,只有當(dāng)Cache中全部裝滿后,才有可能出現(xiàn)塊沖突。缺點(diǎn)是訪問速度慢(相對(duì)于讀出一個(gè)單元內(nèi)容的其他方法),這是因?yàn)橐c所有標(biāo)記全部比較一遍,才能確定是否命中;另外實(shí)現(xiàn)比較復(fù)雜,成本比較高。因此,全相聯(lián)映像一般用于較小的Cache 。
2.直接映像
這種地址映像如圖6.17所示,圖(a)中,它以Cache的容量為單位,將主存分為若干個(gè)區(qū);圖(b)中的點(diǎn)虛線、雙點(diǎn)劃虛線和實(shí)線清楚地看出,主存每個(gè)區(qū)中的塊只能裝入與Cache對(duì)應(yīng)的塊,即直接映象。
圖6.17 直接映像
一般情況下,Cache存儲(chǔ)空間被分為n個(gè)塊,塊號(hào)為j,主存空間被分為m個(gè)區(qū),主存塊號(hào)分別為i,區(qū)號(hào)分別為k。顯然,主存第0區(qū)的第0塊、1 塊、... n+1塊只能映象到Cache的第0塊、1 塊、... n+1塊。同樣,主存第1區(qū)的第n塊、n+1 塊、...2 n-1塊,只能映象到Cache的第0塊、1 塊、... n+1塊。因此,直接映象函數(shù)定義為:
j = i mod 2c (其中2c為cache的塊數(shù),即n=2c,“mod”為求模取余)
此外,還可以根據(jù)主存塊號(hào)求出主存區(qū):k = [i / 2c],其中k是主存的區(qū)號(hào),i是主存的塊號(hào),2c為cache的塊數(shù),即n,“[ ]”為取整。
圖6.18為直接映像的地址變換過程示意,假設(shè)將主存地址分成3段,區(qū)號(hào)、區(qū)內(nèi)塊號(hào)和塊內(nèi)地址,將cache的地址分成cache塊號(hào)和塊內(nèi)地址。因?yàn)橹苯佑诚?,所以區(qū)內(nèi)塊號(hào)與cache塊號(hào)兩者一定相同,因此,區(qū)號(hào)是鑒別不同塊的唯一標(biāo)志。圖中虛線框內(nèi)為按地址訪問的高速存儲(chǔ)器,它屬于cache控制器,存放著裝入主存信息后的主存區(qū)號(hào)等標(biāo)志,也稱塊表。當(dāng)主存地址到達(dá)后,以區(qū)內(nèi)塊號(hào)作為地址,讀出塊表內(nèi)的區(qū)號(hào)標(biāo)志,并與當(dāng)前的區(qū)號(hào)比較,如果相同,為命中,即將當(dāng)前cache塊號(hào)與塊內(nèi)地址一起送到cache,對(duì)cache進(jìn)行字訪問。如果不命中,就要訪問主存。
圖6.18 直接映像的地址變換
直接映像是簡(jiǎn)單的地址映像,地址變換速度較快,且遇到?jīng)_突替換時(shí),只要將所在的塊替換出來,不需要替換算法,但它的命中率略低,但硬件實(shí)現(xiàn)更容易。
3.組相聯(lián)映像
如果將圖6.19中的cache再分成若干個(gè)組,主存的區(qū)也分成相同的組,就成為組相聯(lián)映像,由圖(a)中的虛線、雙點(diǎn)劃虛線可清楚地看出,主存中每個(gè)區(qū)中的組都直接映像到cache中的相應(yīng)組,由圖(b)所示,組內(nèi)的每一塊可以全相聯(lián)映象到Cache中相應(yīng)組內(nèi)的任何一個(gè)任何塊,即組間直接映像,組內(nèi)全相聯(lián)映像。即主存數(shù)據(jù)塊所在的組只能直接映像到cache的相應(yīng)的組中,該組號(hào)確定后,數(shù)據(jù)塊本身就可以全相聯(lián)映像到cache該組的任意一塊。
圖6.19 組相聯(lián)映像
由于組相聯(lián)映像判斷塊命中和替換算法上都比全相聯(lián)映像簡(jiǎn)單,所以實(shí)現(xiàn)起來容易得多,訪問沖突的概率比直接映像來得低,命中率接近于全相聯(lián)映像,所以組相聯(lián)映像被很多機(jī)器廣泛采用。
好了,這篇文章的內(nèi)容發(fā)貨聯(lián)盟就和大家分享到這里,如果大家網(wǎng)絡(luò)推廣引流創(chuàng)業(yè)感興趣,可以添加微信:80709525 備注:發(fā)貨聯(lián)盟引流學(xué)習(xí); 我拉你進(jìn)直播課程學(xué)習(xí)群,每周135晚上都是有實(shí)戰(zhàn)干貨的推廣引流技術(shù)課程免費(fèi)分享!