內核的結果回傳到什麼進程?

內核的結果回傳到什麼進程?

當進程需要核心模式的操作時,它會使用系統呼叫。那麼,結果是如何回傳給流程的呢?

答案1

筆記:以下所有資訊均來自參考網站


鏈接,我找到了以下信息。

A系統調用是用戶空間應用程式和核心提供的服務之間的介面。由於該服務是在核心中提供的,因此無法直接呼叫;相反,您必須使用跨越用戶空間/核心邊界的進程。

使用系統調用

讓我們看看從用戶空間應用程式使用它們需要什麼。有兩種方法可以使用新的核心系統呼叫。第一個是方便的方法(您可能不想在生產程式碼中執行此操作),第二個是需要更多工作的傳統方法。使用第一種方法,您可以透過系統呼叫函數呼叫由索引標識的新函數。使用 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;
}

正如您所看到的,系統呼叫函數將要使用的系統呼叫表的索引作為其第一個參數。如果有任何參數需要傳遞,這些參數將在呼叫索引之後提供。大多數系統呼叫都包含一個 SYS_ 符號常數來指定它們到 _ 的對應。NR索引。例如,您可以使用 syscall 來呼叫索引 __NR_getpid:

syscall( SYS_getpid )

系統呼叫函數是特定於體系結構的,但使用一種機制將控制權轉移到核心。此參數基於 _ 的映射NR 索引到 SYS提供的符號/usr/include/bits/syscall.h(在建構 libc 時定義)。切勿直接引用該文件;而是使用/usr/include/sys/syscall.h.

相關內容