Bootstrap

秒懂宏内核、微内核和混合内核的区别

一. 前言

前段时间,也就是2024年6月21日,华为开发者大会在深圳举办。其中华为的HarmonyOS NEXT鸿蒙星河版Beta版本吸引了大家很多的目光。鸿蒙星河版系统底座全线自研,彻底摆脱了对AOSP代码的依赖,仅支持鸿蒙内核和鸿蒙系统的应用,这一举措标志着鸿蒙系统将告别早期兼容安卓的策略,被称为“纯血鸿蒙”。由于鸿蒙内核采用微内核架构,因此,近期网上大家关于宏内核和微内核之间优劣的讨论也日益激烈。今天,我们将深入探讨宏内核、微内核以及混合内核这三者之间的区别。

1.1 内核是什么

在介绍宏内核、微内核以及混合内核之间的区别前,我们应该先理解一下内核的概念。

首先,什么是内核。内核(kerenl)是操作系统的核心组件,它是连接硬件和软件的关键纽带。内核负责管理和控制计算机的各种硬件资源,为上层应用程序提供统一的接口和服务。总的来说,内核就是对下负责管理硬件资源,对上为应用程序提供服务 下面我们来介绍一下内核的主要功能。

1.2 内核的主要功能

1.硬件资源管理:

  • CPU管理:内核负责CPU的调度和分配,实现多任务并发执行。
  • 内存管理:内核管理系统的物理内存,为进程提供虚拟内存地址空间。
  • 设备管理:内核提供设备驱动程序,实现对各种硬件设备的访问和控制。

2. 进程和线程管理:

  • 进程创建和调度:内核负责创建、销毁和调度进程,实现多进程并发执行。
  • 线程管理: 内核管理轻量级的执行单元-线程,提高系统并发性能。
  • 进程间通信:内核提供进程间通信机制,如管道、信号量、消息队列等。

3. 文件系统管理:

  • 文件存储和访问:内核提供统一的文件系统接口,管理文件的存储和访问。
  • 目录结构管理: 内核维护文件目录结构,为应用程序提供文件查找和访问服务。

4.中断和异常处理:

  • 硬件中断处理:内核响应和处理各种硬件设备的中断请求。
  • 软件异常处理:内核捕获并处理由于程序错误引起的各种软件异常。

5. 安全与权限控制:

  • 用户模式和内核模式隔离:内核实现了特权模式的划分,保证系统安全。
  • 访问控制和权限管理: 内核为进程分配合适的访问权限,防止资源被滥用。

6. 其他功能:

  • 网络协议栈:内核实现了网络协议栈,为上层应用提供网络通信服务。
  • 动态模块加载:内核支持动态加载和卸载内核模块,增强系统的可扩展性。

总的来说,内核是操作系统的核心部件,它为上层软件提供了丰富的服务和抽象接口,确保计算机系统能够稳定高效的运行。毫不夸张的说。内核的设计和实现直接影响到整个操作系统的性能和功能。

1.3 内核在操作系统中位置

那什么又是操作系统呢?我们可以把操作系统(简称为OS)简单的理解为一种软件平台,可创建一种环境,用户可以在该环境中运行不同的应用程序。操作系统包括内核以外的其它用户界面、系统库等组件。内核是操作系统的核心部分,负责最基本的资源管理和进程控制功能。市面上我们常见的操作系统有Windows,Linux,MacOS等。
在这里插入图片描述

通过上面这副图我们可以清晰的知道内核在操作系统中的位置了。下面我们就开始关于宏内核、微内核以及混合内核的介绍了。


二. 宏内核

2.1 介绍

宏内核是一种将操作系统的大部分功能全部集成到单一的内核程序中的内核设计方式,在这种设计中,内核包含了进程管理、内存管理、文件系统、设备驱动程序等多种核心功能。这些模块只有处于内核态下才可以运行。下面我来简单介绍一下用户态和内核态的区别。

内核态:内核态是操作系统内核运行的特权模式,拥有最高的系统权限和访问权限。它的特点是完全控制硬件资源(如内核可以直接访问和控
制CPU、内存、I/O设备等系统资源。)、执行特权级操作(如内核可以执行特权级指令,,如修改页表、关中断等操作。)、访问整个内存空间(
内核可以访问整个系统的物理内存地址空间。)

用户态:用户态是应用程序运行的非特权模式,权限受到限制。它的特点是受限的资源访问(用户态程序只能访问自己的地址空间,不能直接访
问硬件资源。)、受限的特权指令(用户态程序无法执行特权级指令。如修改页表、关中断等。)安全隔离(用户态程序之间相互隔离,一个程序
奔溃不会影响其他程序。而内核态下的错误可能会导致整个操作系统崩溃。)、通过系统调用访问内核(用户态程序需要通过系统调用来请求
内核提供服务)。

我们平常所使用的应用软件(如QQ)一般运行在用户态下,而运行操作系统程序,操作硬件时则在内核态下运行,在用户态下的程序不能直接
访问操作系统内核数据构和程序 。当我们执行一个程序时,大部分时间都是在用户态下运行,只有在需要操作系统提供帮助时才会切换到
内核态。

下面我来举个例子来方便大家更清晰的理解这一过程。比如,当我们运行一个文本编辑器程序时,大部分时间它都是在用户态下执行的。用户
可以在文本编辑器中输入、编辑文本等操作,这些都是在用户态完成的。但是,当用户想要打开或保存一个文件时,文本编辑器就要访问文件
系统,这是它无法直接完成的。于是,文本编辑器会通过系统调用请求操作系统内核提供帮助。此时,CPU会从用户态切换到内核态,操作
系统内核会接收到这个系统调用请求。内核会检查权限,然后访问文件系统的数据结构和程序,完成文件的打开或保存操作。当内核完成了
请求的操作后,会切换回用户态,将结果返回给文本编辑器程序。整个过程中,用户态程序一直无法直接访问内核的数据结构和程序,而是
通过系统调用的方式间接地与内核进行交互。相信大家根据这个例子已经理解了用户态和内核态的区别。

宏内核的结构图如下:
在这里插入图片描述

宏内核将所有的内核代码编译成二进制文件,所有的内核代码都运行在一个内核地址空间里,内核层中的功能模块都是链接在一起的,并没有一定的层次关系。内核代码之间可以直接访问和调用。

现在我们来简单举一个例子看一下宏内核是如何工作的。

假设现在有一个应用程序需要进行申请内存,那么首先应用程序通过系统调用接口进入内核,此时CPU从用户态切换成内核态,并执行内存分配相关的代码。内核里的内存管理代码按照其分配算法,给应用程序分配相应的内存。并将分配给应用程序的内存地址通过系统调用接口返回用户空间,此时CPU又会切换回用户态,应用程序得到返回的内存地址,开始使用内存并继续向下执行。整个过程如下图所示:
在这里插入图片描述

2.2 宏内核的应用及优缺点

Linux内核就是传统的宏内核结构,我们可以看一下Linuxkernel map:
(注:Linux kernel map网址: https://makelinux.github.io/kernel/map/
在这里插入图片描述

宏内核操作系统的优缺点
优点:

  • 高性能: 宏内核将操作系统的所有功能集成在一个单一的大内核中,减少了模块之间的通信开销,提高了整体性能。
  • 简单架构:宏内核的设计相对简单,代码量较小,便于理解和维护。
  • 函数丰富:宏内核包含完整的操作系统功能,可以直接为应用程序提供各种服务和系统调用。
  • 稳定性高:由于功能集中,出错概率降低,系统稳定性较高。

缺点:

  • 缺乏模块化:宏内核将所有功能集成在一起,缺乏良好的模块化设计,难以扩展和维护。
  • 内核体积大:由于功能集中,内核代码量大,容易出现冗余和膨胀。
  • 可靠性差:一个组件的错误可能会影响整个内核,降低系统可靠性。
  • 缺乏灵活性:由于功能集成在一起,很难对内核进行有选择性的修改或裁剪。
  • 安全隔离差:由于功能集中,不同模块之间的隔离性较差,容易出现安全漏洞。

三. 微内核

3.1 介绍

微内核则和宏内核结构相反,它将系统的核心功能精简到最小,内核只提供最核心的功能,比如任务调度、中断处理等。将其他非核心功能移出,作为独立的服务进程运行在用户态。并以C/S(客户端/服务器)模型为应用程序提供服务。
微内核的结构图如下:
在这里插入图片描述

那么微内核是如何工作的呢?

微内核中定义了一种进程间通信的机制------消息。当应用程序请求相关服务时,会向微内核发送一条与此服务对应的消息,微内核再把这条消息发送给相关的服务进程,接着服务进程会完成相关的服务。

我们举一个应用程序读取一个文件的例子。首先,应用程序调用文件系统API,比如open()函数,请求打开一个文件。操作系统内核识别这是一个文件系统相关的请求,便将其转发给负责文件系统的服务进程。文件系统服务进程接收到打开文件的请求,根据文件路径在磁盘上查找对应的文件数据块,并将文件的元数据信息返回给内核。内核将文件元数据信息返回给应用程序,比如文件描述符、文件大小等。应用程序再次调用read()函数请求读取文件内容。内核将读取文件内容的请求转发给文件系统服务进程。文件系统服务进程根据文件描述符定位到文件数据块,将数据读取到内存缓冲区,并通过IPC机制将数据返回给内核。内核将读取到的文件数据返回给应用程序。

3.2 微内核的应用及优缺点

下图是Windows使用的NT内核,我们来看一下NT的内核结构图。
在这里插入图片描述

我们主要看kernel层,从下往上看,最下层是硬件抽象层(HAL),HAL层是帮助去适配各种不同的硬件平台;在HAL层之上就是微软自己定义的小内核,也就是内核层还包含着一个内核;在这个kernel之上就是各种执行体了,这些执行体提供了操作系统的文件系统缓存、虚拟内存、进程与线程等服务。每个执行体互相独立,只对外提供相应的接口,其它执行体要通过相应的接口才能和其它执行体通信或者请求完成相应的功能服务。所以NT从设计架构上来看属于微内核结构。(HAL层之上的小内核属于微内核的核心,小内核之上的执行体属于内核级别的应用层。)

注意:NT不同于微内核的是,这些功能模块都是在内核层的。内核模式之下功能完备,并不像微内核那样功能稀少。所以从权限的角度看,NT
也可以算是混合内核。

下面我们可以来看一下微内核操作系统的优缺点。
优点:

  • 高可靠性和可扩展性:关键内核功能最小化,减少内核代码的复杂度和错误概率。各服务进程相互隔离,一个服务进程的故障不会影响整个系统。可以根据需求有选择地集成所需的服务模块,提高系统的可定制性。
  • 高安全性: 内核与服务进程间的特权级隔离,提高了系统的安全性。可以有针对性地增加可信服务模块,满足关键系统的安全需求。
  • 高实时性: 关键实时任务可直接在内核中运行,不受其他服务模块的影响。内核功能最小化,上下文切换开销较小。
  • 良好的可移植性: 微内核结构清晰,便于移植到不同硬件平台。服务模块相对独立,便于跨平台移植。

缺点:

  • 性能损耗:服务进程间的通信会带来一定的性能开销。部分功能从内核空间移到用户空间会影响系统性能。
  • 设计复杂度:微内核设计需要解决进程间通信、资源管理等复杂问题。需要仔细权衡哪些功能放在内核中,哪些放在用户空间。

四. 混合内核

4.1 介绍

混合内核(Hybrid)是一种介于微内核和宏内核之间的操作系统结构,它试图在性能和可靠性之间寻求平衡。混合内核保留了单体内核中大部分常用功能(,如进程管理、内存管理等)在内核空间实现的设计。同时引入了一些微内核的思想,如将部分非关键功能(如文件系统、网络协议栈等)以服务进程的方式在用户空间运行。相比微内核,混合内核在性能方面有优势,因为服务进程与内核之间通信开销较小。相比于宏内核,混合内核在可靠性和安全性方面有优势,因为服务进程出现故障不会影响整个系统。

混合内核的结构图如下:
在这里插入图片描述

4.2 混合内核的应用及优缺点

MacOS使用的是Darwin内核,我们来看一下它的结构图
在这里插入图片描述

我们可以看到Darwin中有两个内核层,Mach层(微内核)和BSD层(宏内核)。Mach内核提供简单的进程、线程、IPC通信、虚拟内存设备驱动相关的功能服务,而BSD则提供强大的安全特性,完善的网络服务,各种文件系统的支持,同时对Mach中的功能进行细化、扩展延伸。所以MacOS操作系统属于混合内核架构。


五. 总结

总的来说,宏内核的优点是性能好和设计简单,但缺点是缺乏模块化、可靠性差、灵活性差等。这些缺点促使操作系统设计朝着微内核(Microkernel)的方向发展,以提高系统的可靠性、安全性和可扩展性。Linux内核在20多年的发展历程中,不断融入了微内核的精华,如模块化设计、抢占式内核、动态加载内核模块等。
微内核设计在可靠性、安全性和实时性方面有明显优势,但也带来了一定的性能损耗和设计复杂度。需要根据具体应用场景权衡取舍。
混合内核在传统宏内核和微内核之间寻求一种平衡点,保留了宏内核的性能优势,同时也引入了微内核的可靠性和安全性特点。这种折中设计使混合内核在某些应用场景下成为一种不错的选择。

;