大家好,我是飛哥!
在馮諾依曼體系結構里,內存是除了CPU之外第二重要的設備。如果沒有內存,服務器將完全無法運行。在這一節中,我們來了解下內存的物理結構。如下圖的是一個 16 GB 的筆記本內存條實物的正面和反面圖。其中的每個黑色顆粒也叫一個 Chip。
注意下,在正面有著一串字符串標識16 GB 2R/*8 PC4-3200AA-SE1-11。在這段標識中,16 GB 很好理解,是內存的容量大小。那么后面的 2R*8 是什么意思呢?
實際上,內存標識第二段中的 2R*8 非常重要,它直接簡單清晰地把內存的物理結構給表示出來了。
接下來我們分兩個小節,深入地看看 Rank、位寬與內存顆粒的內部結構。
在內存中,其中每一個黑色的內存顆粒叫一個 Chip。所謂 Rank 指的是屬于同一個組的 Chip 的總和。這些 Chip 并行工作,共同組成組成一個 64 bit 的數據,供 CPU 來同時讀取。
CPU 的內存控制器能夠對同一個 rank 的 chip 進行讀寫操作。通常一個通道(channel)能夠同時讀寫 64bit 的數據(ECC 功能的是 72 bit)。
內存字符串標識中的 2 R 表示該內存有 2 個 Rank。
2 R 后面的 * 4 表示每個內存顆粒的位寬是 4 bit。因為 CPU 要同時讀寫 64 bit 的數據。所以
例如,下面的筆記本內存條,是 1 R * 16。表示的是該內存條只有 1 個 Rank。每個 Chip 內存顆粒的位寬是 16 bit。
而一個 Rank 需要提供 64 位的數據,則需要 64 / 16 = 4 個 Chip 來組成一個 Rank 來同步地工作。從實物圖中也確實可以看到,該內存條正反面加起來只有 4 個 Chip,
圖片
圖片
再比如,下面的筆記本內存條,是 2 R * 8。表示的是該內存條有 2 個 Rank,每個 Chip 內存顆粒的位寬是 8 bit。
一個 Rank 需要 64 / 8 = 8 個 Chip 來組成一個 Rank。則兩個 Rank 總共需要 16 個 Chip。從內存條的實物圖中看到,該內存條的正反面確實總共有 16 個 Chip。
圖片
圖片
一個內存是由若干個黑色的內存顆粒構成的。每一個內存顆粒叫做一個 chip。在每個 chip 內部,又是由一層層的 bank 組成的。
圖片
在每個 bank 內部,就是電容的行列矩陣結構了。
圖片
這個矩陣由多個方塊狀的元素構成,這個方塊元素是內存管理的最小單位,也叫內存顆粒位寬。在一個位寬中。有若干小電容。
值得注意的是,由于內存訪問太慢了。所以 CPU 每次向內存請求數據的時候,并不只是請求一個 64 bit 的數據就完事了,而是會請求更多的數據然后用自己的 L1、L2、L3等模塊緩存起來。下次如果訪問的數據位于緩存中的話,就可以不用再發起內存 IO 了。一次請求的數據大小是 64 * 8 bit = 64 字節,這也是一個 Cache Line 的大小。
對于內存來說,一次 Cache Line 64 字節的訪問屬于是一次 Burst IO,需要內存連續工作多次,輸出多個 64 字節。所以,內存在排列和組織二維矩陣結構的時候,會按方便 Burst IO 的方式來組織,實際二維矩陣單元中存儲的字節數會比位寬要大。
例如下面是一個美光(Megon)內存 Chip 的內部結構。
圖片
在該 Chip 中,總共有 8 個 bank,每個 bank 是一個 32768 行 * 128 列的二維矩陣,每個二維矩陣單元存儲的數據大小是 64 比特。
則該 Chip 總共可存儲的數據大小是 8 * 32768 * 128 * 64 = 2147483648 比特。換算成 MiB 2147483648 字節/(1024*1024*8) = 256 MiB
內存標識字符串中的第二段是非常重要的表示內存物理結構的標識。它清楚地寫明了當前內存條總共有幾個 Rank,每個 Chip 中的位寬是多少。進而也能推算出 1 個 Rank 中有多少個 Chip 組成。例如
至于每個 Chip 內存顆粒中有多少個二維矩陣元素,為了支持 Burst IO,也為了節約地址線數量。一般每個二維矩陣元素中存儲的數據要比位寬更大一些。
本文鏈接:http://www.tebozhan.com/showinfo-26-88346-0.html理解內存的Rank、位寬以及內存顆粒內部結構
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com