Unix 与 C 语言的关系

在服务器领域,最著名的系统莫过于Unix了,即便Linux也是类Unix的操作系统。Unix 是用 C 语言编写的,而且是世界上第一个用 C 语言编写的操作系统。但是 Unix 是怎么产生的?C 语言又是怎么产生的?Unix 为什么要用 C 语言来编写?相信看完这篇文章你很快就会有了答案。

Multics 和 Unix

1964年,在 Unix 诞生之前,美国贝尔实验室、通用电气、和麻省理工学院联合开发了一个项目,叫做 Multics操作系统。Multics 在当时取得了巨大的成功,因为它给了人们一个真正可用并且很稳定的操作系统。当时从学校到政府机关,到处都在安装 Multics。

但是时间到了 1969年,因为种种原因,贝尔实验室的 Ken Thompson 和 Dennis Ritchie 决定放弃Multics,于是贝尔实验室退出了这个项目。Ken Thompson 和 Dennis Ritchie 决定开发一个更为简单并且高效的操作系统,并把它命名为 Unix,于是他们俩就成为了 Unix 之父。

和 Unix 相比,Multics 有两个比较致命的缺点,一是需要安装在非常昂贵的机器上,普通的计算机没有办法安装。二是设计非常复杂,这也是贝尔实验室的工程师退出的主要原因。不过 Ken Thompson 和 Dennis Ritchie 还是从 Multics 上得到很多启发,可以说 Unix 是 Multics 的简化以及更新。

说到这里,C 语言还没有出场,因为它在那个时候还没有被发明出来。Unix 操作系统的第一个版本是纯粹用汇编语言编写出来的。一直到了 1974年,第四个版本才改用 C 语言进行开发。在讲 C 语言之前,我们还不得不先说一下 BCPL 和 B 语言。

BCPL 与 B 语言

Ken Thompson 和 Dennis Ritchie 最初用汇编语言来开发 Unix,因为在那个时候,所有的操作系统都是用汇编语言来开发的。不过当时 Multics 是一个例外,Multics 项目组使用了 PL/1 来进行开发。它的价值就在于向世人展示了用一门高级语言也可以开发出一套操作系统。Ken Thompson 和 Dennis Ritchie 也受到了鼓舞,他们决定用汇编之外的语言重新开发 Unix。他们最初的选择是 BCPL。BCPL 最早是由 Martin Richards 发明用来开发编译器的语言。但是 Ken Thompson 和 Dennis Ritchie很快发现,如果他们想在小型计算机 DEC PDP-7 上使用 BCPL,就需要对这个语言本身进行一些修改。于是就产生了后来的 B 语言。

B 语言作为系统开发语言,也存在很多的缺点,于是后来它又被改进为 NB 语言 (New B)。可是 NB 还是有很多的问题,于是 Dennis Ritchie 就又发明了 C 语言,最终在 1974年,Ken Thompson 和 Dennis Ritchie 一起用 C 语言重新编写了第四版的 Unix 系统。现在,C 语言已经成为了操作系统开发最常用的编程语言。

通往 C 语言与 Unix 之路

Dennis Ritchie 曾经解释过自己为什么要发明 C 语言,以及使用 B 语言过程中遇到的一些困难:

  • 只能处理计算机字:B语言所有的操作都是通过计算机字来处理的,在那个时候,能够处理字节的编程语言对工程师们来说是一个梦。

  • 没有类型:准确的说,B语言只有一种类型,计算机字。如果你有一个字符串,可能你需要把它分成多个变量来保存,比如一个21个字符的字符串,就需要 6 个变量。

  • 不支持浮点类型运算:在那个时候,大部分硬件已经都可以开始支持浮点运算了,但是 B 语言还不支持这种操作。

B 语言的这些问题,开发低效,在机器上运行缓慢等等,都迫使 Dennis Ritchie 发明一种新的编程语言。最开始被称为 New B,后来逐渐演化成了 C 语言。

C 语言解决了 B 语言的很多缺陷,并很快成为了开发操作系统最流行的一种编程语言。新版本的 Unix 以及今天很多类 Unix 的操作系统都是用 C 语言开发出来的。

好了,讲到这里,我想大家都清楚了 Unix 和 C 语言是怎么来的了,以及为什么要用 C 语言来编写 Unix。现在有很多非常流行的语言比如 Java 和 Python,它们是一种更高级的编程语言,是在 C 语言这一层之上的。但是如果大家想做设备驱动或者系统内核模块的修改,还是离不开 C 语言这把利器。

推荐阅读:

《一篇文章带你快速弄清楚什么是终端》

《一篇文章看清楚 Linux 的职业发展方向》

《2020年你最需要掌握的11种编程语言》

《微软:悬赏10万美金破解 Linux 系统》

《安卓到底是不是Linux》

获取知识干货、增加面试经验、了解程序人生

欢迎关注微信公众号

回复【面试】,获取技术大厂面试宝典

世界上最著名的操作系统是用什么语言编写的?相关推荐

  1. 太神了!世界上最著名的菲尔人格测试!

    太神了!世界上最著名的菲尔人格测试! 引导语:这个测试是菲尔博士在著名主持人欧普拉的节目里做的,国际上称为"菲尔人格测试",这已经成为很多大公司人事部门实际用人的"试金石 ...

  2. android开发用什么操作系统,Android是目前世界上最流行的操作系统

    原标题:Android是目前世界上最流行的操作系统 Android是目前世界上最流行的操作系统,而且基于该系统的设备在全球范围内处于统治级地位.不过,对于很多安卓手机用户来说,Root这个词对他们十分 ...

  3. 我决定谈一谈世界上最著名的虫子:BUG !

    程序员遇到BUG后,最好的方法是? 我决定谈一谈世界上最著名的虫子:BUG ! BUG困扰了一代又代的程序员,不论是杰出的计算机科学家,还是像Linus Torvalds(Linux内核创始人).Bi ...

  4. 世界上十个著名悖论详解

    今天看了十个著名悖论的最终解答:)发一下跟大家分享~第一个电车问题耶鲁大学的公开课Justice也有提到哟~还有第九个薛定谔的猫里提到的公式什么的公主真的不懂啊QAQ 1.电车难题(The Troll ...

  5. 世界上最著名也最危险的APT恶意软件清单

    本文尝试列举出由各国军事情报处的网络安全部门开发的最危险.最有效也是最闻名的恶意软件清单,其中有些可以说早已盛名在外,另一些可能你还没听过--然而这正是它最危险之处. 一.Regin Regin被认为 ...

  6. 【历史上的今天】12 月 10 日:世界上第一位程序员诞生;Ada 语言发布;第一人称射击游戏的开拓者

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 12 月 10 日,在 120 年前的今天,瑞典国王和挪威诺贝尔基金会首次颁发了诺贝尔奖.根据诺贝尔 ...

  7. 一步步编写操作系统 42 用c语言编写内核

    在这之前,我们一直用汇编语言直接与机器对话,如果大家不知道这个世界上有高级语言的话,我想大家也不会觉得写汇编代码的过程很辛苦,哈哈,幸福确实是比较出来的.相对于汇编语言,用c 语言写内核是非常爽的事, ...

  8. 世界上最著名的几个 bug

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  9. 世界上最著名的24句哲理

    1.记住该记住的,忘记该忘记的.改变能改变的,接受不能改变的. 2.能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶. 3.怨言是上天得至人类最大的供物,也是人类 ...

最新文章

  1. python读取字符串的list dict_转:Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...
  2. jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
  3. Java --- 基础学习Ⅱ
  4. 【分块】区间众数(金牌导航 分块-1)
  5. magento2邮件调试方法
  6. MySQL通过接口导入hive_利用Sqoop将MySQL数据导入Hive中
  7. systemctl不可用时,使用service命令关闭防火墙
  8. python连接sql引用的第三方库_python连接sqlserver数据库操作
  9. 计算机基础应用软件,全国一级计算机考试软件
  10. 使用DeskPins工具钉住窗口
  11. 基于Tesseract的OCR识别--身份证
  12. html表格背景图片格式,CSS常见样式(二)——列表,背景,边框,行高,表格,vertical-align...
  13. k8s部署rabbitMQ集群
  14. 微信读书增长策略:“无限卡会员业务”
  15. 【深度学习】 Designing Network Design Spaces
  16. html验证座机号码_js验证输入是否为手机号码或电话号码示例
  17. linux环境pwd下ls,Linux基础命令2:cd、pwd、ls、stat、touch、alias
  18. 入侵特斯拉汽车Model S 信息娱乐系统漏洞
  19. python心脏病预测案例_Python3机器学习实践:逻辑回归【实例:心脏病预测】
  20. springboot+vue交流互动系统(源码+文档)

热门文章

  1. 新手开水果店到底赚不赚钱,开水果店一年赚钱大概有多少
  2. Html CSS的三种链接方式
  3. 教育部公示2022-2025学年面向中小学生的全国性竞赛活动名单
  4. RAC集群技术(1)
  5. cad幕墙下料lisp_2017最新100套玻璃幕墙设计CAD节点大样剖面详图
  6. python evaluate函数_Evaluate用法
  7. Halcon标定板标定流程
  8. 脑机接口科普0014——大脑
  9. Ubuntu16.04下升级gcc到7.5.0版本(可选gcc任意版本)
  10. 安远一中2021年高考成绩查询,燃青春,磨利剑,战百天,夺桂冠——安远一中举行2021届高考“百日冲刺”誓师大会...