Blog chia sẻ về công nghệ ...
Published on

Hiểu về Linux System Calls cho DevOps & SRE

Authors

Hiểu về Linux System Calls cho DevOps & SRE

📑 Mục Lục

  1. Vì sao DevOps/SRE cần hiểu Syscall?
  2. Kiến thức nền tảng cần nắm
  3. Các loại System Call thường gặp

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về Linux System Calls (Syscalls) — một chủ đề thường được đề cập trong các buổi phỏng vấn DevOps và SRE, đặc biệt là ở các công ty công nghệ lớn.

Vì sao DevOps/SRE cần hiểu Syscall?

  • Không phải ai làm DevOps cũng thường xuyên làm việc với hệ thống thấp tầng hoặc xử lý sự cố hiệu năng.
  • Theo kinh nghiệm thực tế của tôi là kỹ sư Cloud Engineer, chỉ khoảng 20% thời gian liên quan đến troubleshooting, còn lại chủ yếu là thiết kế & triển khai.
  • Tuy nhiên, hiểu biết về Syscall rất quan trọng, vì chúng ta làm việc với server — và server = hệ điều hành.

Kiến thức nền tảng cần nắm

🔸 Kernel Space

  • Là nơi hệ điều hành (kernel) hoạt động.
  • Kernel kiểm soát mọi thứ: RAM, CPU, I/O, driver, security...
  • Có toàn quyền truy cập hệ thống phần cứng.

🔸 Userspace

  • Là nơi các ứng dụng người dùng chạy (trình duyệt, máy chủ web, terminal…).
  • Không thể truy cập trực tiếp phần cứng.
  • Khi ứng dụng gặp sự cố, hệ điều hành vẫn không bị crash — vì bị cách ly khỏi kernel.

Syscall là gì?

  • giao tiếp giữa chương trình ở userspace với kernel để yêu cầu sử dụng tài nguyên hệ thống.
  • Kernel đóng vai trò "người gác cổng", đảm bảo chương trình không phá vỡ hệ thống.

💡 Syscalls được triển khai trong kernel và người dùng gọi qua thư viện trung gian như glibc trong C.

hieu-ve-syscall-trong-he-dieu-hanh-linux

Ví dụ thực tế: Lệnh ls

  • ls là lệnh userspace để hiển thị nội dung thư mục.
  • Khi bạn chạy ls, chương trình sẽ thực hiện hàng loạt syscall để hỏi kernel lấy thông tin file từ ổ đĩa.
  • Quá trình này bao gồm: open, read, stat, close…
hieu-ve-syscall-trong-he-dieu-hanh-linux

Các loại System Call thường gặp

1. Process Control (Quản lý tiến trình)

  • fork(): Tạo tiến trình mới
  • exec(): Thay thế tiến trình hiện tại bằng chương trình khác
  • exit(): Kết thúc tiến trình
  • wait(): Đợi tiến trình con
  • kill(): Gửi tín hiệu đến tiến trình

💡 So sánh fork() vs exec() là câu hỏi phỏng vấn phổ biến.

2. File Management (Quản lý file)

  • open(), close(), read(), write(), unlink(), chmod()
  • Dùng để thao tác với file và metadata

3. Device Management (Quản lý thiết bị)

  • ioctl(): Tương tác thiết bị theo cách đặc biệt
  • read(), write() trên thiết bị

4. Information Maintenance (Thông tin hệ thống)

  • getpid(): Lấy PID tiến trình
  • time(), sysinfo(), setpriority(): Lấy/gán thông tin hệ thống

5. Communication / IPC (Giao tiếp liên tiến trình & mạng)

  • pipe(): Tạo kênh giao tiếp một chiều
  • shmget(): Chia sẻ bộ nhớ
  • socket(), send(), recv(): Giao tiếp qua mạng

Kết luận

  • Syscalls không phải là công cụ hàng ngày của DevOps, trừ khi bạn làm việc với performance tuning, kernel dev, hoặc troubleshooting sâu.
  • Tuy nhiên, hiểu rõ cơ chế hoạt động và các loại syscall sẽ giúp bạn:
    • Debug lỗi ứng dụng tốt hơn
    • Xử lý vấn đề hiệu năng chuyên sâu
    • Tự tin hơn khi đi phỏng vấn SRE/DevOps