一文详解微内核-阿里云开发者社区

开发者社区> xiaxueliang> 正文

一文详解微内核

简介: 2019年8月9日华为 余承东 发布HarmonyOS 1.0,HarmonyOS的发布将一个计算机领域内非常专业的词带到了广大公众的视线内,这就是 微内核 。
+关注继续查看

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目前有三个主要的版本:

  • 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

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,可关注我的公众号。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10084 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26792 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13888 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9161 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4659 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4504 0
+关注
xiaxueliang
一名普通Android程序员,专注Android、OpenGL ES、移动音视频等终端技术研发。希望通过该博客分享自己的Coding学习笔记。
36
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载