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 的程序。