大家好,我是小风哥。你有没有想过为什么大多数操作系统都是用C而不是其他语言编写的?这篇文章给你答案。C语言在处理器行业非常流行。首先,不得不说C语言真的非常简单。看看K&R的经典之作《TheCProgrammingLanguage》,薄薄的一本书里都涵盖了C语言。然后看看Java,C#等,如果介绍这些语言的书厚得连个显示器都放不上去,你就不好意思看了。因为C语言非常简单,所以被移植到很多CPU架构中,甚至很多CPU设计者做的第一件事就是移植C语言。假设您使用自己独特的机器指令自己构建了一个CPU。有了CPU,接下来的问题是如何编写程序让CPU开始工作?我们知道CPU只能执行机器指令,而程序员使用高级语言编写程序,所以高级语言必须翻译成机器指令。下一个问题是选择哪种语言?使用极其复杂的Java/C#还是简单的C?答案是不言而喻的。所以接下来你需要的是为你设计的CPU创建一个C编译器,之前是通过gcc的魔术修改完成的,现在你也可以使用LLVM了(注意,这绝不是想象中的那么简单)。看吧,处理器设计者第一个想到的驱动CPU的高级语言就是C,那还需要说为CPU写的操作系统应该用什么语言吗?C语言最独立为什么说C语言最独立?想想Java、Python、C#等是否需要一个庞大的运行时系统(runtimesystem),包括解释器、线程模型、垃圾回收等等。C语言就简单多了。C语言不需要依赖任何运行时系统(不管标准库),不需要内存管理系统,不需要解释器,不需要线程模式等,也就是说你写的C语言程序就可以运行直接在硬件上。直接操作硬件的能力让我们看一下操作系统在整个计算机系统中所处的位置:我们可以看到操作系统位于应用程序和硬件之间,也就是说操作系统必须对硬件进行屏蔽从上层开始,也意味着编写操作系统必须能够直接控制硬件,尤其是内存管理,C语言就是为此而生。C语言本身并不像Java等自包含的内存管理系统。在C语言中,这项工作完全由程序员控制。这种控制在开发操作系统时极其重要。再加上指针这个大杀器,程序员可以轻松直接地操作内存,比如创建页表、DMA控制器、MemorymappedIO等等。有些学生可能害怕指点。确实,对于大多数工作在应用层的程序员来说,我们不需要指针也可以写出有用的程序,比如Java程序、Python程序等,在这些语言中没有指针,我们不需要直接面对硬件,而这恰恰是因为操作系统屏蔽了我们,我们在操作系统层面是逃不掉的,而C语言可以干净利落地解决问题。最接近的高级语言C,没有复杂的数据结构,比如各种容器、哈希表、树等,这些必须程序员自己实现。这是很多同学觉得不方便的地方。但是,这样设计的初衷是为了让程序员准确的知道C代码是如何影响硬件的,C语言也是最接近机器指令的最高级语言。C语言非常透明,这在其他高级语言中几乎是不可能的,因为C语言的设计哲学之一就是:信任程序员。使用C语言的程序员应该很清楚自己在做什么。这非常适合编写接近硬件的程序,涉及大量需要微调的底层细节。当然,缺点只是说了一些常用的数据结构没有内置。总结本文介绍了为什么大多数操作系统都是用C语言编写的,同时也介绍了C语言的诸多优点,但值得注意的是每种语言都有自己的使用场景,C语言也不例外。C语言很适合系统编程等底层方向,但是在应用层你有很多选择。希望本文能帮助您了解C语言和操作系统。
