Giao diện I/O: Programmed I/O, Interrupt và DMA
Xem thửBạn sẽ học được gì?
- Phân biệt programmed I/O, interrupt-driven I/O và DMA
- Mô tả luồng interrupt từ thiết bị tới CPU và ISR
- Liên hệ I/O organization với throughput và latency thiết bị
Giao diện I/O: Programmed I/O, Interrupt và DMA
Thiết bị ngoại vi (đĩa, bàn phím, NIC…) chậm hơn CPU nhiều bậc. Theo Stallings và Mano, hệ thống máy tính dùng ba chiến lược chuyển dữ liệu giữa CPU/bộ nhớ và thiết bị: programmed I/O, interrupt-driven I/O, và DMA (Direct Memory Access).
1. Programmed I/O (polling)
CPU phát lệnh I/O rồi liên tục đọc thanh ghi trạng thái của thiết bị cho đến khi sẵn sàng, rồi đọc/ghi từng từ dữ liệu. Ưu: phần cứng đơn giản. Nhược: CPU bị chiếm hoàn toàn trong lúc chờ — lãng phí chu kỳ trên hệ thống đa nhiệm.
2. Interrupt-driven I/O
CPU khởi tạo giao dịch rồi tiếp tục công việc khác. Khi thiết bị sẵn sàng, nó gửi IRQ; CPU lưu ngữ cảnh, chạy ISR (Interrupt Service Routine) để chuyển dữ liệu (thường từng từ/byte), rồi quay lại. CPU không spin-wait, nhưng với khối lớn (MB) số lần ngắt vẫn rất cao nên chi phí chuyển ngữ cảnh lớn.
3. DMA
DMA controller chuyển khối dữ liệu trực tiếp giữa thiết bị và bộ nhớ chính. CPU chỉ lập trình: địa chỉ nguồn/đích, số lượng, chế độ; sau đó được giải phóng. Khi xong, DMA phát một ngắt hoàn tất. Trong lúc truyền, bus có thể dùng cycle stealing hoặc burst — CPU và DMA tranh bus theo giao thức arbitrate.
| Phương pháp | CPU trong lúc chờ | Can thiệp cho khối lớn |
|---|---|---|
| Programmed I/O | Bận polling | Mỗi đơn vị dữ liệu |
| Interrupt-driven | Rảnh (giữa các IRQ) | Mỗi từ/byte (ISR) |
| DMA | Rảnh (trừ setup) | Một lần khi hoàn tất |
Ghi nhớ nhanh
- Polling đơn giản nhưng tốn CPU; interrupt giảm chờ; DMA tối ưu truyền khối.
- DMA cần quyền bus và đồng bộ với cache/coherence trên hệ thống hiện đại.
Trong thực tế
NVMe SSD dùng DMA để chuyển block trực tiếp vào RAM, CPU chỉ xử lý completion interrupt — throughput disk cao hơn programmed I/O polling cũ.
Đang tải sơ đồ…