一文读懂微内核
2019年8月9日华为 余承东 发布HarmonyOS 1.0,HarmonyOS的发布将一个计算机领域内非常专业的词带到了广大公众的视线内,这就是微内核
。
事实上,微内核
并不是一个新概念。早在1969年,UNIX系统开始设计的时候,类似微内核架构的操作系统就已经出现。1969年,丹麦计算机科学家Per Brinch Hansen
开发的RC 4000 Multiprogramming System
操作系统,是历史上第一次将操作系统组件分离为各个相互交互的组件,将内核
简化为仅用于通信和支持系统,并使用管道共享内存
作为其进程间通信的基础。如今回看RC 4000 Multiprogramming System
虽然其本身并不是很成功,但激发了微内核概念。
继续HarmonyOS的话题,看了HarmonyOS 1.0发布会回放后,我有一个疑问:什么是宏内核,什么又是微内核,微内核相比于宏内核真的有如此大的优势吗?
华为HarmonyOS 1.0发布会直播回放:
https://www.bilibili.com/video/av62950256/
一、操作系统
了解微内核
与宏内核
之前,首先了解一下操作系统
?
操作系统(Operating System)
是现代计算平台的基础与核心支撑系统,负责管理硬件资源
(包括输入输出设备的初始化、分配与回收)、控制程序运行
、改善人机交互
以及为上层应用软件提供运行环境
等。操作系统作为计算机之“魂”,是释放硬件能力、构建应用生态的基础
。
从应用的角度看,操作系统的作用:一是服务于应用,二是管理应用
。
- 一方面操作系统提供各种不同层次、不同功能的接口,以满足上层应用的需求。
- 另一方面,操作系统负责对应用生命周期进行管理,包括初始化、启动、调度、切换、销毁等。
从硬件的角度看,操作系统主要包含两类功能:
- 一方面操作系统将不同功能的硬件资源纳入统一的管理。
例如,内存管理,操作系统识别电脑中存在的多种不连续的、有限的物理内存区域,再采用某种内存管理分配机制进行分配与管理。 - 另一方面操作系统负责将不同功能硬件资源进行抽象,将有限的、离散的资源抽象为无限的、连续的资源,并将硬件资源通过接口提供给上层应用调用,从而使上层应用无需关心硬件的具体细节。
例如,上层应用开发中,开发者无需关心物理内存硬件的容量、型号信息,而是面向一个近似无限的、统一的虚拟地址空间。
通常而言,狭义
的操作系统指的是操作系统内核加上一个Shell
(即UNIX/Linux等操作系统中的命令行页面)。随着硬件种类和应用需求越来越丰富,大量共性功能沉淀到操作系统中,操作系统的内涵和外延不断扩大,因此,广义
的操作系统又可以进一步分为操作系统内核与操作系统框架
。操作系统内核负责对硬件资源的管理与抽象,为操作系统框架提供基础的系统服务(操作系统内核又分为宏内核、微内核等);操作系统框架则基于操作系统内核提供的服务为不同的应用提供API接口与运行环境。
二、宏内核&微内核
现在操作系统大多采用宏内核架构
(如UNIX、Linux等),操作系统将一些基本的、公共的、与硬件紧密相关的 (如中断处理、内存管理、文件系统、设备驱动等)、运行频率较高的功能(如进程调度、时钟管理等)以及关键性的数据结构独立出来,使之常驻内存,并对其进行保护。内核中采用模块化设计组织各个功能,所有模块运行于内核空间,模块间通信直接调用模块间提供的接口函数实现。
宏内核
可以理解为是个很大的进程,其内部又能够被分为若干功能模块(或者是若干层)。宏内核在运行的时,为一个单独的二进制大映象,模块间的通讯是通过直接调用其他模块中的函数实现的,而非消息传递。
宏内核中许多的功能模块都在同一个内核空间上运行,伴随着操作系统的发展,内核模块的复杂度越来越高,操作系统在可靠性
与安全性
方面慢慢出现了一些问题,一个很小的bug都会使整个系统崩溃。为解决宏内核存在的问题,许多研发人员尝试对宏内核架构进行解耦,将部分非核心功能(如文件系统、设备驱动等)从内核中拆分出来,作为一个独立的服务运行于单独的进程中,并为其提供进程间通信的能力(IPC Inter Process Communication),内核中只保留最核心的功能(如内存管理、进程调度等),这种架构被称为微内核架构。在微内核下服务与服务互相隔离,单个服务即使出现故障或受到安全攻击,也不会导致整个操作系统的崩溃或被攻破,从而有效提供了操作系统的可靠性与安全性。
Minix
有兴趣详细研究微内核
实现与原理的同学,可以研究一下Minix
。Minix
第一个版本于1987年发布,是荷兰计算机科学家Andrew S. Tanenbaum
为了教学而创作,如今为Andrew S. Tanenbaum
教授所著《操作系统:设计与实现》
的示例代码。Minix
启发了Linux内核
的创作。1990年,还在上大学的Linus Torvalds
从Minix
得到灵感,出于对操作系统的兴趣,于1991年发布了Linux。
Minix目前有三个主要的版本:
- Minix1
https://github.com/gdevic/minix1
Minix1是《操作系统:设计与实现》教材的演示代码,侧重于教学和学习(年代久远,很难编译安装)。 - Minix 2.0.4
http://download.minix3.org/previous-versions/Intel-2.0.4/
Minix 2.0.4侧重于自学,链接中有详细的安装教程。 - Minix 3.2.1
http://download.minix3.org/iso/minix_R3.2.1-972156d.iso.bz2
Minix 3.2.1是个实用版本,有iso映像可供下载,安装方便。
三、宏内核VS微内核
自宏内核与微内核这两种架构出现伊始,人们就两者的优劣与特点展开了深入的讨论。
当前随着物联网时代的到来,使微内核架构的操作系统架构再次受到广泛关注。
- 弹性扩展能力:
对于一个庞大的宏内核来说,很难仅仅通过简单的剪裁与扩展,使之满足支持资源诉求从KB到TB级别的场景;而对于微内核,内核空间只包含核心功能,天然具备模块化解耦与弹性部署的能力。 - 功能安全:
由于宏内核在故障隔离方面存在的缺陷,其安全与稳定性方面很难与微内核媲美。 - 进程间通信:
微内核将非核心功能以单独进程的方式运行于用户态,不同系统功能的相互调用需要通过进程间通信实现(IPC Inter Process Communication)。相比于宏内核内核空间中模块间通信采用函数,微内核采用进程间通信,通信效率较低。
当前智能终端呈现多样化的发展趋势,面对物联网时代的到来,微内核天生具备的模块化解耦、弹性部署的能力以及安全稳定的特性,非常符合物联网的发展
,但进程间通信(IPC Inter Process Communication)的性能
无疑成为微内核的软肋
。
微内核虽然存在IPC性能软肋,但IPC性能并非不可提升。
德国计算机科学家Jochen Liedtke(L3微内核与L4微内核系列的创造者)曾表示,高性能IPC的设计与实现必然是与体系结构相关的,过度的抽象将极大影响IPC的性能,而利用体系结构相关的状态进行优化则可将IPC性能提升到极致
。
2019年华为HarmonyOS发布会中,余承东透露华为在微内核IPC优化方面的成果,采用微内核架构的HarmonyOS在IPC方面性能可以达到同样采用微内核的Fuchsia操作系统的5倍
。
相信未来广大技术研发人员不断对IPC性能进行优化,微内核IPC的性能会有大的提升。
参考
* Regnecentralen:
https://en.wikipedia.org/wiki/Regnecentralen
* RC_4000_multiprogramming_system:
https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system
* 微内核:
https://zh.wikipedia.org/wiki/%E5%BE%AE%E5%85%A7%E6%A0%B8
* Mach:
https://zh.wikipedia.org/wiki/Mach
现代操作系统:原理与实现
https://item.jd.com/12731379.html
操作系统的发展:
https://www.feng.com/post/6209622
有关微内核:
https://mp.weixin.qq.com/s/MLCR7qqGFWyyP0KcZqW3Kw