第1章 操作系统概述及其关键技术
操作系统是计算机系统的核心组成部分,是连接计算机硬件和用户软件的桥梁。计算机硬件是各种物理设备的总称,由处理器(CPU)、内存储器和输入/输出模块三大部分组成,它们之间通过系统总线进行互联,共同服务于上层的程序运行;用户软件是为了解决实际问题而开发出来的各种应用程序,比如数据管理软件、文字处理软件、视频播放软件等。操作系统位于二者之间,本质上是一个管理并控制计算机硬件资源和用户软件任务,合理地组织计算机工作流程,方便用户交互的大型底层软件。通过操作系统这一管理整个硬件系统的底层软件,用户可以从复杂的硬件控制中抽身出来,集中精力到如何用计算机解决自身的实际问题上;同时,计算机硬件也可以通过操作系统的合理运行安排实现较高的资源效率。
从软硬件管理的角度看,操作系统主要有进程管理、内存管理、设备管理、文件管理这四类功能。进程管理主要是将CPU资源按照一定的机制分配给待运行的作业进程,包括创建、删除、挂起和重启进程,以及提供进程同步和进程间通信机制等。内存管理主要是制定内存分配策略并进行替换回收等方面的维护,包括记录内存的使用状态,决定哪些进程会调入或调出内存,根据需要分配和释放内存空间以及提供虚拟内存机制等。设备管理主要是为各类设备提供相应的设备驱动程序,包括启动程序、初始化程序以及控制程序等,保证输入/输出操作的顺利完成。文件管理主要是维护文件的存储信息并提供对读写更新等操作的支持,包括创建和删除文件,创建和删除目录以便组织文件,提供文件和目录的操作原语,映射文件到外存,以及文件备份等。这几个部分紧密配合,为下层的硬件资源管理和上层的用户服务提供了良好的支撑。
从20世纪50年代到如今,操作系统从无到有,由简单到复杂,再到成为计算机中不可或缺的核心系统软件,一路取得了辉煌的发展成绩。其推动力主要有几个方面:首先是为了提高计算机资源利用率,降低CPU、存储器、外部设备等各种硬件资源的使用成本;其次是为了满足用户使用计算机的便捷性需要,不断改善用户开发和运行程序的条件,提供良好的用户接口和环境;然后是紧跟前沿硬件技术的不断发展,为各种新元器件提供有效的支持;*后是服务于计算机体系结构的新形态,比如云计算平台和量子计算平台的出现都需要开发与之匹配的操作系统。经过数十年的持续发展,操作系统已经面向不同的计算任务需求,形成了不同的分支。常见的操作系统可以分为批处理操作系统、时分共享操作系统、实时操作系统、分布式操作系统、移动操作系统等。
批处理操作系统的主要应用场景是高性能计算和科学计算领域,通过将计算任务按批处理,*大化计算机的处理吞吐而较少关心单个计算任务的响应延迟。批处理操作系统曾是早期操作系统发展的一个重要阶段,比如CRAY 公司为巨型机推出的COS(Cray OS)就是一个在国际高性能计算领域影响很大的批处理操作系统。批处理操作系统中作业周转时间长,不提供用户与系统的交互手段,适合大的成熟的作业。时分共享操作系统,将计算机硬件在多个计算任务之间通过时间片的方式进行共享,多个计算任务共同推进,从而允许多个用户同时使用计算机。目前大多数的桌面操作系统(如Windows)以及包括高性能计算平台在内的服务器操作系统(如Unix、Linux)采用的都是时分共享操作系统。实时操作系统则更加关注于单个计算任务的响应时间,需要确保计算任务在稳定的短时间内完成,适用于实时控制和实时信息处理领域,其主要应用场景包括通信系统嵌入式软件、工业互联网、物联网、工业控制系统、军事、航空航天、车载系统等。分布式操作系统同时管理多个计算机,使得他们之间可以通过网络快速协同,并共同完成计算任务。现在的云计算、集群等所采用的操作系统就是分布式操作系统,比如大型数据中心所用的操作系统等。移动操作系统(如Android,也叫安卓系统),则是近二十年来发展起来的新操作系统类型,专门面向手机、平板、可穿戴设备等智能便携式设备,更加关注各类移动APP的使用便捷性、安全以及低功耗等特性。
传统操作系统领域的研究主要关注在进程调度、内存管理、存储管理等研究方向,目前已基本定型,并取得了良好的应用效果。后续的研究工作均是在前述工作的基础上做增量式研究和更新,较少实质性、突破性的进展。
在进程调度管理方面,早期的进程调度采用基于优先级以及时间片的时分复用调度策略。将CPU时间划分为细粒度的时间片,并且将时间片根据优先级分配给各进程。在各进程运行时,将根据其自身的时间片消耗情况进行按需调度。此类时间片方法容易产生部分进程延迟长的问题。目前的操作系统大部分使用基于完全公平调度(Complete Fair Scheduling,CFS)的进程管理。CFS记录每个进程的虚拟运行时间,并在调度过程中确保每个进程的虚拟运行时间一致,从而实现进程间的公平。不同进程的虚拟运行时间的计算纳入了其优先级以及当前占据的CPU时间,可以实现基于优先级权重的按需公平。其他进程调度方法大多以完全公平调度为基础,融入对不同进程特征的考虑,从而提高整体的效率。
在内存管理技术方面,目前普遍采用虚拟内存的方式进行管理。通过将物理内存空间抽象为虚拟内存,每个进程/计算任务都可以看到整个连续的内存空间,并依赖于后台的虚拟地址到物理地址的转换,实现内存中数据的放置与寻址。内存分页以及虚拟地址到物理地址的转换是操作系统内存管理的重要特色。同时,有一系列的研究工作和实现,探究如何减少物理内存的碎片化问题。分页机制以及页映射机制可以通过映射,显著减少已经存在的内存碎片。同时,内存分配时的伙伴系统(Buddy System),以及Slab分配器,能够有效减少内存碎片的产生。近年来伙伴系统以及Slab分配器已经成熟并广泛应用,暂未有具有普适性的新型内存管理技术产生。一些研究工作更加关注于将新型内存介质(如非易失内存、三维堆叠高带宽内存等)引入到内存系统中,并采用不同的方式管理不同的内存介质。例如,非易失内存可使用内存方式管理,但提供持久化的存储;三维堆叠高带宽内存可以作为普通内存使用,也可以作为另外一级缓存使用。
在文件管理方面,提出虚拟文件系统技术,将文件访问接口进行抽象,使得上层应用和软件可以通过统一的接口进行文件输入输出操作,而无须感知真实的数据存储文件系统。目前,各类操作系统都提出了各自的文件系统用以管理和存储文件。其主要不同在于文件中的数据管理方式。虚拟文件系统的出现,实现了不同文件系统的统一,是操作系统中存储管理的一大突破。近年来虚拟文件系统的设计和实现也基本成熟。
从上述的现状总结可以看出,传统的操作系统研究在各个方面均已达到比较成熟的状态。然而,随着科技社会的不断发展,操作系统领域也呈现出一系列新的发展趋势。特别地,随着新应用、新场景、新需求的不断涌现并且日趋复杂,当前的操作系统研究领域主要面临着几个核心的工程难题和科技挑战:
第一个挑战是操作系统需要适应各类云-边-端异构硬件。在生态构建层面,用户应用在云-边-端自由迁移部署的需求日益凸显,亟须开发支持上述自由迁移的泛在操作系统。其难题在于云、边、端硬件常基于X86、ARM等异构指令集,无法支持应用的高性能自由迁移。统一云、边、端硬件的指令集以满足上述自由迁移需求的趋势已初步显现。因此,需要构建自动适应各类云-边-端异构硬件的操作系统,并且从“可用”变“好用”,形成完善的生态。此外,随着智能终端的普及,操作系统也需要为各种物联网设备提供良好支持。
第二个挑战是操作系统需要进行跨层级的协同设计。在操作系统设计层面,传统操作系统的辐射范围日益扩大,需和上层的运行时系统结合提供面向新应用的特定优化,也需和底层的各类异构硬件(如AI芯片)协同设计,提供异构硬件的高效支持。因此,“应用-运行时系统-操作系统-硬件”的协同设计和开发成为新型的操作系统设计方法。
第三个挑战是操作系统需要为大规模分布式应用提供有效的支撑。在分布式支持层面,超大规模的云计算平台日益成为新应用的运行基础平台。因此,对海量分布式,以及通过网络互连的云计算节点的统一细粒度管理,成为了云操作系统和面向云计算的网络化操作系统的一个核心要求。
第四个挑战是随着计算机网络技术特别是互联网、物联网、工业互联网和移动计算技术的发展,计算生态环境从根本上发生了改变,操作系统必须从处理单机资源拓展到处理网络上的浩瀚资源。因此,操作系统领域出现了针对新型计算生态环境的泛在融合发展态势。
此外,支持人工智能加速的芯片持续升温,以及量子计算机等新型计算形态的出现,需要全新的、异于传统的操作系统以支持这种新的计算机形态,这也是操作系统领域的一个重要挑战。
面对以上几个主要工程科技挑战,当前国内外的操作系统研究发展日新月异。无论是在以微软、谷歌、阿里、华为等科技公司为代表的产业技术领域,还是在以OSDI、SOSP、ATC、ASPLOS等著名会议为代表的操作系统学术研究领域,泛在融合、云计算、人工智能、物联网等前沿方向都已经成为了主要的研究热点,并不断取得突破性的进展。
展开