操作系统设计哲学

Posted david_lv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统设计哲学相关的知识,希望对你有一定的参考价值。

本来这篇文章我是跟在我的《黑客帝国》影评里的,但是因为太长,而且相对比较独立,于是专门独立出来一篇文章来讲。

期望大家也把这种思想带入到你们的架构设计工作当中,这才是我写这篇文章的目的。大家千万不要把我这篇文章看做是计算机历史八卦。

(1)S/360

1964年,IBM发布了S/360大型机,这是一款真正意义上的现代计算机,如今所有的系统软硬件,基本都能在这款计算机上看到雏形。当然,这款计算机的研发差点要了IBM的命,要不是小沃森是IBM创始人的亲儿子,估计S/360这个项目早就被夭折了。这款计算机的研发之复杂性,有本经典的书特别有裨益,这就是我常看常新的《人月神话》。

当时一台大型机那得多昂贵啊,1964年的几百万美金啊。那要是让一个个人来排队独占,那利用效率那得多低。

所以,IBM在1964年的S/360大型机的操作系统中,就引入了虚拟机的思想,实现了分时系统。S/360可以最多有15个虚拟机,可以使用CPU时钟切片轮巡的方法,做到多用户分时使用。

(2)Unix

当年的计算机产业界,可谓是白雪公主和七个小矮人。就连电气厂商通用电气、霍尼韦尔都研发设计生产计算机。

通用电气为了和IBM竞争,联合了麻省理工、贝尔实验室,一起研发和OS/360竞争的操作系统,这就是Multics。大家都知道,S/360的研发都差点要了IBM的命,而计算机小矮人通用电气才能有多少气力来搞研发。所以随着竞争的时间推移,通用电气觉得在计算机这个行当无法和IBM竞争了,就打算退出计算机产业。所以也就停止了对Multics研发项目的资金支持。

这些贝尔实验室Multics项目组的这帮人要失业啊。这帮人没有新科研任务,也没被贝尔实验室开除,有点惶惶不可终日。总得搞件事情出来啊。

Kenneth Thompson说:咱们贝尔实验室主要以专利来考核,但是现在这个编写专利的软件太有问题了,我给重新编写一个吧。

于是他先在这台编写专利的DEC的PDP-11小型机上开发了一个文档编辑软件。但是他又嫌DEC的操作系统太烂,性能啊、稳定性啊。大家都知道,大神们往往对这个世界看不惯,说要有光,于是光就有了。大神于是利用圣诞节假期、老婆回娘家的机会,写了一个新的文件系统。为了让这个新的文件系统被DEC PDP-11小型机能够使用,他又写了一个引导程序,让DEC 小型机在启动的时候能够Load他的文件系统,这样他的文件系统就接管了DEC小型机的操作系统。

(3)NT

被UNIX的鼻祖Kenneth Thompson骂为烂操作系统的,这个DEC操作系统的创始人叫卡特勒。

卡特勒后来在DEC干的郁闷,就被盖茨挖到了微软。

当时微软正在和IBM合作开发下一代PC操作系统。因为微软和IBM在1980年就合作,IBM PC电脑上用的就是微软的命令行DOS操作系统。但是IBM PC的竞争死对头推出了图形界面的操作系统,所以IBM也和微软再次合作,想让微软搞出IBM PC机上的图形界面操作系统。

咱们再说个题外话后再返回来。其实IBM在1980年找微软搞IBM PC操作系统的时候,微软一开始没打算用DOS。微软一开始是准备和SCO合作,把Unix服务器操作系统移植到PC机上,这就是XENIX。可惜,这事搞砸了。盖茨一看这生意要掉地上,于是赶快买了一个操作系统给IBM先上上去,这就是后来的DOS。

咱们话再说回来,有这两个背景故事后,卡特勒就来微软开发操作系统了。当时IBM的要求是开放兼容(这是IBM主打苹果封闭性的一个打点),所以卡特勒就设计了一个C/S思想的操作系统内核,相当于内核之内核:对着下面的所有开放兼容的硬件(CPU),这个内核之内核是统一抽象的,对着上面的所有的应用层,这个内核之内核也是统一抽象的。

这个设计思想当时把微软的人吓的要死,因为要抽象这么多层,那当时PC机的CPU怎么能带得动呢?

幸运的是,Intel当年没掉链子,几年间把x86级的CPU性能提高的蹭蹭的,NT终于在商业工程实践中证明了这条路是可行的。

现在,NT内核已经成为了微软所有操作系统的内核。

(4)VMWare

NT研发,内核研发负责人是卡特勒,但是项目经理是保罗马里茨。

这个人一看,NT这种思想不就是IBM S/360虚拟机的设计思想么?居然在低性能的x86芯片上也能实现IBM大型机的玩法。

于是,保罗马里茨就离开微软,加入了成立不久的VMWare,担任CEO。

大家以为VMWare是虚拟机的发明公司,其实不是,这得溯源到NT的商业工程实践证明,还得溯源到IBM的S/360。

(5)Linux

整个世界的操作系统,有两大主流分支,一支是类Unix,一支是NT的。而NT的创始人和Unix的创始人也是”相爱相杀“:我开发的DEC操作系统,被你自己编写的Unix操作系统所替代,那么我就再开发一个NT。这是这两个创始人大神的交集。

苹果的操作系统的根源就来自BSD Unix。而Google的移动操作系统android,内核是Linux。

Linux是Linus这个人在上大学的时候,老师讲操作系统。操作系统课,学生要做作业。Linus这个人很感兴趣,搞搞搞,觉得自己也能写个操作系统,于是结合Unix操作系统的思想,重新发明了一遍轮子,开发出了Linux。

(6)操作系统哲学

我是个人感觉Kenneth Thompson和卡特勒这两大神是有哲学思想的。

Unix之所以能流行,不仅和开源推广、教学推广相关,更是和Unix的设计哲学相关。Unix就是在高复杂的Multics项目失败经验教训之上重新思考的。如何简化?Kenneth的设计哲学就起作用了。

东方朱熹的哲学套路是:格物致知。在宋朝的时候,当时的新鲜事物还没那么多,朱熹宣称的是:世界上的万物就那么多,我们只需要一个个去洞察,我们就能知道万物的特性和发展规律。但是从宋朝到了明朝后期,大航海时代开启了,资本主义萌芽开始了,新鲜事物太多了,这时候再格物致理,人的一生就无法穷尽了。所以王阳明觉得应该有一个通用大道理,后来就总结出来一条:人欲即天理。

而Kenneth设计Unix的哲学也很高明,为啥Multics那么复杂,就是因为Multics要考虑很多东西,如:键盘、屏幕、磁盘、打印机、网卡...。Unix是1970年发明、1974年推广的。那时候计算机产业已经爆发了,很多新鲜技术都出现了,和王阳明面临的万物涌现时代很相似。所以一个操作系统要管理这么多新的东西,太复杂了。所以Kenneth说出了那句经典的哲学:万物皆IO。

所以,别管是文件系统、磁盘、网卡、打印机、屏幕...,都是IO。用同一套IO方法:打开、读取、写入、关闭,就完全搞定。

Unix的可移植性是C语言提供的便利。但NT的可移植性设计,则是卡特勒的C/S设计哲学。IBM要求的是开放兼容,这也是无穷无尽的,怎么办?

卡特勒进入哲学思考境界了。他想:操作系统的本质是什么?操作系统的本质是软件来模拟计算机硬件。也就是说:操作系统其实就是个软件计算机。

这就是虚拟机的思想了。

这也是后来云计算,用XEM和KVM这些开源虚拟机技术搭建云服务器的根源。

(7)黑客帝国计算机

黑客帝国有四个人:

1、矩阵这个虚拟数字世界的设计者:架构师

2、先知

3、墨菲斯

4、警察史密斯

黑客帝国其实描述的就是整个地球就是一个超级大计算机(这难道不是云计算最终极的愿景么?)。这个超级大计算机需要一个操作系统。这个操作系统的设计者就是架构师。

但这个操作系统,和Kenneth设计Unix一样,需要一个引导程序。这个引导程序,在黑客帝国里面就是墨菲斯。墨菲斯在希腊神话中是梦神,专门是把人引导到梦中的。梦,不就是计算机的虚拟世界么(元宇宙,嘿嘿嘿)?

而先知,看似老在引导尼奥,但她并不是引导程序。她在计算机术语里的角色,应该是操作系统的进程管理程序。所以尼奥在《黑客帝国》第二集一开始被封在了虚拟世界里的车站,后来被先知的代理人Agent通过特殊权限跳出。这就是因为先知是操作系统的进程管理程序,她可以控制上层所有的进程。但她平时也不能老使用特殊权限来玩进程,否则这个操作系统很容易崩溃。

有警察史密斯,就是因为和尼奥在搏斗中发现了这个特殊权限。你想啊,他也不想操作系统一重启,他这个进程就死了啊,所以他也想永生。但怎么永生?于是他就想到了利用这个特殊权限漏洞,把自己复制到计算机虚拟世界的各个角落,就像我们怕一个重要文件丢失了于是复制了很多份分开放在各个地方。这就自然而然成了病毒的本质。

如何杀死病毒后重新开启一个干净的操作系统,这就是尼奥的事了。

附录:《黑客帝国:梦中没有错与对 梦中有安也有危

延伸读物:

《信息简史》

《计算机简史》

《Unix传奇》

《观止:NT研发历程》

以上是关于操作系统设计哲学的主要内容,如果未能解决你的问题,请参考以下文章

社区说|Kotlin Flow 的原理与设计哲学

操作系统设计哲学

云原生的设计哲学

架构设计的哲学

软件设计的哲学:第四章 深度封装模块

2020荐书:软件设计的哲学