CSAPP--第六章:存儲器層次結(jié)構(gòu)學(xué)習(xí)

重要思想:編寫出數(shù)據(jù)項存儲在層次結(jié)構(gòu)中嵌巷,較高地方的程序鸟雏。

  • **學(xué)習(xí)目標:SRAM、DRAM惧财、ROM存儲器及旋轉(zhuǎn)和固態(tài)存儲器巡扇。
    重點關(guān)注高速緩存存儲器cache。

隨機訪問存儲器(Random-Access Memory):
  • 靜態(tài)RAM(SRAM):
    (速度快垮衷,價格高厅翔,用于高速緩存,一般為幾M搀突。)
    SRAM用雙穩(wěn)態(tài)的存儲器單元刀闷,每個單元有6個晶體管,可以無限期保持兩個電壓中的狀態(tài)之一仰迁。
    具有扛干擾性甸昏。
    靜態(tài)RAM的雙穩(wěn)態(tài)示意圖

  • 傳統(tǒng)的動態(tài)RAM(DRAM):
    而動態(tài)RAM結(jié)構(gòu),由細節(jié)到宏觀徐许,如下圖所示施蜜。
  • 訪問數(shù)據(jù)步驟:
    1:傳送一個地址A到內(nèi)存控制器
    2:控制器隨即訪問數(shù)據(jù),選擇指定的模塊(module)k
    3:k模塊將地址A轉(zhuǎn)化成(i绊寻,j)形式花墩。
    (i為行row悬秉,j為列column)
    4:將8個DRAM芯片,都訪問其(i,j)冰蘑,得到8個字節(jié)(8位)和泌,依次組成64位。
    具體從單個DRAM芯片中得到字節(jié)的方式祠肥,如下圖2武氓。


    1

    2

    3

  • 增強的DRAM:
    主要在傳統(tǒng)結(jié)構(gòu)上,進行優(yōu)化仇箱,而得到一系列的改進結(jié)構(gòu)县恕。
    依性能排序為:
    1-快頁模式: FPM DRAM
    (Fast Page Mode)
    2-拓展數(shù)據(jù)輸出: EDO DRAM
    (Extended Data Out)
    3-同步DRAM: SDRAM
    (Synchronous同步)
    4-雙倍數(shù)據(jù)速率同步DRAM: DDR SDRAM
    (Double Data-Rate):
    根據(jù)預(yù)取緩沖區(qū)大小劃分: DDR1 DDR2 DDR3。

  • 非易失性存儲器:
    DRAM和SRAM剂桥,如果斷電就會丟失信息忠烛。從這方面來說,屬于易失的(volatile)权逗。
    而非易失性存儲器美尸,即使斷電之后,仍然可以存儲信息斟薇。
    他們整體上都被成為只讀存儲器ROM(Read Only Memory)师坎。
    ROM設(shè)備中,有基本的程序:固件堪滨,用來翻譯cpu的輸入輸出請求胯陋。
    以可重寫次數(shù)和重寫機制分為:
    1:PROM(programmable)
    存儲單元有熔絲,可以用高電流熔斷一次袱箱。
    2:EPROM(erasable programmable)
    利用了光學(xué)物理設(shè)備進行寫入遏乔,清零是用紫外線照射存儲單元。
    可擦除重編程次數(shù):1000數(shù)量級犯眠。
    3:EEPROM(electrically erasable)
    類似EPROM按灶,但不需要格外物理設(shè)備症革,而是在電路卡上編程筐咧。
    可擦除編程數(shù):10 0000數(shù)量級。
    閃存(flash memory)便是基于EEPROM結(jié)構(gòu)噪矛。
    及基于閃存的固態(tài)硬盤量蕊。

訪問主存的方式:

cpu和主存連接方式:
cpu--總線接口--系統(tǒng)總線--I/O橋--內(nèi)存總線--主存
(I/O橋連接了I/O總線,由磁盤艇挨,顯卡等共享)


整體流程

movq A,%rax 示例
  • 磁盤:
    磁盤結(jié)構(gòu):由盤片残炮、面、磁道缩滨、扇區(qū)和傳動臂組成势就。
    磁盤封裝了一個固件:磁盤控制器泉瞻,用以將實際地址轉(zhuǎn)化成連續(xù)的邏輯塊

磁盤結(jié)構(gòu)

訪問磁盤:
每一個邏輯塊苞冯,會被翻譯成:(盤片袖牙,磁道,扇區(qū))三元組舅锄,對應(yīng)唯一物理扇區(qū)鞭达。
讀取時,讀寫頭會將數(shù)據(jù)保存在控制器的緩沖區(qū)里皇忿,然后復(fù)制到內(nèi)存中畴蹭。

訪問磁盤時間分為三個階段:

1:尋道,將傳動臂移到指定磁道鳍烁。
時間平均通常為3-9ms叨襟。

2:旋轉(zhuǎn),磁盤轉(zhuǎn)到指定的扇區(qū)幔荒。
Tmax=(1/RPM) //以m為單位要乘以60
Tavg=1/2 * Tmax

3:讀寫芹啥,對扇區(qū)(指定為512個字節(jié))進行讀寫。
用每轉(zhuǎn)耗時铺峭,除以扇區(qū)數(shù)墓怀。
T=Tmax / 扇區(qū)數(shù)。



連接I/O設(shè)備:

說明:系統(tǒng)總線和內(nèi)存總線都與cpu相關(guān)卫键,
而I/O總線與CPU無關(guān)傀履。
如intel的外部設(shè)備互連PCI總線,其連接了磁盤莉炉、顯卡钓账、鍵盤、鼠標絮宁、USB(通用串行總線)梆暮。
PCI(Peripheral Component Interconnect )。
下圖為CPU绍昂,內(nèi)存啦粹,I/O設(shè)備簡單抽象連接圖:



  • 訪問磁盤:

CPU使用:內(nèi)存映射I/O 技術(shù)來向I/O發(fā)射命令。
下圖說明:
a.cpu發(fā)出三次指令:
1 命令:讀窘游。及其他參數(shù)如是否中斷指令唠椭。
2 磁盤的邏輯塊地址。
3 讀出放到某個內(nèi)存地址忍饰。
b.磁盤控制器接受命令贪嫂,并讀取定邏輯塊,將值傳送到內(nèi)存艾蓝。
此步驟不需要CPU參與力崇,稱為DMA(直接內(nèi)存訪問)斗塘。
c.當(dāng)內(nèi)容安全存儲到主存上后,磁盤控制器會發(fā)生給cpu一個中斷信號亮靴,來通知cpu逛拱。


  • 固態(tài)硬盤SSD:
    (Solid State Disk)
    與磁盤區(qū)別:
    1:底層硬件為閃存而非磁盤,閃存分為b個塊台猴,每個塊內(nèi)又有一定數(shù)量的頁朽合,頁內(nèi)存放512~4k個字節(jié)。
    2:以閃存翻譯器(控制器)代替磁盤控制器饱狂。

說明:閃存讀取比寫入快曹步,因為:

1:必須已經(jīng)格式化即擦除的塊,才能在頁寫入數(shù)據(jù)休讳。擦除塊需要1ms左右時間讲婚。
但塊進行一次擦除,其內(nèi)頁不需要擦除即可寫入一次俊柔。

2:寫入位置若已有數(shù)據(jù)筹麸,則需要將整個塊的有用數(shù)據(jù)全部拷貝到已經(jīng)被擦除的塊,才能再進行寫入雏婶。

下面是閃存的結(jié)構(gòu)示意圖和速度指標:
(IOPS是每秒I/O次數(shù))

抽象結(jié)構(gòu)

各項數(shù)值

近年cpu與各存儲器性能物赶、價格示意圖:



存儲器層次結(jié)構(gòu):

(memory hierarchy)

  • 原則:基于緩存思想
    根據(jù)局部性(locality)思想,緩存可以作為實現(xiàn)的橋梁留晚。
    如:
  • 空間局部性:如數(shù)組酵紫,以步長1訪問(每次索引加一),具有良好的空間局部性错维。
    此時若高速緩存不命中奖地,而下一層命中。則會提取包含多個元素的一整塊赋焕,到高速緩存参歹。因而下次訪問的時間也會大大縮減。
  • 時間局部性:頻繁地訪問某元素隆判。
    高速緩存可以保存該元素在高層次中犬庇,相比每次從內(nèi)存提取,能大大提高速度蜜氨。

越靠近cpu械筛,緩存容量越小,速度越快飒炎,價格越貴。


存儲器層次結(jié)構(gòu)

  • 對于任意兩層緩存(k,k+1)之間:

傳輸方式:以塊進行傳輸笆豁。
在指定兩層郎汪,塊大小相同赤赊。而層次結(jié)構(gòu)里,越高煞赢,則塊的大小越小抛计。

  • 緩存命中與不命中:(讀取)
    緩存命中(cache hit):當(dāng)需要的數(shù)據(jù)照筑,在k層的塊內(nèi)時吹截,緩存命中。
    緩存不命中(cache miss):當(dāng)需要的數(shù)據(jù)凝危,在k層找不到波俄,此時緩存不命中,會到k+1層尋找蛾默。


    緩存原理

不命中的種類:
①冷不命中(cold miss):k層是空的懦铺,
②容量不命中(capacity miss):如程序中,需反復(fù)訪問同一數(shù)組的元素支鸡,此時緩存太小冬念,不能夠處理這個工作集。
③沖突不命中(conflict miss):緩存足夠牧挣,但是k層中的某塊地址急前,被k+1層以某種規(guī)則映射,即兩個塊都會映射到同一個地方瀑构。
如規(guī)則為mod 4時:程序反復(fù)需要塊0叔汁,塊4。
1:先請求塊0检碗,此時k層沒有据块,從k+1層取出放在k層指定位置,并取出元素返回給cpu折剃。
2:cpu又請求塊4另假,又會不命中從下一層調(diào),然后保存并返回值怕犁,此時又覆蓋了塊0边篮。
3:cpu又請求塊0,又會不命中奏甫。這就是沖突不命中戈轿。


  • 緩存管理:
    可以由軟件、硬件阵子、或者兩者結(jié)合思杯,如下圖

  • SRAM高速緩存結(jié)構(gòu)示意圖:
    cpu發(fā)出的地址的,高速緩存是如何翻譯挠进,并判斷出指定地址的?
  • 高速緩存采壬(S,E,B,m)結(jié)構(gòu):
    S:高速緩存內(nèi)部分為S個組(0誊册,S-1)。
    E:每個組內(nèi)部又有E個行暖璧。
    B:每個行包括:1個有效位案怯,t個標記位,一個塊(B個字節(jié)澎办,可以理解為字節(jié)數(shù)組)
  • 與地址的對應(yīng):
    傳入地址為:t個標記位嘲碱,s個組數(shù)位,b個偏移位局蚀。
    t標記位一一對應(yīng)麦锯;
    s個數(shù)組位指出指定組——共S=2^s個組;
    b位指出字節(jié)偏移位——共B=2^b個字節(jié)至会。
    如下圖:


高速緩存實現(xiàn):
以下模型均假設(shè)內(nèi)存和cpu間离咐,只有一個L1高速緩存。

  • 直接映射高速緩存:
    最簡單模型奉件。E為1宵蛀,即每組一行。
    步驟①:由s位找到指定組县貌。
    步驟②:訪問唯一行的有效位术陶。
    步驟③-1:有效位為1,匹配標志位t煤痕,若相等梧宫,由b在塊中,找到偏移位摆碉,取出指定數(shù)量字節(jié)塘匣,返回給cpu。
    步驟③-2:有效位為0巷帝,則訪問內(nèi)存忌卤,從內(nèi)存得到一個數(shù)據(jù)塊,將其放到指定組楞泼,取出字驰徊,返回給cpu。


    直接映射抽象流程
  • E路相聯(lián)高速緩存:
    每組有E行堕阔。
    步驟與直接映射類似棍厂,找到組后,對每一行進行遍歷超陆,命中則返回值牺弹,否則訪問內(nèi)存。


    2路相聯(lián)高速緩存
  • 全相聯(lián)高速緩存:
    僅有一組,包含了C/B行例驹,C為容量(僅包含塊數(shù)據(jù)捐韩,不包含標志位和有效位)退唠。


    全相聯(lián)高速緩存

ps:為什么用中間位當(dāng)做s組索引?↓



寫命中與不命中:

  • 寫命中會執(zhí)行:
    直寫:當(dāng)某層寫命中后鹃锈,會更新塊內(nèi)指定內(nèi)容,然后往更低層繼續(xù)寫瞧预。
    寫回:當(dāng)某層命中后屎债,也會更新寫入到塊內(nèi),但是不會直接寫入更低層垢油,除非該行會被替換時盆驹。(需要附加硬件判斷該行是否被修改過。)
  • 寫不命中會執(zhí)行:
    寫分配:從更低層讀入塊滩愁,然后更新塊內(nèi)內(nèi)容躯喇。
    非寫分配:直接寫入到更低層肛度,而不對該層進行修改更新施无。
    說明:
    寫回和寫分配洋侨,都更利于局部性實現(xiàn)请琳,但會需要格外硬件扁誓,使要替換驅(qū)逐該行時放吩,會將該行復(fù)制更新到更低層中乍炉。

  • cpu與高速緩存


    三層cache封裝到cpu中

    層次結(jié)構(gòu)

    影響參數(shù)

    ps:存儲器山的實驗替饿,暫時沒進行责球,以后可以看csapp家庭作業(yè)焦履,山的代碼已經(jīng)下載到OSstudy/soft里了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雏逾,一起剝皮案震驚了整個濱河市嘉裤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栖博,老刑警劉巖屑宠,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笛匙,居然都是意外死亡侨把,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門妹孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秋柄,“玉大人,你說我怎么就攤上這事蠢正『П剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笨触。 經(jīng)常有香客問我懦傍,道長,這世上最難降的妖魔是什么芦劣? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任粗俱,我火速辦了婚禮,結(jié)果婚禮上虚吟,老公的妹妹穿的比我還像新娘寸认。我一直安慰自己,他們只是感情好串慰,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布偏塞。 她就那樣靜靜地躺著,像睡著了一般邦鲫。 火紅的嫁衣襯著肌膚如雪灸叼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天庆捺,我揣著相機與錄音古今,去河邊找鬼。 笑死疼燥,一個胖子當(dāng)著我的面吹牛沧卢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醉者,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼但狭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撬即?” 一聲冷哼從身側(cè)響起立磁,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剥槐,沒想到半個月后唱歧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡粒竖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年颅崩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕊苗。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡沿后,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朽砰,到底是詐尸還是另有隱情尖滚,我是刑警寧澤喉刘,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站漆弄,受9級特大地震影響睦裳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撼唾,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一廉邑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧券坞,春花似錦鬓催、人聲如沸肺素。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倍靡。三九已至猴伶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塌西,已是汗流浹背他挎。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捡需,地道東北人办桨。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像站辉,于是被迫代替她去往敵國和親呢撞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356