操作系统|为什么用C语言编写操作系统?为什么不使用其他语言?

文章图片

文章图片

文章图片
也许很多人会说 , 因为C出现得早啊。 其他语言都这么晚 , 作为时间来说 , 这确实是一个原因的 。 但是为什么不用其它语言去重写或者新建个系统呢?毕竟 现在出色的语言那么多 。
金属线的物理迷宫称为二极管 , 晶体管 , 电阻器和电容器 , 它们传递电压以执行布尔逻辑 , 算术运算 。 二进制数字字符串是物理硬件中电压状态的代理 。
硬件仅表示电压状态 。 C所做的全部工作是为程序的蓝图定义一个受限语法中的英文文本单词 , 并将其翻译成二进制数字字符串 。 计算机只理解那些二进制数字 。 除了一系列文本文件 , 计算机不知道C是什么 。
运行二进制的计算机:
可以修改Python , JavaScript或任何其他语言 , 以便直接产生正确的二进制数字序列 。 你能做到这一点 。 然而C不是计算机 。 当您考虑计算机的真正含义时 , 您会意识到它是一个用于定义和解释数据序列的系统 。 一种机械设备 , 它使用电来通过对二进制序列达成一致的解释来翻译命题 。
语言作为蓝图:
汇编器是CPU制造商提供的一种语言 , 他们在其中定义了许多有意义的词和操作 , 以使您可以访问CPU定义的扩展功能(以及系统扩展名) , 以此来达到尽可能多的功能 。
C为软件编写者总结了汇编程序 , 其方式重点在于访问计算机功能的最基本方面 。 如前所述 , 很多语言都可以做到这一点 , 大多数计算机语言都间接地总结了汇编程序代表的标准 。
汇编程序代码必须转换为那些二进制数字字符串 。 我们通常称汇编程序为低级 , 但这是主观的 。 从直接写入二进制数字的角度来看 , 它是高级的 。 C使编写可以清晰映射到二进制结构的程序蓝图的过程比在Assembler中更方便 。 C不会创建实际的计算机代码 , 而只是创建蓝图 。 编译器和链接器生成计算机可以运行的实际代码 。
编码操作系统:
为什么要使用C操作系统?就好比在一定面积的硅中只能存在这么多的电压/能量 。 而因为翻译 , 硬件大小限制 。 计算机的启动代码必须紧凑 。 启动BIOS的软件将开始硬件的识别 , 并为随后加载的操作系统提供挂钩 , 其大小受到必要性的限制 。 引导加载程序位于硬盘驱动器的开头 。 它是BIOS运行的程序 , 引导加载程序决定要启动的操作系统 。 基本上是连锁反应 。 全部为二进制 。 具有大小要求和确定性 。
【操作系统|为什么用C语言编写操作系统?为什么不使用其他语言?】代码确定性:
除了它们的设计支持某些场景外 , 没有什么能阻止C成为Web开发语言和JavaScript成为系统语言 。 C以这样一种方式定义为标准 , 即翻译正确编写的C代码的编译器将生成满足这些标准的代码 。 许多其他语言的定义根本就没有一种方式 , 当您使用编译器翻译它们时 , 会产生适当约束的二进制代码 。
如果我在JavaScript中使用原型声明 , 是否会创建我可以在操作系统上下文中依赖的代码类型?评估本质上使我朝着具有非确定性属性的自我修改代码的方向迈进了呢?我可以在编译器中优化使用eval吗?我可以像使用C的对齐类型约定那样在JavaScript接口中很好地约束它吗?
一旦使用了C之类的语言 , 就意味着最好需要通过代码访问服务的代码使用兼容的调用约定和应用程序二进制接口进行接口 。 可以与操作系统的C代码很好地啮合 , 庞大的C代码主体意味着更少的集成工作和更多的数据交换确定性 。
切换到另一种语言可能会导致放弃数十年的代码 。 也许此代码中的许多代码都有安全性问题和其他缺陷 , 但是在功能范围内 , 它可以工作 。 过渡的情况需要符合高标准 , 以证明这种重大变化是合理的 。
优缺:
C的积极属性意味着它已成为一个值得信赖的工具 , 可以为高层(相对于Assembler)创建操作系统和硬件访问例程的蓝图 。 C语言设计的缺点 , 也许是它试图总结的机器模型的反映 , 自然而然地编写了不那么安全的代码 。 特别是如果您从Web复制和粘贴 。
用Lisp编写操作系统听起来是最好的主意 。 特别是基于那些积极倡导Lisp的人的主张 。 Lisp并未映射到系统定义中首选的抽象 , 而命令式语言越来越流行证明了这一点 。 对于可以替代操作系统的C的语言 , 人们进行了大量的研究 。 领先的竞争者是Rust and Go 。 他们似乎是取代C的最实用的候选人 。 然而只是到现在 , 还是C语言 。
蓝图:
编程语言是蓝图 。 一些蓝图说明了每件事应该如何完成 。 其他蓝图应该做什么 。 编译器和链接器将蓝图转换为计算机实际运行的代码 。 一串二进制数字 , 对机器产生某种意义 , 以产生您设计的效果 。 C成为了蓝图规范 , 该规范成为了作为操作系统的主要代码 。 替换语言意味着您可能不得不替换其他所有基于该语言的内容 。
推荐阅读
- 兔子|兔兔这么可爱,为什么要吃屎?
- 番茄芝士薄底披萨做法
- 不用油不用牛奶,教你做蜂蜜蛋糕,蒸或烤都可以,只需4种食材
- 白色的发糕是用什么粉做的,难做吗?
- 春分,快手艾草青团的用料,没有一点难度,软糯可口,超简单又好吃的艾草青团
- 肺部|长期抽烟的人,点烟前牢记几点,或许不用戒烟,肺部也会舒服点!
- 银河系|不用一万光年,银河系就是一座黑暗森林|近期科技趣评
- 意大利生牛肉沙拉做法
- 想吃点心不用买,教你在家做“驴打滚”,不用烤箱,软糯香甜!
- 家常炖老母鸡,不用炖3小时,教你一妙招,40分钟鸡肉软嫩入味
