Linux

系統呼叫是從使用者態與 Linux 核心互動的唯一方式嗎?

  • April 16, 2014

是否有任何其他介面,例如 /proc 文件系統?

Linux 核心系統呼叫 API 是主要的 API(雖然隱藏在 libc 下,並且很少被程序員直接使用),並且大多數標準 IPC 機制都嚴重偏向於一切都是文件方法,這在此處消除了它們,因為它們最終需要讀取/寫(和更多)電話。

但是,在大多數平台上(如果您排除所有系統呼叫以使您到達那裡),有一種方法:VDSO。這是一種機制,核心將一個(或多個)稍微神奇的頁面映射到每個程序(通常以 ELF .so 的形式)。您可以使用 或 將其視為或linux-vdso.so類似。這實際上是核心和使用者程序之間的記憶體映射 IPC(儘管在其目前實現中是單向的)。ldd``/proc/PID/maps

它通常用於加速系統呼叫,最初是linux-gate.so為了解決 x86 性能問題而實現的 ( ),但它也可能包含核心數據和訪問函式。呼叫喜歡getcpu()並且gettimeofday()可能使用這些而不是進行實際的系統呼叫和核心上下文切換。這些優化呼叫的可用性由 glibc 啟動程式碼檢測和啟用(取決於平台可用性)。目前的實現包含一個(只讀)共享核心變數頁面,稱為“VVAR”頁面,可以直接讀取。

您可以通過檢查 的輸出來檢查這一點,strace -e trace=clock_gettime date以查看您的date命令是否進行任何clock_gettime()系統呼叫,而使用正常工作的 VDSO 則不會(時間將由 VDSO 頁面中的函式從 VVARS 頁面讀取,請參閱 參考資料arch/x86/vdso/vclock_gettime.c)。

這裡有一個有用的技術總結:http: //blog.tinola.com/ ?e=5一個更詳細的教程:http ://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken和手冊頁: http: //man7.org/linux/man-pages/man7/vdso.7.html

引用自:https://unix.stackexchange.com/questions/124928