緩存cache

1. 先修知識(shí)

  1. b位的二進(jìn)制數(shù)可以表示2^b個(gè)數(shù)。
    相應(yīng)的B個(gè)數(shù)需要log2(B)位來(lái)表示沈自。
  2. k代表2的10次方畦韭, M代筆2的20次方,G代表2的30次方
  3. 一個(gè)字節(jié)等于8位苗沧,一個(gè)字一般為4個(gè)字節(jié)

2. 存儲(chǔ)器模型

2.1 cpu與存儲(chǔ)器的關(guān)系

經(jīng)典的馮諾依曼模型將計(jì)算機(jī)分為運(yùn)算器、存儲(chǔ)器炭晒、控制器待逞、輸入和輸出。cpu分為運(yùn)算器和控制器网严,cpu需要從內(nèi)存中讀取數(shù)據(jù)识樱。

2.2 cpu與內(nèi)存的連接

cpu與內(nèi)存的連接通過(guò)數(shù)據(jù)線連接,主要包括:
地址線震束,數(shù)據(jù)線怜庸,控制線。各種線的作用如下:

  • 地址線傳輸?shù)刂沸畔ⅲㄒ簿褪且x取哪一個(gè)地址的數(shù)據(jù))
  • 數(shù)據(jù)線傳輸讀取出的數(shù)據(jù)
  • 控制線(負(fù)責(zé)告訴內(nèi)存是讀 還是寫(xiě))
    注意:
    地址線的位數(shù)決定存儲(chǔ)器可以尋址的空間垢村,b位的地址可以尋址2^b個(gè)地址割疾。
    數(shù)據(jù)線的位數(shù)決定了一次可以讀取的數(shù)據(jù)量的大小。例如8根數(shù)據(jù)線嘉栓,一次可以讀取8位宏榕,也就是一個(gè)字節(jié),32根的 就是一次可以讀取4個(gè)字節(jié)
    假設(shè)地址線a根侵佃,數(shù)據(jù)線d根担扑,那么存儲(chǔ)器可以存儲(chǔ)的位數(shù)位: 2^a*d。 字節(jié)數(shù)需要除以8

**所以可以將內(nèi)存想象成二維的矩陣,然后行代表每一個(gè)地址趣钱, 列代表了這個(gè)地址的存儲(chǔ)單元每一位保存的數(shù)據(jù) **
存儲(chǔ)器模型如圖所示:

QQ圖片20161120220202.jpg

以下介紹一個(gè)真實(shí)的內(nèi)存過(guò)程:

  1. cpu控制器將內(nèi)存的地址信息放到地址線上
  2. 內(nèi)存將地址線映射到某一行去涌献。例如三個(gè)地址線101的將映射到內(nèi)存的第5行。
  3. cpu控制器將控制信號(hào)(“讀”)放到控制信號(hào)
  4. 此時(shí)開(kāi)始讀首有, 數(shù)據(jù)通過(guò)數(shù)據(jù)線到達(dá)cpu.

3. 緩存設(shè)計(jì)原理

3.1 緩存的初衷

  • cpu和內(nèi)存速度之間的差異
  • 存儲(chǔ)介質(zhì)的矛盾(速度燕垃,價(jià)格,容量)

3.2 緩存可行的原因

  • 局部行原理

3.3 緩存的設(shè)計(jì)過(guò)程

下面都假設(shè)一個(gè)地址讀取一個(gè)字節(jié)的數(shù)據(jù):也就是數(shù)據(jù)線只有8根

  • 首先設(shè)計(jì)決定緩存和內(nèi)存之間移動(dòng)數(shù)據(jù)塊的大小井联。假設(shè)為B字節(jié)的數(shù)據(jù)卜壕,那么就是連續(xù)的B個(gè)地址的數(shù)據(jù)放到一個(gè)塊中去。因?yàn)榈刂肥沁B續(xù)的增長(zhǎng)的烙常,所以可以使用地址最低b=log2(B)位來(lái)代表該塊哪一個(gè)字節(jié)轴捎。
  • 確定了塊的大小鹤盒,我們?cè)诳赐ㄓ镁彺娴脑O(shè)計(jì),緩存被設(shè)計(jì)成為S組侦副,每組E行侦锯,如下圖
通用緩存結(jié)構(gòu).PNG

**注意: **這是一種通用的緩沖區(qū)的結(jié)構(gòu),隨著M秦驯, E的變化尺碰,該結(jié)構(gòu)可以到特殊的情行。例如以下的特殊情況:1. S=1 ; 2. E=1译隘。
該通用緩存結(jié)構(gòu)的規(guī)定是:
某一內(nèi)存塊只能放到某一具體的組亲桥,但是可以放到該組E行中的任意一行。

  • 現(xiàn)在我們確定了塊大小固耘,和使用物理地址的后b位確定一個(gè)塊中的哪一個(gè)字節(jié)(我們強(qiáng)調(diào)過(guò)题篷,一個(gè)地址對(duì)應(yīng)一個(gè)字節(jié))。現(xiàn)在想像一下厅目,數(shù)據(jù)塊從內(nèi)存到緩存中的過(guò)程番枚,該過(guò)程首先要決定將數(shù)據(jù)放到相應(yīng)的那個(gè)組中去,然后才決定放到哪一行中去璧瞬。對(duì)于S組,我們需要s=log2(S)為來(lái)表示放到哪一組中去渐夸。

現(xiàn)在我們退出來(lái)嗤锉,從地址的規(guī)律的角度思考如何設(shè)計(jì)該如何決定將數(shù)據(jù)塊放到哪一個(gè)緩存組中。
下面是一個(gè)5位的地址墓塌,共可以表示32個(gè)地址瘟忱,以下是地址的遞增到末尾。我們假設(shè)一個(gè)塊保存四個(gè)字節(jié)苫幢, 也就是四個(gè)地址的數(shù)據(jù)访诱,下面我們已經(jīng)將每塊通過(guò)空行分割。同樣我們假設(shè)緩沖區(qū)的分為四組韩肝,也就是S=4触菜,所以需要兩位來(lái)表示哪一個(gè)組(緩沖區(qū)的組數(shù)是硬件設(shè)計(jì)人員決定的,當(dāng)然可以是任何的組數(shù)哀峻,但是一般是2的冪次方個(gè)涡相。
我們通過(guò)下面的地址可以很清晰的看出,

  • 每個(gè)塊的后兩位的十進(jìn)制就是0-3剩蟀,確實(shí)可以用來(lái)標(biāo)注一個(gè)塊中的第幾個(gè)字節(jié)催蝗,其實(shí)這個(gè)是因?yàn)榈刂肥沁B續(xù)增加,且低位先變化育特,這個(gè)和十進(jìn)制的遞增是一樣的丙号。

  • 比較每一塊的第一個(gè)地址的中間的兩個(gè)數(shù), 其也在遞增,取值也是0-3犬缨,然后同一塊內(nèi)的是相同的喳魏,所以使用這兩個(gè)數(shù)作為組號(hào)是可行的。

  • 第一塊和第五塊的數(shù)據(jù)中間數(shù)字會(huì)被隱射到同一個(gè)組內(nèi)遍尺,因?yàn)橹虚g的位的數(shù)字是相同的截酷,這時(shí)就需要高位來(lái)區(qū)分。第一塊的高位為0乾戏,第五塊的高位為1迂苛, 高位也被稱為標(biāo)記。 為什么標(biāo)記一定能保證唯一的確定一個(gè)數(shù)據(jù)塊呢鼓择? 首先因?yàn)榈刂肥沁B續(xù)增加的三幻,沒(méi)有重復(fù);當(dāng)中間的組號(hào)再次循環(huán)到某一組號(hào)時(shí)呐能,地址會(huì)向前進(jìn)位念搬,所以標(biāo)記位會(huì)不同。
    標(biāo)記的位數(shù):地址的位數(shù) - 塊偏移的位數(shù) - 組的位數(shù)
    注意: 我們是先確定塊的大小摆出,進(jìn)而得到塊偏移的位數(shù)
    然后由組數(shù)朗徊,確定組的位數(shù)
    最后才是有上述的關(guān)系 得到 標(biāo)記的位數(shù)。

標(biāo)記 組號(hào) 塊偏移
(1)
0  00  00
0  00  01
0  00  10
0  00  11

0  01  00
0  01  01
0  01  10
0  01  11

0  10  00
0  10  01
0  10  10
0  10  11

0  11  00
0  11  01
0  11  10
0  11  11

(5)
1  00  00
1  00  01
1  00  10
1  00  11

1  01  00
1  01  01
1  01  10
1  01  11

1  10  00
1  10  01
1  10  10
1  10  11

1  11  00
1  11  01
1  11  10
1  11  11
  • 現(xiàn)在我們已經(jīng)知道放到哪一組中去偎漫,下面需要知道放到哪一行中去爷恳,因?yàn)橥ㄓ镁彌_區(qū)約定,放到該組E行中的任意一行象踊,所以當(dāng)該組中有空閑的空間時(shí)温亲,就直接存放就行了。
    問(wèn)題: 如何判斷一個(gè)緩沖區(qū)有效(即存放有數(shù)據(jù))杯矩?
    這就是緩沖區(qū)中有效位的作用,該位為1表示有效栈虚,0表示無(wú)效。
    所以只需遍歷該組內(nèi)所有行史隆,若有行中的有效位為0魂务,則將數(shù)據(jù)放到該行即可
  • 上面我們討論的是有空閑的時(shí)候,那么如果沒(méi)有空閑泌射,此時(shí)需要替換算法來(lái)決定將哪一個(gè)緩沖塊踢掉头镊,替換算法, 替換算法一般有最近最少使用, FIFO等算法魄幕。
    緩沖區(qū)設(shè)計(jì)完成

下面來(lái)討論數(shù)據(jù)的讀取

  • 組選擇
    從地址中選擇中間的s位相艇,轉(zhuǎn)換為十進(jìn)制的第i組
  • 行匹配
    從該組中依次匹配每一行,當(dāng)且僅當(dāng)有效位和標(biāo)志位全部一致纯陨,才表示數(shù)據(jù)塊匹配
  • 字抽取
    從地址最低的b位坛芽,轉(zhuǎn)化到十進(jìn)制j留储,表示數(shù)據(jù)是該塊的第j個(gè),讀取出來(lái)咙轩。

4. 特殊的緩沖區(qū)結(jié)構(gòu)

本大節(jié)討論的是對(duì)于通用型緩存結(jié)構(gòu)的特化

4.1 直接映射緩沖區(qū)

直接映射緩沖區(qū)是指 有S組緩沖區(qū)获讳,每組只有一個(gè)緩沖塊。

4.2 組相連

組相連是指有S組活喊,每組E行丐膝,E>1.

4.3 全相連緩沖區(qū)

全相連緩沖區(qū) 是指只有一個(gè)組

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钾菊,隨后出現(xiàn)的幾起案子帅矗,更是在濱河造成了極大的恐慌,老刑警劉巖煞烫,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浑此,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滞详,警方通過(guò)查閱死者的電腦和手機(jī)凛俱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)料饥,“玉大人蒲犬,你說(shuō)我怎么就攤上這事“斗龋” “怎么了原叮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凰狞。 經(jīng)常有香客問(wèn)我篇裁,道長(zhǎng)沛慢,這世上最難降的妖魔是什么赡若? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮团甲,結(jié)果婚禮上逾冬,老公的妹妹穿的比我還像新娘。我一直安慰自己躺苦,他們只是感情好身腻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著匹厘,像睡著了一般嘀趟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愈诚,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天她按,我揣著相機(jī)與錄音牛隅,去河邊找鬼。 笑死酌泰,一個(gè)胖子當(dāng)著我的面吹牛媒佣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陵刹,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼默伍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衰琐?” 一聲冷哼從身側(cè)響起也糊,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碘耳,沒(méi)想到半個(gè)月后显设,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辛辨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年捕捂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗搞。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡指攒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出僻焚,到底是詐尸還是另有隱情允悦,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布虑啤,位于F島的核電站隙弛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狞山。R本人自食惡果不足惜全闷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萍启。 院中可真熱鬧总珠,春花似錦、人聲如沸勘纯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驳遵。三九已至淫奔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間堤结,已是汗流浹背唆迁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工佳鳖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媒惕。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓系吩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妒蔚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子穿挨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 緩存是什么 1)許多人認(rèn)為,“緩存”是內(nèi)存的一部分肴盏。許多技術(shù)文章都是這樣教授的科盛,但是還是有很多人不知道緩存在什么地...
    不知名的蛋撻閱讀 733評(píng)論 0 1
  • Cache: a collection of data duplicating original values s...
    abel_cao閱讀 1,244評(píng)論 1 7
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,771評(píng)論 25 707
  • 廣州以一個(gè)晴天迎接了我的回來(lái),終于回南天過(guò)去了菜皂,估計(jì)整個(gè)廣州的人民都在慶祝吧贞绵。當(dāng)陽(yáng)光照進(jìn)機(jī)艙,飛機(jī)廣播23度恍飘,一下...
    米菲的游樂(lè)園閱讀 227評(píng)論 0 0
  • 記憶是滾燙的淚水榨崩,你是我無(wú)法得到的輪回。愛(ài)可一千年章母,恨亦一千年母蛛,你是我不曾改變的永遠(yuǎn)。遠(yuǎn)的不是那隔絕你我的天上人間...
    不懂浪漫的雨滴閱讀 123評(píng)論 0 0