操作系统的最强入门科普Unix/Linux篇

编辑:柳暮雪     来源:IT之家    阅读量:8910    时间:2023-05-14 12:46:33    阅读量:15183   

大家好,我是小枣君。

今天这篇文章,我们来聊聊操作系统。

说到操作系统,大家都不会陌生。我们天天都在接触操作系统 —— 用台式机或笔记本电脑,使用的是 windows 和 macOS 系统;用手机、平板电脑,则是 android和 iOS 系统。

如果是从事信息通信行业,还经常会和 ubuntu、CentOS、Fedora 这样的 Linux 系统打交道。

其实,操作系统的种类极多,远远不止我们知道的这些。

从使用场景来看,操作系统大致可以分为桌面操作系统、服务器操作系统、移动终端操作系统、嵌入式操作系统、物联网操作系统、云操作系统等类别。

如下表所示:

那么,操作系统究竟是什么?

从本质来看,操作系统其实就是一套软件。

它属于底层软件,可以说是一个大管家,专门负责把所有的硬件和上层软件管理和连通起来,并进行资源调配,完成用户下达的任务。

操作系统包揽了很多底层的复杂工作,大大简化了应用软件的开发难度。

比如说,我开发一个视频播放器,就不需要写那些底层硬件代码。

操作系统还有一个重要作用,就是方便用户使用。

用户有了操作系统,就能更好地管理计算机,进行人机交互。

新手学习操作系统,最麻烦的是认名字和认类别。接下来,小枣君就从时间线的角度,对所有的操作系统关系进行一下梳理。

操作系统的诞生

操作系统这个东西,并不是计算机诞生时就有的。

1946 年 2 月,在美国的宾夕法尼亚大学诞生了世界上第一台电子计算机,它的名称叫 ENIAC。

ENIAC 是由大量的电子管组成,体积极为庞大,占地 170 平方米,重达 30 吨,耗电 174 千瓦。在算力上,它可以实现每秒 5000 次的加法运算。

这种早期的计算机,既没有显示器,也没有键盘,更没有鼠标,全部都是人工操作。

在使用时,专职操作员将运算信息记录在穿孔卡带上。系统启动后,读取卡带信息,然后进行运算,最后输出结果。

穿孔卡带

计算机的速度快,人的速度慢。所以,计算机经常处于等待状态,等待操作员的输入。

这严重耽误了计算效率,浪费时间,也浪费钱。于是,到了 20 世纪 50 年代,开始出现了批处理系统(batch processing)。

批处理系统中,操作员把用户提交的作业进行分类,把一批作业编成一个“作业执行序列”。每一批作业,都由专门编制的监督程序自动依次处理。

这个“监督程序”,就是操作系统的雏形。它标志着操作系统的诞生。

最早使用批处理系统的,是第二代通用计算机,代表产品是 IBM 的 1401 和 7094 等。

批处理虽然提升了效率,但仍存在缺陷。

例如,当作业进行 I / O操作时,主机会等待操作完成,造成自身空闲。再例如,计算机只能同时运行一个批处理任务,效率还是太低。

到了 60 年代,集成电路技术高速发展,我们有了更快的处理器、更大的内存、更丰富的 I / O 设备。同时,通道和中断技术出现,开始允许系统执行“挂起”操作。

于是,就有了“多道程序系统”。

简单来说,计算机系统从串行变成了并行,可以同时运行多个任务。

多道程序系统大幅提升了计算机的工作效率。再后来,系统又支持了多个用户同时使用。于是,就变成了“多用户 + 多任务”的系统,称为“分时系统”。

“分时”和我们通信领域的“时分复用”有点像,就是把处理机的运行时间分成很短的时间片,按时间片轮流分配给各个作业使用。

再后来,技术又继续演进。终于,我们有了时效性更强的“实时操作系统”。这种系统,就非常接近于现代操作系统的概念了。

UNIX 的诞生

这个计划,被命名为 Multics OS。Multics 是“MULTiplexed Information and Coputing System”的意思。

当时,他们打算借助这个系统,打造一台能够连接 1000 台终端、满足 300 人同时在线的计算机。

这个计划持续了五年,并没有达到既定目标。于是,1969 年,隶属 ATamp;T 公司的贝尔实验室宣布退出。

贝尔实验室退出之后,相关的项目组成员就闲了下来。其中就有一个人,名字叫做肯?汤普森。

肯?汤普森此前在 Multics 上开发了一款名叫 "星际旅行" 的游戏。退出 Multics 项目后,肯?汤普森就没办法继续玩这个游戏了。

于是,他突发奇想,打算在一台空闲的 PDP-7上,开发一个简单操作系统,运行这个游戏。

1969 年 8 月,肯?汤普森趁着妻子回家探亲,用了 1 个月的时间,使用汇编语言,写出了一个简版的 Multics 系统。

实验室的同事们,将这个系统戏称为 Unics。Uni 作为前缀,是“单一、一个”的意思。Unics,对应 Multics,是“单路信息与计算系统”的意思。

后来,大家又取其谐音,直接称其为“Unix”。

一边工作一边下棋的肯?汤普森

基于汇编语言编写的 Unics,硬件通用性差,没法移植到其它机器上运行。因此,肯?汤普森尝试使用 BCPL、PASCAL 语言进行重写。但是,效果并不理想。

这时,他的同事丹尼斯.里奇站了出来。

丹尼斯.里奇在 BCPL 语言的基础上,开发了一套新的语言,也就是后来如日中天的 C 语言(按字母表顺序,B 之后就是 C)。

不久后,丹尼斯.里奇用 C 语言重写 Unics 成功。就这样,Unix 操作系统正式诞生了。

正在操作 DEC PDP-11 计算机的肯?汤普森和丹尼斯.里奇(站者)

1973 年,丹尼斯?里奇和肯?汤普森正式发表论文,宣布了 Unix 的存在。消息引起很大反响,很多人都期望学习和研究 Unix。

贝尔实验室推出了 Unix 之后,因为受美国政府反垄断制裁的原因,并不能对它进行销售。所以,他们只能将 Unix 无偿提供给所有人学习。

又过了一段时间,ATamp;T 发布了 Unix 系统第 5 版,并授权给教育机构使用。1975 年,他们第一次以 2 万美元的价格,授权企业使用 Unix 第 6 版。

这期间,很多企业和机构开始打 Unix 的主意。

1977 年,伯克利大学的研究生比尔?乔伊,将 Unix 程序整理到磁带上,推出了 BSD 版本。BSD,就是 Berkeley Software Distribution(伯克利软件发行版)。

1978 年,SCO包装发行了商用版的 Unix。

目前公认的最完美版本,是 1979 年发行的 System V7。这个版本也被 Unix 玩家们称为“最后一个真正的 UNIX”。

1980 年,美国国防高级研究计划局准备制定 TCP / IP 协议,选择了与 BSD 合作。这大大刺激了 Unix 的发展和普及。

后来,丹尼斯?里奇和肯?汤普森被誉为 Unix 之父和 C 语言之父。1983 年,他们二人都获得了图灵奖。

在 SystemV7 推出之后,ATamp;T 发布新的使用条款,将 Unix 源代码私有化。Unix 开始走向了商业闭源之路。

很多公司,都推出了自己的 Unix 系统分支。比较有名的,是 Sun 公司的 Solaris、IBM 公司的 AIX、惠普公司的 HP-UX,以及由 BSD 版本发展起来的 FreeBSD。

Solaris 这个系统,小枣君非常熟悉。当年我就是通过 Solaris 学会的 Unix。它的稳定性极高,主要用在 SUN 公司的服务器上,CPU 都是完全不一样的,叫做 SPARC。

FreeBSD 的应用范围就广多了。它在 BSD 许可协议下发布,由来自世界各地的志愿者开发和维护,允许任何人随意使用和发行。

苹果公司的 OS X,就是基于 FreeBSD 的。

详细的 Unix 闭源分支我就不多说了,发一张图,大家可以参考:

Linux 的诞生

Unix 开始收费和商业闭源之后,引起了一个大叔的不满。这个大叔,名叫理查德?马修?斯托曼。

理查德?马修?斯托曼

1984 年,他发起了自由软件体系 GNU,模仿 Unix 的界面和使用方式,重新开发一个开源的版本。他还组织成立了 FSF(Free Software Foundation,自由软件基金会),起草了 GPL(GeneralPublicLicense,通用公共许可证)。

GNU 著名的牛头 logo

斯托曼的做法,具有划时代的意义。他开创了开源软件的黄金时代。

所有 GPL 协议下的自由软件,都必须遵循“Copyleft" 原则 ——

即:自由软件,允许用户自由拷贝、修改和销售。但是,对其源代码的任何修改,都必须向所有用户公开。

到上世纪 90 年代初,GNU 项目已经开发出许多高质量的免费软件,其中包括有名的 emacs 编辑系统、bash shell 程序、gcc 系列编译程序、gdb 调试程序等等。

这些都为后来 Linux 的诞生创造了条件。

Unix 源代码私有化之后,在大学中不再允许使用 Unix 源代码。

1987 年,荷兰阿姆斯特丹自由大学计算机系的安德鲁?塔能鲍姆教授,为了能在课堂上教授操作系统课程,决定在不使用任何 ATamp;T 源代码的前提下,自行开发与 Unix 兼容的操作系统。

安德鲁?塔能鲍姆

他将这个系统称为 MINIX,也就是 mini-UNIX的意思。

MINIX 的主要工作平台,是 IBM PC 及其兼容机。这款 PC 搭载了英特尔公司的 16 位处理器 ——Intel 8080。

开发出 MINIX 之后,塔能鲍姆教授并没有对它进行大规模推广。而且,他认为这个系统只是用于教育目的,所以也没有进行深入开发。

他甚至还不允许别人加入代码,这就更加限制了 MINIX 的发展和普及。

1991 年,正在芬兰赫尔辛基大学求学的林纳斯?托瓦兹,对 Unix 产生浓厚兴趣,尝试借助 MINIX 完成一些日常工作。

MINIX 的功能太弱,无法满足林纳斯的需求。于是,他利用 GNU 的 bash 当做开发环境,gcc 当做编译工具,成功编写出了拥有 10000 行代码的 Linux 内核。

此时的林纳斯,只有 21 岁!

林纳斯?托瓦兹

林纳斯的 Linux 内核基于 POSIX标准,能够与绝大多数 Unix 操作系统兼容。

他在发布时,选择了遵循 GPL 协议和 GNU 宗旨,所以,正式发布时,命名为“GNU / linux”。

Linux 的吉祥物是企鹅

因为林纳斯小时候被企鹅咬过,印象非常深刻

Linux 和 Unix 的关系

这里,我要特别说明一下,Linux 和 Unix 的关系。

很多人觉得,Linux 就是 Unix,这显然是不对的。由上面的介绍可以看出,Linux 是开源自由软件,而 Unix 是对源代码实行知识产权保护的传统商业软件。两者是完全不同的东西。

那么,Linux 是不是类 Unix系统呢?

严格来说,也不行。

Linux 只是风格上和 Unix 很像,但它并不含有 Unix 的代码。UNIX 的源代码,为 SCO 公司所有。UNIX 的商标权和标准认定权,属于 OPENGROUP 所有。

真正意义上的类 Unix 系统,必须要通过官方认证。而 Linux 并没有。

Linux 的发行版

大家注意,林纳斯 1991 年开发的,并不是一个操作系统,而是一个内核。

后来,全球开发者对内核代码进行大量的修改和补充,加入 GUI(图形界面)、应用等部分,才形成了相应的 Linux 操作系统发行版,也就是真正的操作系统。

这些发行版分为社区版和商业版。社区版数量较多,开发和维护的主体是开源社区。商业版数量较少,是在社区版的基础上进一步优化而来。

值得一提的是,发行版之间也有复杂的衍生关系。也就是说,发行版可以构建在另一个发行版之上。

一些大家可能比较熟悉的发行版,包括:Ubuntu、Debian、Centos、Fedora、 Redhat Linux、Slackware、Turbolinux、Mandrake、SUSE、红旗、麒麟等。

Slackware 和 Debian 是最早期的两个发行版,创建于 1993 年。

Debian 的后代分支比较庞大。除了 Debian 本身之外,这个分支的主要代表还有 Ubuntu、LinuxMint(构建在 Ubuntu 之上)、Kali Linux。

Redhat,也就是大家很熟悉的红帽系列。它的主要发行版是 Red Hat Enterprise Linux,针对企业客户。

CentOS 是 RHEL 源代码再编译的产物,修正了不少 Bug,稳定性更强。

除了 RHEL 之外,Redhat 还向社区提供另一个免费发行版,即 Fedora。

这些发行版的具体关系和发布时间,如下图所示:

上面这些操作系统,小枣君基本都用过。2005 年我刚工作的时候,用的是 Debian、RHEL、Solaris。后来,开始用 Fedora。再后来,是 CentOS。刚开始的使用,很难受,不适应。但是一旦用习惯了,就觉得很爽。

2020 年底,红帽公司宣布陆续停止维护 CentOS,后续将无法获得官方升级和补丁。虽然比较可惜,但也给国产操作系统带来了机会,我们以后会讲。

未完待续……

说到这里,大家应该对 Unix 和 Linux 操作系统的家族脉络有了基本的了解。

下期文章,小枣君会重点聊聊 Windows 和 macOS 那条线。敬请关注!

声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。

精彩阅读