Linux内核和GNU C库之间的关系是什么?

10

我们知道Linux内核是用C语言编写的。但它是否也调用了标准的C函数,比如由GNU C库(glibc)提供的malloc()或额外的函数,比如mmap()?如果是这样,那么这很奇怪,因为直接与硬件进行低级交互,例如内存管理,通常应该是内核的任务。所以,哪个依赖于另一个?哪个更基本/低级?


1
我认为有些是这样的。所以我说这个的原因是因为内核依赖于glibc是没有意义的。虽然有很多讨论哪个glibc版本可以与哪个内核版本一起使用,但这并不意味着内核依赖于glibc。我刚在Linux源代码中进行了快速搜索,并发现malloc在几个地方被定义。有多少汇编代码以及它是什么,我不知道。 - mnestorov
4
我没有看过任何一个的源代码,那你为什么在这里提问?做一些调研,得出结论,然后问不清楚的问题。顺便看一下/lib/string.c(其中可以找到strlen()和类似函数)和其他类似的文件 - 阅读注释,[tag:git]历史记录等。 - z0lupka
3
不,这完全不清楚,听起来非常不尊重,就好像是“我没时间,所以你自己去找答案,挖掘代码吧。”来自编写完美问题的一篇文章中提到: “在提问之前,您是否已经搜索过解决方案?堆栈溢出并不意味着取代基本的搜索技能”。你听说过 git clonegrep 这样的工具吗? - z0lupka
3
为什么不呢?下载源代码只需要5分钟。但是要在源代码中找到你要的东西可能需要更长的时间。 - user253751
2
没有人说你不能问问题。关键是你至少需要自己搜索一些内容,而不是把“提问”栏当成谷歌搜索的请求行。 - z0lupka
显示剩余4条评论
1个回答

19
我们知道Linux内核是用C语言编写的,但它是否也调用标准C函数,如malloc()?
不是。然而,内核定义了类似的函数,例如kmalloc。请注意,这不是库的一部分,它是内核本身的一部分。
还是额外提供了像mmap()这样的函数吗?
不是mmap,但内核中有很多内存管理函数。
这些函数是由GNU C库(glibc)提供的吗?
绝对不是。内核从未使用过glibc。
那么,哪一个依赖于另一个?
glibc的某些部分依赖于内核。其他部分(如strcpy)与内核无关,不依赖于它。内核从未依赖于glibc。您可以在Linux上运行使用不同libc(如“musl”)或根本不使用libc的程序。

谢谢。而在编译Linux内核时,glibc未被列入要求的清单中。 - apadana
非常直接和有用的答案。 - istepaniuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接