第六章 存儲器層次結構
6.1 存儲技術
6.1.1 随機通路存儲器(RAM)
一、靜态RAM(SRAM)
SRAM将每個位存儲在一個雙穩态的存儲器單元裡,每個單元使用一個六半導體電路來實作的,這個電路可以無限期保持在兩個不同的電壓配置或狀态之一,其他任何狀态都是不穩定的,從不穩定狀态開始,電路會迅速的轉移到兩個穩定狀态中的一個。
由于SRAM存儲單元的雙穩定特性,隻要有電,它就會永遠保持它的值,即使有幹擾,幹擾消除時,電路就會恢複到穩定值。
二、動态RAM(DRAM)
DRAMA将每個位存儲為對一個電容的充電。這個電容非常小。DRAM存儲器可以制造的非常密集——每個單元由一個電容和一個通路半導體組成。
DRAM與SRAM不同,DRAM存儲器單元對幹擾非常敏感,當電容的電壓被擾亂後,它就永遠也不會恢複了,暴露在光線下會使電容電壓改變。
很多原因會導緻漏電,是以存儲器系統必須周期性的通過讀出,然後重寫來重新整理存儲器的每一位。

三、傳統的DRAM
DRAM晶片中的單元(位)被分成d個超單元,每個超單元都由w個DRAM單元組成,一個d×w的DRAM總共存儲了dw位資訊。超單元被組織成一個r行c列的長方形陣列,這裡rc=d,每個超單元有形如(i,j)的位址,i表示行,j表示列。
資訊通過成為引腳的外部連接配接器流入和流出晶片,每個引腳攜帶一個1位的信号。
每個DRAM晶片被連接配接到某個成為存儲控制器的電路,這個電路可以一次傳送w位到每個DRAM晶片或者一次從每個DRAM晶片傳出w位。為了讀出超單元(i,j)的内容,存儲控制器将行位址i發動到DRAM,DRAM将行i的整個内容拷貝到一個内部行緩沖區,然後存儲控制器發送列位址j,DRAM從行緩沖區拷貝出超單元(i,j)中的8位,并把它們發送到存儲控制器。
DRAM為二維陣列而不是現行數組的一個原因是降低晶片上位址引腳的數量,二維陣列的缺點是必須分兩步發送位址,這增加了通路時間。
四、存儲器子產品
DRAM晶片包裝在存儲器子產品中,它是插到主機闆的擴充槽上的,常見的包裝:(1)168個引腳的雙列直插存儲器子產品(DIMM),它以64位為塊傳送資料到存儲控制器和從存儲控制器傳出資料;(2)72個引腳的單列直插存儲器子產品(SIMM),以32位為塊傳送資料。
五、增強的DRAM
1、快頁模式DRAM(FPM DRAM):允許對同一行進行連續的通路可以直接從行緩沖區得到服務。
2、擴充資料輸出DRAM(EDO DRAM):允許FPM DRAM單獨的CAS信号在時間上靠得緊一些。
3、同步DRAM(SDRAM)
4、雙倍資料速率同步DRAM(DDR SDRAM)
5、Rambus DRAM
6、視訊RAM
六、非易失性存儲器
如果斷電,DRAM&SRAM會丢失資訊,從這個意義上說,它們是易失的,非易失性存儲器即使關電後,也仍然儲存着它們的資訊,整體上都成為隻讀存儲器(ROM)
PROM(可程式設計ROM)隻能被程式設計一次。
可擦寫可程式設計ROM(EPROM)被擦除和重程式設計的次數數量級可以達到1000次,電子可擦除PROM(EEPROM)可被程式設計次數的數量級可達到105次
閃存:基于EEPROM,提供快速而持久的非易失性存儲。
存儲在ROM裝置中的程式通常稱為固件,當一個計算機系統通電後,它會運作存儲在ROM中的固件,一些系統在固件中提供了少量基本的輸入和輸出函數。
七、通路主存
資料流通過稱為總線的共享電子電路在處理器和DRAM主存之間來來回回,每次CPU和主存之間的資料傳送都是通過一系列步驟來完成的,這些步驟統稱為總線事務。讀事務從主存傳送資料到CPU,寫事務從CPU傳送資料到主存。
總線是一組并行的導線,能攜帶位址、資料和控制信号。取決于總線的設計,資料和位址信号可以共享同一組導線,也可以使用不同的。
6.1.2 磁盤存儲
一、磁盤構造
磁盤由盤面構成,每個盤面有兩面或稱為表面,表面覆寫着磁性記錄材料,盤面中央有一個可以旋轉的主軸,使盤片以固定的旋轉速率旋轉,通常是5400~15000轉每分鐘。磁盤通常包含一個或者多個這樣的盤片,并封裝在一個密封的容器内。
磁盤的每個表面是由一組稱為磁道的同心圓組成的,每個磁道被劃分為一組扇區,每個扇區包含相等數量的資料位,這些資料編碼在扇區上的磁性材料中。扇區之間由一些間隙隔開,間隙中不存儲資料位,間隙存儲用來辨別扇區的格式化位。
磁盤是由一個或者多個疊放在一起的盤片組成的,它們被封裝在一個密封的包裝裡,這個裝置通常稱為磁盤驅動器,簡稱磁盤,有時也稱磁盤為旋轉磁盤,與基于閃存的固态硬碟相區分。
柱面是所有盤面表面上到主軸中心的距離相等的磁道的集合。
二、磁盤容量
一個磁盤上可以記錄的最大位數稱為它的最大容量,磁盤容量由以下技術因素決定:
1、記錄密度
2、磁道密度
3、面密度
現代大容量磁盤使用多區記錄技術,柱面的集合被分割成不相交的子集合,稱為記錄區。
三、磁盤操作
磁盤用讀/寫頭來讀寫存儲在磁盤表面的位,讀寫頭連接配接到一個傳動臂一端,通過沿半徑周前後移動這個傳送臂,驅動器可以将讀/寫頭定位在盤面上的任何磁道上,這樣的機械運動稱為尋道。一旦讀/寫頭定位到了期望的磁道上,那麼當磁道上的每個位通過它的下面時,讀/寫頭可以感覺到這個位的值,也可以修改這個位的值。有多個盤片的磁盤針對每個盤片都有一個獨立的讀/寫頭,讀/寫頭垂直排列,一緻行動,任何時刻,所有的讀/寫頭都位于同一個柱面上。
磁盤以扇區大小的塊來讀寫資料,對扇區的通路時間主要有以下三個部分:
1、尋道時間:傳動臂将讀/寫頭定位到包含目标扇區的磁道上所需的時間。依賴于讀/寫頭目前的位置和傳送臂在盤面上移動的速度。
2、旋轉時間:等待目标扇區第一個位選轉到讀/寫頭下的時間。依賴于讀/寫頭到達目标磁道時盤面的位置和磁盤的旋轉速度。
3、傳送時間:依賴于旋轉速度和每條磁道的扇區數目。
四、磁盤控制塊
作業系統發送指令道磁盤控制器,控制器上的固件執行一個快速表查找,将一個邏輯塊号翻譯成(盤面,磁道,扇區)的三元組,這個三元組唯一的辨別了對應的實體扇區,控制器上的硬體解釋這個三元組,将讀/寫頭移動到适當的柱面,進行磁盤操作。
五、連接配接到I/O裝置
6.1.3 固态硬碟
固态硬碟SSD:基于閃存的存儲技術。
和旋轉磁盤對比:随機通路時間比旋轉磁盤快,能耗更低,更易磨損。
6.2 局限性
局部性原理:時間局部性,空間局部性。
順序引用模式(步長為1的引用模式):順序通路一個向量的每個元素。是程式中空間局部性常見和重要的來源。
步長為k的引用模式:一個連續向量中,每隔k個元素進行通路,随k增加,空間局部性下降。
雙重嵌套循環按照行優先順序讀數組的元素。
一些原則:
重複引用同一個變量的程式具有良好的時間局部性。
對于取指令來說,循環有好的時間和空間局部性。循環體越小,循環疊代次數越多,局部性越好。
6.3 存儲器層次結構
6.3.1 存儲器層次結構中的緩存
使用高速緩存的過程稱為緩存。
存儲器層次結構的中心思想:對于每個k,位于k層的更小更快的儲存設備作為位于k+1層的更大更慢儲存設備的緩存。即層次結構中的每一層都緩存來自較低一層的資料對象。
k+1層的存儲器被劃分成連續的資料對象片,稱為塊,每個塊都有唯一的位址或名字,塊的大小可以是固定的也可以是可變的。
第k層的存儲器被劃分成較少的塊的集合,每個塊的大小和k+1層的塊的大小一樣。在任何時刻,k層的緩存包含k+1層塊的一個子集的拷貝。
資料總是以塊大小為傳送單元在k和k+1層之間來回拷貝,在層次結構中任何一對相鄰的層次之間塊的大小是固定的,但是其他層次對之間可以有不同的塊大小,一般而言,層次結構中較低層的裝置通路時間較長,傾向于用較大的塊。
一、緩存命中
若程式需要k+1層中的某個塊的資料d,通路k層時發現剛好這個塊緩存在k層,稱為緩存命中。
二、緩存不命中
若k層沒有需要的緩存資料對象d,就是緩存不命中,發生緩存不命中時,k層的緩存從k+1層取出包含d的塊,若k層緩存已滿,可能會覆寫現存的一個塊。
覆寫一個現存的塊的過程稱為替換或驅逐這個塊,被驅逐的塊也稱犧牲塊。
決定該替換哪個塊由緩存的替換政策來控制。
三、緩存不命中的種類
冷不命中:空緩存
硬體緩存通常使用的放置政策:将k+1層的某個塊限制放置在k層塊的一個小子集中(如圖6-24中,k+1層的塊i放置在k層的imod4塊中)
沖突不命中:要找k+1層的塊映射到k層的同一個塊上。
程式通常是按照一系列階段(如循環)來運作的,每個階段通路緩存塊的某個相對穩定不變的集合,這個塊的集合稱為這個階段的工作集,當工作集的大小超過緩存的大小時,緩存會經曆容量不命中。(緩存太小無法處理這個工作集)
四、緩存管理
管理緩存的劃分成塊,不同的層之間傳送塊,判斷命中或者不命中并處理。
6.4 高速緩存存儲器
6.4.1 通用的高速緩存存儲器結構
一個計算機系統,每個存儲器位址有m位,形成M=2m個不同的位址,這樣一個機器的高速緩存被組織成一個有S=2s個高速緩存組的數組,每個組包含E個高速緩存行,每個行由一個B=2b位元組的資料塊組成,一個有效位指明這個行是否包含有意義的資訊,還有t=m-(b+s)個标記位,它們唯一的辨別存儲在這個高速緩存行中的塊。
6.4.2 直接映射高速緩存
每個組織有一行(E=1)的高速緩存稱為直接映射高速緩存。
高速緩存确定一個請求是否命中然後抽取被被請求的字的過程:組選擇,行比對,字抽取
1、組選擇:
從w的位址中間抽取出s個組索引位。
2、行比對:
确定是否有字w的一個拷貝存儲在組i包含的一個高速緩存行中:設定了有效位且高速緩存行中的标記與w的位址中的标記相比對。
3、字選擇:
塊偏移位提供所需要的字的第一個位元組的偏移。
4、直接映射高速緩存不命中時的行替換:
用新取出的行替換目前的行。
5、運作中的直接映射高速緩存:
标記位和索引位連起來唯一的辨別了存儲器中的每個塊。
映射到同一個高速緩存組的塊由标記位唯一的辨別。
6、直接映射高速緩存中的沖突不命中:
抖動:高速緩存反複加載和驅逐相同的高速緩存塊的組。
修正:在每個數組的結尾放B位元組的填充。
6.4.3 組相聯高速緩存
1<E<C/B的高速緩存稱為E路組相聯高速緩存。
一、組選擇
組索引辨別組
二、行比對和字選擇
三、行替換
有空行替代空行
沒有空行:
随機替換
最不常使用政策
最近最少使用政策
6.4.4 全相聯高速緩存
包含所有高速緩存行的組
一、組選擇:
二、行比對和字選擇:
同組相聯高速緩存。
6.4.5 有關寫的問題
一、寫命中:
直寫:立即将w的高速緩存塊寫回到緊接着的低一層中。每次寫都會引起總線流量。
寫回:當替代算法要驅逐更新過的塊時,才寫到緊接着的低一層中。減少了總線流量,增加了複雜性,要有一個額外的修改位來表明這個高速緩存塊是否被修改過。
二、寫不命中:
寫配置設定:加載低一層的塊到高速緩存中,然後更新這個高速緩存塊。
非寫配置設定:直接把這個字寫到低一層中。
一般來說,直寫——非寫配置設定,寫回——寫配置設定。
6.4.6 高速緩存層次結構的解剖
隻儲存指令的高速緩存:i-cache 通常是隻讀的
隻儲存程式資料的高速緩存:d-cache
都儲存的高速緩存:統一的高速緩存
6.4.7 高速緩存參數的性能影響
一些名額:
不命中率:不命中數量/引用數量
命中率:1-不命中率
命中時間:從高速緩存傳送一個字到CPU所需的時間,包括組選擇、行确認、字選擇的時間
不命中懲罰:由于不命中所需要的額外的時間。
高速緩存大小的影響:
大——提高命中率,運作更慢,增加命中時間
塊大小的影響:
大——提高命中率,損害時間局限性比空間局限性更好的程式中的命中率,不命中懲罰時間更長
相聯度的影響:
E大——降低抖動可能性,成本高,運作慢,需要更多标記位,增加命中時間,增加不命中懲罰
寫政策的影響:
直寫:容易實作,能使用獨立于高速緩存的寫緩存區,讀不命中開銷沒那麼大
寫回:緩存引起的傳送較少,允許更多的到存儲器的帶寬用于執行DMA的I/O裝置。
高速緩存越往下層越會使用寫回。
參考資料
教材