Learning Objectives
- 說明主記憶體與儲存裝置的差別,認識常見的儲存裝置
- 用尋軌時間、旋轉等待與傳輸時間解釋硬碟的存取時間,說明連續與隨機讀取為什麼差很多
- 說明 SSD 的快閃記憶體以頁讀寫、以區塊抹除,以及損耗平均的用途
- 比較輪詢、中斷與 DMA 三種輸入輸出方式對 CPU 的影響,認識驅動程式的角色
這一課要回答的問題
常聽到這些說法:
- 「舊電腦把硬碟換成 SSD,開機快了好多。」
- 「複製一個 4 GB 的影片很快,複製一個裝了幾萬個小檔案的資料夾卻要等很久。」
- 「電腦在讀檔的時候,CPU 是不是就在旁邊乾等?」
上一課看到,記憶體階層的最底層是儲存裝置:容量最大、最便宜,也最慢。 這一課要回答:硬碟和 SSD 怎麼存資料、為什麼速度差這麼多?CPU 又怎麼和這些比它慢很多的裝置合作?
主記憶體與儲存裝置
主記憶體(DRAM)存放「正在執行」的程式與資料,斷電就消失;儲存裝置(storage)長期保存檔案,關機後資料還在。 開啟一個檔案,其實就是把它從儲存裝置讀進主記憶體;按下存檔,就是把主記憶體裡的內容寫回儲存裝置。
常見的儲存裝置:
| 裝置 | 怎麼存資料 | 特色 |
|---|---|---|
| 傳統硬碟(HDD) | 旋轉的磁性碟片,讀寫頭改變或讀取磁化方向 | 容量大、每位元組便宜;有機械動作,隨機存取慢,怕摔 |
| 固態硬碟(SSD) | 快閃記憶體晶片(NAND flash) | 沒有機械動作,快、安靜、耐震;寫入次數有上限 |
| USB 隨身碟、記憶卡 | 快閃記憶體 | 體積小、方便攜帶,速度通常比內接的 SSD 慢 |
| 光碟(CD、DVD、藍光) | 雷射讀取碟片上的凹凸或變化 | 適合發行與長期保存,現在較少使用 |
| 磁帶 | 磁性帶子依序捲動 | 只能依序存取,但容量大、適合大量資料的備份與封存 |
為什麼新買的硬碟,作業系統顯示的容量比外盒上寫的小?廠商以 1 TB=10¹² 位元組計算, 有些作業系統以 2 的次方(1 TiB=2⁴⁰ 位元組)計算後仍寫成「TB」,同樣的位元組數看起來就變小了。
硬碟怎麼讀資料
硬碟裡有一片或多片高速旋轉的碟片,每一面有一個讀寫頭,裝在可以擺動的讀寫臂上:
- 碟片上一圈一圈的同心圓叫磁軌(track),每條磁軌再切成好幾個磁區(sector),磁區是讀寫的最小單位。
- 碟片由馬達帶著以固定轉速旋轉,常見的轉速是每分鐘 5400 或 7200 轉(rpm)。
讀一個磁區要經過三段時間:
存取時間 = 尋軌時間 + 旋轉等待 + 傳輸時間
| 階段 | 在做什麼 |
|---|---|
| 尋軌時間(seek time) | 讀寫臂把讀寫頭移到目標磁軌 |
| 旋轉等待(rotational latency) | 讀寫頭到位後,等目標磁區轉到下方;平均要等半圈 |
| 傳輸時間(transfer time) | 磁區轉過讀寫頭,把資料讀出來 |
前兩段都是機械動作,以毫秒計,比電子訊號慢非常多。 如果要讀的磁區連續放在同一條磁軌上,只要尋軌、等待一次,之後一個接一個轉過來; 如果是隨機散在各處,每讀一個都要重新尋軌、重新等待。這就是「幾萬個小檔案比一個大檔案慢」的主要原因。
SSD 與快閃記憶體
SSD 用快閃記憶體存資料:每個記憶單元用電荷的多寡表示 0 與 1,斷電後電荷還在,所以資料不會消失。 它沒有轉動的碟片,控制器用電子訊號直接選到資料所在的位置,所以隨機讀取也很快。
快閃記憶體有幾個和硬碟很不一樣的特性:
- 以「頁」(page)為單位讀寫,以「區塊」(block,由許多頁組成)為單位抹除。 已經寫過的頁不能直接覆寫,要先把整個區塊抹除。 所以 SSD 改資料時,通常是把新內容寫到另一個空的頁,再把舊的頁標成作廢,之後由控制器整理回收。
- 每個區塊能抹寫的次數有上限。 如果一直寫同一個地方,那些區塊會很快用壞。 控制器會做損耗平均(wear leveling):把寫入平均分散到所有區塊,讓整顆 SSD 的壽命更長。
- SSD 裡有一顆控制器,負責記錄「檔案的哪一段實際放在哪一頁」、損耗平均、錯誤更正等工作。
介面:資料走哪條路進電腦。 內接的儲存裝置常見兩種介面:
| 介面 | 說明 |
|---|---|
| SATA | 原本為硬碟設計的序列介面,傳統硬碟與 2.5 吋 SSD 常用;傳輸速度上限較低 |
| NVMe(走 PCIe) | 專為快閃記憶體設計的協定,直接走 PCIe 連到 CPU,支援大量平行的命令佇列,延遲低、速度快 |
M.2 是一種小尺寸的接頭與模組規格,M.2 的 SSD 可能是 SATA,也可能是 NVMe;下一課組電腦時會再看到它們。
想一想:硬碟與 SSD
硬碟讀一個磁區的存取時間,由哪幾段組成?
一顆 7200 rpm(每分鐘 7200 轉)的硬碟,平均旋轉等待是轉半圈的時間,大約是幾毫秒?
SSD 的控制器為什麼要做「損耗平均」(wear leveling)?
CPU 怎麼和輸入輸出裝置溝通
鍵盤、滑鼠、螢幕、網路卡、硬碟、SSD 都是輸入輸出裝置(I/O device)。每個裝置旁邊有一個裝置控制器(device controller), 它有自己的小型暫存器與緩衝區,負責實際操作裝置;作業系統則透過驅動程式(driver)和控制器溝通。 驅動程式知道某一款硬體的細節,對上提供統一的介面,所以應用程式不必知道你用的是哪一牌的網路卡。
裝置比 CPU 慢很多。CPU 要讀裝置的資料,有三種方式:
| 方式 | 怎麼做 | 對 CPU 的影響 |
|---|---|---|
| 輪詢(polling) | CPU 一直去問控制器「好了沒?」,好了就自己把資料搬走 | 寫法簡單;但等待時 CPU 什麼事都不能做 |
| 中斷(interrupt) | CPU 先去做別的事;裝置準備好時送出中斷訊號,CPU 暫停手上的工作、存好目前狀態,執行中斷處理程式,處理完再回到原本的工作 | 不用空等;但每次中斷都要切換狀態,中斷太頻繁也很花時間 |
| DMA(Direct Memory Access,直接記憶體存取) | CPU 告訴 DMA 控制器「把這一大塊資料搬到記憶體的哪裡」,搬運由 DMA 控制器負責,全部搬完才發一次中斷 | 搬大量資料時,CPU 幾乎不用參與 |
比喻:等外送。輪詢是每分鐘下樓看一次外送到了沒;中斷是外送員到了按門鈴; DMA 是請管理員代收一整批包裹,全部收齊才通知你一次。
想一想:輸入輸出
關於「中斷」,下面哪一個敘述正確?
要把 SSD 上一個很大的影片檔讀進主記憶體,最適合用哪一種方式?
換了一張新的網路卡要安裝「驅動程式」,驅動程式的角色是什麼?
重點整理
- 主記憶體存放執行中的程式與資料、斷電消失;儲存裝置長期保存檔案。開檔是從儲存裝置讀進記憶體,存檔是寫回去。
- 硬碟靠旋轉的碟片與讀寫頭:存取時間=尋軌時間+旋轉等待+傳輸時間,前兩段是機械動作。連續讀取只等一次,隨機讀取每次都要等,所以差很多。
- SSD 用快閃記憶體,沒有機械動作,隨機讀取也快;以頁讀寫、以區塊抹除,抹寫次數有上限,控制器以損耗平均延長壽命。
- 內接儲存常見 SATA 與 NVMe(走 PCIe)兩種介面;M.2 是接頭與模組的規格,可能是 SATA 也可能是 NVMe。
- CPU 與裝置溝通:輪詢(一直問)、中斷(裝置好了才通知)、DMA(整塊資料由 DMA 控制器搬,最後通知一次);驅動程式讓作業系統能操作各種硬體。
下一課:把這幾課看到的零件放在一起,認識主機板、CPU、記憶體、儲存、顯示卡、電源與機殼,並組一台電腦。