很高兴见到你!安全
上一期我在掘金发表了《重学安卓:Activity 的快乐你不懂!》,本来只是想给你们一把进阶的钥匙,可以由于文章从 0 到 1 的介绍,而对显示系统你们族 创建起感性的认识、而且埋下好奇的种子 去推进本身继续探究,没想到公众号后台 有很多读者追问是否还有后续。网络
关于这个问题呢,不要慌,答案就在文章的末尾。并发
平心而论,我比较倾向于 “从 0 到 1” 的这种思考。一上来就讨论技术细节的话,对我来讲也是件很摸不着头脑的事。分布式
因此在开放场合,我清一色地是以 “从 0 到 1” 和你们见面,也但愿大家能记得, KunMinX 就是 “专好这口” 的那个做者 ~oop
好了,今天的主题是介绍操做系统的缘起。为何会想起介绍这个呢?post
问问你身边的同事或朋友,他们对于操做系统的认识到底有多少?为何咱们作软件开发的,要认识操做系统?性能
或者说,到底在什么状况下,才会涉及到操做系统知识?——操作系统
好比,你是否原觉得 Android 应用层开发 根本涉及不到什么底层的概念,没想到 在分析 Looper 时,对进程阻塞的概念不解,致使没法理解为何死循环不会致使 ANR?设计
又好比在 Android 中,一个 App 一般是一个进程,App 间的组件通讯,靠的就是进程间通讯,因此若是不明白进程,你是否有办法理解为何存在进程间通讯?3d
再好比,像 “双缓冲” 或 “内存抖动” 这些概念,是几十年前就存在的操做系统概念,是大学教科书上就有的东西,并非安卓平台独有的。因此当有人拿着这些名词向你臭显摆的时候,你是否可以嗤之以鼻?
不过呢,在介绍任何事物以前,我仍是会以事物的缘起作开头,因此本文的目标就是介绍操做系统的缘起。
若是阅读完本文,你对操做系统的缘起、发展,和做用 有了最基本的感性的认识,那个人愿望也就达到了。
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.操做系统是对硬件的一层封装,上层应用直接与操做系统接口打交道,便可间接地调动硬件资源来完成工做。
这样说,你理解了吗?
看不过瘾?这里只为你 而准备了一份 简洁有力的 《重学安卓》认知地图 😉