![內核的結果回傳到什麼進程?](https://rvso.com/image/52097/%E5%85%A7%E6%A0%B8%E7%9A%84%E7%B5%90%E6%9E%9C%E5%9B%9E%E5%82%B3%E5%88%B0%E4%BB%80%E9%BA%BC%E9%80%B2%E7%A8%8B%EF%BC%9F.png)
當進程需要核心模式的操作時,它會使用系統呼叫。那麼,結果是如何回傳給流程的呢?
答案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
.