鸿蒙操作系统设计原理与架构
上QQ阅读APP看书,第一时间看更新

1.2 操作系统的发展史

从某种意义上说,操作系统的发展史就是计算机硬件和软件的发展史,它的发展与计算机硬件体系结构、软件技术的发展密不可分。特别是几次产业浪潮,极大地促进了操作系统的快速发展和普及。

ENIAC(Electronic Numerical Integrator And Computer,电子数字积分计算机)被认为是世界上第一台通用计算机。它基于二进制的真空管技术,可编程并执行复杂的操作序列(操作序列中可以包含循环、分支和子程序)。实际上,早期的计算机是没有操作系统的,经过培训的计算机操作员通过记录程序和数据的卡片来操作机器,这通常需要花费几个星期的时间。随着硬件和用户程序越来越复杂,对计算机的操作变得更加复杂。后来,用每个程序都需要的输入和输出等公共操作组成了统一的代码库,这也被认为是操作系统的雏形。1956年,美国通用汽车公司和北美航空公司推出世界上第一个可用的操作系统GM-NAA I/O,在随后几十年间,操作系统跟随计算机技术的蓬勃发展而不断演进,多次推动信息产业浪潮的发展,如图1-1所示。

1. 第一代计算机阶段(1945—1955年):真空管

在这个阶段,汇编语言还没有出现,所有的程序设计都用机器语言直接操控硬件,还没有形成操作系统的概念。程序通过打孔的形式被记录在卡片上,计算机通过读取这些卡片来处理计算任务,输出的数据也通过卡片呈现。对于一些复杂的任务,卡片的数量高达数百万张,可以想象,操作第一代计算机是一件非常费时费力的事情。

图1-1 操作系统与产业浪潮的相互促进

2. 第二代计算机阶段(1956—1965年):晶体管

晶体管的发明使计算机的可靠性获得了极大的提升,计算机第一次可以做到长时间无故障运行。1957年,IBM公司开发出Fortran语言,它是世界上第一个被正式采用并流传至今的高级编程语言,我们常说的编译、链接、函数库等计算机基础概念在这个阶段已经被提出并实现。程序员负责写程序,编码员负责在卡片上打孔,操作员负责把卡片输入计算机。为了减少计算机输入和输出时间,工程师们设计出一种用于专门处理卡片输入和输出且造价较低的计算机。它的处理思路是先用一台计算机从卡片中读取数据输入磁带;然后操作员通过一个批处理系统读取磁带中要处理的任务,并运行该任务;任务完成后将结果输出到另一个磁带中;接下来读取并运行下一个任务、输出任务结果,如此循环往复。这里提到的批处理系统就是操作系统的雏形,然而它还不是真正意义上的操作系统。

批处理系统的主要设计思想浓缩进了被称为监控程序(Monitor Program)的软件中。批处理系统的工作过程如下。

第1步,计算机的控制权由监控程序掌握。

第2步,监控程序从输入设备中读取一个任务,然后把任务放置在用户程序区域,并把控制权交给用户程序。

第3步,执行用户程序,当用户程序执行完成后,监控程序再次获取计算机的控制权,返回第2步执行下一个任务。

相比操作员而言,监控程序可以“无等待”地读取任务、执行任务,再读取任务、执行任务,计算机的利用率得到有效提升。

看到这里,也许您会心存疑问:当用户程序运行完成后,监控程序通过什么可以再次获取计算机的控制权?如果用户程序是一个恶意程序或存在bug,长时间无法运行完成,或者不主动释放控制权,监控程序如何才能获取控制权?

实际上,仅靠软件本身是无法确保监控程序总是可以获取控制权的。在计算机的世界里,当软件无法解决问题时,我们还可以依靠硬件来解决,操作系统更需要硬件的帮助。在第二代计算机阶段,计算机硬件厂商为操作系统提供如下重要功能。

内存保护(Memory Protection):监控程序的内存空间受硬件保护,一旦检测到用户程序试图更改监控程序的内存空间——不管是有意的还是无意的,CPU的控制权直接转移给监控程序。内存保护一般采用内存分段(Segmentation)的方式,物理内存被系统分割成许多小的分段,操作系统对需要保护的分段进行特殊标记。

定时器(Timer):用户程序接管控制权后,定时器会自动启动。如果定时器时间到了而用户程序仍未运行完成,控制权会被强行交还给监控程序,监控程序会强行终止用户程序。

特权指令(Privileged Instruction):只能由监控程序执行、不允许用户程序直接执行的指令会被系统设置为特权指令,例如I/O(Input/Output,输入输出)指令。如果用户程序想要执行特权指令,可以请求监控程序为自己执行这个指令。特权指令就是为监控程序而设计的,毕竟,只有拥有较高权限的一方才能管控拥有较低权限的一方。

从现代操作系统的角度来讲,批处理系统已经具备基本的任务调度能力,它可为计算机系统提供一个自动任务处理序列。从用户的角度来看,批处理系统已经把CPU的处理时间完全占满;但从CPU的角度来看,CPU经常“忙里偷闲”。因为访问 I/O设备仍然需要较长时间,其间,CPU长期处于空闲状态。I/O访问的速度相对于CPU的处理速度要慢很多,CPU需要完成I/O操作,才能接着执行其他指令。因此,如何更充分地利用CPU就是操作系统要解决的问题,我们常说操作系统的发展史就是对CPU的“压榨史”,这不无道理。在这个阶段,有一件事情不得不提,1963年,康威定律的提出者康威博士发表论文“A Multiprocessor System Design”,正式提出 fork思想,从而实现多处理器并行。从那之后,操作系统的设计大都采用了该思想。

从操作系统发展的角度来看,这个阶段的计算机硬件成本很高,编程语言尚处于雏形期,操作系统与硬件深度耦合,其主要目标是追求较高的硬件使用效率。

3. 第三代计算机阶段(1966—1990年):大型机、小型机

使用集成电路使计算机硬件技术产生了质的飞跃,低成本、小型化、专业化的计算机层出不穷。与这些计算机对应的操作系统也各种各样,每一个操作系统都有自己的操作过程和调试工具。设备厂商每生产一类新的机器都会配备一套新的操作系统。20世纪60年代IBM开发出System/360系列计算机,与前面介绍的设备不同,这些计算机拥有统一的操作系统——OS/360。

前面提到,I/O访问常常需要占用较长的时间,对于批处理系统,在这段等待时间里,CPU只能“无所事事”。如何让CPU忙起来?多道批处理系统就是计算机科学家的一种尝试。一旦有一个任务需要等待 I/O访问,多道批处理系统就立刻切换到另一个不需要等待 I/O访问的任务,I/O访问结束后,再切换回原来的任务继续处理。多道批处理系统也叫多道程序设计(Multiprogramming)或多任务处理(Multitasking),其核心思想是尽可能让更多的任务运行起来,竭力不让CPU闲着。您可能会问,控制权已经交给另一个任务,当I/O访问结束后怎么切换回原来的任务?像批处理系统一样,多道批处理系统也必须依赖计算机硬件功能,具体来说,就是支持 I/O 中断(Interrupt)。当 I/O访问结束后,一个中断信号会被发送给CPU,且该信号有较高的权限,CPU收到后必须暂停当前正在运行的任务,转而处理该任务。在多道批处理系统里,这表现为CPU控制权被转移给多道批处理系统的中断处理程序。可以说,没有中断就没有现代操作系统。

多道批处理系统已经具备现代操作系统的一些基本思想,在批任务处理场景中可获得较高的CPU利用率。随着需要处理的任务越来越多,以及不同的用户需要同时处理不同的任务,小型机应运而生。和大型机使用多道批处理系统不同,多个用户需要频繁地和小型机进行交互,CPU等待的时间主要花费在与用户的交互上。如何更好地处理与用户的交互问题是操作系统首先需要解决的问题,为了解决这个问题,交互式操作系统诞生了。交互式操作系统问题的解决思路是“分时”,即操作系统控制每个用户程序以很短的时间为单位交替执行。人类的反应速度主要取决于人的感官(如眼睛、耳朵、皮肤等),以及中枢神经系统与肌肉之间的协调关系。没有受过专门训练的人的反应时间通常为0.2~0.3 s,而一个训练有素的运动员的反应时间通常为0.1~0.2 s。因此,只要将用户程序对每个用户当前交互操作的响应时长控制在0.1 s以内,几乎所有用户就会感觉自己独占了这一台计算机。分时操作系统通过时钟中断切换用户程序,例如每10 ms向CPU发出一次中断信号,要求系统调度用户程序。

在第三代计算机阶段,具有现实意义的操作系统的概念被首次提出,多道批处理系统、分时操作系统、MULTICS(Multiplexed Information and Computing Service,多路信息与计算服务)等概念被操作系统的先驱们一一探索。MULTICS属于分时多任务操作系统,它帮助程序员调试程序。当然,受限于当时计算机的硬件能力和高昂的价格,相关产品无法大规模商用落地,但商业上的失败并不能掩盖MULTICS对操作系统演进的巨大贡献。20世纪70年代,继承了MULTICS关键思想的UNIX操作系统诞生了。

UNIX操作系统是一个强大的多用户、多任务操作系统,可支持多种处理器架构。从操作系统的分类上说,UNIX操作系统属于分时操作系统。UNIX简洁至上的设计原则,也被称为KISS(Keep It Simple, Stupid,在设计中应当注重简约)原则,UNIX提供机制而非策略的设计理念吸引了一大批计算机软件技术人员。这些设计原则和设计理念对后续操作系统及大型软件系统的设计产生了持续和深远的影响。

操作系统的繁荣发展催生了UNIX的多个变种(如BSD和System V)。为了使用户程序能够在不同版本的UNIX上运行,POSIX(Portable Operating System Interface,可移植操作系统接口)诞生了。它定义了操作系统必须支持的一组系统调用接口,于1985年由IEEE(Institute of Electrical and Electronics Engineers,电气电子工程师学会)首次提出,目前已被大多数操作系统支持。

第三代计算机出现的时代是计算机技术发展的第一个黄金时代,硬件层面出现了集成电路,软件层面创造了操作系统。操作系统的时代已来临,这一阶段的主流操作系统被称为第一代操作系统。

需要指出的是,这个阶段的操作系统的目标人群仍是有一定计算机基础的技术人员,人机交互方式也不够友好,如何提升技术人员工作效率和解决特定领域的技术问题是彼时操作系统需要重点解决的。

从操作系统技术发展的角度来看,计算机硬件成本逐渐降低,编程语言快速发展,操作系统的设计目标主要是与硬件解耦,并逐渐形成独立的理论体系。进程、调度、任务管理、内存管理、虚拟地址、多用户、并发等操作系统的核心概念都是在这个阶段提出并不断得以实践的。通用、可靠、稳定和安全是这个阶段的操作系统的主要研究方向。现代操作系统理论的基本框架在这个阶段基本奠定,为后续操作系统的快速发展打下了坚实基础。

4. 第四代计算机阶段(1991年至今):PC及云主机

随着集成电路集成度的大幅度提升,计算机微型化从理论变成现实,计算机迎来了第一个大繁荣时代——PC时代。

第四代计算机阶段的代表操作系统有MS-DOS、Windows、macOS和Linux。和第一代操作系统相比,它们具备更好的用户交互接口,通过引入GUI(Graphical User Interface,图形用户界面)和鼠标,极大降低了计算机操作的复杂性。计算机由此大规模进入商业公司、政府部门和千家万户。1985年,微软公司推出了以GUI为主的Windows操作系统,并最终获得了PC操作系统的主导地位。20世纪末互联网的兴起使PC迅速在全球范围内普及。2005年,全球使用互联网的人数创下纪录,达到10亿。梅特卡夫定律指出,一个网络的价值等于该网络内的节点数的平方,而且该网络的价值与联网的用户数的平方成正比。也就是说,一个网络的节点数和使用该网络的用户数越多,整个网络和该网络内的每台计算机的价值就越大。PC进入千行百业,催生了操作系统更多的应用场景,操作系统因此在多个领域有了长足的发展,下面列举几个主要领域做简要说明。

计算机图形学(Computer Graphics)。计算机图形学主要研究在计算机世界中表示图形、存储图形、处理图形和显示图形的相关原理与算法。利用计算机绘制出与现实世界接近的图像,以给人视觉上更加逼真的感受,是计算机图形学一直努力的方向。自计算机图形学创立以来,各种图形技术层出不穷,如GUI、坐标转换与光线跟踪、材质贴图、顶点混合、纹理压缩和凹凸映射贴图、3D渲染引擎等。图形处理涉及大量的图形计算任务,专为通用计算和逻辑处理而设计的CPU对此显得力不从心,GPU(Graphics Processing Unit,图形处理单元)应运而生。GPU是一种特殊类型的处理器,具有数百个、数千个甚至更多的内核,通过并行运行内核来处理大量计算任务。在进行三维绘图时,GPU的工作比CPU更高效。计算机图形学在计算机发展史中的地位不管怎么浓墨重彩地描述都不为过。可以说,没有计算机图形学,就没有现代计算机,也没有互联网和电影特效,计算机也不会进入普通人的生活。

计算机存储系统(Computer Storage System)。计算机存储系统的核心是存储器。存储器是用来存储程序和数据的设备。现代计算机系统中常采用由寄存器、高速缓存、主存、外存等组成的多级存储架构。采用多级存储架构的主要目的是让存取速度、存取容量、存储器成本和易失性等多种因素之间取得平衡。操作系统需要设计适当的算法,利用数据访问的局部性原理,在不同层级访问速度存在数量级差异的情况下达到存取性能和成本的最佳平衡。在操作系统中,通常把需要持久化的一组数据抽象为一个文件,操作系统提供打开文件、关闭文件和读写文件等基本接口。对文件进行操作时,用户程序不需要关心数据存储在存储器上的具体物理位置,数据在存储器上的存储位置由操作系统的文件系统统一管理;操作系统也不用理解数据的具体格式,数据的具体格式由用户程序定义和解析。计算机存储系统在云服务器领域被称为DFS(Distributed File System,分布式文件系统),它通过计算机网络技术,将分散在多台机器上的存储资源组成一个虚拟的存储设备。通常,DFS的元数据非常多,元数据的存取性能是整个分布式文件系统性能的关键所在。

计算机网络(Computer Network)。计算机网络是指计算机设备通过有线或无线的传输介质,通过节点之间的链路连接互相交换数据和分享数据的数字通信网络。计算机网络把孤立的计算机连接在一起,使单台计算机可访问的数据范围被极大地扩大。连接在互联网上的计算机变为一个可访问海量信息的客户端,通过该客户端,人们可以进行信息共享、软件共享和硬件共享。

分布式系统(Distributed System)。分布式系统是指将物理上独立的一组计算机通过计算机网络连接在一起工作的软件系统。该软件系统支持管理所有节点的软硬件系统资源,能够控制分布式程序的运行和状态共享,并可以执行并发操作。

除上述领域外,编程语言、运行时和媒体处理等被引入操作系统并迅速发展壮大。另外,GPU和其他硬件加速器的出现,使原本以CPU为核心的操作系统不得不做出改变。

在这个阶段,Windows和macOS在桌面操作系统中占有统治地位,它们较好地解决了用户通过鼠标与计算机设备进行图形交互的问题,同时也解决了个人用户在计算机中使用相关的图形、多媒体、网络和Web等的技术问题。Linux在嵌入式设备、超级计算机,尤其在服务器领域确定了其不可挑战的地位,它是一种自由和开放源码的类UNIX操作系统。从技术角度来看,Linux实现了系统与网络通信一体化,并因其低廉的使用成本及对大量硬件的适配支持而“独步江湖”。

这个阶段的操作系统被称为第二代操作系统,和第一代操作系统相比,使用鼠标等更自然的交互方式被引入,同时TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)等通信技术也被预置到操作系统中。操作系统的交互性更加友好,为办公数字化、个人娱乐和互联网技术的发展做出了重要贡献。操作系统的目标人群不再局限于计算机相关的技术人员,经过简单培训的普通人员也可以操作计算机。操作系统交互性的提升促进了用户程序生态的丰富,用户程序生态的丰富则推动了PC更大范围的普及。办公软件、影音娱乐、游戏、浏览器、工业软件、企业管理软件、数据库软件等加速了各行各业的数字化改造进程。用户程序的传播方式非常灵活,譬如可通过光盘、网络下载、磁盘复制等进行传播,但第二代操作系统缺少对用户程序的统一管理,仿冒、安全木马、盗版等各种问题层出不穷。

从操作系统技术发展的角度来看,操作系统进入快速发展期,相关理论基本完善,PC成为市场的主角,人机交互、网络技术、安全、兼容性等成为操作系统追求的主要目标。

5. 第五代计算机阶段(2007年至今):移动计算机

移动通信在近30年蓬勃发展,给人们的工作、生活和学习带来了极大的便利。特别是3G、4G数据业务速率的不断提高,使互联网从桌面设备拓展到移动设备。美国苹果公司准确预判了移动互联网可能带来的巨大的发展机会,于2007年推出轰动一时的iPhone手机,该手机搭载iOS系统,给用户带来了前所未有的交互体验。用户不再需要通过触控笔和传统键盘的输入方式来操控移动设备,而是可以通过更自然的方式来操控,譬如通过手指触摸的方式在显示屏幕上(实际上是在触摸屏上)做出点击、滑动、多指触控等动作;也可以通过摇一摇、旋转设备等来跟系统交互。紧随其后,美国谷歌公司推出了开源的Android系统,微软公司也推出了Windows Phone系统。

更自然的交互方式大幅降低了操作系统的使用门槛,极大拓展了移动设备使用人群的范围,几乎人人都可以操作移动设备。庞大的移动设备用户群体也促进了应用生态从桌面计算机向移动设备的大规模迁移。移动设备集成了更多的传感器,应用开发者通过丰富的传感信息创造出形形色色的、更有创意的应用程序。

第五代计算机阶段的操作系统的典型代表是iOS和Android,人们通过移动设备不仅可以浏览网页和阅读电子书,还可以体验移动商务、移动视听、即时通信、手机游戏和移动支付等业务,移动终端操作系统深刻地改变了信息时代人们的生活方式和工作方式。这个阶段的操作系统被称为第三代操作系统。从技术上讲,这个阶段的操作系统更强调用户的交互体验,引入了更多的外围设备和传感器;为了使移动设备有更长的续航时间,操作系统提供了强大的功耗管理能力;随着移动设备上承载的用户数据的增加,操作系统在安全和隐私保护方面进行了进一步加强;为了方便用户安全地下载第三方应用,集中式应用生态分发体系诞生了。当然,这些都离不开移动设备计算能力的大幅提升和功耗的下降,以及通信技术的快速发展和传感器技术的逐步成熟。

从操作系统技术发展的角度来看,操作系统理论日益完善。操作系统设计中与硬件相关的部分比重越来越小,其设计重心从南向硬件生态逐步向北向应用生态迁移。操作系统可以独立支撑起一个庞大的软件产业,并从单纯地追求高性能逐渐发展到追求更高能效比,UX(User Experience,用户体验)在操作系统设计中的权重越来越大。