Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chế độ đôi (Dual Mode) trong Hệ điều hành (OS)

Hệ điều hành hiện đại vận hành dưới hai chế độ quyền hạn riêng biệt để bảo vệ phần cứng và dữ liệu hệ thống: User Mode (Chế độ người dùng) và Kernel Mode (Chế độ hạt nhân).

1. User Mode (Chế độ người dùng)

  • Môi trường chạy các ứng dụng người dùng (trình duyệt, trình soạn thảo, game...).
  • Quyền hạn **thấp**: Không được truy cập trực tiếp phần cứng, không được thực hiện lệnh đặc quyền.
  • Nếu cố gắng thực hiện lệnh đặc quyền -> Gây ra **Exception/Interrupt** -> Chuyển sang Kernel Mode để OS xử lý (thường kill process).
  • Bộ nhớ: Chỉ truy cập được không gian địa chỉ ảo của chính process đó.

2. Kernel Mode (Chế độ hạt nhân / Supervisor Mode)

  • Môi trường chạy lõi hệ điều hành (Kernel), driver thiết bị.
  • Quyền hạn **cao nhất (Đặc quyền)**: Truy cập toàn bộ phần cứng, quản lý bộ nhớ, lập lịch CPU, xử lý ngắt.
  • Các lệnh đặc quyền (Privileged Instructions): Quản lý I/O, Chuyển đổi chế độ, Quản lý ngắt, Cấu hình MMU/Page Table.

3. Cơ chế chuyển đổi (Mode Switching)

Chuyển từ User Mode -> Kernel Mode xảy ra khi:

  • System Call (Gọi hệ thống): App yêu cầu dịch vụ OS (đọc file, tạo process, malloc...). Sử dụng lệnh `syscall` / `int 0x80` / `svc`.
  • Interrupt (Ngắt phần cứng): Bàn phím, chuột, timer, network card gửi tín hiệu.
  • Exception/Trap (Ngoại lệ): Chia cho 0, truy cập bộ nhớ sai, lệnh không hợp lệ.

Chuyển từ Kernel -> User: Trả về từ System Call, Khởi động process mới, Context Switch.

4. Tầm quan trọng của Dual Mode

  • Bảo vệ (Protection): Process lỗi không làm sập toàn bộ hệ thống.
  • Cách ly (Isolation): Process A không đọc/ghi bộ nhớ Process B.
  • Bảo mật (Security): Ngăn chặn malware can thiệp kernel (nếu kernel an toàn).

Minh họa luồng xử lý System Call

User Process (User Mode)
      |
      | 1. Gọi hàm thư viện (glibc) -> read(fd, buf, n)
      v
      | 2. Thực hiện lệnh syscall (Assembly) -> Trap vào Kernel
      v
Kernel (Kernel Mode)
      |
      | 3. System Call Handler xác thực, truy cập ổ cứng (Driver)
      |
      | 4. Copy dữ liệu từ Kernel Buffer -> User Buffer
      |
      | 5. Trả về (return from syscall) -> Quay lại User Mode
      v
User Process (Tiếp tục chạy)

Hiểu rõ Dual Mode là cơ sở để lập trình hệ thống (System Programming), viết driver, và phân tích bảo mật (Rootkit, Exploit kernel).