系统调用和系统调用服务例程的区别
Difference between System call and System call service routines
我正在研究系统调用的实际工作原理并学习了一个术语 system call service routine
。
我很困惑 system call
和 system call service routine
之间有什么区别?
例如,在Linux 系统man syscalls
列出了所有系统调用有一个系统调用execve()
来执行由路径名指定的新程序。后来我发现它实际上调用了系统调用服务例程sys_execve
(execve()
的系统调用号为11(__NR_exevce)。因此,在sys_call_table向量中,条目11包含 sys_execve()
).
的地址
什么是__NR_exevce
?我在哪里可以找到 sys_call_table vector
?
我还发现在 linux 上,系统调用服务例程通常具有 sys_xyz()
形式的名称,其中 xyz()
是系统调用。
系统调用是抽象的东西。这是用户 space 与内核之间的一种 方式 通信,通过将特定数据传递到平台特定的特定寄存器。
内核是一个程序。 Linux 内核是用 C 编程语言编写的。
这里的“系统调用服务例程”是C语言中处理特定系统调用的函数名。
所以用户space程序调用系统调用号__NR_execve
。在 x86 架构上,用户 space 程序将数字 59 放入 eax 寄存器,然后执行指令 int 0x80
。在内核中执行特定的系统调用处理例程,导致内核中的函数sys_execve()
被执行。
What is __NR_exevce ?
C 编程语言中的一个宏,它提供对与 execve
系统调用关联的系统调用号的平台无关访问。它允许编写跨所有 Linux 平台的可移植程序,这些程序用 C 编程语言编写,在编译期间自动选择正确的平台特定系统调用号。在 arm 上 __NR_execve
是 11,但在 x86 上是 59,等等。参见 https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#Cross_arch-Numbers
Where I can find sys_call_table vector
在内核源代码中。在长生不老药上搜索它。 https://elixir.bootlin.com/linux/latest/ident/sys_call_table
我正在研究系统调用的实际工作原理并学习了一个术语 system call service routine
。
我很困惑 system call
和 system call service routine
之间有什么区别?
例如,在Linux 系统man syscalls
列出了所有系统调用有一个系统调用execve()
来执行由路径名指定的新程序。后来我发现它实际上调用了系统调用服务例程sys_execve
(execve()
的系统调用号为11(__NR_exevce)。因此,在sys_call_table向量中,条目11包含 sys_execve()
).
什么是__NR_exevce
?我在哪里可以找到 sys_call_table vector
?
我还发现在 linux 上,系统调用服务例程通常具有 sys_xyz()
形式的名称,其中 xyz()
是系统调用。
系统调用是抽象的东西。这是用户 space 与内核之间的一种 方式 通信,通过将特定数据传递到平台特定的特定寄存器。
内核是一个程序。 Linux 内核是用 C 编程语言编写的。
这里的“系统调用服务例程”是C语言中处理特定系统调用的函数名。
所以用户space程序调用系统调用号__NR_execve
。在 x86 架构上,用户 space 程序将数字 59 放入 eax 寄存器,然后执行指令 int 0x80
。在内核中执行特定的系统调用处理例程,导致内核中的函数sys_execve()
被执行。
What is __NR_exevce ?
C 编程语言中的一个宏,它提供对与 execve
系统调用关联的系统调用号的平台无关访问。它允许编写跨所有 Linux 平台的可移植程序,这些程序用 C 编程语言编写,在编译期间自动选择正确的平台特定系统调用号。在 arm 上 __NR_execve
是 11,但在 x86 上是 59,等等。参见 https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#Cross_arch-Numbers
Where I can find sys_call_table vector
在内核源代码中。在长生不老药上搜索它。 https://elixir.bootlin.com/linux/latest/ident/sys_call_table