0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux的源头 从一个故事说起

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-01-13 16:38 次阅读

一、Multics计划

上个世纪六十年代,那个计算机还没有很普及,只有少数人才能使用,而且当时的计算机系统都是批处理的,就是把一批任务一次性提交给计算机,然后就等待结果。并且中途不能和计算机交互。往往准备作业都需要花费很长时间,并且这个时候别人也不能用,导致了计算机资源的浪费。

为了改变这种情况,在1965年前后,贝尔实验室(Bell)、麻省理工学院(MIT)以及通用电气(GE)联合起来准备研发一个分时多任务处理系统,简单来说就是实现多人同时使用计算机的梦想,并把计算机取名为Multics(多路信息计算系统),但是由于项目太复杂,加上其他原因导致了项目进展缓慢,1969年贝尔实验室觉得这个项目可能不会成功,于是就退出不玩了。

二、Unix的诞生

Bell退出Multics计划之后,Bell实验室的那批科学家就没有什么事做了,其中一个叫做Ken Thompson的人在研发Multics的时候,写了一个叫做太空大战(Space Travel)的游戏,大概就是一个很简单的打飞机的游戏,但是这个游戏运行在Multics上。当Bell退出了Multics后,Thompson就没有了Multics的使用环境了,为了能够继续游戏,于是他花了一个月的时间写了一个小型的操作系统,用于运行Space Travel,当完成之后,Thompson怀着激动的心情把身边同事叫过来,让他们来玩他的游戏,大家玩过之后纷纷表示对他的游戏不感兴趣,但是对他的系统很感兴趣。

因为MULTICS是“Multiplexed informtion and Computing Service”的缩写(多路信息计算系统),于是他们命名这个系统为:“UNiplexed Information and Computing Service”,缩写为“UNICS”(每路信息计算系统,与Multics相反)。后来大家取其谐音,就称其为“UNIX”了。

这个时候已经是1970年了,于是就将1970年定为Unix元年,因此计算机上的时间就是从这一年开始计算的。

后来Unix这个小操作系统就在Bell实验室内部流行开,并经过不断地改良最终在1974年7月Unix发展到第5个版本,Bell实验室公开了Unix,结果引起了学术界的广泛兴趣并对其源码索取。所以,Unix第五个版本就以“仅用于教育目的”的协议,提供给各大学作为教学之用,成为当时操作系统课程的范例教材。各大学公司开始通过Unix源码对Unix进行了各种各样的改进和拓展。1978年学术界的老大伯克利大学,推出了一份以第六版为基础,加上一些改进和新功能而成的Unix。并命名为BSD(Berkeley Software Distribution伯克利分发版),开创了Unix的另一分支:BSD系列。

于是乎Unix就有了两个分支,一个就是BSD系列的分支,一个就是Bell本身发放的分支,当时因为Bell属于AT&T,AT&T受到了美国《谢尔曼反托拉斯法》的影响,不能销售除了电话机电报机等之外的商品,后来AT&T分解,Bell可以卖Unix了,Unix走向了商业化,如果想继续使用就需要购买授权,一份授权4万美元。

三、Minix及Linux的诞生

在Unix昂贵的授权费用下,很多大学不得不停止对其研究,老师导致上课也不知道讲什么了。在1987年荷兰有个大学教授安德鲁写了一个Minix,类似于Unix,专用于教学。当Minix流传开来之后,世界各地的黑客们纷纷开始使用并改进,希望把改进的东西合并到Minix中,但是安德鲁觉得他的系统是用于教学的,不能破坏纯净性,于是拒绝了。

在1991年9y月17日,Linus Torvalds(林纳斯.托瓦兹)在互联网上公布了自己写的Linux,可能是表达对安德鲁的不满吧(为什么不接受大家的好意呢?你让大家的满腔热情往哪放呢?),于是Linus发布了一个帖子,大概就是说:我写了一个操作系统的内核,但是还不够完善,你们以任何姿势使用不收费,也可以帮助我一起修改。帖子发出后引起了强烈的反响。在大家的努力下,于1994年Linux的1.0版本正式发布。

为什么会引起这么强烈的反应呢?这就要从了另一个人说起,那就是Richard Stallman(自由软件之父)。Stallman是一个非常“激进”的人,因为Unix商业化的影响,他认为软件是全人类的智慧结晶,不应该为某一家公司服务。在八十年代,他发起了自由软件运动,吹起了共产主义的号角(发起了GNU运动),并发布了软件界的共产主义宣言(GPL协议),并且这一运动得到了很多人的认同。

所谓***自由软件自由就是指:自由使用、自由学习和修改、自由分发、自由创建衍生版。

GNU的定义是一个递归缩写,就是GNU IS NOT UNIX。就是说Unix是流氓,我不是。有意思的是,GNU运动是上个世纪八十年代开始的,而那个时候Linux还没有诞生呢 ,所以Stallman宝宝心里苦啊,就在大家逐渐失去信心的时候,1991年Linus Torvalds带着他的Linux闪亮登场了,给GNU运动画了一个完美的句号。

Linux为什么会引起如此强烈的反响呢?因为Unix有版权,爱好编程的狂热分子在研究Unix的时候很容易吃上官司 ,而Linux是遵循GPL协议的,可以免费使用,让黑客们尽情的施展(这里的黑客指那些技术大牛,不是指那些利用计算机干坏事的人)。于是Linux提供内核(kernel),GNU提供外围软件,就这样GNU/Linux诞生了。

从Unix到Linux的发展关系:

所以,看到这里你就会了解到Unix是1970年出现的,Linux是1991年发布的,但Linux是不同于Unix的操作系统。

四、操作系统的基本概念

上面主要介绍了Linux以及Unix的一些历史故事,下面则介绍操作系统方面的知识。在进入正题之前,我们先简单了解一下操作系统。

我们都知道,CPU是由运算器和控制器组成的,程序在运行的时候就是调用CPU的指令进行一些运算操作,例如加减乘除。CPU能够调用的指令集合,就是指令集。但是不幸的是CPU的生产厂家不止一家,例如IntelAMD等。即便是同一家厂商生产CPU,不同平台之间的指令集也不一样。那么程序员在编写程序的时候会遇到一个尴尬的局面,就是当你在某一个平台编码的时候,如果想将程序移到另外一个平台上,就需要重新编码,重新编码还不是最可怕的,可怕的是你得学习对应的新平台的指令集。

一般而言,我们称直接在硬件层面上进行编程是硬件规格层的编程(hardware spaceifiacation),例如调用CPU提供的指令等。你需要知道的是,不同硬件提供的API是个不相同的。如果程序员要编程还得精通硬件那得多难,所以我们需要一个通用软件来提供统一接口,以屏蔽硬件的差异化。这个通用软件就是操作系统。

操作系统将底层硬件提供的接口进行封装,程序员直接调用由操作系统提供的接口,也称为系统调用。

但是系统封装的接口会很多吗?显然不会很多,因为如果操作系统提过

几万个接口,程序员还不累的学出血。一般而言,系统提供的接口都是短小精悍,我们需要像搭积木一样,将其组装起来提供更为丰富的功能,并且将组装好的代码做成库,供别人使用。这样一来,就是库调用。在Windows上库一般都是dll(Dynamic Link Library),而在Linux或者Unix上我们一般称之为so(shared object),就是共享的代码,大家都可以调用。

现在我们知道了,操作系统的一个重要功能就是将硬件提供的功能进行封装,我们调用操作系统提供的接口就是系统调用(system call)。然后将系统提供的接口组合后形成更丰富的库。当然操作系统还有其他的功能,例如CPU的时间分片、安全保证等。

五、Linux的发行版本

我们知道Linux或者Unix是一个操作系统,1991年的Linus Torvalds公布的是Linux的内核(kernel)。但是要注意的是,公布的是源码,并不是编译好的直接可安装的操作系统,我们如何安装一个操作系统呢?很简单啊,就是先下载一份源码,然后进行编译安装,但是编译的时候程序需要运行在操作系统上啊,操作系统呢?还没有编译呢。于是就陷入了一个死循环中,就是我们要安装操作系统,就需要编译,编译的时候需要操作系统,这样就是鸡生蛋,蛋生鸡。

这里就需要引入交叉编译了,具体做法:假设我们要在电脑上安装Linux,我们把A的硬盘拆下来,放到已经安装了操作系统的电脑B上,然后编译,将编译好的操作系统放到硬盘上,再把硬盘装回去,开机启动,这就是交叉编译安装系统。

这得有多难啊,入门难度实在太高了,所以我们迫切需要一种简单的方式来安装。于是就出现了这么一种公司,他们将已经公开好的Kernel(内核)再加上一些开源的周边软件收集起来编译成二级制文件放到网上供别人使用,其中Red Hat(红帽)就是其中著名的一家。我们知道Linux是遵循GPL协议的,也就是公开免费的,那么他们怎么盈利呢?既然不能卖软件,那么就卖服务呗,比如说,发现了Linux漏洞,然后Red Hat修复,如果你买了我们的服务,我们就将补丁程序给你,并指导你安装,所有问题都帮你解决。

世界上总是不缺好事者,RedHat既然可以这么做,为什么就不能有好心人免费做呢?是的,有这样一个社区,他们把RedHat的源码拿过来,然后编译成操作系统放出去,这就是CentOS,就是社区版的RedHat,所以基本RedHat的补丁包出来一个月之后,CentOS就出现对应的补丁包了。这对于Red Hat是好事还是坏事呢?这恐怕只有当事人知道了,不过在2014年年初传来消息,RedHat收编了CentOS的团队。就像MSDN I TELL YOU 上面都是微软的正版软件,可以随便下载,但是这不也是为微软做了免费宣传吗。

当别人说Linux的版本时,一般来说有两个版本,一个是内核的版本,一个是发行的版本。例如登录到终端执行命令:

root@localhost:/home/Superman# uname -aLinux localhost.localdomain 4.6.0-040600-generic #201606100558 SMP Fri Jun 10 1015 UTC 2016 x86_64 x86_64 x86_64 GNU/Linuxroot@localhost:/home/Superman# more /etc/issueUbuntu 16.04.2 LTS l

从上面可以看出,uname -a 查看了内核的版本,是4.6.0的版本,而 more /etc/issue就是 查看发行版的版本,表示了我安装的是Ubuntu的16.04.2的发行版。

内核更新的信息可以到官网查看:https://www.kernel.org/

六、Linux的哲学思想

A.一切皆文件,把几乎所有的资源都组织成文件的格式,我们只需要一个文本编辑工具,就可以修改工作的特性了,很方便。

B.组合小程序,完成复杂任务,例如将系统调用组合形成库(在Linux就是so结尾的文件)。

C.尽量避免和用户交互,Windows上就是弹框,让你点确定。在Linux上,如果执行一个程序之后没有任何提示,那就是最后的提示。

D.使用纯文本文件保存配置信息,这个在第一点就可以看出来。

七、总结

这篇文章就是对Linux的发展历史进行浅谈,希望Linux可以为你带来快乐。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    我记录的九逃亡故事

    的爱情故事在百公里行走和马拉松的时候,也找到了胜利大逃亡的感觉。关于行走的回忆:磨房百公里、从湖南到湖北夺路求生:马拉松跑者的自白天涯跑路——人生就是场马拉松
    的头像 发表于 10-21 14:17 183次阅读

    中大百年和100故事 | 科技老兵戴辉

    大在香港,张爱玲在港大读过书,所以写入小说中)陈香梅——岭南大学到飞虎队到中美民间大使梁羽生在岭南大学的岁月  (他在家乡认识了岭大避难的老师,随后起到了广州)我记录的九逃亡故事   (里面有不少
    的头像 发表于 10-21 14:17 313次阅读

    ZX-D36 BLE主从一体蓝牙模块技术手册

    ZX-D36是款5.2 ble的主从一体的模块,超低功耗,支持模块之间数据互传
    发表于 09-27 11:30 1次下载

    EMC与EMI站式解决方案:从源头解决,满足您的需求

    深圳比创达|EMC与EMI站式解决方案:从源头解决,满足您的需求
    的头像 发表于 06-28 10:21 428次阅读
    EMC与EMI<b class='flag-5'>一</b>站式解决方案:从<b class='flag-5'>源头</b>解决,满足您的需求

    EMC与EMI站式解决方案:源头到终端的全面防护

    深圳比创达电子|EMC与EMI站式解决方案:源头到终端的全面防护
    的头像 发表于 06-21 10:46 388次阅读
    EMC与EMI<b class='flag-5'>一</b>站式解决方案:<b class='flag-5'>源头</b>到终端的全面防护

    国产蓝牙模组 | 蓝牙主从一体功能应用

    随着科技快速发展,蓝牙技术在各个行业应用中变得非常广泛。今天,我们来分享种非常热门的主从一体蓝牙模块。我们将对它的模式、概念、应用、选购等进行探讨,让读者深入了解这种蓝牙模块。蓝牙的工作模式蓝牙
    的头像 发表于 06-21 08:25 434次阅读
    国产蓝牙模组 | 蓝牙主<b class='flag-5'>从一</b>体功能应用

    山城重庆的“5G+算力”故事

    今天这篇文章,我想从一张5G测速截图开始说起。就是下面这张:根据图上的显示,下行速率827.56Mbps,上行速率84.6Mbps。大家可能会觉得,这个数值并没有什么特别。国内5G已经商用五年了
    的头像 发表于 05-10 08:04 441次阅读
    山城重庆的“5G+算力”<b class='flag-5'>故事</b>

    随机抽取SV数组中的元素方法实现

    如果想从一关联数组中随机选取元素,需要逐个访问它之前的元素,原因是没办法能够直接访问到第N元素。上面的程序示范了如何
    的头像 发表于 03-21 10:11 856次阅读
    随机抽取SV数组中的<b class='flag-5'>一</b><b class='flag-5'>个</b>元素方法实现

    《合宙的第一个10年》故事连载06:成功有秘诀吗?还真有

    上文《逐字稿是很笨很笨的工具》讲到:有了逐字稿,80%的会议都不用召开了。而我也卸任了救火队员的岗位,如同开启了另种人生。时间的脚步不紧不慢,故事继续……1侯总的三次尝试本章的故事主角,姓侯,也是
    的头像 发表于 03-20 08:04 456次阅读
    《合宙的第<b class='flag-5'>一个</b>10年》<b class='flag-5'>故事</b>连载06:成功有秘诀吗?还真有

    《合宙的第一个10年》故事连载01:客户破解了我的孤独症

    合宙是2014年开张的,今年是2024年,正好10年了。合宙的发展很慢,发展10年了,都还没上市。——这10年来收获的最宝贵的资产,是长期起奋斗的团队成员,以及跟合宙起持续提升品质的合作伙伴。合
    的头像 发表于 03-05 08:05 1256次阅读
    《合宙的第<b class='flag-5'>一个</b>10年》<b class='flag-5'>故事</b>连载01:客户破解了我的孤独症

    Jk触发器的故事

    Jk触发器的故事
    的头像 发表于 02-23 04:32 1254次阅读

    工厂维修电机的小故事

    近日,名维修电工的帖子引起了广大网友的热议。这位电工讲述了他在工厂维修电机的小故事,他本可以在3分钟内解决故障,却故意修了4小时。
    的头像 发表于 02-20 12:33 615次阅读

    linux和windows的区别 linux系统般用来干嘛

    Linux的设计理念 Linux开源操作系统,其设计理念是自由、共享和开放。Linux系统遵循类Unix的设计原则,注重系统的稳定性
    的头像 发表于 02-05 14:06 871次阅读

    BLE蓝牙模块主从一体功能应用场景详解

    蓝牙模块支持多种工作模式,如主设备模式、从设备模式、主从一体化工作模式、广播站模式、Mesh组网模式、广播模式和iBeacon模式。在众多工作模式中,主从一体工作模式是最常用的,也是目前较为流行
    的头像 发表于 01-04 09:19 1255次阅读
    BLE蓝牙模块主<b class='flag-5'>从一</b>体功能应用场景详解

    如何从一简单的数学表达式创建Saber模型?

    如何从一简单的数学表达式创建Saber模型,将你的输出描述为输入的函数?例如 out=a*in*in+b (其中 a 和 b 是常数)。
    的头像 发表于 12-05 13:42 685次阅读
    如何<b class='flag-5'>从一</b><b class='flag-5'>个</b>简单的数学表达式创建<b class='flag-5'>一</b><b class='flag-5'>个</b>Saber模型?