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