今天小编分享的科技经验:作業系統的最强入门科普(Unix/Linux篇),欢迎阅读。
大家好,我是小枣君。
今天这篇文章,我们来聊聊作業系統(Operating System)。
说到作業系統,大家都不会陌生。我们天天都在接触作業系統——用台式机或筆記型電腦,使用的是 windows 和 macOS 系统;用手机、平板电腦,则是 android(安卓)和 iOS 系统。
如果是从事信息通信行业,还经常会和 ubuntu、CentOS、Fedora 这样的 Linux 系统打交道。
其实,作業系統的种类极多,远远不止我们知道的这些。
从使用场景来看,作業系統大致可以分为桌面作業系統、伺服器作業系統、移动终端作業系統、嵌入式作業系統、物联网作業系統、云作業系統等类别。
如下表所示:
那么,作業系統究竟是什么?
从本质来看,作業系統其实就是一套軟體。
它属于底层軟體,可以说是一个大管家,专门负责把所有的硬體和上层軟體(中间件、数据库、应用程式等)管理和连通起来,并进行资源调配,完成用户下达的任务。
作業系統包揽了很多底层的复杂工作,大大简化了应用軟體的开发难度。
比如说,我开发一个视频播放器,就不需要写那些底层硬體代码。
作業系統还有一个重要作用,就是方便用户使用。
用户有了作業系統,就能更好地管理计算机,进行人机互動(下达命令,查询结果和状态)。
新手学习作業系統,最麻烦的是认名字和认类别。接下来,小枣君就从时间线的角度,对所有的作業系統关系进行一下梳理。
█ 作業系統的诞生
作業系統这个东西,并不是计算机诞生时就有的。
1946 年 2 月,在美国的宾夕法尼亚大学诞生了世界上第一台电子计算机,它的名称叫ENIAC(埃尼阿克)。
ENIAC 是由大量的电子管(真空管)组成,体积极为庞大,占地 170 平方米,重达 30 吨,耗电 174 千瓦。在算力上,它可以实现每秒 5000 次的加法运算。
这种早期的计算机,既没有显示器,也没有键盘,更没有滑鼠,全部都是人工操作。
在使用时,专职操作员将运算信息记录在穿孔卡带上。系统启动后,读取卡带信息,然后进行运算,最后输出结果。
穿孔卡带
计算机的速度快,人的速度慢。所以,计算机经常处于等待状态,等待操作员的输入。
这严重耽误了计算效率,浪费时间,也浪费钱(电费)。于是,到了 20 世纪 50 年代,开始出现了批处理系统(batch processing)。
批处理系统中,操作员把用户提交的作业进行分类,把一批作业编成一个 " 作业执行序列 "。每一批作业,都由专门编制的监督程式(monitor)自动依次处理。
这个 " 监督程式 ",就是作業系統的雏形。它标志着作業系統的诞生(1955 年)。
最早使用批处理系统的,是第二代通用计算机,代表产品是 IBM 的 1401 和 7094 等。
批处理虽然提升了效率,但仍存在缺陷。
例如,当作业进行 I/O(输入 / 输出)操作时,主机会等待操作完成,造成自身空闲。再例如,计算机只能同时运行一个批处理任务,效率还是太低。
到了 60 年代,集成电路技术高速发展,我们有了更快的处理器、更大的内存、更丰富的 I/O 设备。同时,通道和中断技术出现,开始允许系统执行 " 挂起 " 操作。
于是,就有了" 多道程式系统 "。
简单来说,计算机系统从串行变成了并行,可以同时运行多个任务(多个程式放入内存,交替在 CPU 中运行,共享硬軟體资源)。
多道程式系统大幅提升了计算机的工作效率。再后来,系统又支持了多个用户同时使用。于是,就变成了 " 多用户 + 多任务 " 的系统,称为" 分时系统 "。
" 分时 " 和我们通信领網域的 " 时分复用 " 有点像,就是把处理机的运行时间抽成很短的时间片,按时间片轮流分配给各个作业使用。
再后来,技术又继续演进。终于,我们有了时效性更强的" 实时作業系統 "。这种系统,就非常接近于现代作業系統的概念了。
█ UNIX 的诞生
1964 年,美国电话电报公司(AT&T)、通用电器公司(GE)及麻省理工学院(MIT)合作,提出了一个超级分时作業系統的开发计划。
这个计划,被命名为 Multics OS。Multics 是 "MULTiplexed Information and Coputing System(多路信息与计算系统)" 的意思。
当时,他们打算借助这个系统,打造一台能够连接 1000 台终端、满足 300 人同时在线的计算机。
这个计划持续了五年,并没有达到既定目标。于是,1969 年,隶属 AT&T 公司的贝尔实验室(Bell Labs)宣布退出。
贝尔实验室退出之后,相关的项目组成员就闲了下来。其中就有一个人,名字叫做肯 · 汤普森(Ken Thompson)。
肯 · 汤普森此前在 Multics 上开发了一款名叫 " 星际旅行(Space Travel)" 的游戏。退出 Multics 项目后,肯 · 汤普森就没办法继续玩这个游戏了。
于是,他突发奇想,打算在一台空闲的 PDP-7(DEC 公司生产的一种小型计算机,性能很低)上,开发一个简单作業系統,运行这个游戏。
1969 年 8 月,肯 · 汤普森趁着妻子回家探亲,用了 1 个月的时间,使用汇编语言,写出了一个简版的 Multics 系统(包括一组内核程式,一些内核工具程式,以及一个小的檔案系统)。
实验室的同事们,将这个系统戏称为 Unics。Uni 作为前缀,是 " 单一、一个 " 的意思。Unics,对应 Multics,是 " 单路信息与计算系统 " 的意思。
后来,大家又取其谐音,直接称其为"Unix"。
一边工作一边下棋的肯 · 汤普森
基于汇编语言编写的 Unics,硬體通用性差,没法移植到其它机器上运行。因此,肯 · 汤普森尝试使用 BCPL、PASCAL 语言进行重写。但是,效果并不理想。
这时,他的同事丹尼斯 . 里奇(Dennis Ritchie)站了出来。
丹尼斯 . 里奇在 BCPL 语言(也就是 B 语言)的基础上,开发了一套新的语言,也就是后来如日中天的C 语言(按字母表顺序,B 之后就是 C)。
不久后,丹尼斯 . 里奇用 C 语言重写 Unics 成功。就这样,Unix 作業系統正式诞生了。
正在操作 DEC PDP-11 计算机的
肯 · 汤普森(坐者)和丹尼斯 . 里奇(站者)
1973 年,丹尼斯 · 里奇和肯 · 汤普森正式发表论文,宣布了 Unix 的存在。消息引起很大反响,很多人都期望学习和研究 Unix。
贝尔实验室(AT&T)推出了 Unix 之后,因为受美国政府反垄断制裁的原因,并不能对它进行销售。所以,他们只能将 Unix 无偿提供给所有人学习。
又过了一段时间,AT&T 发布了 Unix 系统第 5 版,并授权给教育机构使用。1975 年,他们第一次以 2 万美元的价格,授权企业使用 Unix 第 6 版。
这期间,很多企业和机构开始打 Unix 的主意。
1977 年,伯克利大学的研究生比尔 · 乔伊(Bill Joy),将 Unix 程式整理到磁带上,推出了 BSD 版本。BSD,就是 Berkeley Software Distribution(伯克利軟體发行版)。
1978 年,SCO(一家伺服器系统軟體供应商)包装发行了商用版的 Unix。
目前公认的最完美版本,是 1979 年发行的 System V7。这个版本也被 Unix 玩家们称为 " 最后一个真正的 UNIX"。
1980 年,美国国防高级研究计划局(DARPA)准备制定 TCP/IP 協定,选择了与 BSD 合作。这大大刺激了 Unix 的发展和普及。
后来,丹尼斯 · 里奇和肯 · 汤普森被誉为 Unix 之父和 C 语言之父。1983 年,他们二人都获得了图灵奖。
在 System V7 推出之后,AT&T 发布新的使用条款,将 Unix 源代码私有化。Unix 开始走向了商业闭源之路。
很多公司,都推出了自己的 Unix 系统分支。比较有名的,是 Sun 公司的 Solaris、IBM 公司的 AIX、惠普公司的 HP-UX,以及由 BSD 版本发展起来的 FreeBSD。
Solaris 这个系统,小枣君非常熟悉。当年我就是通过 Solaris 学会的 Unix。它的稳定性极高,主要用在 SUN 公司的伺服器(V240/V440 等)上,CPU 都是完全不一样的,叫做 SPARC。
FreeBSD 的应用范围就广多了。它在 BSD 许可協定下发布,由来自世界各地的志愿者开发和维护,允许任何人随意使用和发行(在保留版权和许可協定信息的前提下)。
苹果公司的 OS X,就是基于 FreeBSD 的。
详细的 Unix 闭源分支我就不多说了,发一张图,大家可以参考:
█ Linux 的诞生
Unix 开始收费和商业闭源之后,引起了一个大叔的不满。这个大叔,名叫理查德 · 马修 · 斯托曼(Richard Matthew Stallman)。
理查德 · 马修 · 斯托曼
1984 年,他发起了自由軟體体系 GNU(GNU is not unix),模仿 Unix 的界面和使用方式,重新开发一个开源的版本。他还组织成立了 FSF(Free Software Foundation,自由軟體基金会),起草了 GPL(GeneralPublicLicense,通用公共许可证)。
GNU 著名的牛头 logo
斯托曼的做法,具有划时代的意义。他开创了开源軟體的黄金时代。
所有 GPL 協定下的自由軟體,都必须遵循 "Copyleft(非版权)" 原则——
即:自由軟體,允许用户自由拷贝、修改和销售。但是,对其源代码的任何修改,都必须向所有用户公开。
到上世纪 90 年代初,GNU 项目已经开发出许多高质量的免费軟體,其中包括有名的 emacs 编辑系统、bash shell 程式、gcc 系列编译程式、gdb 调试程式等等。
这些都为后来 Linux 的诞生创造了条件。
Unix 源代码私有化之后,在大学中不再允许使用 Unix 源代码。
1987 年,荷兰阿姆斯特丹自由大学计算机系的安德鲁 ·塔能鲍姆教授(Andrew S. Tanenbaum,也译为谭宁邦),为了能在课堂上教授作業系統课程,决定在不使用任何 AT&T 源代码的前提下,自行开发与 Unix 兼容的作業系統。
安德鲁 · 塔能鲍姆
他将这个系统称为MINIX,也就是 mini-UNIX(小型 UNIX)的意思。
MINIX 的主要工作平台,是 IBM PC 及其兼容机。这款 PC 搭载了英特尔公司的 16 位处理器—— Intel 8080。
开发出 MINIX 之后,塔能鲍姆教授并没有对它进行大规模推广。而且,他认为这个系统只是用于教育目的,所以也没有进行深入开发。
他甚至还不允许别人加入代码(估计是怕侵权 Unix),这就更加限制了 MINIX 的发展和普及。
1991 年,正在芬兰赫尔辛基大学求学的林纳斯 · 托瓦兹(Linus Torvalds),对 Unix 产生浓厚兴趣,尝试借助 MINIX 完成一些日常工作。
MINIX 的功能太弱,无法满足林纳斯的需求。于是,他利用 GNU 的 bash 当做开发环境,gcc 当做编译工具,成功编写出了拥有 10000 行代码的Linux 内核(Linux kernel)。
此时的林纳斯,只有 21 岁!
林纳斯 · 托瓦兹
林纳斯的 Linux 内核基于 POSIX(Portable Operating System Interface for Computing Systems,可移植作業系統接口)标准,能够与绝大多数 Unix 作業系統兼容。
他在发布时,选择了遵循 GPL 協定和 GNU 宗旨,所以,正式发布时,命名为 "GNU/linux"。
Linux 的吉祥物是企鹅(英文名 : Tux)
因为林纳斯小时候被企鹅咬过,印象非常深刻
█ Linux 和 Unix 的关系
这里,我要特别说明一下,Linux 和 Unix 的关系。
很多人觉得,Linux 就是 Unix,这显然是不对的。由上面的介绍可以看出,Linux 是开源自由軟體,而 Unix 是对源代码实行知识产权保护的传统商业軟體。两者是完全不同的东西。
那么,Linux 是不是类 Unix(Unix-like)系统呢?
严格来说,也不行。
Linux 只是风格上和 Unix 很像,但它并不含有 Unix 的代码。UNIX 的源代码,为 SCO 公司所有。UNIX 的商标权和标准认定权,属于 OPENGROUP 所有。
真正意义上的类 Unix 系统,必须要通过官方认证(例如苹果的 MacOS)。而 Linux 并没有。
█ Linux 的发行版
大家注意,林纳斯 1991 年开发的,并不是一个作業系統,而是一个内核。
后来,全球开发者(开源社区、企业、个人等)对内核代码进行大量的修改和补充,加入 GUI(图形界面)、应用等部分,才形成了相应的Linux 作業系統发行版,也就是真正的作業系統。
这些发行版分为社区版和商业版。社区版数量较多,开发和维护的主体是开源社区。商业版数量较少,是在社区版的基础上进一步优化而来。
值得一提的是,发行版之间也有复杂的衍生关系。也就是说,发行版可以构建在另一个发行版之上。
一些大家可能比较熟悉的发行版,包括:Ubuntu、Debian、Centos、Fedora、 Redhat Linux、Slackware、Turbolinux、Mandrake、SUSE、红旗、麒麟等。
Slackware 和 Debian 是最早期的两个发行版,创建于 1993 年。
Debian 的后代分支比较庞大。除了 Debian 本身之外,这个分支的主要代表还有 Ubuntu(构建在 Debian 之上)、LinuxMint(构建在 Ubuntu 之上)、Kali Linux。
Redhat,也就是大家很熟悉的红帽系列。它的主要发行版是 Red Hat Enterprise Linux(RHEL),针对企业客户。
CentOS 是 RHEL 源代码再编译的产物,修正了不少 Bug,稳定性更强。
除了 RHEL 之外,Redhat 还向社区提供另一个免费发行版,即 Fedora。
这些发行版的具体关系和发布时间,如下图所示:
上面这些作業系統,小枣君基本都用过。2005 年我刚工作的时候,用的是 Debian、RHEL、Solaris。后来,开始用 Fedora。再后来,是 CentOS。刚开始的使用,很难受,不适应。但是一旦用习惯了,就觉得很爽。
2020 年底,红帽公司宣布陆续停止维护 CentOS,后续将无法获得官方更新和补丁。虽然比较可惜,但也给国产作業系統带来了机会,我们以后会讲。
█ 未完待续……
说到这里,大家应该对 Unix 和 Linux 作業系統的家族脉络有了基本的了解。
下期文章,小枣君会重点聊聊Windows和macOS那条线。敬请关注!
如果大家觉得文章不错,还请帮忙多多转发!谢谢!
>