差分fork()和sys_fork()

时间:2015-08-07 09:12:49

标签: linux kernel system-calls

我看到所有系统调用(比如说x)与另一个调用sys_x()相关: 例如:fork和sys_fork(),open()和sys_open()等。

这些sys_x()调用有什么重要意义?我们可以在哪里使用这些电话?

1 个答案:

答案 0 :(得分:2)

  

这些sys_x()调用有什么重要意义?

如名称所示,这些是在内核模式下执行的实际系统调用。

您可以看到,当您从应用程序中调用fork(2)open(2)时,您并未直接调用原始系统调用;相反,你正在调用glibc的包装器,知道如何调用实际的系统调用。这个间接步骤是必需的,因为系统调用是特定于体系结构的,所以细节隐藏在glibc中。

  

我们可以在哪里使用这些电话?

你没有。例如,sys_fork()是特定于Linux的;其他UNIX变体不需要(并且可能不会)实现sys_fork()函数。内核中处理分叉的确切函数是依赖于系统的。事实上,Linux有一个名为sys_fork()sys_open()等的函数

例如,在fork(2)的情况下,在Linux中流程或多或少像:

fork() - > glibc包装 - > raw syscall invocation - >过渡到内核模式 - >系统调用查找 - > sys_fork() - > do_fork()