Linux 内核和 GNU C 库有什么关系?
What is the relation between Linux kernel and GNU C library?
我们知道 Linux 内核是用 C 语言编写的。但是它是否也调用标准的 C 函数,如 malloc()
或额外的函数,如 mmap()
,这些函数由 GNU C 库提供(通用语言库)?在那种情况下,这很奇怪,因为直接与硬件进行低级交互,例如内存管理,应该几乎总是内核的任务。那么,哪个依赖于另一个?哪个更fundamental/low-level?
We know that Linux kernel is written in C. But does it also call standard C functions like malloc()
没有。然而,内核定义了类似 kmalloc
的函数。请注意,这不是图书馆的一部分;它是内核本身的一部分。
or extra functions like mmap()
不是mmap
,但是内核中有a lot内存管理函数。
which are provided by GNU C library (glibc)?
绝对不是。内核从不使用 glibc。
So, which is dependent on the other?
glibc 的某些部分依赖于内核。其他部分(如 strcpy
)与内核无关,不依赖于内核。内核从不依赖于 glibc。您可以在 Linux 上 运行 使用不同 libc(如 "musl")或根本不使用 libc 的程序。
我们知道 Linux 内核是用 C 语言编写的。但是它是否也调用标准的 C 函数,如 malloc()
或额外的函数,如 mmap()
,这些函数由 GNU C 库提供(通用语言库)?在那种情况下,这很奇怪,因为直接与硬件进行低级交互,例如内存管理,应该几乎总是内核的任务。那么,哪个依赖于另一个?哪个更fundamental/low-level?
We know that Linux kernel is written in C. But does it also call standard C functions like malloc()
没有。然而,内核定义了类似 kmalloc
的函数。请注意,这不是图书馆的一部分;它是内核本身的一部分。
or extra functions like mmap()
不是mmap
,但是内核中有a lot内存管理函数。
which are provided by GNU C library (glibc)?
绝对不是。内核从不使用 glibc。
So, which is dependent on the other?
glibc 的某些部分依赖于内核。其他部分(如 strcpy
)与内核无关,不依赖于内核。内核从不依赖于 glibc。您可以在 Linux 上 运行 使用不同 libc(如 "musl")或根本不使用 libc 的程序。