内核的结果返回到什么进程?

内核的结果返回到什么进程?

当进程需要内核模式的操作时,它会使用系统调用。那么,结果是如何返回给流程的呢?

答案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.

相关内容