記憶體階層與資料表示:從位元正確性到存取延遲
本頁為依教材與考古題整理的原創摘要;考古題答案經技術覆核,但不是官方答案。
第一次接觸也沒關係
這堂先懂這些詞
先記住白話意思,不必急著背英文。看到正文時,再把正式名稱接回來。
快取
也會看到:cache、cache hit、cache miss把近期常用資料放在更近、更快的位置,減少每次都去慢速來源取得。
- 生活例子:
- 像把常用調味料放手邊,而不是每次走去倉庫拿。
- 別搞混:
- 快取不是永久資料庫;miss 也不代表資料不存在。
記憶體階層與局部性
也會看到:memory hierarchy、temporal locality、spatial locality、locality把少量快速儲存與大量較慢儲存分層,並利用程式常重複或鄰近存取資料的特性。
- 生活例子:
- 像把常用文具放桌面、偶爾用的放抽屜、很少用的收進倉庫。
- 別搞混:
- 快取有效依賴存取局部性,不代表每次都比直接取資料更快。
同位元檢查
也會看到:parity、parity bit、同位檢查多加一個位元,讓 1 的總數符合奇數或偶數規則,以偵測部分傳輸錯誤。
- 生活例子:
- 像出貨時要求箱內件數一定為偶數,數量變奇數就知道可能少了一件。
- 別搞混:
- 一般 parity 能發現奇數個位元翻轉,但可能漏掉偶數個位元同時翻轉。
暫存器
也會看到:register、CPU registerCPU 內極小但極快、用來暫放眼前資料與狀態的儲存位置。
- 生活例子:
- 像廚師手邊的小碟子,只放當下馬上要用的材料。
- 別搞混:
- 不是一般記憶體,也不是硬碟;容量小得多但速度快。
先用 bit、byte、parity 與常見媒體格式建立資料表示觀念,再比較 register、cache、RAM、ROM 與 secondary storage 的容量、速度和揮發性,最後以 locality 與 average memory access time 串起快取的作用。所引用考古題答案皆為非官方技術覆核;本課只納入可自動判分且與兩個子主題直接相關的題目。
先抓住這幾件事
- 以 parity 規則判斷能偵測與不能偵測的位元錯誤
- 區分靜態影像、動態影像與其常見檔案格式
- 依容量、速度、成本與揮發性比較 register、cache、RAM、ROM、flash 與 SSD
- 利用 temporal locality、spatial locality 與命中率解釋 cache 如何降低平均存取時間
先想像這個場景
值班員的桌面、抽屜與遠端倉庫
想像一位值班員處理一疊表單:眼前立刻要用的數字握在手上,近期反覆查的表單放桌面,較多資料收進抽屜,整批工作資料放在辦公區,長期保存的檔案才送往遠端倉庫。越靠近手邊通常拿得越快,但能放的東西越少;常重看同一張或接著看相鄰頁面時,把它們留在近處最有價值。
先別急著往下看,花十秒想一想:
值班員剛查過表單第 20 頁,接著很可能再查第 20 頁或第 21 頁。哪些行為分別對應 temporal locality 與 spatial locality?為什麼把近期頁面留在桌面能降低平均取用時間?
把故事換成電腦語言
| 生活中的角色 | 對應到 | 技術概念 |
|---|---|---|
| 值班員手上正拿著、立即參與計算的少量數字 | CPU registers 保存執行單元目前直接使用的少量 operands 與結果 | |
| 桌面上容量很小、伸手就能拿到的近期表單 | L1 cache 容量較小且通常比下層 cache 更快 | |
| 桌下抽屜可放更多表單,但拿取比桌面多一步 | L2/L3 cache 通常容量較大、存取延遲也高於 L1 | |
| 辦公區內保存目前整批工作的資料架 | DRAM 作為容量較大的 main memory,典型存取速度慢於 CPU caches | |
| 遠端倉庫保存大量、短期內不一定使用的檔案 | SSD 等 secondary storage 提供較大且 non-volatile 的持久儲存,典型延遲高於 DRAM |
題目出現這些字,先想到
- Parity check 通過只表示未偵測到錯誤;奇數個 bit flips 可被偵測,偶數個可能漏過。
- JPEG、PNG、GIF、BMP、TIFF 常見於靜態影像;MPEG 主要是影音編碼標準家族。
- 典型速度由快到慢先想 register、L1、L2/L3、DRAM、SSD;ROM、flash、SSD 是 non-volatile,DDR RAM 不是。
- Cache 利用 temporal/spatial locality 降低 AMAT;簡化公式為 hit time + miss rate × miss penalty。
1.資料表示從 bit pattern 與解讀規則開始
電腦儲存的本質是 bit pattern — 一連串的 0 和 1。相同的位元串在不同的解讀規則下可以代表完全不同的東西:整數、浮點數、ASCII 字元、Unicode 文字、像素顏色、或機器指令。決定意義的是格式規格(encoding standard),不是位元本身。一個 byte 通常是 8 bits,可以表示 2⁸ = 256 種不同的值。 常見的媒體格式需要區分靜態影像和影音: • 靜態影像格式:JPEG(有損壓縮,適合照片)、PNG(無損壓縮,支援透明背景)、GIF(支援簡單動畫,256 色限制)、BMP(未壓縮點陣圖)、TIFF(高品質印刷用途)。 • 影音格式:MPEG 是影音編碼標準家族(如 MPEG-2 用於 DVD、MPEG-4/H.264 用於串流)。 文字編碼方面:ASCII 用 7 bits 表示 128 個字元(英文字母、數字、控制字元)。Unicode 是統一的字元集標準,涵蓋全球文字系統。UTF-8 是 Unicode 最常用的編碼方式,對 ASCII 字元使用 1 byte,對中文字元使用 3 bytes。 【考古題常見陷阱】題目問「以下何者為靜態影像格式」時,MPEG 是常見的誘答選項 — MPEG 主要是影音壓縮標準,不是靜態影像格式。副檔名只是提示,不保證檔案內容符合該格式。另一個常考點是問 1 KB = 多少 bytes — 在嚴格定義中 1 KB = 1024 bytes(2¹⁰),但有些標準使用 1000。
- 格式規格定義 bit pattern 的結構與解碼方式
- JPEG、PNG、GIF、BMP、TIFF 常作為靜態影像格式辨識
- MPEG 是影音編碼標準家族,考題若問靜態 image file format 通常不是答案
- 副檔名是線索,不等於內容一定符合該格式
2.Parity 能偵錯,但不能保證資料正確
Parity check 是最簡單的錯誤偵測機制。原理是在原始資料位元之外附加一個 parity bit,使整個 codeword(資料位元 + parity bit)中 1 的總數符合約定的奇偶性。Even parity 要求 1 的總數為偶數;Odd parity 要求 1 的總數為奇數。 【運作機制】發送端:計算資料位元中 1 的個數,設定 parity bit 使總數符合規則。接收端:重新計算收到的完整 codeword 中 1 的個數,若不符合約定的奇偶性 → 偵測到錯誤(parity mismatch)。 【具體範例】使用 even parity,傳送資料 1011001:1 的個數 = 4(偶數),所以 parity bit = 0,傳送 10110010。如果傳輸中第 3 個 bit 翻轉變成 10100010,接收端數 1 的個數 = 3(奇數),不符合 even parity → 偵測到錯誤。但如果第 3 和第 5 個 bit 同時翻轉(兩個錯誤),1 的個數可能回到偶數,parity check 就無法偵測。 【關鍵限制】(1) 單一 parity bit 能偵測奇數個 bit flips,但會漏掉偶數個 bit flips。(2) Parity match 只表示「未偵測到錯誤」,不是「資料一定正確」。(3) Parity 是 error detection,不是 error correction — 它能發現錯了,但不知道是哪一位錯了(需要 Hamming code 等更進階的機制才能定位並修正錯誤)。 考古題常考的計算:給定一串 bit 和 parity 規則,判斷 parity bit 值或判斷是否偵測到錯誤。
- 先數完整 codeword 中 1 的個數,再套用 even 或 odd 規則
- Parity mismatch 表示偵測到錯誤
- Parity match 不代表一定沒有錯誤
- Parity bit 通常只能偵錯,無法指出哪一位錯誤
3.記憶體階層是速度、容量與成本的折衷
記憶體階層(memory hierarchy)的設計基於一個根本矛盾:越快的記憶體越貴、容量越小。從 CPU 往外,典型的階層由快到慢依序為: (1) Registers — CPU 內部,容量最小(通常幾十到幾百個,每個 32 或 64 bits),存取時間約 1 clock cycle。存放正在計算的 operands。 (2) L1 Cache — CPU 晶片上,通常分為 I-cache(指令)和 D-cache(資料),容量 32-64 KB,存取約 1-4 cycles。 (3) L2 Cache — CPU 晶片上或緊鄰,容量 256 KB - 數 MB,存取約 4-14 cycles。 (4) L3 Cache — 多核共享,容量數 MB - 數十 MB,存取約 20-50 cycles。 (5) Main Memory(DRAM)— 容量 GB 等級,存取約 50-100 ns。DDR SDRAM 是目前主流。 (6) Secondary Storage — SSD(數十 μs)或 HDD(數 ms),容量 TB 等級,斷電後資料仍保留(non-volatile)。 【volatile vs non-volatile】Registers、cache、DRAM 都是 volatile — 斷電後資料消失。ROM(Read-Only Memory)、Flash memory、SSD 是 non-volatile — 斷電後資料仍保留。DDR RAM 的名稱中有 RAM,但它是 volatile 的。 【RAID】多顆磁碟可組成 RAID(Redundant Array of Independent Disks),常見等級:RAID 0(striping,提升效能但無容錯)、RAID 1(mirroring,完整備份)、RAID 5(distributed parity,兼顧效能和容錯)。RAID 不等於加密、存取控制或完整的異地備份。 【考試連結】排序題常考「由快到慢」或「由小到大」排列記憶體元件。陷阱是把 ROM 和 RAM 的速度搞混(ROM 的「Read-Only」是可寫入性質,不是速度概念)。
- Register 由指令直接使用,容量遠小於 cache
- L1 通常比 L2 小且快;L2 通常較大且較慢
- DRAM 作為主記憶體,斷電後內容消失
- ROM、flash 與 SSD 是 non-volatile,但用途和可寫入方式不同
- RAID 的 redundancy 可處理特定磁碟故障,但不直接提供 confidentiality,也不能取代備份
4.Cache 利用 locality 降低平均存取時間
Cache 的存在是為了解決 CPU 和 main memory 之間巨大的速度落差。CPU 每秒可以執行數十億次運算,但每次存取 DRAM 需要等待 50-100 ns(相當於 100-200 個 clock cycles)。Cache 是介於 CPU 和 main memory 之間的小型高速記憶體,存放最近或即將使用的資料副本。 Cache 能發揮作用,是因為程式的記憶體存取模式具有 locality(區域性): • Temporal locality(時間區域性):剛存取過的資料很可能短時間內再次被存取。例如迴圈中反覆讀取同一個變數。 • Spatial locality(空間區域性):存取某個位址後,鄰近位址很可能接著被存取。例如遍歷陣列的連續元素。 Cache 以 cache line(或 block)為單位管理資料,通常 64 bytes。當 CPU 讀取一個 byte 時,整條 cache line 會被載入,這樣鄰近的 bytes 下次就能直接從 cache 取得(利用 spatial locality)。 【效能計算】Average Memory Access Time(AMAT)= Hit Time + Miss Rate × Miss Penalty。例如 L1 cache hit time = 1 cycle,miss rate = 5%,miss penalty = 100 cycles 時,AMAT = 1 + 0.05 × 100 = 6 cycles — 比每次都去 main memory(100 cycles)快得多。 【Cache replacement】當 cache 滿了需要淘汰舊資料:LRU(Least Recently Used)淘汰最久沒用過的;LFU(Least Frequently Used)淘汰使用次數最少的;FIFO 淘汰最先載入的。考古題常問這三者的差異。 【考試連結】最常考的題型:(1) 給定 hit rate 和 miss penalty 計算 AMAT。(2) 區分 temporal 和 spatial locality 的例子。(3) 解釋為什麼「加大 cache」不是無限有效 — 因為 cache 越大,搜尋時間也越長,且成本急劇上升。
- Hit rate 與 miss rate 相加為 1
- 較高 hit rate 通常可降低平均存取時間
- Cache 不負責永久保存程式,也不是 CPU scheduler
- 虛擬位址轉換主要由 MMU、TLB 與 page table 機制處理,勿與一般 data cache 的核心角色混淆
一起拆題目
範例 1:使用 even parity 傳送資料 1011001。應加上的 parity bit 是多少?若接收成 10110010,能否判定沒有錯誤?
- 資料 1011001 含有 4 個 1,已是偶數。
- 為維持 even parity,parity bit 應為 0,形成 10110010。
- 接收端數到 4 個 1,parity check 通過。
- 但若傳輸途中恰有 2 個 bits 同時翻轉,1 的奇偶性仍可能不變。
所以答案是:Parity bit 為 0;通過檢查只能說未偵測到錯誤,不能保證資料一定正確。
範例 2:將 register、L1 cache、L2 cache、DRAM、SSD 依典型存取速度由快到慢排列,並指出哪些通常在斷電後保留資料。
- CPU register 最靠近執行單元,典型延遲最低。
- L1 cache 通常比 L2 cache 小而快。
- DRAM 比 cache 慢,但作為容量較大的主記憶體。
- SSD 屬 secondary storage,典型延遲高於 DRAM。
- Register、cache 與 DRAM 通常是 volatile;SSD 是 non-volatile。
所以答案是:典型順序為 register → L1 → L2 → DRAM → SSD;其中 SSD 通常可在斷電後保留資料。
範例 3:某 cache 的 hit time 為 2 ns、miss rate 為 5%,miss penalty 為 80 ns。用簡化公式計算 average memory access time。
- 套用 AMAT = hit time + miss rate × miss penalty。
- 把 5% 寫成 0.05。
- 計算 2 + 0.05 × 80 = 2 + 4。
所以答案是:Average memory access time 為 6 ns。
這裡最容易選錯
- Parity 通過就宣稱資料絕對沒有錯誤
- 把 parity 當成可以定位並修正錯誤的 error-correcting code
- 把 MPEG 與所有靜態影像格式混為一談
- 把 RAM、DDR RAM 或 SDRAM 誤認為 non-volatile
- 背誦特定 cache 容量數字,忽略題目真正比較的是典型階層關係
- 把 cache 的核心功能誤寫成永久儲存或虛擬位址映射
- 把 RAID 的 fault tolerance 誤當成資料加密或完整備份
換你快速判斷
先在心中作答,再展開答案。答不出來時,回頭找本課的對照關係。
1Even parity 檢查通過,能否證明資料完全沒有錯?
不能。它只表示沒有偵測到奇數個 bit flips;偶數個 bit flips 仍可能讓 parity 維持不變。
單一 parity bit 能偵測任何奇數個位元翻轉,但不能定位錯誤,也可能漏掉偶數個位元翻轉。
2Parity bit 的直接用途是 error detection 還是 error correction?
是 error detection;單一 parity bit 通常無法指出錯誤位置,因此不能自行修正。
接收端可從奇偶規則不符判斷有錯,但缺乏足夠資訊判斷哪個 bit 應翻回。
3考題問靜態 image file format 時,JPEG、PNG、GIF、BMP、TIFF 與 MPEG 應如何區分?
前五者常見於靜態影像;MPEG 是影音編碼標準家族,通常不是此類題目的靜態影像格式。
仍應依題幹語境判斷;重點是媒體用途與格式規格,不是只看副檔名。
4Register、L1、L2、DRAM、SSD 的典型速度階層為何?
由快到慢通常是 register → L1 → L2 → DRAM → SSD;往下容量通常增加、每 bit 成本下降。
這是典型階層關係,不代表每個產品都有固定相同的容量與延遲。
5DDR RAM、ROM、flash 與 SSD 中,哪些通常是 non-volatile?
ROM、flash 與 SSD 通常是 non-volatile;DDR RAM 是 volatile。
Non-volatile 表示斷電後資料仍可保留,與裝置是否可快速讀寫是不同維度。
6Cache 為何能降低 average memory access time?
它利用 temporal 與 spatial locality,讓高比例存取在較快層級命中,避免每次都付出主記憶體延遲。
簡化公式為 AMAT = hit time + miss rate × miss penalty;降低 miss rate 或 penalty 都可能改善平均值。
最後用考古題驗證
本課連結的題目都已通過可重現的技術覆核,可逐題練習與判分。
開始本課考古題練習參考來源
- Computer Science: An Overview, 13th Edition — J. Glenn Brookshear