为什么使用C语言编写驱动程序和操作系统代码?
是否存在大小问题?
是否有其他语言编写的驱动程序?
XP、Vista和Solaris是用哪种语言编写的?
为什么使用C语言编写驱动程序和操作系统代码?
是否存在大小问题?
是否有其他语言编写的驱动程序?
XP、Vista和Solaris是用哪种语言编写的?
C语言编译成机器代码,不需要任何运行时支持语言本身。这意味着可以编写可以在文件系统、虚拟内存、进程以及其他除寄存器和RAM之外的任何东西存在之前运行的代码。
这也是Ada支持强类型的支持以及其他一些重要功能的原因(引用design for safety)。由于其精心设计和建立高完整性系统的明确指南的存在,Ada [9] 是许多关键系统的首选语言 [10]
这个问题的讨论范围已经足够广泛了,进一步深入的细节就不再讨论。但你可能需要查看以下一些指针:
如果有人想进一步了解Ada,请查看:Ada编程(维基教科书)
甚至有一些专门为高度关键应用程序开发的编程语言,例如JOVIAL或HAL/S,后者被航天飞机计划使用。
是否有用其他语言编写的驱动程序?
我见过一些特殊硬件的Linux驱动程序是用Ada编写的,但不知道其他操作系统怎么样。但是,这些驱动程序通常最终会包装C API。
C语言是除汇编语言外最易于在裸机硬件上“入门”的语言。使用C语言(假设您有一个32位的引导加载程序,例如GRUB来执行艰难的模式切换),您只需创建一个小的crt0.asm文件来设置堆栈,然后就可以使用该语言了(不包括libc)。而使用C++,您必须担心动态转换、异常、全局构造函数、覆盖new等等。使用C#,您必须移植.NET运行时(单独需要一个内核),而我不确定Obj-C的要求如何,但我肯定它也有一些要求...
对于驱动程序而言,C语言就是最简单易用的语言。它不仅易于入门,而且易于了解机器级别的操作过程。没有运算符重载会让您困惑之类的事情。当然,在“好”的环境下这很方便,但在Ring 0中,一个坏指针不仅会导致应用程序崩溃,通常还会导致三倍错误(重新启动)、蓝屏或内核恐慌。你真的喜欢了解你的机器中发生了什么。
"为什么我们使用C语言编写驱动程序和操作系统代码?"
这样程序员就不必为每种新机器的每种新汇编语言学习新的语法。
"是否有用其他语言编写的驱动程序?"
从历史上来说,是用汇编语言编写的。我不记得PL/S或BLISS是否可以用于驱动程序。也许是B语言。现代一些勇敢的人使用C++,但他们必须非常小心。在某些情况下,C++可以更容易地用于用户模式驱动程序。
Lisp机器的操作系统使用Lisp语言编写,这表明您不必使用C或汇编语言。由于廉价个人电脑的出现,Lisp机器业务被摧毁了,而这些个人电脑的操作系统当然是用C和汇编语言编写的。
C语言是最早适合编写操作系统的语言之一(不包括汇编语言),因此它很早就被广泛使用。虽然其他语言也适用于编写操作系统,但由于其悠久的历史和程序员对其结构和语法的熟悉,C语言仍然很受欢迎。
C语言也是一种教授内存管理知识的语言,同时它也足够底层,能够展示硬件和软件之间的障碍。这在当今许多方法论中是罕见的,因为它们更倾向于抽象化,高于任何硬件级别。我发现C语言是学习这些知识的好方法,同时还能编写快速的代码。
"C语言编译成机器码,不需要对语言本身进行任何运行时支持."
"这是C语言最好的特点。"