操作系统处于应用层与硬件层之间,上看应用、下看硬件。
应用层上,无人驾驶、工业驾驶等场景中,操作系统的可靠性被放在更重要的位置,微内核更受欢迎,库操作系统也云计算平台上大受欢迎。
硬件层上,半导体制造工艺接近物理极限,单核性能接近瓶颈,通用处理器由多核走向众核。
操作系统的发展趋势涉及以下几个方向:
- 边缘计算:随着IoT设备连接到网络,数据处理应用程序正在向边缘迁移。这将推动服务器系统,包括基于x86的标准服务器上运行块、文件和对象的新的横向扩展存储体系结构发展。边缘计算设备需要紧凑、坚固且适用于严苛环境,并且底层基础架构服务(包括网络和存储)也需要移至边缘,以确保数据的安全性、私密性,并实现低延迟的数据分析。这种情况下,x86服务器系统与卸载加速器(offload accelerators)结合在一起,成为承载边缘工作负载的基础平台。
- 5G和移动设备:电信公司正在朝着5G启用迈进,其5G基础架构也朝着软件定义演进。这将为移动用户(移动设备和联网/自动驾驶汽车)提供更好的连通性。
- 云优先向数据优先转变:随着软件定义的架构的普及,客户正在从“云优先”策
微内核
区别于宏内核(Monlitihic Kernel),如Linux
微内核是操作系统核心功能的精简内核,仅保留必要模块,如IPC、内存管理、CPU调度等
IPC,进程间通信
进程间通信(IPC,Inter-Process Communication)是指在不同进程之间传递信息和数据的一种技术。在计算机系统中,每个进程都运行在自己的地址空间中,具有独立的内存和资源。为了实现进程间通信,需要采用一些特殊的机制和方法。
常见的进程间通信方式包括:
1. "管道(Pipe)":管道是一种半双工的通信方式,数据只能单向流动,通常用于父子进程之间的通信。 2. "命名管道(Named Pipe)":命名管道是管道的一种扩展,允许无亲缘关系进程间的通信。它使用了一个文件作为通信的媒介。 3. "信号(Signal)":信号是一种异步的通信方式,用于通知接收进程有某个事件发生。它不适合传输大量数据,主要用于进程控制。 4. "消息队列(Message Queue)":消息队列是一种队列式的通信方式,允许不同进程发送和接收消息。进程可以以异步的方式读写消息队列。 5. "共享内存(Shared Memory)":共享内存允许多个进程访问同一块内存区域,从而实现快速的数据交换。但需要注意同步和互斥问题。 6. "信号量(Semaphore)":信号量是一种同步机制,用于控制多个进程对共享资源的访问。它可以保证资源在同一时间只被一个进程使用。 7. "套接字(Socket)":套接字是一种端到端的通信方式,适用于不同主机上的进程间通信。它既可以用于本地进程间通信,也可以用于网络通信。
E.g.:以下为 管道(Pipe)的Mermaid示意图
管道(Pipe)
父子进程间的通信
半双工
数据单向流动
基于微内核的操作系统有MINIX3、seL4、Fuchsia等。
MINIX3 演绎了模块化思想,将操作系统演绎成用户态进程。minix3社区
seL4 对进程间通信(IPC)机制进行了优化,有着口号 sel4社区
" Security is no excuse for bad performance "
(安全性是不是不断降低性能的借口)其 ICP 是实现L4家族里最快的。(其为第一个形式化验证的高可靠内核,禁止内核并发处理)
Fuchsia 基于 Zircon 设计,
该内核为Fuchsia提供了核心驱动和CLibrary实例。
这些进程间通信方式可以根据不同的需求和场景进行选择。在设计和实现多进程系统时,正确选择和使用进程间通信机制是确保系统性能和可靠性的关键之一。
它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口,如DOS、Workplace OS、Workplace UNIX等。
库操作系统
虚拟机上的特定程序而言,操作系统往往会包含用不到的驱动程序、依赖包、服务等。E.g.: USB驱动就在虚拟化云环境中无用,但仍包含在Linux内核之中。也带来了,虚拟机启动慢、受攻击面大等问题。
由此,库操作系统(Library Operating System,LibOS)应运而生。基本思想是根据应用程序来定制操作系统的内核,去除无用的部分。LibOS将原属于操作系统内核的功能以库的形式供给应用程序。
开发者选择栈模块和一系列最小依赖库构建应用程序,这些库和应用程序可以你直接在虚拟机管理程序(Hypervisor)或硬件上运行。
库操作系统的主要工作原理是将虚拟机管理程序视为一个稳定的硬件平台,这个平台负责管理和调度所有的应用程序和设备驱动程序。与传统的操作系统相比,库操作系统具有更高的效率和更强的可扩展性,因为它只包含了操作系统必要的组件,而将应用程序和设备驱动程序等资源都编译到单一内核中。
此外,库操作系统还采用了面向对象的技术,使得开发人员可以更方便地添加、修改或删除系统组件,同时降低了操作系统的维护成本。
库操作系统是一种高度可定制、可扩展、高效的操作系统,它具有传统操作系统无法比拟的优势,将会在未来的云计算领域发挥越来越重要的作用。
近几年以Serverless为代表的下一代云计算软件部署的主要解决方案,
LibOS有望成为下一代云平台软件部署的主要解决方案。
优点:
体积小,启动快
单个应用
LibOS
启动快
单个应用
体积小
稳定性
易用性
外内核
在传统操作系统中,只有内核可以管理硬件资源,通过内核硬件抽象接口间接与硬件交互。
外内核或外核(Exokernel),也被称为纵向结构操作系统,是一种比较极端的设计方法。这种设计理念是让用户程序的设计者来决定硬件接口的设计。外内核本身非常的小,它通常只负责系统保护和系统资源复用相关的服务。(专注于物理资源的隔离保护、复用)
传统的内核设计(包括单核和微核)传统的内核设计(包括单核和微核)都对硬件作了抽象,把硬件资源或设备驱动程序都隐藏在硬件抽象层下。比方说,在这些系统中,如果分配一段物理存储,应用程序并不知道它的实际位置。而 外核 的目标就是让应用程序直接请求一块特定的物理空间,一块特定的磁盘块等等。系统本身只保证被请求的资源当前是空闲的,应用程序就允许直接存取它。
既然外核系统只提供了比较低级的硬件操作,而没有像其他系统一样提供高级的硬件抽象,那么就需要增加额外的运行库支持。这些运行库运行在外核之上,给用户程序提供了完整的功能。
下面是MIT的Aegis团队的操作系统实例:
外内核接口的上层工作的库操作系统提供了更高级别的抽象。这样以来,对应用程序的限制就减少了。
多内核
如今主流的计算机都拥有多核处理器系统。受限与摩尔定律、功耗、设计复杂度,现代计算机架构已从多核(Multi-Core)发展到了众核(Many-Core),处理器的核心不断增多已成为明显趋势。
基于多内核(Multikernel)的操作系统是基于上述挑战提出的新型操作系统架构。在多核操作系统中,机器被视为拥有多个独立CPU核的网络,而操作系统被构建成一个分布式系统,一个CPU对应一个操作系统内核,多个操作系统内核并行运行,但不共享内存,通过Message(异步消息)来传递信息。
多核操作系统内核系统模型如图所示:
多内核是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。这样的设计更易于扩充,并且能够在更纤巧的外形中融入更强大的处理性能,同时这种外形所用的功耗更低,计算功耗产生的热量更少。
离散化内核
现有的数据中心以服务器为单位进行组织,架构可能存在以下问题:
- 资源利用率低。
Google、阿里云的服务器29天和12h跟踪发现,服务器集群仅使用一半的CPU和内存。 - 硬件弹性弱。
部署规划时间长,对应的计算需求变化不适配。 - 粗粒度的故障域。
主板、内存、CPU和电源故障占服务器总故障的50%-82%。 - 异构性支持差。如GPU、TPU、DPU、FPGA、NVM等硬件设备使用不断增加,维护成本上升。
资源利用率低
Google、阿里云的服务器29天和12h跟踪发现,服务器集群仅使用一半的CPU和内存
硬件弹性弱
部署规划时间长,对应的计算需求变化不适配
粗粒度的故障域
主板、内存、CPU和电源故障占服务器总故障的50%-82%
异构性支持差
如GPU、TPU、DPU、FPGA、NVM等硬件设备使用不断增加,维护成本上升
名称 | 描述 |
GPU | Graphics Processing Unit,图形处理器。用于进行图形渲染和处理任务。 |
TPU | Tensor Processing Unit,张量处理单元。一种专为处理张量计算而设计的处理器,主要用于人工智能和机器学习方面的加速计算。 |
DPU | Deep-Learning Processing Unit,深度学习处理单元。专为深度学习计算而设计的处理器,可提高训练和推断速度。 |
FPGA | Field Programmable Gate Array,现场可编程门阵列。一种可编程逻辑电路,允许用户在硬件级别实现自定义算法和数据处理流程。 |
NVM | Non-Volatile Memory,非易失性存储器。一种不依赖于电源而能保持数据的存储器,常用于缓存、持久性存储和共享访问。 |
现在主要以一种离散化的数据中心架构:
将服务器的硬件打散,故障隔离,网络连接构成组件,以组件为单位构建数据中心。
离散化数据中心有以下优点:
- 硬件弹性好
- 独立故障域
- 支持硬件异构
离散化内核设计通常用于提高系统的可靠性和可维护性。通过将不同功能模块分布在不同的实体(离散化内核)中进行处理,可以降低系统的复杂性和耦合性,并提高模块之间的隔离性。这种方法还可以使系统更易于升级和扩展,因为每个离散化内核可以根据需要进行独立升级和替换,而不会影响其他部分的功能。
但是,现有的操作系统支持的是数据中心的服务器为基础单位,而非以组件为基础单位。因此需要面向新的数据中心体系结构构建新的操作系统抽象。LegoOS便是一种离散化的操作内核(Splitkernel),基本理念为既然硬件已经拆分了,操作系统也应该拆分了。
Splitkernel 模型的主要特点在四个方面:
- 打散的操作系统功能
- 监视器运行在硬件组件之上
- 组件之间通过网络进行通信
- Splitkernel在全局范围内对资源故障进行处理
随着以Severless等为代表的微服务架构兴起,细粒度计算成为未来计算趋势。打散的数据中心硬件和操作系统为实现高效的细粒度计算提供了可能。
openEuler操作系统简介
在此,我们就对现代操作系统发展历程以及趋势有了比较清晰的认识。
操作系统处于应用层与硬件层之间,上看应用、下看硬件。
话不多说,我直接上openEuler的整体架构图:
欧拉开源操作系统(openEuler,简称“欧拉”)从服务器操作系统正式升级为面向数字基础设施的操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统。通过为应用提供确定性保障能力,支持 OT 领域应用及 OT 与 ICT 的融合。
欧拉开源社区通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系,孵化支持多种处理器架构、覆盖数字基础设施全场景,推动企业数字基础设施软硬件、应用生态繁荣发展。
2019 年 12 月 31 日,面向数字基础设施的全场景开源操作系统开源社区openEuler 正式成立。
2020 年 3 月 30 日,openEuler 20.03-LTS(Long Term Support,简写为 LTS,中文为长生命周期支持)版本正式发布,为 Linux 世界带来一个全新的具备独立技术演进能力的 Linux 发行版。
2020 年 9 月 30 日,首个 openEuler 20.09 创新版发布,该版本是 openEuler 社区中的多个企业、团队、独立开发者协同开发的成果,在 openEuler 社区的发展进程中具有里程碑式的意义,也是中国开源历史上的标志性事件。
2021 年 3 月 31 日,发布 openEuler 21.03 内核创新版,该版本将内核升级到 5.10,还在内核方向实现内核热升级、内存分级扩展等多个创新特性,加速提升多核性能,构筑千核运算能力。
2021 年 9 月 30 日,全新 openEuler 21.09 创新版如期而至,这是欧拉全新发布后的第一个社区版本,实现了全场景支持。增强服务器和云计算的特性,发布面向云原生的业务混部 CPU 调度算法、容器化操作系统 KubeOS 等关键技术;同时发布边缘和嵌入式版本。
2022年3月30日,基于统一的5.10内核,发布面向服务器、云计算、边缘计算、嵌入式的全场景openEuler 22.03-LTS版本,聚焦算力释放,持续提升资源利用率,打造全场景协同的数字基础设施操作系统。
2023 年 3 月 30 日,发布 openEuler 23.03 内核创新版,采用 Linux Kernel 6.1 内核,为未来 openEuler 长生命周期版本采用 6.x 内核提前进行技术探索,方便开发者进行硬件适配、基础技术创新和上层应用创新
openEuler的白皮书:https://www.openeuler.org/whitepaper/openEuler-whitepaper-2303.pdf
官网链接:https://www.openeuler.org/zh/
那我们的openEuler之路就开始了。
定个小目标:在我小时候的玩具上EV3上,跑个openEuler Embedded!
Hello,openEuler~