Bộ nhớ/Module 3 — Bộ nhớ ảo: tổng quan
14/26
Bài 14 / 26~10 phútBộ nhớ ảoMiễn phí lượt xem

Module 3 — Bộ nhớ ảo: tổng quan

Mỗi tiến trình tưởng mình sở hữu toàn bộ bộ nhớ — phần cứng và OS dựng ảo giác đó qua paging, page table, MMU, TLB, page fault, swap, mmap và copy-on-write.

TL;DR: Khi chương trình bạn đọc địa chỉ 0x5f3a20, đó không phải vị trí thật trên thanh RAM — mà là một địa chỉ ảo mà CPU và OS dịch sang địa chỉ vật lý sau lưng bạn. Mỗi tiến trình thấy một không gian địa chỉ ảo liền mạch của riêng nó, như thể nó độc chiếm toàn bộ máy. Cơ chế dựng ảo giác đó gọi là bộ nhớ ảo (virtual memory): bộ nhớ được chia thành các trang (page) cố định, một page table ánh xạ trang ảo sang khung vật lý, phần cứng MMU dịch mỗi truy cập, và TLB cache bản dịch để khỏi chậm. Khi trang cần dùng không có trong RAM, một page fault kích OS nạp nó vào — có thể từ swap trên đĩa. Module này giải thích toàn bộ chuỗi đó, cộng hai ứng dụng mạnh: mmap (ánh xạ file vào bộ nhớ) và copy-on-write (chia sẻ trang tới khi có ai ghi).

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

Hai chương trình chạy cùng lúc, cả hai cùng dùng địa chỉ 0x400000 cho code của mình — sao chúng không đè lên nhau? Một process bị lỗi Segmentation fault khi đọc địa chỉ 0x0 — ai chặn nó lại? Bạn fork() một tiến trình 8 GB và lời gọi trả về tức thì, không tốn thêm 8 GB — bằng cách nào? Bạn mở một file 10 GB rồi đọc nó như một mảng trong bộ nhớ dù RAM chỉ 16 GB — tại sao không tràn?

Câu trả lời cho tất cả là bộ nhớ ảo: một lớp gián tiếp giữa địa chỉ chương trình dùng và bộ nhớ vật lý thật. Module 1 và 2 coi "địa chỉ" như vị trí thật trên RAM để đơn giản hoá. Module này gỡ lớp đơn giản hoá đó: cho bạn thấy cái máy thật làm gì mỗi lần chương trình chạm bộ nhớ, và vì sao đó là một trong những phát minh quan trọng nhất của hệ điều hành.

Sau module này bạn sẽ

  • Explain vì sao cần bộ nhớ ảo và phân biệt địa chỉ ảo với địa chỉ vật lý.
  • Trace cách MMU dịch một địa chỉ ảo sang vật lý qua page table và TLB, từng bước.
  • Diagnose page fault và swap; giải thích vì sao thrashing làm cả hệ thống đứng.
  • Explain mmap và copy-on-write, và liên hệ chúng với fork() và chia sẻ bộ nhớ.

Lộ trình module

Bài 01 đặt nền: vì sao mỗi tiến trình cần không gian địa chỉ riêng, và địa chỉ ảo khác địa chỉ vật lý thế nào. Bài 02 vào cơ chế ánh xạ: bộ nhớ chia thành trang, một page table dịch trang ảo sang khung vật lý. Bài 03 trả lời "dịch mỗi truy cập thì chậm chứ?" — phần cứng MMU làm việc đó, và TLB cache bản dịch để gần như miễn phí. Bài 04 xử lý khi trang không có trong RAM: page fault, swap, demand paging, và cái bẫy thrashing. Bài 05 dùng cơ chế đã học để giải thích hai siêu năng lực: mmapcopy-on-write (nền của fork rẻ và shared library). Bài 06 là cheat sheet tổng kết.

flowchart LR
  A["01 Dia chi ao vs vat ly"] --> B["02 Paging + page table"]
  B --> C["03 MMU + TLB"]
  C --> D["04 Page fault + swap"]
  D --> E["05 mmap + copy-on-write"]

Yêu cầu trước khi bắt đầu

  • Hoàn thành Module 1 (bố cục bộ nhớ tiến trình: stack/heap/static, con trỏ, địa chỉ) — module này gỡ lớp "địa chỉ là vị trí thật" mà Module 1 giả định.
  • Đã hoàn thành Module 2 (cache, RAM, độ trễ tầng bộ nhớ) — giúp ước lượng vì sao TLB và page fault tốn kém theo bậc nào.

Time budget

  • Module: ~1.6 giờ đọc.
BàiChủ đềPhút
01Vì sao cần bộ nhớ ảo & địa chỉ ảo vs vật lý16
02Paging & page table18
03MMU & TLB — dịch địa chỉ mà không chậm18
04Page fault, swap & thrashing17
05mmap & copy-on-write16
06Tổng kết & cheat sheet12

Cách học module này hiệu quả

  • Bám một địa chỉ qua từng tầng. Lấy một địa chỉ ảo cụ thể và tự trace nó: tách page number + offset → tra page table → ra khung vật lý. Làm tay vài lần, cơ chế sẽ thành phản xạ.
  • Phân biệt "ai làm". Page table do OS dựng; MMU (phần cứng) dùng nó để dịch; page fault chuyển quyền về OS xử lý. Luôn hỏi "bước này phần cứng hay kernel làm?".
  • Nối với thứ bạn đã thấy. Segmentation fault, fork, swap chậm, shared library — đều là biểu hiện của cơ chế trong module. Mỗi khi học một mảnh, nhớ lại triệu chứng bạn từng gặp.

Bài tiếp theo: Vì sao cần bộ nhớ ảo & địa chỉ ảo vs vật lý

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

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

Bài tiếp theo

Vì sao cần bộ nhớ ảo — địa chỉ ảo vs địa chỉ vật lý