系統調用是用戶空間進程請求核心服務的唯一受控入口,構成了作業系統安全性、可移植性與抽象層的基石。
作業系統為用戶態進程與硬體資源(CPU、磁碟、網路、顯示器等)交互提供的一組標準化 C 函數介面。用戶程序通過 libc 封裝的包裝函數(如 open()、read()、write()、mmap())觸發核心態執行,核心完成權限檢查、資源分配、硬體驅動協調後返回結果。
glibc 包裝函數,將系統調用號存入 rax,參數依次置於 rdi、rsi、rdx、r10、r8、r9。syscall 指令(舊版用 int 0x80),CPU 切換至核心態,跳轉至 entry_SYSCALL_64 入口。sys_call_table 索引對應處理函數(如 sys_open)。rax。sysret 返回用戶態,glibc 檢查返回值,若為負則設 errno 並返回 -1。現代核心還支援 vdso(虛擬動態共享對象)加速 gettimeofday、clock_gettime 等頻繁調用,避免上下文切換開銷。