一文读懂微内核

Posted xiaxveliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文读懂微内核相关的知识,希望对你有一定的参考价值。

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 TorvaldsMinix得到灵感,出于对操作系统的兴趣,于1991年发布了Linux。

Minix目前有三个主要的版本:

三、宏内核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

以上是关于一文读懂微内核的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂微服务架构的重构策略

Java架构:一文读懂微服务架构的重构策略

一文彻底搞懂微服务架构

腾讯开发工程师写万字长文:读懂微服务编排利器Zeebe,超详细

内存管理:一文读懂Linux内存组织结构及页面布局

一文读懂Linux任务间调度原理和整个执行过程