Kernel

核心的結果返回到哪個程序?

  • March 27, 2014

當程序需要需要核心模式的操作時,它使用系統呼叫。那麼,結果如何返回到流程中呢?

注意:以下所有資訊均來自參考網站


這個連結,我找到了以下資訊。

系統呼叫是使用者空間應用程序和核心提供的服務之間的介面。因為服務是在核心中提供的,所以不能直接呼叫;相反,您必須使用跨越使用者空間/核心邊界的程序。

使用系統呼叫

讓我們看看從使用者空間應用程序中使用它們需要什麼。有兩種方法可以使用新的核心系統呼叫。第一個是方便的方法(不是您可能想要在生產程式碼中做的事情),第二個是需要更多工作的傳統方法。使用第一種方法,您可以通過 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.

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