阅读 4100

真香警告:即使不学 OS 进阶,也请务必收藏好该文!

前言

很高兴见到你!

上一期我在掘金发表了《重学安卓:Activity 的快乐你不懂!》,原本只是想给大家一把进阶的钥匙,能够因为文章从 0 到 1 的介绍,而对显示系统大家族 建立起感性的认识、并且埋下好奇的种子 去推动自己继续探究,没想到公众号后台 有不少读者追问是否还有后续。

关于这个问题呢,不要慌,答案就在文章的末尾。

平心而论,我比较倾向于 “从 0 到 1” 的这种思考。一上来就讨论技术细节的话,对我来说也是件很摸不着头脑的事。

所以在开放场合,我清一色地是以 “从 0 到 1” 和大家见面,也希望你们能记得, KunMinX 就是 “专好这口” 的那个作者 ~

好了,今天的主题是介绍操作系统的缘起。为什么会想起介绍这个呢?

问问你身边的同事或朋友,他们对于操作系统的认识到底有多少?为什么我们做软件开发的,要认识操作系统?

或者说,到底在什么情况下,才会涉及到操作系统知识?——

比如,你是否原以为 Android 应用层开发 根本涉及不到什么底层的概念,没想到 在分析 Looper 时,对进程阻塞的概念不解,导致无法理解为什么死循环不会导致 ANR?

又比如在 Android 中,一个 App 通常是一个进程,App 间的组件通信,靠的就是进程间通信,所以如果不明白进程,你是否有办法理解为什么存在进程间通信?

再比如,像 “双缓冲” 或 “内存抖动” 这些概念,是几十年前就存在的操作系统概念,是大学教科书上就有的东西,并不是安卓平台独有的。所以当有人拿着这些名词向你臭显摆的时候,你是否能够嗤之以鼻?

不过呢,在介绍任何事物之前,我还是会以事物的缘起做开头,所以本文的目标就是介绍操作系统的缘起。

如果阅读完本文,你对操作系统的缘起、发展,和作用 有了最基本的感性的认识,那我的愿望也就达到了。

不得不先讲的背景缘由

1946 年到 50 年代中期,计算机还处于手工操作方式,此时还没有出现操作系统。

操作系统最开始的出现,是为了解决 CPU 运算资源利用严重不充分的问题。

那究竟是有多严重、有多不充分呢?下面我拿具体的客观数据,来为你奠定一下感性的认识:

1.从第一代计算机开始,CPU 的运算速度 就已远远超过人类,达到每秒 5000 次加法运算。因而任何手工操作在其看来都是度日如年、巨慢无比。

2.第一代计算机的输入输出设备和主机是一体的,计算机需要通过输入设备接收 穿孔纸带 来读取程序,因而每次上机,整台计算机是一个上机人员独占的。并且在上机人员上纸带时,CPU 是处于等待状态

3.第一代计算机的 CPU 是由电子管构成,电子管 每隔 6 分钟就可能烧坏一个

综上,早期计算机的上机成本十分高昂,为了解决 CPU 运算资源利用不充分的问题(或者说弥补巨慢的输入输出和巨快的运算速度之间的巨大鸿沟),先后做了 3 次改革。

第一次改革:联机批处理系统

将作业运行的全流程交给批处理系统来监控和调度,也即解放过程中几乎所有的人力操作,实现自动化。

如此一来,便 解决了“人机矛盾”,节省了输入输出操作和运算操作之间的切换时间间隙。

但并没有解决:在作业的输入和输出时、CPU 仍处于忙等状态、等待慢速的输入输出设备完成工作。

第二次改革:脱机批处理系统

将输入输出设备与主机分离,通过转换器将输入机的数据事先读取到高速磁带,并将高速磁带用于 CPU 的计算,计算结果也存放在高速磁带中,通过转换器将数据通过输出机输出。

所以可以理解为,高速磁带就是内存的雏形,由转换器将输入输出设备的数据转换并读写在高速磁带上。这样,主机并不直接与慢速的输入输出设备打交道,而是与高速的磁带发生关系,如此便 有效缓解了主机与外设的矛盾

但此时仍没有解决的是:当一个程序执行到一半,发出 IO 请求时,CPU 便不得不等待 IO 操作完成。

第三次改革:多道批处理系统

此时出现了多道程序设计技术:

将多个程序同时放入内存中,当一个程序执行完了、或请求 IO 操作时,就会切换到另一个程序继续执行,而不让 CPU 忙等。

多个程序之间在微观上来看是串行,但由于此处的串行不包含 IO 操作,因而 大大缩短了整体时间

并且又由于各自都未执行完,因而宏观上来看多道程序又是在并发执行。

(进程和空间隔离的概念也是这个时期出现的,让多道程序处于不同的内存空间,让数据更加安全和稳定。)

于是,在批处理系统和多道程序设计技术的基础上,演化出多道批处理系统。特点是:

1.多道:系统可以同时容纳多个作业,作业以队列的方式存放于外设中,系统将作业读取到内存中运行并最终输出结果,整个过程是个自动转接的、连续的作业流。

2.成批:系统运行过程中,用户无法干预,无法与之交互,必须等待运行完成。

所以多道批处理系统 解决了“吞吐量和资源利用率”的问题,以及实现作业流程的自动化。

但缺点是:无法实现人机交互,而且到目前为止,计算机仍是独占的。

背景变迁

20世纪60年代初,晶体管的出现,使 CPU 在大幅降低耗能、体积和损毁率的同时,性能大幅提升。这使得计算机的背景环境发生了变化。

再加上前 3 次改革的目标是解决资源利用率和吞吐量的问题,而没有解决计算机独占的问题,因而促成了分时系统的出现,来 解决计算机独占的问题,并且让彼时的系统能与用户发生交互。

分时系统

分时技术的特点:把 CPU 的运行时间分成很短的时间片,按时间片轮流把 CPU 分配给各联机作业使用。在一个时间片内不能执行完,则时间一到,任务暂时中断,切换给另一作业使用,直到下一次再轮到自己。

此时的一个典型应用就是 多个终端共享一台主机。宏观上看好像是并行执行,微观上看其实是轮流串行执行。并且终端之间独立运作、互不干扰。

并且 此时的系统是 可交互、且及时响应交互的。用户可在系统对上一个请求作出响应的基础上,再次发出新的请求。

(对换存储等概念也是这个时候出现的。分时系统可以同时接纳数百个用户。由于内存空间有限,往往采用 对换方式 的存储方法,将未轮到的作业先放入磁盘,一旦轮到再放入内存,而时间片一用完,又将作业存回磁盘,使同一内存区域轮流为多个用户服务。)

实时系统

虽然 多道批处理系统 和 分时系统 分别解决了 资源利用率 和 系统响应 的问题,但却不能满足 实时控制实时信息处理 这两个应用领域的需求。

于是就产生了实时系统,可以及时响应随机发生的外部事件,并在严格的时间内完成对事件的处理。

1.实时控制系统:比如飞机飞行、导弹发射的自动控制。

2.实时信息处理系统:比如查询航班、航线、票价等实时信息。对实时性的要求稍弱于第一种。

特点:及时响应,高可靠性。

通用操作系统

复合了 多道批处理系统、分时系统、实时系统,也即包含其中两种或三种特性的系统。

进一步发展

个人操作系统、网络操作系统、分布式操作系统等。

综上

1.操作系统的出现,最初是为了 解决资源利用率和吞吐量的问题。(因为打从一开始,CPU 的速度就已一骑绝尘,让人类和外设无以望其项背。CPU 的巨快,是导致操作系统的出现,乃至 “多道程序设计”、“分时复用技术” 这些 “骚操作” 得以存在的最根本的缘由。)

2.含分时特性的操作系统可以 与用户发生交互、响应用户的操作

3.含实时特性的操作系统可以 实时响应事件、或动态获取最新信息

4.操作系统是对硬件的一层封装,上层应用直接与操作系统接口打交道,即可间接地调动硬件资源来完成工作。

这样说,你理解了吗?

xzl短

《重学安卓》系列文章

重学安卓:Activity 的快乐你不懂!

重学安卓:Activity 生命周期的 3 个辟谣

重学安卓:绝不丢失状态的 Activity 重建机制!

重学安卓:你丢了 offer,只因拎不清 Activity 任务和返回栈

重学安卓:Intent 就是你的择偶标准啊!

重学安卓:我的碎片很听话,你的 Fragment 有自己的想法

重学安卓:为你还原一个真实的 Jetpack LifeCycler

...

关注下面的标签,发现更多相似文章
评论