回顾计算机技术的发展历程,可以发现计算机体系结构和计算机硬件依赖的半导体技术是推动计算机技术快速发展的动力。
20世纪60年代,最大的磁存储系统只能存储1 MB的信息,该存储系统不仅像机房那样庞大,而且访问速度慢、功耗高。1966年秋天的一个晚上,34岁的IBM电气工程师鲍勃·登纳德灵光乍现,他想用一个晶体管来存储1 bit的数据。如果这个想法成为现实,只需要使用极少的电量反复刷新晶体管就能够留住电荷,从而维持数据的存储。现在,我们知道登纳德发明了计算机存储系统中的DRAM(Dynamic Random Access Memory,动态随机存储器)。1974年,登纳德提出了著名的登纳德缩放(Dennard Scaling)定律,该定律指出,随着晶体管密度的增加,每个晶体管的功耗会下降,因此他预言每平方毫米硅的功耗几乎是恒定的。在很长的时间里,某代半导体产品的工作频率会比上一代产品提高40%,而同样空间可容纳的晶体管数量会比上一代产品增加一倍。计算机体系结构使用各种创新技术来利用快速增长的晶体管资源,提高了CPU的性能,减小了内存访问速度和CPU处理速度之间的差异给系统带来的性能损失。在过去几十年里,摩尔定律一直发挥着作用,在不增加成本的情况下,计算机性能呈指数增长。正如登纳德所言,“缩放终究会结束,但是,创造力永无止境”。登纳德缩放定律从2007年开始逐渐失效,工艺提升不再能保证功耗不增加,2012年该定律基本被终结。计算机体系结构的对比如表1-2所示。
表1-2 计算机体系结构的对比
体系结构作为计算机系统的基础架构,正在经历从独立计算到分布式部署的上下文计算的转变。这种转变要求通信和计算并重,性能、隐私与安全、可用性和能耗并重。并行性、专用化及跨层次设计成为“能量优先时代”的关键原则。
长期以来,用户程序开发人员不需要关注底层技术就能轻易获得计算机体系结构革新等给应用软件开发带来的各种好处。一方面,计算机提供更高的性能,使实现那些有更多计算需求的用户程序(如AI、AR、VR等)变得可能;另一方面,通过支持更高层的编程抽象(如脚本语言、编程框架),使那些对性能要求不高的用户程序更容易开发。随着下一代体系结构的重心更接近物理层,可能必须要求一部分用户程序具备感知底层硬件的能力,这对下一代计算机体系结构提出了如下新的要求。
新的系统资源管理方式: 以前的操作系统更强调系统资源对用户程序的透明性,对部分性能要求不高的用户程序而言,这种处理方式是合理的;但对另一部分性能要求较高的用户程序而言,可感知系统资源的具体差异更有助于用户程序以更好的方式使用硬件资源。
新的用户程序开发方法和编程模型: 当前的用户程序开发以CPU为核心,编程模型以同步编程模型为主。随着多核、异构多核设备的普及,需要提供让用户程序在多形态设备上可以并行运行的方案,譬如感知底层领域体系结构的新的特定编程模型。
异构计算、异构存储: 因为散热和能耗的原因,通过提升CPU时钟频率和内核数量来大幅提高计算能力的传统方式遇到瓶颈。针对不同的计算类型,CPU、GPU、NPU(Neural network Processing Unit,神经网络处理器)、TPU(Tensor Processing Unit,张量处理器)、IPU(Image Processing Unit,图像处理器)、DSP(Digital Signal Processor,数字信号处理器)、ASIC(Application Specific Integrated Circuit,专用集成电路)、FPGA(Field Programmable Gate Array,现场可编程门阵列)等用于特定领域的加速器不断涌现。这些异构计算单元要求操作系统能够基于算力、性能、功耗、并发等多种因素提供综合调度能力。因NVRAM(Non-Volatile Random Access Memory,非易失性随机访问存储器)、SCM(Storage Class Memory,存储级内存)、PIM等新存储架构的出现,传统分层存储体系的部分存储层级关系变得模糊,这要求操作系统能够更好地支持新型异构存储,提升存取性能。
支持多种指令集: 不同的计算单元可能使用不同的指令集,这需要操作系统运行时能够针对不同计算节点编译出不同指令集的二进制代码。
并行计算对操作系统的要求是既要考虑用户程序的具体特征,又不能过分“迎合”用户程序的需求。下一代计算机体系结构在并行计算方面的核心问题如下。
并行类型: 并行计算中,有两种并行类型,即任务并行(Task Parallelism)和数据并行(Data Parallelism)。任务并行就是对多个待解决的问题进行任务分割,不同的任务分布在不同的处理单元上执行。数据并行就是对任务依赖的数据进行分割,将分割好的数据放在一个或多个处理单元上执行,每一个处理单元对这些数据都进行类似的操作。
处理单元的组织结构: 处理单元的组织结构包括单设备上独立的核、多核、协处理器和加速器,以及多设备之间独立的核、多核、协处理器和加速器。
同步和通信: 通过底层通信机制解决数据在多个核之间或设备之间的同步问题。特别是设备之间的数据同步,由于通信带宽的限制,需要做到按需同步,仅同步业务必需的数据。
总体而言,我们需要打破现有的计算机软硬件抽象层次,提出一套新的机制和策略来实现局部性和并发性;提供可编程、高性能和高能效的软硬件协同平台;能够高效地支持同步、通信和调度;开发真正易于使用的并行编程的模型、框架和系统。
随着万物互联时代计算机体系结构的不断演进,操作系统必然要能够同步演进。同时,操作系统需要高效地使能体系结构的新变化,充分发挥软件和硬件的协同作用。