Kiến trúc Máy tính: CPU & Pipeline
Quảng cáo • Advertisement
📢 Sponsor Ad
Google AdSense
lesson.content.title
lesson.content.subtitle
🎯 Mục tiêu bài học
Sau bài này, bạn sẽ hiểu sâu về "bộ não" máy tính, không chỉ ở mức "CPU tính toán" mà ở mức "CPU xử lý dòng lệnh thế nào". Đây là kiến thức phân loại ứng viên Senior.
1. Kiến trúc Von Neumann vs Harvard
🏠 Ví dụ đời thực
Hãy tưởng tượng bạn đang nấu ăn.
- Von Neumann: Bạn để sách nấu ăn (Code) và nguyên liệu (Data) chung trên một cái bàn. Muốn đọc sách thì phải bỏ nguyên liệu xuống. Muốn cắt thái thì phải úp sách lại. (Nghẽn cổ chai).
- Harvard: Bạn có 2 cái bàn riêng biệt. Mắt trái đọc sách (Code), tay phải cắt thái (Data) cùng lú. (Nhanh hơn, nhưng tốn diện tích).
| Đặc điểm | Von Neumann | Harvard |
|---|---|---|
| Bộ nhớ | Dùng chung (RAM chứa cả Code + Data) | Tách biệt (Code RAM riêng, Data RAM riêng) |
| Bus | 1 Bus dữ liệu, 1 Bus địa chỉ | 2 Bus dữ liệu, 2 Bus địa chỉ |
| Tốc độ | Chậm hơn (Chờ lấy lệnh xong mới lấy data) | Nhanh hơn (Lấy lệnh và data song song) |
| Ứng dụng | PC, Laptop, Server (Intel x86) | Vi điều khiển (Arduino, DSP), Cache CPU L1 |
2. Chu trình lệnh (Instruction Cycle) - Deep Dive
CPU thực chất là một máy trạng thái (State Machine) lặp đi lặp lại 4 bước:
Bước 1: Fetch (Đón lệnh)
- CPU nhìn vào thanh ghi PC (Program Counter) để biết địa chỉ lệnh tiếp theo (Ví dụ:
0x1000). - CPU gửi địa chỉ
0x1000ra Bus địa chỉ. - RAM trả về nội dung lệnh (Ví dụ:
ADD A, B- mã máy01001011). - Lệnh được nạp vào thanh ghi IR (Instruction Register).
- PC tăng lên (PC = PC + 1) để trỏ sang lệnh kế tiếp.
Bước 2: Decode (Giải mã)
- Control Unit (CU) đọc IR. Nó thấy mã
0100(Opcode cho phép CỘNG). - Nó thấy
1011(Operand) là địa chỉ của biến A và B. - CU bật các tín hiệu điện tử đến ALU: "Chuẩn bị cộng nhé!".
Bước 3: Execute (Thực thi)
- Dữ liệu từ biến A, B được nạp vào thanh ghi tạm.
- ALU thực hiện phép cộng nhị phân.
- Cờ trạng thái (Flag Register) được cập nhật (Ví dụ: Nếu kết quả = 0 thì bật cờ Zero Flag).
Bước 4: Store / Write Back (Lưu kết quả)
- Kết quả được ghi ngược lại vào thanh ghi hoặc RAM.
- Kết thúc 1 chu trình. Quay lại Bước 1.
3. Kỹ thuật Pipeline (Đường ống)
Để tăng tốc, CPU không chờ làm xong lệnh 1 mới làm lệnh 2.
👉 Kết quả: Mỗi chu kỳ (Clock Cycle) đều có 1 lệnh được hoàn thành (CPI = 1), thay vì phải chờ 4 chu kỳ.
⚠️ Pipeline Hazard (Rủi ro đường ống)
- Data Hazard: Lệnh 2 cần kết quả của lệnh 1, nhưng lệnh 1 chưa kịp Store. -> CPU phải ngừng (Stall) hoặc dùng kỹ thuật Forwarding (Đi tắt).
- Control Hazard: Gặp lệnh
IF...ELSE. CPU không biết người dùng sẽ chọn nhánh nào, nên lỡ nạp nhầm nhánh sai vào Pipeline. -> Phải xóa sạch Pipeline (Flush) và nạp lại nhánh đúng. (Rất tốn kém). -> Dùng Branch Prediction (Dự đoán nhánh). - Structural Hazard: Hai lệnh cùng tranh nhau một tài nguyên phần cứng (Ví dụ: Cùng muốn truy cập RAM).
4. CISC vs RISC
| Đặc điểm | CISC (Intel/AMD) | RISC (ARM/Apple M1) |
|---|---|---|
| Tên | Complex Instruction Set | Reduced Instruction Set |
| Triết lý | Phần cứng thông minh, Code ngắn gọn | Code đơn giản, Phần cứng tối ưu |
| Tập lệnh | Nhiều, phức tạp (1 lệnh làm nhiều việc) | Ít, đơn giản (1 lệnh làm 1 việc) |
| Độ dài lệnh | Biến đổi (1 - 15 byte) | Cố định (4 byte) |
| Tiêu thụ điện | Cao (Nóng) | Thấp (Mát) -> Dùng cho di động |
📝 Lab 1: Mô phỏng "Paper Computer"
Hãy lấy giấy bút ra làm CPU.
Bộ nhớ:
- [00]: LOAD [10] (Mã: 110)
- [01]: ADD [11] (Mã: 211)
- [02]: SAVE [12] (Mã: 312)
- [10]: 5 (Giá trị biến A)
- [11]: 3 (Giá trị biến B)
- [12]: 0 (Biến Result)
Thực hiện:
- PC=00: Fetch lệnh
LOAD [10]. -> Thanh ghi ACC = 5. - PC=01: Fetch lệnh
ADD [11]. -> ACC = 5 + 3 = 8. - PC=02: Fetch lệnh
SAVE [12]. -> RAM tại địa chỉ [12] = 8.
👉 Chúc mừng, bạn vừa thực hiện chương trình của máy tính bằng tay!
🔥 Interview Q&A
Q1: Tại sao Apple M1 (ARM) lại tiết kiệm pin hơn Intel Core i9?
A: Vì kiến trúc RISC của ARM dùng tập lệnh đơn giản, cố định độ dài, giúp bộ giải mã (Decoder) đơn giản hơn rất nhiều so với CISC. Ít bóng bán dẫn cho Decoder = ít điện hơn. Ngoài ra mô hình Big.LITTLE (nhân mạnh + nhân tiết kiệm) cũng đóng vai trò quan trọng.
Q2: Branch Prediction hoạt động thế nào?
A: CPU lưu lịch sử các lần nhảy trước đó. Nếu vòng lặp for (i=0; i<100; i++) đã lặp 99 lần, nó dự đoán lần thứ 100 cũng sẽ lặp tiếp và nạp sẵn lệnh vào Pipeline. Nếu đoán sai (khi i=100), nó phải xả bỏ Pipeline (Performance Penalty).
Quảng cáo • Advertisement
📢 Ad Space
Google AdSense