內容已複查
32 分鐘 · 2 張概念卡 · 2 題對應考古題

I/O 與效能:從 polling、interrupt 到 DMA

本頁為依教材與考古題整理的原創摘要;考古題答案經技術覆核,但不是官方答案。

第一次接觸也沒關係

這堂先懂這些詞

先記住白話意思,不必急著背英文。看到正文時,再把正式名稱接回來。

緩衝

也會看到:buffer、buffering、I/O buffer

先把速度不一致的資料暫放一區,再分批處理或傳送。

生活例子:
像外送員先把多張訂單集中,再一次送往同一區域。
別搞混:
buffer 重點是平滑資料流;cache 重點是重複使用以加速。

直接記憶體存取

也會看到:DMA、Direct Memory Access

讓裝置能成批搬資料到記憶體,CPU 不必逐筆親自搬運。

生活例子:
像請物流車整批送貨,主管只負責下單與收完成通知。
別搞混:
DMA 不是完全不用 CPU;CPU 仍要設定傳輸並處理完成事件。

中斷

也會看到:interrupt、IRQ

裝置主動通知 CPU 有事件,使 CPU 暫停原工作並先處理該事件。

生活例子:
像店員工作時聽到門鈴,先去接待新客再回來繼續。
別搞混:
中斷不是把程式永遠停止,而是可保存現場後再恢復。

延遲與吞吐量

也會看到:latency、throughput、bandwidth、延遲、吞吐量

延遲是單次等多久,吞吐量是單位時間能處理多少資料。

生活例子:
水龍頭打開多久出水像延遲,每分鐘流多少水像吞吐量。
別搞混:
高頻寬不保證低延遲,兩項指標不能互相代替。

輪詢與記憶體映射 I/O

也會看到:polling、programmed I/O、memory-mapped I/O、ISR

Polling 讓 CPU 反覆查裝置狀態;memory-mapped I/O 則用類似記憶體位址的方式存取裝置暫存器。

生活例子:
輪詢像不停問外送到了沒;中斷則像外送員到門口再按鈴通知。
別搞混:
Memory-mapped I/O 的位址指向裝置控制介面,不是一般 RAM 資料。

比較 programmed I/O、interrupt-driven I/O 與 DMA 的 CPU 介入程度,連結 memory-mapped I/O、interrupt service routine、latency、throughput 與顯示器解析度。

先抓住這幾件事

  • 區分 polling、interrupt-driven I/O 與 DMA
  • 說明 memory-mapped I/O 與 ISR 流程
  • 區分 latency 與 throughput
  • 區分 pixel resolution 與 printer dpi

先想像這個場景

倉庫出貨中心

值班員可以不斷詢問每條輸送帶有沒有貨,也可讓輸送帶有貨時按鈴;大批貨物還可由搬運機直接送到儲位。

先別急著往下看,花十秒想一想:

搬一大批連續資料時,讓 CPU 逐字搬運與讓 DMA controller 處理,哪個更能讓 CPU 同時做其他事?

把故事換成電腦語言

生活中的角色對應到技術概念
值班員不斷詢問輸送帶Polling/programmed I/O
有貨時按鈴通知Interrupt-driven I/O
按鈴後執行指定處理流程Interrupt service routine
搬運機在設備與儲位間搬大批貨DMA block transfer
單箱等待時間與每小時出貨箱數Latency 與 throughput

題目出現這些字,先想到

  • Polling 是 CPU 主動查詢;interrupt 是 device 發訊號。
  • Vectored interrupt 可提供向量導向 ISR;polled interrupt 要辨識來源。
  • DMA 降低 CPU 逐字搬運參與,不是取代 memory。
  • Resolution 是像素排列;dpi 常描述列印點密度。

1.三種 I/O 控制方式

CPU 和 I/O 裝置(鍵盤、磁碟、網路卡)之間的通訊有三種主要方式,效率依序提升: 【Programmed I/O(程式控制 I/O)/ Polling】 CPU 不斷檢查 I/O 裝置的狀態暫存器(status register),直到裝置準備好。這叫做 busy waiting — CPU 在一個迴圈中反覆詢問「你好了嗎?」,什麼都不做直到得到肯定回答。 優點:實作簡單。 缺點:CPU 完全被佔用等待,浪費大量 CPU 時間。在等待磁碟讀取的毫秒級時間裡,CPU 可以執行數百萬條指令。 【Interrupt-driven I/O(中斷驅動 I/O)】 CPU 發出 I/O 指令後去做其他事情。當 I/O 裝置完成時,發出硬體 interrupt(中斷)通知 CPU。CPU 暫停當前工作,執行 interrupt handler(中斷處理程式)處理 I/O 結果,然後回到原本的工作。 優點:CPU 不需要 busy waiting,可以做有用的計算。 缺點:每個 byte 或 word 的傳輸仍需要 CPU 介入。大量資料傳輸(如讀取整個磁碟 block)時,CPU 仍會被頻繁中斷。 【DMA(Direct Memory Access)】 DMA controller 接管資料傳輸工作。CPU 只需要告訴 DMA controller「從磁碟讀取 N bytes 到記憶體位址 X」,然後去做其他事。DMA controller 直接在 I/O 裝置和記憶體之間傳輸資料,不經過 CPU。傳輸完成時才用 interrupt 通知 CPU。 優點:CPU 幾乎完全解放,適合大量資料傳輸。 缺點:需要額外的 DMA controller 硬體。DMA 和 CPU 可能在 bus 上競爭(cycle stealing)。 【三者比較】 | | Polling | Interrupt | DMA | | CPU 佔用 | 100% busy wait | 每次中斷短暫處理 | 只在開始和結束 | | 適用場景 | 極短 I/O | 一般 I/O | 大量資料傳輸 | | 硬體需求 | 最簡單 | 需要中斷控制器 | 需要 DMA controller | 【考試連結】(1) 三種 I/O 方式的比較是經典考題。(2) DMA 是直接在「裝置和記憶體」之間傳輸,不經過 CPU 的 register。(3) Interrupt 讓 CPU 可以做其他事,但每次傳輸仍需 CPU 介入;DMA 進一步把「傳輸」這件事也交出去。

  • Programmed I/O 常需 CPU 處理資料搬移
  • Interrupt 有 context-switch 成本
  • DMA controller 需與 CPU 協調 bus/memory

2.位址與中斷流程

【I/O 定址方式】CPU 如何和 I/O 裝置溝通?兩種方式: • Memory-mapped I/O:I/O 裝置的暫存器被映射到記憶體位址空間的某個區域。CPU 用和存取記憶體相同的指令(load/store)來存取 I/O 裝置。例如把 video memory 映射到特定的記憶體位址,寫入該位址就能在螢幕上顯示。 優點:不需要特殊的 I/O 指令。 缺點:佔用記憶體位址空間。 • Port-mapped I/O(Isolated I/O):I/O 裝置有獨立的位址空間(port addresses),CPU 用特殊的 I/O 指令(如 x86 的 IN/OUT)存取。 優點:不佔用記憶體位址空間。 缺點:需要特殊的指令。 【Interrupt 完整流程】 (1) I/O 裝置完成工作,透過 interrupt request line 發送 interrupt signal 給 CPU。 (2) CPU 完成當前指令後檢查 interrupt line。 (3) CPU 保存當前的 context(PC、registers 等)到 stack。 (4) CPU 透過 interrupt vector table 找到對應的 interrupt handler 位址。每種 interrupt 有一個 vector number,vector table 是「vector number → handler 位址」的對照表。 (5) CPU 跳轉到 interrupt handler 執行。Handler 處理 I/O 結果(如把資料從 buffer 複製到 process 的記憶體)。 (6) Handler 完成後,CPU 從 stack 恢復之前的 context,繼續執行原本的指令。 【Interrupt priority】多個裝置同時中斷時,需要 priority 決定先處理哪個。方法:Programmable Interrupt Controller(PIC)或 APIC,根據設定的 priority level 排隊。高優先權的 interrupt 可以打斷低優先權的 handler(nested interrupt)。 【考試連結】(1) Memory-mapped I/O vs port-mapped I/O 的差異。(2) Interrupt 的流程步驟。(3) Interrupt vector table 的角色。(4) Interrupt 和 exception/trap 的差異 — interrupt 來自外部(硬體),exception 來自 CPU 內部(如除以零、page fault)。

  • 32-bit byte address 在簡化模型下可定位 2^32 bytes
  • Device register 不等於 CPU general-purpose register

3.效能必須先定義指標

衡量電腦系統效能不能只看一個數字(如 CPU 頻率),必須根據使用場景選擇適當的指標: 【CPU 效能指標】 • Clock frequency(時脈頻率):每秒 clock cycles 數。GHz 等級。但高頻率不等於高效能(要看 CPI)。 • CPI(Cycles Per Instruction):平均每條指令需要的 clock cycles。不同指令的 CPI 不同(add 可能 1 cycle,memory access 可能 100+ cycles)。 • MIPS(Million Instructions Per Second):每秒百萬條指令。問題:不同 ISA 的指令功能不同,MIPS 無法跨架構比較。 • FLOPS(Floating Point Operations Per Second):每秒浮點運算次數。用於科學計算和 GPU 效能衡量。 CPU 執行時間 = 指令數 × CPI × Clock cycle time = 指令數 × CPI / Clock frequency 【記憶體效能】 • Bandwidth(頻寬):單位時間傳輸的資料量(GB/s)。 • Latency(延遲):從發出 request 到收到第一個 byte 的時間。 • AMAT(Average Memory Access Time)= Hit time + Miss rate × Miss penalty。 【I/O 效能】 • IOPS(Input/Output Operations Per Second):每秒 I/O 操作次數。SSD 通常比 HDD 高 100 倍以上。 • Throughput(吞吐量):每秒傳輸的資料量。 • Seek time(尋道時間,HDD):磁碟臂移動到正確 track 的時間。 【系統整體效能】 • Amdahl's law:限制因素分析。Speedup = 1 / (p + (1-p)/n)。 • Benchmark:用標準化的程式(如 SPEC、Geekbench)在不同系統上運行,比較得分。比單一指標更有意義。 【考試連結】(1) 不能只用 clock frequency 比較不同 CPU 的效能。(2) CPU time 公式和 AMAT 公式是常考計算題。(3) MIPS 的跨架構比較陷阱。(4) 考古題常混用 MB(megabyte)和 Mb(megabit),注意 1 byte = 8 bits。

  • Batching 可提高 throughput 卻增加個別等待
  • Buffering 可吸收短期速率差

4.顯示與列印指標不可混用

螢幕和印表機使用不同的解析度和品質指標,考古題常考你能否區分: 【螢幕(Display)指標】 • Resolution(解析度):水平 × 垂直的像素數。例如 1920×1080(Full HD)、3840×2160(4K UHD)。像素越多,畫面越清晰。 • PPI(Pixels Per Inch):每英寸的像素密度。同樣的 resolution 在較小的螢幕上 PPI 更高,顯示更細緻。例如 27 吋 1080p 約 82 PPI,5.5 吋 1080p 約 401 PPI。 • Refresh rate(更新率):螢幕每秒重繪畫面的次數。60 Hz 表示每秒更新 60 次。高更新率(120/144/240 Hz)讓動態畫面更流暢,重要於遊戲和影片。 • Response time(反應時間):像素從一個顏色變成另一個顏色的時間(ms)。越短越好,減少動態模糊。 【印表機(Printer)指標】 • DPI(Dots Per Inch):每英寸的墨點數。DPI 越高,列印品質越好。一般文件 300 DPI 足夠,照片列印至少 600 DPI。 • PPM(Pages Per Minute):每分鐘列印頁數。衡量列印速度。 【PPI vs DPI】 • PPI 用於螢幕(pixels per inch)。 • DPI 用於列印(dots per inch)。 雖然日常口語常混用,但技術上它們是不同的概念:一個 screen pixel 可能由多個 sub-pixel(RGB)組成;一個 print dot 通常是單色墨點。 【色彩深度(Color Depth)】每個 pixel 用多少 bits 表示顏色。 • 8-bit:256 色。 • 16-bit:65,536 色(High Color)。 • 24-bit:約 16.7 百萬色(True Color,每個 RGB channel 8 bits)。 • 32-bit:24-bit + 8-bit alpha channel(透明度)。 影像檔案大小估算:Width × Height × Color depth / 8 = bytes(未壓縮)。 例如:1920×1080 × 24 bits / 8 = 6,220,800 bytes ≈ 5.93 MB。 【考試連結】(1) PPI 和 DPI 的差異。(2) 影像檔案大小計算。(3) Resolution 和 refresh rate 是不同的指標(前者是空間解析度,後者是時間解析度)。

  • Pixel 是顯示影像的離散 picture element
  • Dpi 常描述印表機輸出點密度
  • 解析度數字不能單獨決定觀看品質

一起拆題目

範例 1鍵盤偶爾有輸入,CPU 還有許多工作。Polling 與 interrupt 何者較合適?

  1. 輸入事件不連續。
  2. Polling 會重複查無事件狀態。
  3. Interrupt 讓 CPU 平時處理其他工作。

所以答案是:通常 interrupt-driven I/O 較適合此種低頻事件。

範例 2輸送 1 MiB 資料時為何考慮 DMA?

  1. 資料為大批連續 block。
  2. CPU 逐字搬移會佔用許多指令。
  3. DMA 完成後可再通知 CPU。

所以答案是:DMA 可降低 CPU 搬移參與,但仍有設定與總線協調成本。

這裡最容易選錯

  • 說 interrupt 永遠沒有成本
  • 說 DMA 時 CPU 完全不參與
  • 把 vectored 與 polled interrupt 對調
  • 把 latency 與 throughput 當同一指標

換你快速判斷

先在心中作答,再展開答案。答不出來時,回頭找本課的對照關係。

1Polling 與 interrupt-driven I/O 的主動方是誰?

Polling 由 CPU 主動反覆查詢;interrupt 由 device 發訊號通知 CPU。

Interrupt 仍有儲存狀態與執行 ISR 的成本。

2DMA 為何適合 block transfer?

DMA controller 可在 device 與 memory 間搬運大批資料,降低 CPU 逐字參與。

CPU 仍負責設定並可在完成時處理 interrupt。

最後用考古題驗證

本課連結的題目都已通過可重現的技術覆核,可逐題練習與判分。

開始本課考古題練習

參考來源