当前位置:   article > 正文

2021-09-13 《鸟叔Linux私房菜》阅读纪录 第一章-Linux是什么&&如何学习-Linux 是什么&&Torvalds的Linux 发展_鸟叔的linux

鸟叔的linux

List

Linux 是什么

在我的理解中Linux就是Kernel+shell,也就是核心层加系统呼叫层

Linux和Unix 的历史

早期计算机

早期的计算机输入设备只有卡片阅读机、输出设备只有打印机,用户也无法与操作系统互动,改良后可以使用键盘来进行输入,但当时,比如在学校里
只有一台主机,无法满足多人同时使用的需求,于是为了解决这个问题,就发明了**【兼容分时系统(Compatible Time-Sharing System, CTSS)】**,它可以让大型主机透过提供数个终端机(terminal)以联机进入主机,从而利用主机的资源进行运算工作,大致如下图

在这里插入图片描述

其中每个terminal只有输入/输出功能,并没有相关软件与运算功能,而主机有运算功能,运算完毕就会将结果输出到terminal,这个架构是不是有点像现在的前后端分离的架构呢
这个兼容分时系统可以说的上是现代操作系统的鼻祖,在当时也算是跨时代的技术,他可以让多个使用者在某一段时间内分别使用CPU的资源,感觉上你会觉得大家是同时使用该主机的资源

1969年:ken Thompason的小型 file server system(Unix原型)

当时为了更加强化大型主机的功能,让主机资源可以提供给更多使用者来使用,于是发起了一个叫【Multics的计划】,这个计划的目的是想让主机达成提供300个以上的终端机联机使用的目标
不过由于种种原因失败了,但是也培养了一大批的人才,其中有一个人叫Ken Thomopson,他从这个计划中获得一些点子,且出于个人需要,希望开发出一个小小的操作系统来提供自己的需求
当时天时地利人和,有主机(当时DEC公司推出的一般PDP-7刚好没人使用),有时间(妻子和孩子去探亲去了,刚好有一个月的时间对系统进行开发),于是他进行四个星期的奋斗,他终于以汇编写出了
一组核心程序,同时包括一些核心工具程序,以及一个小小的文件系统,这个系统就是Unix 的原型。
Thompson这个文件系统有两个重要的概念,分别是

  • 所有的程序或者系统装置都是文件
  • 不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标
    这也是后来对Linux影响比较大的部分

1973年:Unix的正式诞生,Ritchie等人以C语言写出了第一个正式的Unix核心

这里其实有趣的事,Thompson会写这套Unix核心程序,却是想要移植一套名为【太空旅游】的游戏,而B语言-------->C语言的发明,也是为了实现一个游戏
由于Thompson写的那个操作系统的实用性很高,而由于Unics是以汇编程序写的,导致了每次安装到不同的机器需要重新编写汇编语言,极大的影响了可移植性,
与是当时就有将Unics这个操作系统改变成以高级语言写的系统,当时的B语言编译出来的效能不是很好,于是Dennis Ritchie就将B语言重新改写成C语言,再以C语言重新改写bianyiUnics核心
最后正名与发行出Unix的正式版本
到这里大家应该就能总结出这Unix 的诞生了吧
大致就是:

  • Thompson 为了玩游戏,天时地利人和写了一套操作系统
  • 贝尔实验室的人觉得这个操作系统很好用,就想把它移植,并发明了C语言

1977:重要的Unix分支-BSD的诞生

虽说贝尔属于AT&T,但是AT&T此时对于Unix 采取开放式态度,Unix是以高阶的C语言写成的,理论上具有可移植型
只要取得源码,并根据对应的主机进行一个修订就能移植到另一部不同的主机上头了
所以在1973年以后,Unix便得以与学术界合作开发,其中,最重要的接触就是与加州伯克莱大学的合作了。
伯克莱大学的Bill Joy
https://baike.baidu.com/item/%E5%A8%81%E5%BB%89%C2%B7%E7%BA%B3%E5%B0%94%E9%80%8A%C2%B7%E4%B9%94%E4%BC%8A/10735666?fromtitle=Bill%20Joy&fromid=9148331&fr=aladdin

Bill Joy

Bill Joy
在取得Unix源码后,着手修改成适合自己机器的版本,并且增加了很多的工具和编译软件,最终将其命名为
Berkeley Software Distribution(BSD)
这个BSD是Unix很重要的一个分支,后来的可以安装在x86硬件架构上的FreeBSD就是BSD改版而来

1979:重要的System V架构与版权宣告

由于Unix的高度可移植性与强大的性能,且没有版权的纠纷,很多的商业公司开始了自己的Unix系统的发展
但是,由于操作系统的核心(Kernel)必须和硬件配合,且每一家生产计算机硬件的公司并没有什么协议得到概念
各自都有各自的模式,所以,每个硬件的厂商需要为他们自己的计算机硬件开发合适的Unix系统,另外,由于没有厂商对个人计算机设计Unix系统
于是,早期并没有支持个人计算机的Unix计算机出现。
而且即使每家厂商出的Unix在架构上大同小异,但是且真的仅能支持自身的硬件,但是到了1979年System V出版到第七版后,情况才有改善
但是AT&T出于商业的考虑,和当时现实环境的思考,想将Unix的版权收回,因此,AT&T在1979年发行的第七版Unix中,提别提到了【不可对学生提供源代码】,也造成Unix业界之间的紧张气氛,也引爆了很多商业纠纷

1984:X86架构的Minix操作系统开始撰写并于两年后诞生

版权声明影响最大的当然属于教授,没有核心代码,也就无法让学生们认识到Unix,又注意到Unix第七版可以移植到X86架构上,于是乎,Andrew Tanenbaum教授以改写Unix并移植到X86的想法,且为避免版权纠纷,在撰写时完全不看源码且完全兼容Unix,手动写了一个叫Minix的Unix like的核心程序,并以磁带进行贩卖和传递

1984年之二:GNU计划和FSF基金会成立

Richard Mathew Stallman 属于当时黑客圈相当出名的人工智能实验室
当时的黑客圈对于软件的着眼点几乎都是在「分享」,黑客们都认为互相学习对方的程序代码,这样才是产生更优秀的程序代码的最佳方式!
所以AI实验室的黑客们通常会将自己的程序代码公布出来跟大家讨论,这个特色对于史托曼的影响很大!
1984年,史托曼开始GNU计划,这个计划的目的是:建立一个自由、开放的Unix操作系统(FreeUnix)
但是建立一个操作系统谈何容易,而且在当时的GNU是仅有自己一个人单打独斗的史
托曼,这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?

聪明的史托曼干脆反其道而,「既然操作系统太复杂,我就先写可以在Unix上面运行的小程序,
这总可以了吧?」在这个想法上,史托曼开始参考Unix上面现有的软件,并依据这些软件的作
用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的原始码,以避免吃上官司。后来
一堆人知道免费的GNU软件,并且实际使用后发现与原有的专利软件也差不了太多,于是便转而
使用GNU软件,于 是GNU计划逐渐打开知名度。

虽然GNU计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件,都
得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译程序,
那不就是大家都需要的软件了吗?因此他便开始撰写C语言的编译程序,那就是现在相当有名的
GNUCCompiler(gcc)!这个点相当的重要!这是因为C语言编译程序版本众多,但都是专利软件,
如果他写的C编译程序够棒,效能够佳,那么将会大大的让GNU计划出现在众人眼前!

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件,所以他与律师
草拟了有名的通用公共许可证(General Public License, GPL),并且称呼他为copylef(相对于专利软
件的copyright!)。
由GNU所开发的几个重要软件,如:

  • Emacs
  • GNU C (GCC)
  • GNU C Library (glibc)
  • Bash shell

1988年:图形接口XFree86计划

1991年:芬兰大学生Linus Torvalds的一则简讯

到了1991 年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息,宣称他以 bash, gcc
等GNU的工具写了一个小小的核心程序,该核心程序单纯是个玩具,不像GNU那么专业。不过
该核心程序可以在Intel 的386机器上面运作就是了。这让很多人很感兴趣!从此开始了Linux不平
凡的路程!

GNU、自由软件与开发原始码

自由软件的运动

将原始码连同软件程序释出的举动,在GNU计划的范畴之内就成为自由软件运动

自由软件的GNU GPL

GPL(GNU General Public License, GPL)自由软件的重点并不是指「免费」的,而是指具有「自由度。freedom」的软件,
自由度的意义是:使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件

总之,一 个软件挂上了GPL版权宣告之后,他自然就成了自由软件!这个软件就具有底下的特色

  • 取得软件与原始码:你可以根据自己的需求来执行这个自由软件
  • 复制:你可以自由的复制该软件
  • 修改:你可以将取得的原始码进行程序修改工作,使之适合你的工作
  • 再发行:你可以将你修改过的程序,再度的自由发行,而不会与原先的撰写者冲突
  • 回馈:你应该将你修改过的程序代码回馈于社群

你所修改的任何一个自由软件都不应该进行以下的行为:

  • 修改授权:你不能将任何一个GPL的自由软件,在你修改后取消他的GPL授权
  • 单纯贩卖:你不能单纯的贩卖自由软件

这里的单纯是指,不可只贩卖该软件,还得搭配售后服务以及相关手册等。

自由软件如何获利

其实这里自由软件的获利大部分都是通过贩卖服务来进行的

GPL的优点

由于自由软件提供原始码,所以就会有很多人帮你检查,这样一来程序漏洞和优化就有很快的进展
自由软件也慢慢的具有了以下的优点
++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • 软件安全性较佳
  • 软件执行效能较佳
  • 软件除错时间较短
  • 贡献的原始码水远都存在
开放原始码(Open Source)的要求

所谓的开源并不仅仅只可以读取原始码,就可以被成为开源软件,软件的授权须符合地下的基本需求

  • 公布原始码且用户具有修改权:用户可以任意的修改与编译程序代码,这点与自由软件差异不大:
  • 任意的再散布:该程序代码全部或部份可以被贩卖,且程序代码可成为其他软件的组件之一,作者不该宣
    称具有拥有权或收取其他额外费用。
  • 必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
  • 承上,用户可使用与原本软件不同的名称或编号来散布。
  • 不可限制某些个人或团体的使用权
  • 不可限制某些领域的应用:例如不可限制不能用于商业行为或者是学术行为等特殊领域等等
  • 不可限制在某些产品当中,亦即程序代码可以应用于多种不同产品中。
  • 不可具有排他条款,例如不可限制本程序代码不能用于教育类的研究中,诸如此类。
专利软件(Close Source)

专利软件和开放软件区别最大的就是是否释出原始码
开放软件会释出原始码,而专利软件仅推出可执行的二进制程序(binary program)
专利软件的优点和缺点
优点是有人维护
缺点是灵活度比较低,且要钱()
当然也不是所有的专利软件都是需要钱的,也有免费的
免费的专利软件代表的授权模式有

  • Freeware
  • Shareware

Torvalds的Linux发展

Linux 的诞生

Linux与Minix

Torvalds从小就接触到了计算机,学习了汇编的知识,上了大学的他并不满足于terminal的Input/Output的功能,想要去写一个自己的Unix
刚好当时的Andrew Tanenbaum教授写了一个Minix系统,他在购买了最新的Intel 386后,便立即安装了Minix系统,且Minix 这个系统是附有源代码的
所以Torvalds也经由这个原始码学到了很多的核心程序的设计概念。为Linux的出现奠定了基础

多任务的处理

早期的x86架构计算机不是很受重视的原因就是因为x86芯片对多任务的处理不佳,直到386计算机推出后,有了很大的改善
而且计算机的效能并不是很好,所以当时的工程师们养成了对计算机性能的压榨癖好,Torvalds也不例外,Torvalds当时花了不少
的时间来测试386的性能。
他 的重要测试就是在测试
386的多功性能。首先,他写了三个小程序,一个程序会持续输出A、一个会持续输出B,最后一
个会将两个程序进行切换。他将三个程序同时执行,结果,他看到屏幕上很顺利的一直出现
ABABAB…他知道,他成功了!

初次释出Linux 0.02

撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行文
件的编译程序。好在有GNU计划提供的bash工作环境软件以及gcc编译程序等自由软件,让托瓦
兹得以顺利的撰写核心程序。他参考Minix的设计理念与书上的程序代码,然后仔细研究出386个人
计算机的效能优化,然后使用GNU的自由软件将核心程序代码与386紧紧的结合在一起,最终写
出他所需要的核心程序。而这个小玩意竟然真的可以在386上面顺利的跑起来~还可以读取Minix
的文件系统。他希望这个程序可以获得大家的一些修改建议,于是他便
将这个核心放置在网络上提供大家下载,同时在BBS上面贴了一则消息:

Hello everybody out there using minix-
I'm doing a (free) operation system (just a hobby,
won't be big and professional like gnu) for 386(486) AT clones .

I've currently ported bash (1.08) and gce (1.401,
and things sccm to work. This implics that i1l get
something practical within a few months, and I'dlike to know
what features most pcople want. Any suggestions are we come,
but I won't promise I'1l inplenent them :-)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这条消息引起了很多人的注意,他们也去Torvalds提供的网站上下载了这个核心来安装,当时Torvalds放置核心的那个FTP网站的目录名叫:Linux
于是,大家便称这个核心为Linux了,此时的Linux就是那个Kernel,另外Torvalds丢到该目录下的第一个核心版本为0.02

此时便出现了一个问题,就是Linux并不兼容Unix,也就是很多在Unix上运作的软件放到Linux上跑,发现很多的软件是无法运行的
于是为了兼容Unix,他选择了修改Linux,让Linux能够符合运作的规范,为了让所有的软件都可以在Linux上执行,于是Torvalds便开始参照标准的POSIX规范

POSIX(Portable Operating System Interface)

  • POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口

这个决定,赋予了Linux优良的血统,为以后Linux的流通和使用率保驾护航。

Linux的发展

Linux的发展,除了个人的力量和理念之外,还有着一个最重要的团队,下面介绍一下Linux的发展史

单人维护阶段

刚开始的Linux全部是由Torvalds来维护的,如果用户使用是发生了问题,或者有特殊的需求,用户就会进行反馈,Torvalds能够解决的问题范围内,它都能很快速的进行Linux核心的更新和除错

广大黑客志工加入阶段

但是,,维护一个系统,单单靠一个人的力量是远远不够的,比如有些硬件Torvalds是无法获得的,他也就无法进行驱动的撰写和相关软件的改良。
这个时候就有有志人士来帮忙,因为Linux 是Open Source的,所以很多的工程师很容易就能够跟随Linux 原本的设计架构开发出兼容的驱动或者软件,Torvalds
也很乐意去把他们写的程序/软件带入内核中,前提是测试能满足需求且没什么问题,而且Torvalds比较务实,对于Linux所欠缺的项目,先要求有且能跑,后面才会进行进一步的改良(有点像迭代模型?),这样的心态使得使用者和开发者都得到了极大的满足和鼓励 ,也使得Linux飞速发展。
另外,为因应这种随时都有程序代码加入的状况,于是Linux便逐渐发展成具有模块的功能!亦即是将某些功能独立出于核心外,在需要的时候才加载到核心中。如此一来,如 果有新的硬件驱动程序或者其他协议的程序代码进来时,就可以模块化,大大的增加 了Linux核心的可维护能力!

核心功能细部分发展阶段

到后来,Linux发展的太快,加入了太多的功能,Torvalds一个人维护就显得力不从心
这时就有很多来自世界各地的朋友来帮忙对核心进行测试并加入核心原始程序,他们会将志工们的修补程序或者新功能的程序代码进行测试,并将结果上传给Torvalds看,让Torvalds做最后核心加入的原始码的选择与整并,这种分层的模式也使得Linux 的发展变得迅速。
之后,这个从未谋面的虚拟团队为了方便数据的传输,建立了一个知名的网站:Http://www.kernel.org

Linux的核心版本

奇数、偶数版本分类

在2.6.x 版本以前,托瓦兹将核心的发展趋势分为两股,并根据这两股核心的发展分别给子不同的核
心编号,那就是:

  • 主、次版本为奇数:发展中版本(development)
    如2.5.xx,这种核心版本主要用在测试与发展新功能,所以通常这种版本仅有核心开发工程师会使用。如
    果有新增的核心程序代码,会加到这种版本当中,等到众多工程师测试没问题后,才加入下一-版的稳定核
    心中:
  • 主、次版本为偶数:稳定版本(stable)
    如2.6.xx,等到核心功能发展成熟后会加到这类的版本中,主要用在一-般家庭计算机以及 企业版本中。
    重点在于提供使用者一个相对稳定的Linux作业环境平台。
    至于释出版本则是在主、次版本架构不变的情况下,新增的功能累积到一定的程度后所新释出的核心
    版本。而由 于Linux核心是使用GPL的授权,因此大家都能够进行核心程序代码的修改。因此,如
    果你有针对某个版本的核心修改过部分的程序代码,那么 那个被修改过的新的核心版本就可以加上
    所谓的修改版本了。

主线版本、长期维护版本(longterm version)

不过,这种奇数、偶数的编号格式在3.0推出之后就失效了。从3.0版开始,核心主要依据主线版
本(MainLine)来开发,开发完毕后会往下一个主线版本进行。 例如3.10 就是在3.9 的架构下继
续开发出来的新的主线版本。通常新一版的主线版本大约在 2~3个月会被提出。之所以会有新的
主线版本,是因为有加入新功能之故。

而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发(End of Live, EOL),
亦即该程序代码已经结束,不会有继续维护的状态。另 外一种机制为保持该版本的持续维护,亦即
为长期维护版本(Longterm)! 例如3.10即为一个长期维护版本,这个版本的程序代码会被持续维护,
若程序代码有bug 或其他问题,核心维护者会持续进行程序代码的更新维护
所以哕,如果你想要使用Linux 核心来开发你的系统,那么当然要选择长期支持的版本才行!要判
断你的Linux 核心是否为长期支持的版本,可以使用 「uname -r」来查阅核心版本,然后对照下
列连结来了解其对应值
https://www.kernel.org/releases.html
比如我的
在这里插入图片描述
对应网站上

在这里插入图片描述

Linux distributions、

为了使使用者能够接触到Linux,于是很多的商业公司或非营利团体,就将Linux Kernel(含tools)与可运行的软件整合起来,加上自己有创意的工具程序,这个工具程序能够让用户已光盘/DVD或透过网络直接安装/管理Linux系统。
这个[Kernel + Software + Tools + 可完全安装程序]就叫Linux distribution,中文叫可完全安装套件,或Linux发布商套件

在这里插入图片描述

可完全安装套件

所以我们说Linux不同,其实是Distributions不同,也就是内核发行版本不同

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/73564
推荐阅读
相关标签
  

闽ICP备14008679号