第五章 大容量和高速度:開發存儲器層次結構
開始更新計算機組成與設計:硬件/軟件這一本書的筆記。這本書是理解計算機組成原理的經典書籍,也是很多考研自命題學校的參考書籍。
所以我決定帶着大家一起閱讀這本書。這本書一共六章,重點是前四章,其中最為精彩的是第四章,主要講解了處理器的基本概念以及設計方法。
- 第一章:計算機概要與技術,主要是對整個計算機組成有一個大概的了解。主要了解計算機系統結構中的8個偉大思想,程序概念以及硬件概念入門 ,以及對計算機性能的各種度量。
- 第二章:指令 計算機的語言。主要講解匯編語言以及機器語言的基本知識。
- 第三章:計算機的算術運算。主要了解計算機底層是如何完成加減乘除運算的。
- 第四章:處理器。主要講解處理器的內部實現以及工作原理。
- 第五章 主要了解存儲技術以及Cache的基本原理。
本書我將從第五章開始整理復習
存儲器技術
這是計算機組成與設計:軟硬件接口的第五章筆記。在這一章中,我們將進入存儲器的世界,去探究存儲器內部的工作原理。
在第五章我們將會學習存儲器技術和Cache的基本原理。
引入
在正式介紹存儲器技術之前,我們引入一個例子來幫助大家對於存儲器的理解。
想象你正坐在圖書館中完成一份關於計算機硬件重要歷史性發展的論文,你可以從圖書館的書架上精心挑選一些經典的計算機書籍,並將它們放在書桌上。你從這些書中找到了需要寫的幾種重要的計算機,但是沒有找到關於EDSAC的,因此,你返回書架去尋找其他書,並在早期的英國計算機書籍中找到了一本有關EDSAC的書。一旦在你的書桌上有了選好的一些書,你就有可能從這些書中找到你需要的內容。這樣一來,你的大部分時間只需花在閱讀這些書上,而無需返回書架。
我們可以把上述例子中放在書桌上的書當作是存儲在Cache中的數據,將放在書架上的書當作是存儲在內存或其他存儲設備的數據。你也就是處理器想要完成一項任務的時候,會先檢查Cache中有沒有需要的數據,如果有,就立即返回給處理器;如果沒有,就會接着向更低級的存儲器中尋找,然后逐級返回。我們稱在Cache中找到數據為一次命中,命中率是在高層存儲器中找到目標數據的存儲訪問比例。而缺失就是沒有在Cache中找到需要的數據,缺失率是高層存儲器中沒有找到目標數據的存儲訪問比例。
而命中時間指的是訪問某存儲器層次結構所需要的時間,包括了判斷當前訪問時命中還是缺失所用的時間。
那么什么是高層存儲器,什么是低級存儲器呢?下面的圖說明了存儲器層次結構。
存儲器層次結構呈正金字塔形狀,最上層的L0是寄存器,接着L1~L3指的是處理器緩存Cache,現代處理器均具有三層Cache結構,接着是內存也稱為主存,最后是本地磁盤以及雲存儲。
有了以上的存儲器基本知識,我們開始介紹存儲器技術。
目前,構建存儲器層次結構主要有4種技術。
主存也就是內存由DRAM(動態隨機存取存儲器)實現,而Cache由SRAM(靜態隨機存取存儲器)實現。
DRAM每比特成本低於SRAM,但速度比SRAM慢。
第三種技術是閃存,第四種是磁盤。我們在接下來將依次詳細介紹這四種技術。
SRAM技術
SRAM是一種組織成存儲陣列結構的簡單集成電路。SRAM對任何數據的訪問時間都是固定的。為了防止讀操作時信息丟失,SRAM的一個基本存儲單元通常由6~8個晶體管組成。
SRAM的存儲單元具有雙穩態特性,所以只要一直通電就能夠一直保存數據。
DRAM技術
與SRAM技術相比,DRAM的原理是電容充電,DRAM每個比特位存儲對應一個電容和一個晶體管。而且DRAM對干擾十分敏感,當電容的電壓被擾亂之后就再也無法回到擾亂之前的狀態。
而且電容十分容易發生漏電,所以需要不斷刷新來保持數據的存在。
接下來我們來看一下DRAM的內部結構:
圖中展示了一個16×8的DRAM芯片,其中16表示的是超單元的個數,8表示每個超單元可以存儲8bit的數據。
通過這張圖 我們可以看到所有的超單元被組織成了一個4x4的陣列,每個超單元可以通過類似坐標的方式進行尋址 其中i表示行j表示列,整個DRAM芯片通過地址引腳和數據引腳與內存控制器相連。
簡單來講 內存控制器主要用來管理內存。
第一次聽到內存控制器的同學可能會感到困惑 可以通過一個通俗的例子來理解:
假如我們將數據比作書 內存就相當於是一個圖書館 而內存控制器可以看成圖書管理員。
例如 我們需要從DRAM芯片中讀出圖中所示的超單元
- 首先 內存控制器發送行地址2到DRAM芯片
- DRAM所做出的響應就是將整個第二行的內容全部復制到內部的行緩沖區域中
- 接下來 內存控制器發送列地址1到DRAM芯片
- DRAM對應的操作是從這個行緩沖區中復制出對應的數據位 並把它發送到內存控制器
看到這里 相信有很多同學會有這樣的疑問:
為什么要分兩次發送地址 這樣不是增加了訪問的時間嗎?
這是因為DRAM芯片的設計人員將存儲單元設計成了二維陣列 而不是線性數組,這樣設計的好處是可以降低芯片上地址引腳的數量。
不過 ,二維陣列的組織方式確實會增加數據訪問的時間。接下來 我們看一下采用DRAM芯片封裝成的內存模塊。
圖中展示了一個內存模塊的基本組成 這個模塊一共用了八個DRAM芯片,分別用編號0-7來表示。每個DRAM芯片的大小是8×8=64bit也就是8MB個字節.因此 整個內存模塊的大小為64MB
在剛才我們提到,每個超單元可以存儲8bit的數據,那么對於8字節也就是64bit的數據,就需要八個超單元來存儲。
不過,這八個超單元並不在同一個DRAM芯片上,而是平均分布在8個DRAM芯片上。其中\(DRAM_0\)存儲第8位\(DRAM_1\)存儲下一個字節,以此類推 \(DRAM_7\)存儲最高八位。
當處理器向內存控制器發起讀數據的請求時,內存控制器將地址轉換成超單元地址,然后把它發送到內存模塊,然后 內存模塊再將行地址i和列地址j廣播到每個DRAM,每個DRAM都會輸出它對應的超單元的數據。
最終 內存模塊將所有的超單元合並成一個64bit的數據返回給內存控制器。
在實際生活中,處理器處理數據的速度與內存處理數據的差距已經越來越大,為了跟上迅速發展的處理器的速度 市場上會定期推出新的DRAM,這些DRAM都是基於傳統的DRAM單元 然后進行一些優化。
圖中就是我們經常能看到的幾種內存類型。
接下來我們介紹第三種技術,閃存技術。
閃存技術
閃存是一種電可擦除的可編程只讀存儲器。閃存是存在損耗的,為了應對閃存的不斷損耗,大多數閃存產品中都存在一個控制器,用來將寫操作從已經寫入很多次的塊中映射到寫入次數較少的快中,從而使寫操作盡量分散。這種技術被稱為損耗均衡。
閃存廣泛運用於我們如今十分常見的固態硬盤中。
最后一種技術是磁盤存儲器。
磁盤技術
一個磁制磁盤包含一組圓形磁盤片,它們繞着軸心每分鍾轉動5400~15000周。為了對硬盤上的信息進行讀寫,每層的表面有一個包含小的電磁線圈的讀寫磁頭。
每個磁盤表面划分為同心圓盤,稱為磁道(tracks)。每個面通常有幾萬條磁道,每條磁道同樣被划分為存儲信息的扇區(sector)。
每個扇區的容量通常是512~4096字節。信息在磁介質上保存的順序為扇區號、一個間隙、包含該扇區糾錯碼的信息、一個間隙、下一個扇區的扇區號。
為了訪問數據,操作系統必須對磁盤進行三步操作。
- 將磁頭移動到適當的磁道之上,被稱為尋道
- 等待訪問的扇區轉動到讀寫頭下面
- 傳輸數據
在操作系統視角下,磁盤被抽象為一個個 邏輯塊序列,每個邏輯塊的大小與磁盤扇區的容量是一致的 都是512個字節。
磁盤內部有一個小的固件設備 稱為磁盤控制器。它維護着邏輯塊與實際磁盤扇區之間的映射關系。當操作系統執行從硬盤讀取數據到內存時,操作系統會發送一個命令到磁盤控制器。
這個命令就是讓磁盤控制器讀取特定邏輯塊號的數據。可以使用盤面、磁道、扇區這樣的一個三元組來唯一標識每個物理扇區。接下來,控制器會根據這個三元組的信息來執行移動讀寫頭以及旋轉盤面的操作。然后 讀寫頭會把讀到的數據放到一個緩沖區中,最后將目標數據復制到內存里。
以上就是四種存儲器技術的全部內容,接下來我們將開始學習Cache的基本原理。