linux 系统api 和kernel api 一样么
发布网友
发布时间:2022-04-23 06:17
我来回答
共5个回答
热心网友
时间:2023-10-03 05:18
linux kernel只提供一种叫系统调用给应用程序,linux系统提供了glibc这样的函数库专门封装了内核提供的系统调用,所以应用程序的开发就直接调用glibc库提供的库函数就可以了。
注:1、linux系统包括linux kernel、glibc库等。
2、因为应用程序调用系统调用是通过汇编指令完成的,所以才有了glibc的封装,简化了应用开发的难度。
kernel中提供的系统调用处理函数
sys_socket、sys_open、sys_close、sys_read、sys_write等
glibc中对应的是
socket、open、close、read、write等
glibc中的socket函数就是调用了int $0x80这条汇编指令,从而使cpu切换到内核态,执行sys_socket这个函数的。
函数调用流程:
socket->int $0x80->sys_socket。
现在2.6版本的内核提供了300多个系统调用:
glibc的下载地址:
http://ftp.gnu.org/gnu/glibc/
linux kernel的下载地址:
http://www.kernel.org/pub/linux/kernel/
热心网友
时间:2023-10-03 05:19
linux内核中调用用户空间的程序可以使用init这样的方式,调用 kernel_execve
不过内核还是提供了更好的辅助接口call_usermodehelper,自然最后也是调用kernel_execve
调用特定的内核函数(系统调用)是 GNU/Linux 中软件开发的原本就有的组成部分。但如果方向反过来呢,内核空间调用用户空间?确实有一些有这种特性的应用程序需要每天使用。例如,当内核找到一个设备, 这时需要加载某个模块,进程如何处理?动态模块加载在内核通过 usermode-helper 进程进行。
让我们从探索 usermode-helper 应用程序编程接口(API)以及在内核中使用的例子开始。 然后,使用 API 构造一个示例应用程序,以便更好地理解其工作原理与局限。
usermode-helper API
usermode-helper API 是个很简单的 API,其选项为用户熟知。例如,要创建一个用户空间进程,通常只要设置名称为 executable,选项都为 executable,以及一组环境变量(指向 execve 主页)。创建内核进程也是一样。但由于创建内核空间进程,还需要设置一些额外选项。
热心网友
时间:2023-10-03 05:19
你说的是 system call吧? Linux下开发使用glibc封装的版本,一般不直接调用。具体man syscalls:
The system call is the fundamental interface between an application and
the Linux kernel.
System calls and library wrapper functions
System calls are generally not invoked directly, but rather via wrapper
functions in glibc (or perhaps some other library). For details of
direct invocation of a system call, see intro(2). Often, but not
always, the name of the wrapper function is the same as the name of the
system call that it invokes. For example, glibc contains a function
truncate() which invokes the underlying "truncate" system call.
...
写记事本可以不调用sysem call, 如文件读写可以用标准的封装fread/fwrite而不是系统调用read/write。甚至可以直接用toolkit库的封装,如用GTK+或Qt等库的函数,不需要考虑具体的实现。
热心网友
时间:2023-10-03 05:20
kernel api只在写系统内核时使用,一般编程不会用。
一般编程最底层的调用也是系统调用,是对内核的封装,是与操作系统交互的最低层接口。
一般在linux编程还是使用库api,加系统调用。
热心网友
时间:2023-10-03 05:20
kernel就是Linux的核心
即使C也要调用kernel api吧
个人理解
热心网友
时间:2023-10-03 05:18
linux kernel只提供一种叫系统调用给应用程序,linux系统提供了glibc这样的函数库专门封装了内核提供的系统调用,所以应用程序的开发就直接调用glibc库提供的库函数就可以了。
注:1、linux系统包括linux kernel、glibc库等。
2、因为应用程序调用系统调用是通过汇编指令完成的,所以才有了glibc的封装,简化了应用开发的难度。
kernel中提供的系统调用处理函数
sys_socket、sys_open、sys_close、sys_read、sys_write等
glibc中对应的是
socket、open、close、read、write等
glibc中的socket函数就是调用了int $0x80这条汇编指令,从而使cpu切换到内核态,执行sys_socket这个函数的。
函数调用流程:
socket->int $0x80->sys_socket。
现在2.6版本的内核提供了300多个系统调用:
glibc的下载地址:
http://ftp.gnu.org/gnu/glibc/
linux kernel的下载地址:
http://www.kernel.org/pub/linux/kernel/
热心网友
时间:2023-10-03 05:19
linux内核中调用用户空间的程序可以使用init这样的方式,调用 kernel_execve
不过内核还是提供了更好的辅助接口call_usermodehelper,自然最后也是调用kernel_execve
调用特定的内核函数(系统调用)是 GNU/Linux 中软件开发的原本就有的组成部分。但如果方向反过来呢,内核空间调用用户空间?确实有一些有这种特性的应用程序需要每天使用。例如,当内核找到一个设备, 这时需要加载某个模块,进程如何处理?动态模块加载在内核通过 usermode-helper 进程进行。
让我们从探索 usermode-helper 应用程序编程接口(API)以及在内核中使用的例子开始。 然后,使用 API 构造一个示例应用程序,以便更好地理解其工作原理与局限。
usermode-helper API
usermode-helper API 是个很简单的 API,其选项为用户熟知。例如,要创建一个用户空间进程,通常只要设置名称为 executable,选项都为 executable,以及一组环境变量(指向 execve 主页)。创建内核进程也是一样。但由于创建内核空间进程,还需要设置一些额外选项。
热心网友
时间:2023-10-03 05:19
你说的是 system call吧? Linux下开发使用glibc封装的版本,一般不直接调用。具体man syscalls:
The system call is the fundamental interface between an application and
the Linux kernel.
System calls and library wrapper functions
System calls are generally not invoked directly, but rather via wrapper
functions in glibc (or perhaps some other library). For details of
direct invocation of a system call, see intro(2). Often, but not
always, the name of the wrapper function is the same as the name of the
system call that it invokes. For example, glibc contains a function
truncate() which invokes the underlying "truncate" system call.
...
写记事本可以不调用sysem call, 如文件读写可以用标准的封装fread/fwrite而不是系统调用read/write。甚至可以直接用toolkit库的封装,如用GTK+或Qt等库的函数,不需要考虑具体的实现。
热心网友
时间:2023-10-03 05:20
kernel api只在写系统内核时使用,一般编程不会用。
一般编程最底层的调用也是系统调用,是对内核的封装,是与操作系统交互的最低层接口。
一般在linux编程还是使用库api,加系统调用。
热心网友
时间:2023-10-03 05:20
kernel就是Linux的核心
即使C也要调用kernel api吧
个人理解