日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

图解Linux系统调用

發布時間:2025/3/21 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解Linux系统调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Linux下面,我們經常調用系統API來完成內核的操作,例如調用open打開一個文件。

這個過程看似簡單,其實已經包括了一次從用戶態到內核態,然后由內核態返回用戶態的過程。

當然用戶不會直接調用系統調用,而是調用glibc中的函數open打開文件。

在glibc中維護了一張表格,在syscalls.list里面,是c函數到系統調用的映射。

編譯的過程會將這個映射表格變成代碼。

真正調用系統調用的時候,會將參數放入CPU寄存器中,然后通過trap陷入內核,這里調用的是syscall。

ENTRY (syscall)

movq %rdi, %rax /* Syscall number -> rax. ?*/

movq %rsi, %rdi /* shift arg1 - arg5. ?*/

movq %rdx, %rsi

movq %rcx, %rdx

movq %r8, %r10

movq %r9, %r8

movq 8(%rsp),%r9 /* arg6 is on the stack. ?*/

syscall /* Do the system call. ?*/

cmpq $-4095, %rax /* Check %rax for error. ?*/

jae SYSCALL_ERROR_LABEL /* Jump to error handler if error. ?*/

ret /* Return to caller. ?*/

在內核中,也是有一個sys_call_table數組的。

數組中的內容來自與syscall_64.tbl,這是一個文本,編譯的時候會將里面的系統調用名稱放入代碼中。

在內核中首先從CPU寄存器中拿到系統調用號,然后在這個表中查找open系統調用對應的內核函數,經過查抄對應的是sys_open,于是開始調用sys_open真正的打開一個文件。

總結

以上是生活随笔為你收集整理的图解Linux系统调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。