<style> .reveal .slides { text-align: left; font-size: 0.9em; } th,tr{ font-size: 0.75em; font-weight: normal !important; } </style> ## 你好阿大葛格,歡迎你來到 memory hierarchy ---- 你將會學到: 1. 資料存哪裡 2. 存取資料有多快 3. 能不能~~不要叫我撐10秒~~就變的更快 --- ## 揮發性記憶體 ---- ## SRAM (Static RAM) - 可以有兩個狀態, 0 或 1 (~~阿你這不是廢話~~) - 相對 DRAM 穩定,只要**持續通電**,即使遇到電流雜訊也不會輕易改變狀態 ---- ## SRAM 示意圖 這種穩定性有如倒置的鐘擺,即時有干擾 (搖動鐘擺之類的),他也不容易離開他維持的穩定狀態 ![Use Pendulum to describe the stability of SRAM](https://i.imgur.com/btA97hv.png) ---- ## DRAM (Dynamic RAM) 儲存原理 - 由電容組成 $\tiny\textsf{(電容大小大概}$ $\tiny{30 × 10^{−15}}$ $\tiny\textsf{farad,也就是很小)}$ - 把電存進去 => 1,裡面沒有電 => 0 - 電容約 10 ~ 100 ms後充進去的電就會釋放掉 - 金魚腦 - 資料會消失需要持續寫入 - 不穩定容易受干擾 *我本人的電路學與物理極爛,有說錯請糾正我,感恩* ---- ## DRAM 可能的疑問 - 資料好像很快就會消失這真的可以嘛? - CPU 運作的速度都是以奈秒 ($10^{-9}$秒) 為單位計算的 - 資料大概可以保持 $10^{-2}$ 到 $10^{-1}$ 秒 - 相對而言 DRAM 忘記資料的速度很慢 - 不穩定容易受干擾 - 透過儲存冗餘資料校正錯誤 (ECC Memory) - ~~放乖乖在電腦上祈求他不要出錯~~ ---- ## DRAM vs SRAM | | 每 bit 所需電晶體 | 相對存取速度 | 資料持久性? | 儲存敏感性? | 相對造價 | 應用場景| | -------- | -------- | -------- | -------- | -------- | -------- | --------| |SRAM | 6 | 1× | Yes | No | 1,000× | 快取記憶體 | | DRAM | 1 | 10× | No | Yes | 1× | 主記憶體、 frame buffer | - 為什麼要用 DRAM 這種不穩定的東西? - 因為SRAM 好貴,~~把拔買給我16GB的SRAM讓我當主記憶體用~~ ---- ## DRAM 的細部構造 - 數個 DRAM 的基本結構 (那些該死的電容) 組成一個 *supercell* - 舉例 8 個,這樣一個 *supercell* 可以儲存 1 byte = 8 bit - 眾多 *supercell* 以二維型式排列起來形成一個 DRAM Chip - 舉例 $4 \times 4$個 *supercell* 組成一個 DRAM Chip ![](https://i.imgur.com/qRhuZeA.png) ---- ## 存取 DRAM Chip - 以 $(i, j)$ 的 pair 來存取想要的 *supercell* 中的資料 - 一次取出的量就是一個 *supercell* 所可以儲存的量 - 以剛剛的舉例就是 1 byte - 存取時 column 與 row 共用同一個 bus 來描述 - 往這個 bus 先送 row 再送 column 就可以拿到資料 - DRAM 收到想要的 row 時,會把那個 row 的資料複製到 buffer 中 - 拿到 column 資料時取用 buffer 中第 column 個資料 ---- ## 圖勒 ![](https://i.imgur.com/8vHP388.png) ---- ## 2d 的設計也太怪? - 這樣可以大大減少 address 所使用的總線 - 但效率較低 ---- ## CPU <-> DRAM - 資料以 word 為大小傳輸 - x86_64 就是 64 bit - 每個 DRAM Chip 負責 8 個 bit - 64 bit = 8 個 DRAM Chip - 平行操作這些 chip *最後,剛剛講的這些是慣例,天知道哪天廠商會發明出了新的架構與運作方式* ---- ## DRAM 進化 還是老問題,可以變得更快嘛? - Fast page mode DRAM (FPM DRAM) - 連續取用同個 row 的資料時,不要重複複製 buffer 資料 - Extended data out DRAM (EDO DRAM) - 聚合多個 column 存取請求 (我沒看懂 QQ) ---- ## DRAM 的進化與變體 - Synchronous DRAM (SDRAM) - 以上兩種都是異步操作 - 同步操作 x 高速的 clock - Double Data-Rate Synchronous DRAM (DDR SDRAM) - 一個 clock 做很更多事? - Video RAM (VRAM) - 可以 concurrent 的讀寫 --- ## 非揮發性記憶體 ---- ## PROM - 僅能單次寫入 - 用電力鎔斷內部結構達成寫入 - 寫入不可逆 ---- ## EPROM - 可承受約 1000 次(擦除後)寫入 - 使用紫外光消除資料 - 需使用特殊設備寫入資料 ---- ## EEPROM - 約可承受 $10^5$ 次(擦除後)寫入 - 無需使用特殊設備就可以原地擦除資料 ---- ## Hard Disk Storage - 傳統機械式硬碟 - 這張圖解釋了所有東西,等等要記得回來看 ![](https://i.imgur.com/pzCsDYs.png) ---- ## HDD 構造 - Track 磁軌 - Platter 碟面 - Sector 磁區 - Heads 磁頭 以上所有的構造都被封裝在一個完全氣密的空間中 ---- ## Platter - 一個佈有磁性粒子的盤子 - 被 Cylinder(詞柱) 帶動高速旋轉 ---- ## Track - 分佈在 Platter 上 - 環形的磁性粒子 - 上面存有 Sector ---- ## Sector - 在 Track 中 - 真正用來儲存資料的地方 - sector 與 sector 之間有些空隙 *如果聽不懂,去看剛剛的圖,配著看* ---- ## Heads - 在 platter 上方飄移 - 與 platter 之間非常靠近 - 用來在 track 與 track 之間移動 - 具有製造磁場與感應磁場的機能 - 感應磁場 => 感應磁性分子的磁性 => 讀取資料 - 製造磁場 => 磁化磁性粒子 => 寫入資料 ---- ## HDD 的速度瓶頸 - 移動 heads - 等待 cylinder 把 platter 轉到想要的 sector 上 - 以 7200 RPM 的硬碟而言 存取資料的時間期望值大概是 13 ms - 想知道怎麼算出來的嘛?去看書吧 - 講起來好累 ---- ## SSD - 可以理解為 EEPROM 陣列 ![](https://i.imgur.com/fjR4ZBq.png) ---- ## SSD 的讀寫 - 讀與寫都是以 page 為單位 - 寫的地方要是乾淨的 - 不乾淨的話會需要洗掉整個 block - 讀的速度 $>>$ 寫的速度 ---- ## SSD Pros & Cons - SSD 讀寫相對 HDD 都很快 - EEPROM 擦除有壽命限制 - SSD 擦除 block 之前需要把要保留的資料移動到其他地方 - 廠商發明複雜的控制晶片來維持每個 block 壽命的均勻 --- ## Locality ---- ## Base Idea: 每次存取都存相鄰或接近的地方或者自己本身 ---- ## Two types of Locality: 1. Space Locality(空間) 2. Temporal Locality(時間) ---- ## Example of Locality: Good Locality: Sum Bad Locality: Disjoint Set ---- ### Stride-K Reference Pattern 一次以間隔為K來讀取 --- ## Memory Hierarchy ---- ![](https://i.imgur.com/3uVbSOW.png) ---- ## Time spend on accessing Memory Register: 1 clock L0, L1, L2: 1 ~ 10 clocks DRAM: 100 clocks Disk: 1000 ~ 10000 clocks --- ## Cache ---- 由於從下層讀取資料很花時間 所以我們會在上層含有部份下層的資料 ---- ## 大小 * Fixed Size: Disk -> Main Memory * Variable Size: Web Content -> Disk Block Size: 一次傳輸的單位 ---- ## Cache Miss 當資料在Cache裡面找不到 就叫做Cache Miss ---- ## Type of Cache Miss 1. Cold Cache: 完全沒有任何東西的快取 2. Conflict Miss 3. Capacity Miss: 快取的容量太小了 ---- ## Placement Policy 映射High Level Memory 到 Low Level Memory 的方式 ---- ## Why? 高Level的記憶體要求速度 如果隨便替換在查找時很花時間 ---- ## Random placement policy 隨便找地方插入(慢的記憶體DRAM, Disk) ---- ## Set-Associative Cache 一個High Level Memory只負責一小部份Low Level Memory(快的記憶體L0, L1...) ---- Example: Level 0: 4 blocks Level 1: 16 blocks ---- ## Conflict Miss ---- ## 需要有好的Replacement Policy(替換策略) ---- 1. Random Replacement Policy 2. Least recnetly used(LRU) ---- ## Memory Managemet ---- Register: Compiler Cache: Hardware DRAM: OS, MMU
{"metaMigratedAt":"2023-06-16T08:55:11.464Z","metaMigratedFrom":"YAML","title":"CS:APP Chapter 6","breaks":true,"slideOptions":"{\"transition\":\"fade\"}","contributors":"[{\"id\":\"3c6a5dd2-0fad-46b4-86b7-399891d935fc\",\"add\":1606,\"del\":158},{\"id\":\"61ca4dc9-8746-43ef-8a00-8c9b80b292c0\",\"add\":4305,\"del\":730}]"}
    351 views