Dữ liệu & CPU/Module 2 — Máy chạy thế nào: tổng quan
8/23
Bài 8 / 23~10 phútMáy chạy thế nàoMiễn phí lượt xem

Module 2 — Máy chạy thế nào: tổng quan

Từ một dòng code tới lệnh CPU thực thi. Module dạy mô hình von Neumann, chu kỳ fetch-decode-execute, register/ALU và assembly nhập môn — cốt lõi cách máy vận hành.

TL;DR: Bạn đã biết mọi thứ trong máy là bit — giờ câu hỏi là bit đó được xử lý thế nào. Module này mở nắp CPU: từ mô hình kiến trúc von Neumann (CPU + bộ nhớ + bus), qua chu kỳ fetch-decode-execute lặp đi lặp lại hàng tỷ lần mỗi giây, tới register và ALU thực sự làm phép tính ở đâu. Cuối module bạn đọc được assembly cơ bản và nhìn thấy một vòng for của mình biến thành lệnh máy — trả lời câu hỏi "điều gì xảy ra khi bạn chạy ./program".

Vì sao module này tồn tại

Module 1 dạy bạn dữ liệu được mã hoá thành bit thế nào — số nguyên, số thực, văn bản, byte order. Nhưng bit không tự chạy. Câu hỏi chưa được trả lời là: ai đọc các bit đó, theo thứ tự nào, và thực sự làm gì với chúng?

Đây là sợi dây xuyên suốt toàn track: điều gì xảy ra khi bạn chạy ./program? Câu trả lời đầy đủ trải qua nhiều tầng — OS loader, trình biên dịch, kiến trúc tập lệnh, vi xử lý, bộ nhớ. Module này nắm tầng trung tâm: CPU và chu trình thực thi lệnh.

Mà không hiểu CPU chạy thế nào, nhiều hiện tượng bạn gặp hằng ngày vẫn mơ hồ: vì sao vòng lặp tốn chu kỳ CPU, vì sao branch prediction sai làm chậm code, vì sao một syscall đắt hơn hàm thông thường, vì sao compiler sinh ra code trông kỳ lạ khi bật -O2. Module này đặt nền để bạn trả lời những câu hỏi đó từ cơ chế, không phải từ kinh nghiệm mò mẫm.

Sau module này bạn sẽ

  • Explain mô hình von Neumann: vai trò CPU, bộ nhớ chính, bus địa chỉ/dữ liệu/điều khiển, và I/O trong kiến trúc này.
  • Trace chu kỳ fetch-decode-execute của một lệnh cụ thể qua từng bước: PC trỏ đâu, IR chứa gì, ALU tính toán thế nào.
  • Đọc được assembly cơ bản (x86-64 hoặc ARM) — nhận ra lệnh mov, add, cmp, jmp, hiểu cách register được đặt tên.
  • Ánh xạ một đoạn code bậc cao (vòng for, câu if, lời gọi hàm) xuống chuỗi lệnh máy tương ứng và giải thích từng bước.

Lộ trình module

Bài 01 đặt nền với mô hình von Neumann — kiến trúc 4 thành phần (CPU, bộ nhớ, bus, I/O) mà mọi máy tính hiện đại đều kế thừa, và lý do tại sao cùng bộ nhớ chứa cả dữ liệu lẫn lệnh lại là ý tưởng cách mạng năm 1945.

Bài 02 đào sâu vào chu kỳ fetch-decode-execute — vòng lặp 3 bước mà CPU thực hiện hàng tỷ lần mỗi giây. Bạn trace một lệnh cộng số nguyên qua từng giai đoạn: Program Counter cập nhật, Instruction Register nạp lệnh, Control Unit giải mã, ALU thực thi.

Bài 03 mổ xẻ bên trong CPU: register là gì và tại sao nhanh hơn RAM hàng trăm lần, ALU thực hiện phép tính nhị phân ra sao, Control Unit điều phối các khối khác thế nào. Bạn thấy tại sao số lượng register là tài nguyên khan hiếm mà compiler phải quản lý cẩn thận.

Bài 04 là assembly nhập môn — không nhằm lập trình assembly từ đầu, mà nhằm đọc hiểu output của compiler. Bạn học bộ lệnh ISA cơ bản, cách đặt tên register x86-64, và đọc một hàm đơn giản dưới dạng assembly.

Bài 05 ghép lại: lấy một đoạn code C/Java bậc cao, chạy qua compiler, và trace từng cấu trúc (biến local, vòng lặp, câu điều kiện, lời gọi hàm) xuống lệnh máy tương ứng. Đây là bài tổng hợp trả lời câu hỏi trung tâm của module.

Bài 06 là tổng kết và cheat sheet — bản đồ khái niệm, bảng lệnh assembly hay gặp, và checklist self-assessment để bookmark.

Năm bài concept xây nối tiếp nhau theo thứ tự sau:

flowchart LR
  A["01 von Neumann"] --> B["02 Fetch-Decode-Execute"]
  B --> C["03 Register + ALU"]
  C --> D["04 Assembly nhap mon"]
  D --> E["05 Code bac cao -> lenh may"]

Yêu cầu trước

  • Hoàn thành Module 1 — Biểu diễn dữ liệu, đặc biệt bài 01 (bit/byte/nhị phân) và bài 02 (số nguyên two's complement) và bài 05 (thao tác bit). Module này dùng nhị phân và hex xuyên suốt — nếu còn lơ mơ cách đổi 0xFF sang thập phân, quay lại Module 1 trước.
  • Biết đọc code cơ bản bằng ít nhất một ngôn ngữ (C, Java, Python, hoặc JavaScript). Bài 04-05 dùng C làm ngôn ngữ nguồn khi minh hoạ assembly vì output compiler gọn hơn.
  • Không cần biết assembly trước — bài 04 dạy từ đầu.

Time budget

  • Module: khoảng 1.5 giờ đọc.
BàiChủ đềPhút
01Mô hình von Neumann15
02Chu kỳ fetch-decode-execute14
03Register, ALU và Control Unit14
04Assembly nhập môn17
05Từ code bậc cao tới lệnh máy18
06Tổng kết và cheat sheet12

Cách học hiệu quả

  • Dùng godbolt.org (Compiler Explorer) khi học bài 04-05. Dán đoạn C hoặc C++ nhỏ, chọn compiler GCC x86-64 với flag -O1, rồi quan sát assembly bên phải thay đổi khi bạn sửa code — đây là cách tốt nhất để liên kết code bậc cao và lệnh máy trong thời gian thực.
  • Trace tay chu kỳ fetch-decode-execute ít nhất 1 lần (bài 02 có bảng hướng dẫn): dùng bút và giấy điền giá trị PC, IR, MAR, MDR qua từng bước. Làm một lần hiểu sâu hơn đọc mười lần.
  • Khi gặp mnemonic assembly lạ (lea, shr, xor reg, reg), tra ngay trong cheat sheet bài 06 — đừng bỏ qua vì "chắc không quan trọng". Compiler hay dùng chính những mnemonic trông kỳ lạ đó để tối ưu.
  • Đừng bỏ qua self-check cuối mỗi bài — câu hỏi ở đây không hỏi "định nghĩa là gì" mà hỏi "điều gì xảy ra khi..." và "vì sao compiler chọn...". Đây là chỗ lý thuyết biến thành hiểu thật sự.

Bài tiếp theo: Mô hình von Neumann

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên