Kiến Trúc Hệ Thống & Linux Kernel

Giải thích đơn giản, trực quan và dễ hiểu về kiến trúc hệ thống Linux: từ User Space, Kernel, System Calls đến Namespaces và Cgroups tạo nên Container.

Nếu ví máy tính như một nhà hàng, thì Phần cứng là khu bếp, Linux Kernel là Bếp trưởng quyền lực quản lý toàn bộ nguyên liệu, còn Các ứng dụng của bạn (Nginx, Docker, MySQL) là thực khách ở phòng ăn bên ngoài.

Kiến trúc Linux được thiết kế theo một nguyên tắc bảo vệ nghiêm ngặt: Không ứng dụng nào được tự ý chạm trực tiếp vào phần cứng mà bắt buộc phải thông qua Kernel.


1. Ba Tầng Cốt Lõi Của Linux

Hệ thống Linux bao gồm 3 lớp chính xếp chồng lên nhau từ ngoài vào trong:

+---------------------------------------------------------------+
|  1. USER SPACE (Không gian người dùng)                        |
|     - Ứng dụng: Web server, Database, Docker, Python, Bash    |
|     - Thư viện hệ thống: glibc                                |
+---------------------------------------------------------------+
             |                               ^
             | Yêu cầu (System Call)         | Phản hồi dữ liệu
             v                               |
+---------------------------------------------------------------+
|  2. KERNEL SPACE (Nhân hệ điều hành)                          |
|     - Quản lý CPU (Process Scheduler)                         |
|     - Quản lý bộ nhớ (RAM & Virtual Memory)                   |
|     - Quản lý file (VFS)                                      |
|     - Quản lý mạng (Network Stack)                            |
|     - Trình điều khiển thiết bị (Drivers)                     |
+---------------------------------------------------------------+
             |
             v
+---------------------------------------------------------------+
|  3. PHẦN CỨNG (Hardware)                                      |
|     - CPU, RAM, Ổ cứng (SSD/NVMe), Card mạng (NIC)            |
+---------------------------------------------------------------+

2. User Space và Kernel Space Khác Gì Nhau?

Để máy chủ không bị sập khi một ứng dụng gặp lỗi, CPU chia quyền thực thi thành 2 chế độ:

  • User Space (Chế độ người dùng - Ring 3):
    • Nơi tất cả ứng dụng thông thường hoạt động (Nginx, MySQL, Node.js, Shell script).
    • Bị cô lập hoàn toàn. Nếu ứng dụng bị lỗi (như tràn bộ nhớ), chỉ riêng ứng dụng đó bị tắt (crash), toàn bộ hệ điều hành và các ứng dụng khác vẫn hoạt động bình thường.
  • Kernel Space (Chế độ nhân - Ring 0):
    • Nơi Linux Kernel và các driver hoạt động.
    • Có toàn quyền kiểm soát CPU, RAM và mọi linh kiện phần cứng.
    • Nếu xảy ra lỗi nghiêm trọng ở tầng này, máy chủ sẽ gặp hiện tượng Kernel Panic (tương tự màn hình xanh trên Windows) và phải khởi động lại.

3. System Call (Syscall) – Chiếc Cầu Nối Duy Nhất

Vì ứng dụng ở User Space không thể tự ghi dữ liệu lên ổ cứng hay tự gửi gói tin ra mạng, nó phải dùng System Call (Lời gọi hệ thống) để nhờ Kernel làm hộ.

Ví dụ thực tế: Khi bạn chạy lệnh cat file.txt

  1. Lệnh cat (ở User Space) gửi yêu cầu: "Kernel ơi, mở file.txt giúp tôi!" ➔ Gọi syscall open().
  2. Kernel chuyển sang Kernel Mode, kiểm tra quyền hạn, đọc dữ liệu từ ổ cứng lên RAM.
  3. Lệnh cat gửi tiếp yêu cầu: "Đọc dữ liệu ra màn hình giúp tôi!" ➔ Gọi syscall write().
  4. Kernel in các ký tự lên màn hình terminal của bạn.

💡 Một số Syscall phổ biến cần biết:

  • open(), read(), write(), close(): Thao tác đọc/ghi file.
  • fork(), execve(): Tạo và chạy một tiến trình mới.
  • socket(), connect(), bind(): Tạo kết nối mạng.
  • mmap(): Xin cấp phát bộ nhớ ảo.

4. Năm Nhiệm Vụ Chính Của Linux Kernel

Kernel làm mọi việc nặng nhọc phía sau hậu trường thông qua 5 nhiệm vụ chính:

Phân hệNhiệm vụ chính (Rất dễ hiểu)Ví dụ thực tế
1. Quản lý tiến trình (CPU)Chia nhỏ thời gian CPU để hàng trăm ứng dụng chạy cùng lúc mượt màĐảm bảo Nginx và MySQL chia nhau CPU công bằng
2. Quản lý bộ nhớ (RAM)Cấp phát RAM cho ứng dụng, giải phóng khi dùng xong, dùng Swap khi thiếuKích hoạt OOM Killer tắt app tốn RAM nhất nếu máy cạn kiệt bộ nhớ
3. Hệ thống file (VFS)Biến mọi ổ cứng, USB, thư mục mạng thành một chuẩn đọc/ghi duy nhấtKhông cần biết file nằm ở Ext4 hay XFS, lệnh read() đều giống nhau
4. Ngăn xếp mạng (Network)Tiếp nhận gói tin từ card mạng, kiểm tra tường lửa và chuyển tới đúng appLọc gói tin qua Iptables rồi gửi tới cổng 80 của Nginx
5. Trình điều khiển (Driver)"Phiên dịch viên" giữa Kernel và các linh kiện phần cứng vật lýGiúp Linux hiểu cách nói chuyện với card mạng Realtek hay Intel

5. Mảnh Ghép Tạo Nên Container (Docker & K8s)

Rất nhiều người lầm tưởng Container (như Docker) là một cỗ máy ảo mini. Nhưng thực chất: Container chỉ là một tiến trình bình thường trên Linux, được Kernel giới hạn bằng 2 tính năng:

1. Namespaces – "Cặp kính râm" (Cô lập những gì tiến trình nhìn thấy)

Nó đánh lừa tiến trình bên trong container:

  • PID Namespace: Container nghĩ nó là tiến trình số 1 duy nhất trên máy, không nhìn thấy các tiến trình ngoài máy chủ thật.
  • NET Namespace: Container có card mạng riêng, IP riêng, bảng port riêng.
  • Mount Namespace: Container chỉ nhìn thấy thư mục / riêng của nó, không thấy file trên máy chủ Host.

2. Cgroups (Control Groups) – "Vòng kim cô" (Giới hạn tài nguyên được dùng)

Nó ngăn không cho một container nuốt trọn tài nguyên của máy chủ:

  • Giới hạn RAM: "Container này chỉ được dùng tối đa 1GB RAM, vượt quá sẽ bị tắt!"
  • Giới hạn CPU: "Container này chỉ được dùng tối đa 50% của 1 CPU core!"

⚡ Tóm Tắt Trong 30 Giây

  • Hardware là phần cứng vật lý bên dưới.
  • Kernel là người quản gia tối cao, độc quyền kiểm soát phần cứng (Ring 0).
  • User Space là nơi ứng dụng của chúng ta chạy một cách an toàn và cách ly (Ring 3).
  • System Call là cách duy nhất để ứng dụng nhờ Kernel thực hiện đọc file, gửi mạng hay cấp RAM.
  • Docker / Kubernetes thực chất chạy trực tiếp trên Linux Kernel, được cô lập nhờ Namespaces và kìm hãm tài nguyên nhờ Cgroups.

Bài tiếp theo đề xuất: Cấu Trúc Thư Mục Hệ Thống Linux – Khám phá ý nghĩa từng thư mục cốt lõi /etc, /var, /home và /proc.