System call
Xem thửBạn sẽ học được gì?
- Mô tả luồng từ user program vào kernel qua syscall
- Phân biệt API thư viện và system call thật
- Đọc được ý nghĩa vài syscall (
open,fork,read)
System call
System call là API chính thức để chương trình user-mode yêu cầu dịch vụ từ kernel: tạo tiến trình, đọc/ghi file, cấp phát bộ nhớ, giao tiếp mạng, v.v. Ứng dụng hầu như không gọi syscall “trần”; chúng gọi thư viện (libc trên Unix, Win32 API trên Windows) rồi thư viện mới phát sinh trap.
Cơ chế (mức ý tưởng)
- Chương trình đặt số hiệu syscall và tham số (thanh ghi / stack tùy ABI).
- Lệnh đặc biệt (
syscall/sysentertrên x86-64,svctrên ARM) chuyển sang kernel mode. - Kernel validate quyền và tham số, thực thi, ghi mã lỗi/
errnonếu thất bại. - Quay lại user mode với giá trị trả về.
Đây là biên giới bảo mật: mọi truy cập tài nguyên nhạy cảm phải đi qua đây (trừ khi đã map thiết bị đặc biệt — và vẫn do kernel kiểm soát).
Nhóm system call (theo Silberschatz)
| Nhóm | Ví dụ POSIX |
|---|---|
| Process control | fork, execve, wait, exit |
| File management | open, read, write, close, lseek |
| Device management | ioctl, read/write trên device file |
| Information | getpid, gettimeofday, uname |
| Communication | pipe, socket, shm_open, mmap |
| Protection | chmod, chown, capability-related calls |
API ≠ ABI ≠ System call table
- API: giao diện nguồn (POSIX
read). - ABI: quy ước nhị phân (thanh ghi nào chứa đối số).
- Syscall number: chỉ số trong bảng kernel (có thể khác giữa kiến trúc).
Quan sát thực tế
Trên Linux, strace ./a.out in mọi syscall — công cụ vàng khi debug “hang”, permission denied, hay số lượng open quá nhiều (fd leak).
Tham khảo
- Silberschatz — System Calls.
- man 2 syscalls (Linux).
Trong thực tế
Khi API Node/Python gọi read()/write(), runtime chuyển thành syscall. Latency cao bất thường có thể do block I/O trong syscall (disk/network) — không phải lỗi thuần application logic.
Ghi nhớ nhanh
- Syscall = cổng từ user sang kernel (
open,fork,exec,read). - Thư viện C wrap syscall — không nhầm với API thuần user space.
stracelà công cụ debug syscall trên Linux.
Đang tải sơ đồ…