gpt4 book ai didi

c - 操作系统是用什么C写的?

转载 作者:太空狗 更新时间:2023-10-29 16:19:11 25 4
gpt4 key购买 nike

用 C 编写操作系统之类的东西是有道理的。但是有多少,是什么类型的 C?我的意思是,在 C 中,如果你需要一些堆内存,你会调用 malloc。但是,操作系统堆吗?据我所知,malloc 向操作系统请求内存,然后将其添加到链表或二叉树等。调用栈呢?操作系统负责设置其他应用程序使用的所有这些东西,但它是如何做到的呢?当您想用 C 语言打开或创建一个文件时,相应的函数向操作系统询问该文件。所以......那个电话的另一边是什么样的C?或者在内存分配的另一端?

此外,有多少操作系统实际上是用 C 语言编写的?所有的?依赖架构的代码呢?更高级别的抽象如何 - 是否曾经用更高级别的语言(如 C++)编写过?

我的意思是,我只是出于好奇才问这个问题。我现在正在下载最新的 linux 内核,但这需要很长时间。我不确定我是否最终能够遵循代码——或者我是否会陷入一个我以前从未见过的不可避免的复杂网络中。

最佳答案

所有问题都很棒。答案是:在用于编写操作系统的 C 语言“方言”中,几乎没有任何标准 C 库可用。例如,在 Linux 内核中,标准内存分配函数 malloc、nmalloc、free 等被特殊的内核内部内存分配函数 kmalloc 和 kfree 取代,对它们的使用有特殊限制。操作系统必须提供自己的“堆”——在 Linux 内核中,已分配给内核使用的物理内存页必须是不可分页的,并且通常在物理上是连续的。参见 This linux journal article on kmalloc and kfree .同样,操作系统内核维护自己的特殊调用堆栈,使用它需要从内存中获得 GCC 编译器的特殊支持。

Also, how much of an operating system would actually be written in C? All of it?

据我所知,操作系统绝大多数是用 C 语言编写的。一些特定于体系结构的功能是用汇编程序编码的,但通常很少用于提高可移植性和可维护性:Linux 内核有一些汇编程序,但试图将其最小化越多越好。

What about architecture dependent code? What about the higher levels of abstraction--does that ever get written in higher level languages, like C++?

通常内核是用纯 C 编写的,但有时更高级别的框架和 API 是用更高级别的语言编写的。例如,MacOS 上的 Cocoa 框架/API 是用 Objective C 编写的,而 BeOS 更高级别的 API 是用 C++ 编写的。 Microsoft 的大部分 .NET 框架都是用 C# 编写的,“公共(public)语言运行时”是用 C++ 和汇编程序混合编写的。 Linux 上最常用的 QT 小部件集是用 C++ 编写的。当然,这引入了关于什么才算是“操作系统”的哲学问题。

为此,Linux 内核绝对值得一看,尽管必须说,它庞大且令人生畏,任何人都无法从头开始阅读。

关于c - 操作系统是用什么C写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com