首先不得不说的是c语言真的非常简单,看看k&r经典的the c programming language,薄薄的一本书就把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#等是不是需要一大坨运行时系统(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语言非常适合系统编程等偏向底层的方向,但在应用层你的选项则有很多。
机器学习中梯度下降法的过程
使用跟踪的激光雷达看得更远
嵌入式Linux设计:文件系统和引导加载程序
福清首座5G智能垃圾分类屋能通过5G系统连接,实现数据可视化
MediaTek发布天玑8000 系列轻旗舰5G移动平台
为什么大家都喜欢用C语言编写操作系统
IBM Watson为什么会失败?
打破旧有网络模式,正当其时
三星A51白色版曝光搭载三星Exynos 9611处理器和后置四摄设计
汇川技术荣获CMCD2023年度运动控制领域最具影响力品牌奖
广州市新能源汽车地方补贴申领信息登记工作启动会在CVC威凯成功举办
超级电容器技术与其主要电池技术的对比
意法半导体推出身份证微控制器ST23YR80
RF-DG-52PAS Zigbee3.0协调器Home Assistant上手指南
示波器探头接口整理汇总
5.5英寸小米MIX曝光,2999元起年底推出?
荣耀制造的荣耀MagicBook Pro锐龙版首次配备游戏本专用芯片
ir2104中文资料详细(ir2104引脚图_特点和技术参数及驱动电路)
吸锡器哪个牌子好用
业界首家性能和功耗领先的PCI Express Gen 5时钟和缓冲器