在服务器领域,最著名的系统莫过于Unix了,即便Linux也是类Unix的操作系统。Unix 是用 C 语言编写的,而且是世界上第一个用 C 语言编写的操作系统。但是 Unix 是怎么产生的?C 语言又是怎么产生的?Unix 为什么要用 C 语言来编写?相信看完这篇文章你很快就会有了答案。
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 语言。
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 语言已经成为了操作系统开发最常用的编程语言。
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 语言这把利器。
推荐阅读:
获取知识干货、增加面试经验、了解程序人生
欢迎关注微信公众号
回复【面试】,获取技术大厂面试宝典
文章浏览阅读648次。继前面微软公司发布Windows Communication Foundation (WCF)和Windows CardSpace的示例程序之后,微软今天又发布了WF的教程和大量示例,对于学习WF的朋友来说,是一份很好的学习资料。下载包括教程和示例两个压缩包,在示例部分包括如下的Application:l OrderingStateMachinel Ou_微软wf
文章浏览阅读1.1k次。问:第一个错误的版本答:/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */public class Solution extends VersionControl { public int firstBadVersion(int n) { int left = 1; int righ_第一个错误的版本
文章浏览阅读1.2w次,点赞7次,收藏4次。问题如下,出现一大串“ACCESS_MASK”: 不明确的符号1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winspool.h(1187): error C2872: “ACCESS_MASK”: 不明确的符号1> 可能是“C:\Program Files (x86)\Microsoft SD_opencv ambiuous
文章浏览阅读1.1k次,点赞2次,收藏3次。感谢包立南 老师的编写分享!微信公众号:顾问老包(ID:ourbpm)原标题:流程的语言:告别泳道图流程的表达方式就是流程图。它是一种语言,为我们描述那些业务活动是怎样发生的。流程的表达方式也经历了一个逐步演化和发展的过程,按照年代大致可以分成四种类型。业务逻辑图80年代,早期的流程图很简单,我们用来表达一个业务的基本逻辑,目的是很直观地呈现一系列动作之间的逻辑关系,我们可以叫它业务逻辑..._全息流程图
文章浏览阅读818次。反馈答案错、无答案请添加QQ:243631108关于我们大学课后答案公众号初心为:建立一个完整答案的公众号体系,致力做成全网最全的正版答案分享中心,节省大家搜索答案的宝贵时间。在未来,我们将会覆盖完大学九成的课后习题答案,还要推出一系列的复习资料,各高校的历年期末真题。这包括:哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、管理学、艺术学等12个学科门类。还会包含大一基..._数据挖掘概念与技术第三版pdf
文章浏览阅读720次,点赞20次,收藏27次。最简单的ncs v2.6.0开发环境搭建教程最实用的ncs v2.6.0开发环境搭建教程_nrf connect sdk 2.6
文章浏览阅读170次。 校园网页设计 、学校班级网页制作、学校官网、小说书籍、等网站的设计与制作。️HTML静态网页设计作业使用dreamweaver制作,采用DIV+CSS布局,共有多个页面,首页使用CSS排版比较丰富,色彩鲜明有活力。顶部导航及底部区域背景色为100%宽度,主体内容区域宽度 一套优质的网页设计应该包含 (具体可根据个人要求而定)网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程序方面:计划采用最新的网页编程语言HTML5+CSS3+JS程序语_div+css制作图书推荐页面(多个图书)
文章浏览阅读4.8k次。Huber loss也就是通常所说的SmoothL1 loss:SmoothL1对于异常点的敏感性不如MSE,而且,在某些情况下防止了梯度爆炸。在Pytorch中实现的SmoothL1损失是torch.nn.SmoothL1Loss, x和y可以是任何包含n个元素的Tensor,默认求均值。..._-smooth 1 用pytorch实现
文章浏览阅读2.7k次,点赞2次,收藏19次。ZYNQ UltraScale+ MPSoC Linux + ThreadX AMP玩法处理器架构ZYNQ 7000双核ARM-Cortex A9 CPUZYNQ UltraScale+ MPSoC四核ARM-Cortex A53 CPU、双核Cortex-R5 RPU、Mali-400 GPU(一个Geom_zynqmpsoc 多核amp
文章浏览阅读305次。办公软件类:版本:office_ProfessionalEnhancement2016https://download.csdn.net/download/lmhuanying1012/12132421版本:office_2010https://download.csdn.net/download/lmhuanying1012/12132514版本:WPS_2019..._dumpcpp 导出 com组件 源文件
文章浏览阅读175次。https://oldpan.me/别人说的深度学习圣经 https://www.jeremyjordan.me/ 找个时间一起填了_py前端
文章浏览阅读5.3k次,点赞4次,收藏68次。目录1.窗体功能2.使用windows窗体控件库,制作该halcon多功能窗体3.效果展示--图像与操作说明4.如何使用自制的halcon多功能窗体5.视频展示链接与测试代码链接1.窗体功能①按比例显示图像,不填充拉伸②可鼠标拖动图像移动,滚轮缩放③可显示图像十字叉辅助显示④可以显示鼠标位于窗体位置的坐标及图像灰度值⑤可以保存当前窗体中显示的图像⑥可以对窗体进行截图⑦可以插入halcon窗体中的obj 与 msg ,并显示2.使用windows窗体控件库,制作该halcon多功能窗体①_c#联合halcon做模板区域掩膜功能