病毒推廣網(wǎng)站網(wǎng)絡(luò)營(yíng)銷怎么做
基于計(jì)算機(jī)組成的簡(jiǎn)單Cache講解
本文目錄
- 為什么需要Cache
- Cache的基本特點(diǎn)
- 什么樣的數(shù)據(jù)需要放入Cache
- Cache的基本結(jié)構(gòu)
- Cache的工作流程
- Cache的補(bǔ)充
- Cache的改進(jìn)
為什么需要Cache(高速緩沖存儲(chǔ)器)?
我們都知道CPU處理數(shù)據(jù)的速度非常快,雖然內(nèi)存的讀寫速度也不慢,但是相對(duì)于CPU它的速度就顯得太慢了,所以如果單純地讓CPU對(duì)內(nèi)存進(jìn)行讀寫,所消耗的時(shí)間絕大部分是在內(nèi)存對(duì)數(shù)據(jù)的處理上,而這時(shí)候CPU就在空等,浪費(fèi)了資源,因此就需要在CPU與內(nèi)存之間連接一個(gè)Cache來作為緩沖。
Cache的基本特點(diǎn)
由于Cache是為了緩解內(nèi)存處理數(shù)據(jù)太慢而出現(xiàn)的,因此Cache應(yīng)該具備的一個(gè)基本特點(diǎn)就是讀寫數(shù)據(jù)的速度快,能夠比較好地匹配CPU的速度,盡可能地讓CPU忙起來,但是就是因?yàn)樗幚硭俣瓤?#xff0c;所以就造成了它的容量比較小,如果能夠既可以容量大又可以速度快的話直接把內(nèi)存的速度提高到匹配到CPU的速度就好了,但是由于材料的價(jià)格,技術(shù)復(fù)雜度等等原因,Cache還是很必要的。
什么樣的數(shù)據(jù)需要放入Cache?
前面提到Cache的兩大特點(diǎn),速度快與容量小,就容量小這特點(diǎn)來說,我們就不能把所有的數(shù)據(jù)都放到Cache里,所以Cache里應(yīng)該放CPU最有可能會(huì)對(duì)它進(jìn)行處理的數(shù)據(jù)。
說到這里就不得不提到程序運(yùn)行的局部性原理,這個(gè)原理完美地解釋了什么樣的數(shù)據(jù)很可能會(huì)被CPU處理,它包含兩個(gè)部分:時(shí)間局部性與空間局部性。
- 時(shí)間局部性是指當(dāng)CPU處理了一個(gè)數(shù)據(jù)以后它很有可能會(huì)對(duì)它進(jìn)行第二次處理。
- 空間局部性是指CPU處理了內(nèi)存中某一塊的數(shù)據(jù),它很可能會(huì)還對(duì)它附近的數(shù)據(jù)塊進(jìn)行讀寫操作。
所以這些就是需要放入CPU的數(shù)據(jù),在CPU對(duì)某一數(shù)據(jù)進(jìn)行操作后主存與Cache就開始行動(dòng),將可能需要的數(shù)據(jù)放入到Cache中。
Cache的基本結(jié)構(gòu)
Cache的存儲(chǔ)體的基本存儲(chǔ)單元為塊,每一個(gè)塊內(nèi)有塊內(nèi)地址,Cache的地址通過塊號(hào)與塊內(nèi)地址來表示。除了塊之外還有標(biāo)記,通過標(biāo)記來識(shí)別此時(shí)Cache里有誤想要的數(shù)據(jù),如果標(biāo)記里有則直接對(duì)Cache進(jìn)行處理,如果在標(biāo)記里沒有找到,則再對(duì)主存進(jìn)行數(shù)據(jù)傳輸。Cache里還有幾個(gè)機(jī)構(gòu),替換機(jī)構(gòu)與地址映射變換機(jī)構(gòu)。
Cache的工作流程
Cache的操作可以分為讀操作與寫操作。在介紹操作之前首先應(yīng)該介紹一下Cache幾個(gè)機(jī)構(gòu)的作用。
- 替換機(jī)構(gòu):在CPU對(duì)內(nèi)存進(jìn)行讀寫操作時(shí),如果發(fā)現(xiàn)想要的數(shù)據(jù)在Cache里沒有,而且Cache的容量滿了的情況下就需要對(duì)Cache舊的數(shù)據(jù)進(jìn)行替換。
- 地址映射變換機(jī)構(gòu):這個(gè)機(jī)構(gòu)其實(shí)可以分為兩個(gè),映射機(jī)構(gòu)與變換機(jī)構(gòu)
- 映射機(jī)構(gòu):可以查看將數(shù)據(jù)放到哪些塊中
- 變換機(jī)構(gòu):可以將Cache的塊號(hào)與主存的塊號(hào)相互轉(zhuǎn)換
- 讀操作
CPU對(duì)數(shù)據(jù)進(jìn)行讀操作時(shí),首先應(yīng)該查看Cache里的標(biāo)記中有沒有對(duì)應(yīng)地址,如果發(fā)現(xiàn)Cache中有要找的數(shù)據(jù),則直接從Cache中讀取,節(jié)省時(shí)間。如果發(fā)現(xiàn)Cache中沒有,則需要到內(nèi)存中去讀取,根據(jù)程序運(yùn)行的局部性原理(時(shí)間局部性與空間局部性),需要將相關(guān)的數(shù)據(jù)寫入Cache中,方便下一次的讀操作,這時(shí)如果Cache中數(shù)據(jù)沒滿,則直接寫入Cache,如果滿了,就需要Cache的替換機(jī)構(gòu)對(duì)需要替換的數(shù)據(jù)進(jìn)行替換,將數(shù)據(jù)放入Cache存儲(chǔ)體中。 - 寫操作
寫操作分為兩種,寫直達(dá)法與寫回法。
寫直達(dá)法:將要寫入的數(shù)據(jù)既寫入Cache又寫入主存,寫操作的時(shí)間就是訪問主存的時(shí)間。
寫回法:只把數(shù)據(jù)寫入Cache而不寫入主存,當(dāng)Cache數(shù)據(jù)被替換出去時(shí)才寫回主存
Cache的補(bǔ)充
- 命中率:對(duì)于Cache來說,如果CPU要進(jìn)行讀寫操作的數(shù)據(jù)在Cache中,則稱為命中,如果不在Cache中,則沒有命中。
- Cache-主存的地址映射:
直接映射:Cache與主存直接映射 主存被劃分為多個(gè)區(qū),Cache里的每一個(gè)塊對(duì)應(yīng)主存每個(gè)區(qū)的相應(yīng)的塊,Cache的一個(gè)塊可對(duì)應(yīng)主存每個(gè)區(qū)的相應(yīng)的塊,由區(qū)號(hào)選出具體的塊,然后由子塊內(nèi)地址(偏移量)選定具體的數(shù)據(jù) 缺點(diǎn):利用率較低
全相聯(lián)映射:Cache的各個(gè)塊對(duì)應(yīng)主存儲(chǔ)器的各個(gè)塊
組相聯(lián)映射:在直接映射的基礎(chǔ)上Cache的每個(gè)組的塊數(shù)變成了兩塊或者若干塊,導(dǎo)致一塊占滿時(shí)可以放到另外一塊
- Cache的替換算法
在Cache的替換機(jī)構(gòu)進(jìn)行替換時(shí)需要采用相關(guān)的替換算法。
先進(jìn)先出(FIFO)算法 缺點(diǎn):可能會(huì)替換掉更有用的數(shù)據(jù),沒有體現(xiàn)程序運(yùn)行局部性原理
近期最少使用(LRU)算法:將近期最少使用的塊替換掉
Cache的改進(jìn)
- 增加Cache的級(jí)數(shù)
- 統(tǒng)一緩存和分立緩存
指令Cache 數(shù)據(jù)Cache
只適用于初學(xué)的朋友,如有錯(cuò)誤,希望朋友們指正,一起加油!