为什么C语言被用作操作系统的主要编程语言?

8
我在想为什么会使用C语言来编写操作系统。与其他编程语言相比,在操作系统开发中,它有什么优势?

4
这个问题在被提问十个月后经过编辑,并获得一个被接受的答案后被关闭,理由是“基于观点”。我并没有看到回答中涉及太多“观点”,而且我也没有看到任何争议或需要讨论的情况,因此我认为这个问题不应该被关闭。请您帮忙确认一下我的翻译是否符合要求,谢谢! - DevSolar
1
我同意。这个问题并非基于观点,C语言具有特定的语言特性,使其特别适合操作系统开发,并已经被阐述。答案并没有涉及到C语言是否是唯一适合的语言的任何观点,而是基于实际事实,说明了C语言在操作系统开发中的适用性,正如问题所述。 - Dougvj
2个回答

14

C语言是最接近机器代码且能够在不同体系结构之间保持可移植性的语言。

以下是C语言的一些特点,在许多其他语言中不常见,使其适用于操作系统开发:

  • 直接存储器访问。内存管理交由程序员处理,在操作系统开发中很有优势,因为几乎所有有用的东西都涉及直接操作RAM区域。例如,内存映射IO、DMA控制器、页表等。如果这些东西不能直接用C结构表示,则至少可以使用C指针进行访问。
  • 没有运行时依赖关系。与C++、Java、C#等不同,C没有任何运行时依赖关系。它不需要内存管理器,也不需要进程管理,唯一的运行时依赖关系就是有东西调用main()函数。这意味着您可以编写一个C程序,直接在硬件上运行,而不需要期望某种内存管理器或输入输出层。当然,这意味着您必须自己实现,但与其他语言不同,这是可能的。标准库的大部分不需要操作系统(例如string.h),而那些需要的部分在操作系统开发中可以由程序员最小化地实现。
  • 高效的字节级操作。C完全适用于高效的字节级操作,即将数据复制到不同的区域、翻转位并处理小量数据。虽然这对程序员来说更加繁琐,但在RAM的使用和处理时间方面都更加高效,这在操作系统中至关重要。
  • 所有C代码都可以直接一对一转换为易于理解的机器代码。因此,C没有内置的复杂数据结构,如树或哈希表。这必须由程序员实现,其前提是程序员应该能够查看任何C代码,并确切知道它在硬件上执行的操作。这在其他语言中并不会发生,例如Python具有"Dictionary"数据类型,其后端实现并不一定为程序员所知。C(和UNIX)的哲学是程序员比语言更懂,这使得它非常适合微调操作系统和系统开发中的细节,但明显的缺点是没有方便的内置结构。

4

C作为一种中间级语言,提供高级构造同时仍然提供接近汇编语言的低级细节,因此使用C在操作系统开发中相当容易。这是它被广泛应用的主要原因之一:因为C编程语言最初是为系统级别和嵌入式软件开发而设计的。


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