为什么用C语言编写操作系统?

本文探讨了为何大多数操作系统选择C语言编写,因其简洁性、对CPU架构的适配性和直接操控硬件的能力。C语言无需运行时系统,提供内存管理控制,适合底层系统编程,如操作系统和驱动开发。关键词:C语言、操作系统、移植性、硬件控制、指针、独立性
摘要由CSDN通过智能技术生成

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨码农的荒岛求生

来源丨码农的荒岛求生(ID:escape-it)

大家好,我是小风哥。

你有没有想过,为什么大部分操作系统都使用C语言来编写而不是其它语言呢?这篇文章给你答案。

C语言在处理器界很受欢迎

首先不得不说的是C语言真的非常简单,看看K&R经典的"The C Programming Language",薄薄的一本书就把C语言讲完了。

6ca15b8acb2e1e866744c94bd6d432e9.png

再去看看Java、C#等,要是介绍这些语言的书不能厚到去垫显示器你都不好意思去读。

由于C语言很简单,被移植到了许多CPU架构上,甚至许多CPU设计者第一件事就是把C语言移植过来。

假设你自己打造了一款CPU,有自己独特的机器指令,现在CPU有了,接下来的问题是你该怎么编写程序让你的CPU开始工作呢?关于CPU的工作原理你可以参考《你管这破玩意叫CPU?

我们知道,CPU只能执行机器指令,程序员都使用高级语言来编写程序,因此必须将高级语言翻译成机器指令,接下来的问题是选择什么语言呢?使用极为复杂的Java/C#还是简单的C呢?答案不言而喻。

因此你接下来需要的就是为你设计的CPU打造一款C编译器,之前都是通过魔改gcc来完成,现在你也可以使用LLVM(注意,这绝不是一件想象中那么简单的事情)。

03355ad0d6f7bb9164d09d9ea63a977c.png

看到了吧,处理器设计者想到的第一个用来驱动CPU的高级语言就是C,那么针对该CPU编写的操作系统该用什么语言还用得着说吗?

C语言最独立

为什么说C语言最独立呢?

想一想Java、Python、C#等是不是需要一大坨运行时系统(runtime system),包括解释器、线程模型、垃圾回收等等。

0fa951f9651178932da1d26a6e4e20d4.png

而C语言就简单太多了,C语言不需要依赖任何运行时系统(不考虑标准库),它不需要内存管理系统、不需要解释器、不需要线程模式等等,这就意味着你编写的C语言程序可以直接在硬件上跑起来。

直接操作硬件的能力

让我们来看一下在整个计算机系统中操作系统位于哪里:

aadd30fe7ce43a1ed268d38c2623f98a.png

可以看到操作系统位于应用程序与硬件中间,这就意味着操作系统必须对上层屏蔽硬件,这同时也意味着编写操作系统时必须能直接控制硬件,尤其是内存管理,而C语言就是为此而生的。

C语言本身不像Java等自带内存管理系统,在C语言中这一工作完全由程序员控制,这种控制权在开发操作系统时是极为重要的,再加上指针这一大杀器,程序员可以方便的直接操作内存,像创建页表(page table)、DMA控制器、Memory mapped IO等等。

有的同学可能对指针(pointer)心生畏惧,的确,对于大部分工作在应用层的程序员来说没有指针我们一样可以编写出有用的程序,像Java程序、Python程序等等,这些语言中没有指针,我们也不需要直接面对硬件,而这恰恰是因为操作系统帮我们屏蔽掉了,而在操作系统这一层我们无可逃避,C语言可以干净利落的解决问题。

关于指针,你可以参考小风哥《彻底理解C语言中的指针》这篇文章。

最接近底层的高级语言

C语言中没有复杂的数据结构,像各种容器、hash表、树等,程序员必须自己来实现这些,这也是很多同学觉得不方便的地方,然而这样设计的初衷是为了让程序员能确切的知道C代码是怎样影响硬件的,C语言也是最接近机器指令的高级语言,C语言是非常透明,而这一点在其它高级语言中几乎不可能,因为C语言的设计哲学之一就是:

Trust the programmer

使用C语言的程序员应该清楚的知道自己在干啥,这非常适合编写操作系统这种贴近硬件涉及大量底层细节需要精密微调的程序,当然缺点就是刚才所说的没有内置的一些常用数据结构。

总结

本篇介绍了为什么大部分操作系统都使用C语言来编写,也介绍了C语言的许多优点,但值得注意的是每种语言都有自己的使用场景,C语言也不例外,C语言非常适合系统编程等偏向底层的方向,但在应用层你的选项则有很多。

希望这篇对大家理解C语言与操作系统有所帮助。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

b1b440a7620fda63887d76fb9e057850.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里5823fe8a0fd8fb051a7b4e410277b34c.gif好文分享给更多人↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值