深入理解計算機系統(csapp)閱讀筆記——第六章存儲器層次結構

1.存儲技術

  • 計算機程序一個稱爲局部性的基本屬性。具有良好局部性的程序傾向於一次又一次地訪問相同的數據項集合,或是傾向於訪問鄰近的數據項集合。具有良好局部性的程序比局部性差的程序更多地傾向於從存儲器層次結構中較高層次處訪問數據項。

(1)隨機訪問存儲器

  • 隨機訪問存儲器分爲兩類:靜態的和動態的。靜態RAM比動態RAM更快,但也貴很多。SRAM用來作爲高速緩存存儲器,既可以在CPU芯片上,也可以在片下。DRAM用來作爲主存以及圖形系統的幀緩衝區
  • SRAM與DRAM的特性:
    在這裏插入圖片描述
    只要用供電,SRAM就會保持不變,與DRAM不同,它不需要刷新。SRAM的存取比DRAM快。SRAM對諸如光和電噪聲這樣的干擾不敏感。
  • 傳統的DRAM
    在這裏插入圖片描述
    在這裏插入圖片描述
    舉個例子:
    在這裏插入圖片描述
  • DRAM芯片封裝在內存模塊中。Corei7系統使用的240個引腳的雙列直插內存模塊,它以64位塊傳送數據到內存控制器和從內存控制器傳出數據
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 增強的DRAM:
    在這裏插入圖片描述
    在這裏插入圖片描述

(2)非易失性存儲器

如果斷電,DRAM和SRAM會丟失它們的信息,從這個意義上說,它們是易失的。從而有非易失存儲器ROM。它即使是在關電後,仍然保存着它們的信息。ROM是以它們能夠被重編程(寫)的次數和對它們進行重編程所用的機制來區分的。

  • PROM只能被編程一次,每個存儲器單元有一種熔絲,只能用高電流熔斷一次
  • 可擦寫可編程EPROM可編程的次數的數量級可以達到105次。
  • 閃存(flashmemory)基於EEPROM
  • 存儲在ROM設備中的程序通常被稱爲固件(firmware)。當一個計算機系統通電以後,它會運行存儲在ROM中的固件

(3)訪問主存

  • 數據流通過稱爲總線的共享電子電路在處理器和DRAM主存之間來來回回。每次CPU和主存之間的數據傳送都是通過一系列步驟完成的,這些步驟稱爲總線事務。讀事務從主存傳送數據到CPU。寫事務從CPU傳送數據到內存。
  • 總線是一組並行的導線,能攜帶地址、數據和控制信號。取決於總線的設計,數據和地址信號可以共享同一組導線,也可以使用不同的。同時,兩個以上的設備也能共享同一總線。控制線攜帶的信號會同步事務,並標識出當前正在被執行的事務的類型。
    在這裏插入圖片描述
    舉個例子:movq A,%rax 在這裏插入圖片描述

(4)磁盤存儲

  • 磁盤是廣爲應用的保存大量數據的存儲設備,存儲數據的數量級可以達到幾百和幾千兆字節,而基於RAM的存儲器只能有幾百或幾千兆字節。不過,從磁盤上讀信息的時間爲毫秒級,比從DRAM讀慢了10萬倍,比從SRAM堵慢了100萬倍
① 磁盤構造
  • 磁盤是由盤片構成的。每個盤片有兩面或者稱爲表面。盤片中央有一個可以旋轉的主軸。磁盤通常包含一個或多個這樣的盤片,並封裝在一個密封的容器內。
  • 磁盤表面的結構
    在這裏插入圖片描述
    每個表面是由一組稱爲磁道的同心圓組成的,每個磁道被劃分爲一組扇區。每個扇區包含相等數量的數據位(通常是512字節)扇區之間有一些間隙(gap)分隔開,這些間隙中不存儲數據位。間隙存儲用來標識扇區的格式化位
  • 磁盤是由一個或多個疊放在一起的盤片組成的, 它們被封裝在一個密封的包裝裏,整個裝置被稱爲磁盤驅動器。
  • 柱面:所有盤片表面上到主軸中心的距離相等的磁道的集合
② 磁盤容量
  • 一個磁盤上可以記錄的最大位數稱爲它的最大容量,或者簡稱爲容量。
  • 磁盤容量的相關因素:
    • 記錄密度(位/英寸):磁盤一英寸的段中可以放入的位數
    • 磁道密度(道/英寸):從盤面中心出發半徑上一英寸的段內可以有的磁道數
    • 面密度(位/平方英寸):記錄密度與磁道密度的乘積·
  • 磁盤容量的計算公式:
    在這裏插入圖片描述
③ 磁盤操作
  • 磁盤的動態特性
    在這裏插入圖片描述
  • 對扇區的訪問時間:尋道時間+旋轉時間+傳送時間
    • 尋道時間:爲了讀取某個目標扇區的內容,傳動臂首先將讀/寫頭定位到包含目標扇區的磁道上,通常爲3~9ms
    • 旋轉時間:一旦讀/寫頭定位到了期望的磁道,驅動器等待目標扇區的第一個位旋轉到讀/寫頭下。計算方法:
      在這裏插入圖片描述
    • 傳送時間:讀取數據的時間,通常爲轉動的速度乘以所在扇區的長度
  • 尋道時間和旋轉延遲大致相當,而傳送時間可忽略不計,所以簡單的可將尋到時間乘2獲得訪問時間

(5)連接I/O設備

  • 總線結構示例:
    在這裏插入圖片描述
    • 通用串行總線(Universal Serial Bus,USB)
    • 圖形卡(或適配器)
    • 主機總線適配器:將一個或多個磁盤連接到I/O總線。

(6)固態硬盤

  • 固態硬盤(Solid State Disk,SSD)是一種基於閃存的存儲技術。
    在這裏插入圖片描述
  • 讀SSD要比寫要快

2.局部性

  • 局部性原理:計算機傾向於引用鄰近與其他最近引用過的數據項的數據項,或者最近引用過的數據項本身。包括時間局部性和空間局部性:
    • 時間局部性:被引用過一次的內存位置很可能在不遠的將來再被多次引用。
    • 空間局部性:如果一個內存位置被引用了一次,那麼程序很可能在不遠的將來引用附近的一個內存位置
  • 步長爲1的引用模式是程序中空間局部性常見和重要的來源。一般而言,隨着步長的增加,空間局部性下降。
    例如:遍歷一個二維數組應該使用行遍歷而不是列遍歷,因爲一個二維數組在虛存中按照行順序存放的。

3.存儲器層次結構

在這裏插入圖片描述

  • 高速緩存(cache)是一個小而快速的存儲設備,它作爲存儲在更大、也更慢的設備中的數據對象的緩衝區域。使用高速緩存的過程稱爲緩存。
  • 存儲器層次結構的中心思想是:對於每個k,位於k層的更快更小的存儲設備作爲位於k+1層的更大更暗的存儲設備的緩存
    在這裏插入圖片描述
  • 緩存命中:當程序需要第k+1層的某個2數據對象d時,它首先在當前存儲在第k層的一個塊中查找d。如果d剛好緩存在第k層中,那麼就是我們所說的緩存命中了。
  • 緩存不命中:如果第k層中沒有緩存數據對象d,那麼就是我們所說的緩存不命中。當發生緩存不命中時,第k層的緩存從第k+1層緩存中取出包含d的那個快,如果第k層的緩存已經滿了,可能就會覆蓋現存的一個塊。
  • 一個空的緩存有時被稱爲冷緩存,此類不命中稱爲強制性不命中或冷不命中。冷不命中很重要,因爲它們通常是短暫的事件,不會在反覆訪問存儲器使得緩存暖身之後的穩定狀態中出現。
  • 緩存和局部性地關係:
    • 時間局部性:如果第一次訪問未命中則將其置入緩存,之後的訪問就能名字了
    • 空間局部性:緩存是一塊一塊的,一塊包括多個數據對象,如果接下來要訪問的數據對象還在該塊中,則直接命中。

4.高速緩存存儲器

  • L1高速緩存的訪問速度幾乎和寄存器一樣快,典型地大約4個時鐘週期
  • 高速緩存在CPU中
    在這裏插入圖片描述
  • 通用的高速緩存存儲器組織結構
    在這裏插入圖片描述
  • 根據每個組的高速緩存行數E,高速緩存被分爲不同的類:
    • 直接映射高速緩存:每個組1行
    • 組相聯高速緩存:大於等於1行

(1)直接映射高速緩存

  • 高速緩存確定一個請求是否被命中,然後抽取出被請求的字的過程,分爲三步:
    ①組選擇②行匹配③字抽取
  • 組選擇
    在這裏插入圖片描述
  • 行匹配和字選擇
    在這裏插入圖片描述
  • 直接映射高速緩存中的衝突不命中:當程序訪問大小爲2的冪的數組時,直接映射高速緩存中通常會發生衝突不命中。
    例如對於以下程序會發生抖動:即高速緩存反覆地加載和驅逐相同的高速緩存塊的組
    在這裏插入圖片描述
    發生抖動的原因主要是每組只有一行導致塊過大
    在這裏插入圖片描述

(2)組相聯高速緩存

  • 組向聯高速緩存中的組選擇:與直接映射高速緩存一樣
  • 組向聯高速緩存中的行匹配和字選擇
    我們可以把組向聯高速緩存中的每個組都看成是一個小的相聯存儲器,key是標記和有效位,而value就是塊的內容
    在這裏插入圖片描述

(3)全相聯高速緩存

  • 只有一個組
    在這裏插入圖片描述
  • 組選擇
    在這裏插入圖片描述
  • 行匹配和字選擇
    在這裏插入圖片描述

(4)高速緩存參數的性能影響

  • 衡量高速緩存的性能一些指標:
    • 不命中率:不命中數量/引用數量
    • 命中率:1-不命中率
    • 命中時間:從高速緩存傳送一個字到CPU所需的時間
    • 不命中處罰:由於不命中所需要的額外的時間。

(5)有關寫的問題

在這裏插入圖片描述

5.編寫高速緩存友好的代碼

  • 兩個確保代碼高速緩存友好的基本方法
    • 讓最常見的情況運行得快
    • 儘量減小每個循環內部的緩存不命中數量
  • 兩個確保代碼高速緩存友好的重要問題
    • 對局部變量的反覆引用是好的
    • 步長爲1的引用模式是好的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章