操作系统为什么要用C语言开发
网上有很多讲解为什么用C语言编写操作系统的文章,详细内容可以去搜索更多更详细文章进行解惑,这里进行简单的概述总结。
1. C语言最独立
C语言从依赖角度来说比较简单一点,C语言不需要依赖任何运行时系统(不考虑标准库),它不需要内存管理系统、不需要解释器、不需要线程模式等等,这就意味着你编写的C语言程序可以直接在硬件上跑起来。
2. 直接操作硬件的能力
上图可以看到操作系统位于应用程序与硬件中间,这就意味着操作系统必须对上层屏蔽硬件,这同时也意味着编写操作系统时必须能直接控制硬件,尤其是内存管理,而C语言就是为此而生的。
C语言本身不像Java等自带内存管理系统,在C语言中这一工作完全由程序员控制,这种控制权在开发操作系统时是极为重要的,再加上指针这一大杀器,程序员可以方便的直接操作内存,像创建页表(page table)、DMA
控制器、Memory mapped IO
等等。
有的同学可能对指针(pointer)心生畏惧,的确,对于大部分工作在应用层的程序员来说没有指针我们一样可以编写出有用的程序,像Java程序、Python程序等等,这些语言中没有指针,我们也不需要直接面对硬件,而这恰恰是因为操作系统帮我们屏蔽掉了,而在操作系统这一层我们无可逃避,C语言可以干净利落的解决问题。
3. 最接近底层的高级语言
C语言中没有复杂的数据结构,像各种容器、hash表、树等,程序员必须自己来实现这些,这也是很多同学觉得不方便的地方,然而这样设计的初衷是为了让程序员能确切的知道C代码是怎样影响硬件的,C语言也是最接近机器指令的高级语言,C语言是非常透明,而这一点在其它高级语言中几乎不可能,因为C语言的设计哲学之一就是:
Trust the programmer
使用C语言的程序员应该清楚的知道自己在干啥,这非常适合编写操作系统这种贴近硬件涉及大量底层细节需要精密微调的程序,当然缺点就是刚才所说的没有内置的一些常用数据结构。
4. 小结
值得注意的是每种语言都有自己的使用场景,C语言也不例外,C语言非常适合系统编程等偏向底层的方向,但在应用层开发语言的选项则有很多。
refer to