你有没有想过,为什么大部分操作系统都使用c语言来编写而不是其它语言呢?这篇文章给你答案。
c语言在处理器界很受欢迎
首先不得不说的是c语言真的非常简单,看看k&r经典的the c programming language,薄薄的一本书就把c语言讲完了。
再去看看java、c#等,要是介绍这些语言的书不能厚到去垫显示器你都不好意思去读。
由于c语言很简单,被移植到了许多cpu架构上,甚至许多cpu设计者第一件事就是把c语言移植过来。
假设你自己打造了一款cpu,有自己独特的机器指令,现在cpu有了,接下来的问题是你该怎么编写程序让你的cpu开始工作呢?关于cpu的工作原理你可以参考《你管这破玩意叫cpu?》 我们知道,cpu只能执行机器指令,程序员都使用高级语言来编写程序,因此必须将高级语言翻译成机器指令,接下来的问题是选择什么语言呢?使用极为复杂的java/c#还是简单的c呢?答案不言而喻。
因此你接下来需要的就是为你设计的cpu打造一款c编译器,之前都是通过魔改gcc来完成,现在你也可以使用llvm(注意,这绝不是一件想象中那么简单的事情)。
看到了吧,处理器设计者想到的第一个用来驱动cpu的高级语言就是c,那么针对该cpu编写的操作系统该用什么语言还用得着说吗?
c语言最独立
为什么说c语言最独立呢? 想一想java、python、c#等是不是需要一大坨运行时系统(runtime system),包括解释器、线程模型、垃圾回收等等。
而c语言就简单太多了,c语言不需要依赖任何运行时系统(不考虑标准库),它不需要内存管理系统、不需要解释器、不需要线程模式等等,这就意味着你编写的c语言程序可以直接在硬件上跑起来。
直接操作硬件的能力
让我们来看一下在整个计算机系统中操作系统位于哪里:
可以看到操作系统位于应用程序与硬件中间,这就意味着操作系统必须对上层屏蔽硬件,这同时也意味着编写操作系统时必须能直接控制硬件,尤其是内存管理,而c语言就是为此而生的。
c语言本身不像java等自带内存管理系统,在c语言中这一工作完全由程序员控制,这种控制权在开发操作系统时是极为重要的,再加上指针这一大杀器,程序员可以方便的直接操作内存,像创建页表(page table)、dma控制器、memory mapped io等等。
有的同学可能对指针(pointer)心生畏惧,的确,对于大部分工作在应用层的程序员来说没有指针我们一样可以编写出有用的程序,像java程序、python程序等等,这些语言中没有指针,我们也不需要直接面对硬件,而这恰恰是因为操作系统帮我们屏蔽掉了,而在操作系统这一层我们无可逃避,c语言可以干净利落的解决问题。
最接近底层的高级语言
c语言中没有复杂的数据结构,像各种容器、hash表、树等,程序员必须自己来实现这些,这也是很多同学觉得不方便的地方,然而这样设计的初衷是为了让程序员能确切的知道c代码是怎样影响硬件的,c语言也是最接近机器指令的高级语言,c语言是非常透明,而这一点在其它高级语言中几乎不可能,因为c语言的设计哲学之一就是:
trust the programmer
使用c语言的程序员应该清楚的知道自己在干啥,这非常适合编写操作系统这种贴近硬件涉及大量底层细节需要精密微调的程序,当然缺点就是刚才所说的没有内置的一些常用数据结构。
总结
本篇介绍了为什么大部分操作系统都使用c语言来编写,也介绍了c语言的许多优点,但值得注意的是每种语言都有自己的使用场景,c语言也不例外,c语言非常适合系统编程等偏向底层的方向,但在应用层你的选项则有很多。
简单实用的人体接近探测器,Capacitance probe
非洲猪瘟快速筛查系统HM-PCR仪器的特点是什么
海能达推出数字防爆对讲机 配备高容量电池
三相双电源自投控制原理图
联想小新Pro 14 2021亮相,标配11.5英寸OLED屏和DCI-P3色域
为什么大部分操作系统都使用C语言来编写
研讨会预告 | 详解 NVIDIA 在 SIGGRAPH 2023 的发布 —— NVIDIA AI 解决方案赋能传媒娱乐行业
或颠覆光学测距技术!新型铌酸锂激光技术诞生
在MM32F013x上实现UART单线半双工的功能应用
印度产iPhone手机下月开卖,售价大幅下降
嵌入式系统实用电源管理技术应该如何选择?
如何正确选择一款空气净化器
芯闻精选:台积电将于2022年下半年开始量产3纳米芯片
尼康野心搞VR相机,裁员亦在所不惜
微软新Edge浏览器准备就绪,Beta标识已移除
WIFI联盟撤销华为是怎么回事 华为受到美国诸多限制
5G彩电时代已经来临
移通创联Modbus转Profibus网关连接ABBACS530变频器配置案例
电动车接连起火,动力电池被推向风口浪尖
创意设计之LED摇摇棒