You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
12 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 06 | 操作系统进场
你好,我是七牛云许式伟。
在编程语言出现后,软件生产效率得到了大幅度的提升。随着越来越多软件的出现,自然而然就诞生了多个软件如何共处,也就是软件治理的需求。比如下面的这些需求场景。
* 多个软件如何同时运行(多任务的需求)?
* 多个软件如何共同使用计算机上的存储空间(内存管理、文件系统的需求)?
* 多个软件如何共同使用同一个外部设备(设备管理的需求)?
* 多个软件如何相互通讯,如何进行数据交换(进程间通讯、共享内存的需求)?
* 病毒、恶意软件如何治理(安全管理的需求)?
如果没有一个中间的协调方,软件与软件之间并不知道彼此的存在,你不难想象出,这种没有统一规则约束下的场面,会有多么凌乱。
于是,操作系统就出现了。对于软件而言,它像一个大法官,制定规则并据此约束大家的行为。
## 操作系统的启动过程
操作系统是怎么获得执行权的?
这是计算机主板ROM上的启动程序BIOS交给它的。
计算机加电启动后中央处理器CPU会从一个固定的存储地址加载指令序列执行。通常这个固定的存储地址指向计算机主板的ROM上的一段启动程序BIOS。这段启动程序通常包含以下这些内容。
* 存储设备的驱动程序用以识别常规的外置存储设备比如硬盘、光驱、U盘。
* 基础外部设备的驱动程序,比如键盘、鼠标、显示器。
* 设备和启动配置的基础管理能力。
* 支持执行外置存储中引导区的机器代码程序。
* 跳转到外置存储引导区的固定地址,把执行权交给该地址上的引导程序。
引导区的引导程序有长度限制(关于这一点我在上一讲已经介绍过),只能做非常少的事情。在常规情况下,它只是简单地跳转到真正的操作系统的启动程序,但有时计算机上安装了多个操作系统,此时引导程序会提供菜单让你选择要运行的操作系统。
这样,操作系统就开始干活了。
## 操作系统的需求演进
那么,操作系统是做什么的?前面我们说的“软件治理”是否可以涵盖它完整的目标?
让我们从操作系统的发展历程说起。
最早期的计算机是大型机。这个时期的计算机笨重、昂贵,并且操作困难,主要使用人群是搞科研性质的科学家或其他高端人群。
虽然这个时期催生了 IBM 这样的硬件巨头,但大多数人根本就意识不到,这玩意儿对后世人们的生活能够产生如此翻天覆地的变化。
这个时期的计算机还是单任务的,以计算为主,软件为操作硬件服务。如果我们认为“软件治理”是操作系统的根源需求的话,那么可以认为这个时期还不存在操作系统。但的确会有一些辅助工具库来简化用户使用计算机的负担,我们可以把它看做操作系统的萌芽。
从这个意义来说,提供计算机的“基础编程接口”,降低软件开发的负担,是操作系统更为原始的需求。
此后小型机和个人计算机PC的崛起分别诞生了 UNIX 和 DOS 这两个影响深远的操作系统。 UNIX 就不用说了,它几乎算得上今天所有现代操作系统的鼻祖。
DOS 的历史非常有趣。首先是 IBM 没把操作系统当回事儿,把这个活儿包给了微软。然后是微软只花了 5 万美元向西雅图公司购买了 86-DOS 操作系统的版权,更名为 MS-DOS。
那么 86-DOS 是怎么来的西雅图公司的一个24岁小伙叫蒂姆·帕特森Tim Paterson单枪匹马花了4个月时间写出来的。
可以看到这个时期人们对操作系统并没有太深刻的认知多数人只把它看做硬件的附属品。IBM 不把它当回事,西雅图公司也没把它当回事,几万就把它卖了。只有微软认认真真地把它当做生意做了起来(在此之前微软的生意是卖 BASIC 语言的解析器起家,所以微软一直对 BASIC 语言情有独钟,直到很久以后微软搞出了 C# 语言后,情况才有所改变)。
等到 IBM 意识到操作系统是个金蛋,改由自己做 PC-DOS 操作系统的时候,微软已经通过推动 PC 兼容机的发展,让操作系统不再依赖特定的硬件设备,微软也就因此脱离 IBM 的臂膀,自己一飞冲天了。
回到问题。要回答操作系统在做什么,我们可以从客户价值和商业价值两个维度来看。
客户价值来说,**操作系统首先要解决的是软件治理的问题**,大体可分为以下六个子系统:进程管理、存储管理、输入设备管理、输出设备管理、网络管理、安全管理等。
![](https://static001.geekbang.org/resource/image/e9/0e/e9084e205547f2874910985d54b64d0e.jpg)
**操作系统其次解决的是基础编程接口问题。**这些编程接口一方面简化了软件开发,另一方面提供了多软件共同运行的环境,实现了软件治理。
商业价值来说,操作系统是**基础的刚需软件**。计算机离开了操作系统就是一堆废铜烂铁。随着个人计算机采购需求的急速增加,光靠软件 License 的费用就让操作系统厂商赚翻了。
虽然第一个广为人知的操作系统是 UNIX但从商业上来说最成功的操作系统则是 DOS/Windows成就了微软的霸主地位。
为什么是 DOS/Windows 赢得了市场这无关技术优劣关键在于两者的商业路线差异UNIX 走的是企业市场,而 DOS/Windows 选择了更为巨大的市场个人计算机PC市场。
操作系统也是**核心的流量入口**。占领了操作系统,就占有了用户,想推什么内容给用户都很容易。微软对这一点显然心知肚明。
这也是为什么当年网景推 Netscape 浏览器的时候,微软很紧张。因为浏览器是另一个软件治理的入口,本质上是操作系统之上的操作系统。如果软件都运行在浏览器上,那么本地操作系统就沦为和硬件一般无二的管道了。
虽然早期操作系统没有应用市场AppStore但是通过操作系统预装软件的方式向软件厂商收租这是一直以来都有的盈利方式。国内盗版的番茄花园 Windows 发行版就是通过在 Windows 系统上预装软件来盈利。
当然预装软件只是一种可能性,流量变现的方式还有很多。苹果的 iOS 操作系统开启了新的玩法它构建了新的商业闭环账号Account、支付Pay、应用市场AppStore
我们把这个商业模式叫收税模式。帐号(注意是互联网账号,不是过去用于权限管理的本地账号)是前提。没有帐号,就没有支付系统,也没有办法判断用户是否购买过某个软件。
应用市场实现了应用的分发,既解决了系统能力的无限扩展问题(客户价值),也解决了预装软件的软件个数总归有限的问题(商业价值)。支付则是收税模式的承载体,无论是下载应用收费,还是应用内购买内容收费,都可以通过这个关卡去收税。
无论是本地操作系统 iOS 和 Android还是 Web 操作系统(浏览器)如微信小程序,都实现了“帐号-支付-应用市场”这样的商业闭环。这类操作系统,我们不妨把它叫做现代操作系统。
![](https://static001.geekbang.org/resource/image/8e/e8/8e47a58d0786d245ddf3e192cae730e8.jpg)
## 操作系统的边界在哪里?
架构的第一步是需求分析。上一讲我提到了在架构设计过程中,需求分析至少应该花费三分之一的精力。通过这一节我们对操作系统演进过程的回顾,你可能更容易体会到这一点。
当我们说要做一个操作系统的时候,实际上我们自己对这句话的理解也是非常模糊的。尤其是我们正准备去做的事情是一个新生事物时,我们对其理解往往更加粗浅。
在本专栏[开篇词](https://time.geekbang.org/column/article/89668)中我也提过,架构也关乎用户需求,作为架构师我们不只是要知道当前的用户需求是什么,我们还要预测需求未来可能的变化,预判什么会发生,而什么一定不会发生。
我们可以问一下自己我是否能够预料到有一天支付Pay系统会成为操作系统的核心子系统如果不能那么怎么才能做到
操作系统的边界到底在哪里?
要回答这个问题,我们需要看清楚这样三个角色的关系:
* 硬件(个人计算机、手机或其他);
* 操作系统;
* 浏览器。
首先我们来看操作系统与硬件的关系。如果操作系统厂商不做硬件会怎样我们知道个人计算机PC市场就是如此。微软虽然占据了 PC 操作系统DOS/Windows绝大部分江山但是它自身并不生产硬件。这里面PC 兼容机的发展对 DOS/Windows 的发展有着至关重要的支撑意义。它让操作系统厂商有了独立的生存空间。
到了移动时代Google 收购 Android 后,通过免费策略占领移动操作系统的大半江山,一定程度上复制了微软的过程,但实际上并没有那么理想。
首先Android 是免费的Google 并没有从中收取软件 License 费用,而是借助 Android 的市场占有率来推动 Google 的服务例如搜索、Gmail 等等),通过 Google 服务来获取商业回报。
其次iOS 操作系统引入的 “账号-支付-应用市场” 的收税模式受益方是硬件手机厂商而非操作系统厂商。其中最关键的一点几乎所有手机厂商都不接受把支付Pay这个核心系统交给 Google。
最后,不止支付系统,一旦手机厂商长大立足 Google 服务也会被逐步替换。所以 Google 和 Android 手机厂商之间的联盟并不可靠,养肥的手机厂商会不断试探 Google 的底线,而 Google 也会尝试去收紧政策,双方在博弈中达到平衡。
之所以会这样,我觉得原因有这么几个:
其一历史是不可复制的人们对操作系统的重要性认知已经非常充分。所以大部分手机厂商都不会放弃操作系统的核心子系统的主控权。Android 系统的开源策略无法完全达到预期的目标,这也是 Google 最终还是免不了要自己做手机的原因。
其二,手机是个性化产品,硬件上并没有 PC 那么标准化。所以个人计算机有兼容机,而手机并没有所谓的标准化硬件。
分析完操作系统和硬件的关系,我们再来看它和浏览器的关系。在 PC 时期,操作系统和浏览器看起来至少需求上是有差异化的:操作系统,是以管理本地软件和内容为主(对内)。浏览器,是以管理互联网内容为主(对外)。
但,这个边界必然会越来越模糊。
操作系统不涉足互联网内容这是不可能的。应用市场AppStore其实就是典型的互联网内容而另一方面在浏览器的生态里也有一些特殊角色网址导航、搜索引擎、Web 应用市场,它们共同构成了探索互联网世界的“地图”。
问题在于:
* 操作系统、浏览器和(互联网)搜索引擎的关系是什么;
* 移动时代的浏览器会是什么样的;它和操作系统的关系又如何相处?
欢迎把你对这几个问题的想法告诉我。
## 结语
让我们简单回顾下今天我所讲到的内容。
从客户需求来说,操作系统的核心价值在于:
* **实现软件治理,让多个软件和谐共处;**
* **提供基础的编程接口,降低软件开发难度。**
从商业价值来说,操作系统是刚性需求,核心的流量入口,兵家必争之地。所以,围绕它的核心能力,操作系统必然会不断演化出新的形态。
我们把引入了 “账号-支付-应用市场” 商业闭环的收税模式的操作系统,称为现代操作系统。
操作系统的边界到底在什么地方?我们通过分析硬件、操作系统、浏览器三者的关系,也做了定性的分析。这样的分析将有助于你对需求发展做出预判。
最后,你可以在留言区给我留言,分享你对于操作系统技术、商业的看法,让我们一起交流。