<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 示意圖
這種穩定性有如倒置的鐘擺,即時有干擾 (搖動鐘擺之類的),他也不容易離開他維持的穩定狀態

----
## 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

----
## 存取 DRAM Chip
- 以 $(i, j)$ 的 pair 來存取想要的 *supercell* 中的資料
- 一次取出的量就是一個 *supercell* 所可以儲存的量
- 以剛剛的舉例就是 1 byte
- 存取時 column 與 row 共用同一個 bus 來描述
- 往這個 bus 先送 row 再送 column 就可以拿到資料
- DRAM 收到想要的 row 時,會把那個 row 的資料複製到 buffer 中
- 拿到 column 資料時取用 buffer 中第 column 個資料
----
## 圖勒

----
## 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
- 傳統機械式硬碟
- 這張圖解釋了所有東西,等等要記得回來看

----
## 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 陣列

----
## 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
----

----
## 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}]"}