Kernel
核心的結果返回到哪個程序?
當程序需要需要核心模式的操作時,它使用系統呼叫。那麼,結果如何返回到流程中呢?
注意:以下所有資訊均來自參考網站
從這個連結,我找到了以下資訊。
系統呼叫是使用者空間應用程序和核心提供的服務之間的介面。因為服務是在核心中提供的,所以不能直接呼叫;相反,您必須使用跨越使用者空間/核心邊界的程序。
使用系統呼叫
讓我們看看從使用者空間應用程序中使用它們需要什麼。有兩種方法可以使用新的核心系統呼叫。第一個是方便的方法(不是您可能想要在生產程式碼中做的事情),第二個是需要更多工作的傳統方法。使用第一種方法,您可以通過 syscall 函式呼叫由索引標識的新函式。使用 syscall 函式,您可以通過指定其呼叫索引和一組參數來呼叫系統呼叫。例如,下面顯示的簡短應用程序
sys_getjiffies
使用它的索引呼叫您。#include <linux/unistd.h> #include <sys/syscall.h> #define __NR_getjiffies 320 int main() { long jiffies; jiffies = syscall( __NR_getjiffies ); printf( "Current jiffies is %lx\n", jiffies ); return 0; }
如您所見, syscall 函式將要使用的系統呼叫表的索引作為其第一個參數。如果有任何參數要傳遞,這些將在呼叫索引之後提供。大多數係統呼叫都包含一個 SYS_ 符號常量來指定它們到 _ NR索引的映射。例如,您使用 syscall 呼叫索引 __NR_getpid 為:
syscall( SYS_getpid )
syscall 函式是特定於體系結構的,但使用一種機制將控制權轉移到核心。該參數基於_NR 索引到由(在建構 libc 時定義)提供的SYS符號的映射。
/usr/include/bits/syscall.h
永遠不要直接引用這個文件;而是使用/usr/include/sys/syscall.h
.