首页 > 数据库 > 数据库开发技术 > 秒懂宏内核、微内核和混合内核的区别
前段时间,也就是2024年6月21日,华为开发者大会在深圳举办。其中华为的HarmonyOS NEXT鸿蒙星河版Beta版本吸引了大家很多的目光。鸿蒙星河版系统底座全线自研,彻底摆脱了对AOSP代码的依赖,仅支持鸿蒙内核和鸿蒙系统的应用,这一举措标志着鸿蒙系统将告别早期兼容安卓的策略,被称为“纯血鸿蒙”。由于鸿蒙内核采用微内核架构,因此,近期网上大家关于宏内核和微内核之间优劣的讨论也日益激烈。今天,我们将深入探讨宏内核、微内核以及混合内核这三者之间的区别。
在介绍宏内核、微内核以及混合内核之间的区别前,我们应该先理解一下内核的概念。
首先,什么是内核。内核(kerenl)是操作系统的核心组件,它是连接硬件和软件的关键纽带。内核负责管理和控制计算机的各种硬件资源,为上层应用程序提供统一的接口和服务。总的来说,内核就是对下负责管理硬件资源,对上为应用程序提供服务 下面我们来介绍一下内核的主要功能。
1.硬件资源管理:
2. 进程和线程管理:
3. 文件系统管理:
4.中断和异常处理:
5. 安全与权限控制:
6. 其他功能:
总的来说,内核是操作系统的核心部件,它为上层软件提供了丰富的服务和抽象接口,确保计算机系统能够稳定高效的运行。毫不夸张的说。内核的设计和实现直接影响到整个操作系统的性能和功能。
那什么又是操作系统呢?我们可以把操作系统(简称为OS)简单的理解为一种软件平台,可创建一种环境,用户可以在该环境中运行不同的应用程序。操作系统包括内核以外的其它用户界面、系统库等组件。内核是操作系统的核心部分,负责最基本的资源管理和进程控制功能。市面上我们常见的操作系统有Windows,Linux,MacOS等。

通过上面这副图我们可以清晰的知道内核在操作系统中的位置了。下面我们就开始关于宏内核、微内核以及混合内核的介绍了。
宏内核是一种将操作系统的大部分功能全部集成到单一的内核程序中的内核设计方式,在这种设计中,内核包含了进程管理、内存管理、文件系统、设备驱动程序等多种核心功能。这些模块只有处于内核态下才可以运行。下面我来简单介绍一下用户态和内核态的区别。
宏内核的结构图如下:

宏内核将所有的内核代码编译成二进制文件,所有的内核代码都运行在一个内核地址空间里,内核层中的功能模块都是链接在一起的,并没有一定的层次关系。内核代码之间可以直接访问和调用。
现在我们来简单举一个例子看一下宏内核是如何工作的。
假设现在有一个应用程序需要进行申请内存,那么首先应用程序通过系统调用接口进入内核,此时CPU从用户态切换成内核态,并执行内存分配相关的代码。内核里的内存管理代码按照其分配算法,给应用程序分配相应的内存。并将分配给应用程序的内存地址通过系统调用接口返回用户空间,此时CPU又会切换回用户态,应用程序得到返回的内存地址,开始使用内存并继续向下执行。整个过程如下图所示:

Linux内核就是传统的宏内核结构,我们可以看一下Linux的 kernel map:
(注:Linux kernel map的网址: https://makelinux.github.io/kernel/map/)

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

那么微内核是如何工作的呢?
微内核中定义了一种进程间通信的机制------消息。当应用程序请求相关服务时,会向微内核发送一条与此服务对应的消息,微内核再把这条消息发送给相关的服务进程,接着服务进程会完成相关的服务。
我们举一个应用程序读取一个文件的例子。首先,应用程序调用文件系统API,比如open()函数,请求打开一个文件。操作系统内核识别这是一个文件系统相关的请求,便将其转发给负责文件系统的服务进程。文件系统服务进程接收到打开文件的请求,根据文件路径在磁盘上查找对应的文件数据块,并将文件的元数据信息返回给内核。内核将文件元数据信息返回给应用程序,比如文件描述符、文件大小等。应用程序再次调用read()函数请求读取文件内容。内核将读取文件内容的请求转发给文件系统服务进程。文件系统服务进程根据文件描述符定位到文件数据块,将数据读取到内存缓冲区,并通过IPC机制将数据返回给内核。内核将读取到的文件数据返回给应用程序。
下图是Windows使用的NT内核,我们来看一下NT的内核结构图。

我们主要看kernel层,从下往上看,最下层是硬件抽象层(HAL),HAL层是帮助去适配各种不同的硬件平台;在HAL层之上就是微软自己定义的小内核,也就是内核层还包含着一个内核;在这个kernel之上就是各种执行体了,这些执行体提供了操作系统的文件系统缓存、虚拟内存、进程与线程等服务。每个执行体互相独立,只对外提供相应的接口,其它执行体要通过相应的接口才能和其它执行体通信或者请求完成相应的功能服务。所以NT从设计架构上来看属于微内核结构。(HAL层之上的小内核属于微内核的核心,小内核之上的执行体属于内核级别的应用层。)
下面我们可以来看一下微内核操作系统的优缺点。
优点:
缺点:
混合内核(Hybrid)是一种介于微内核和宏内核之间的操作系统结构,它试图在性能和可靠性之间寻求平衡。混合内核保留了单体内核中大部分常用功能(,如进程管理、内存管理等)在内核空间实现的设计。同时引入了一些微内核的思想,如将部分非关键功能(如文件系统、网络协议栈等)以服务进程的方式在用户空间运行。相比微内核,混合内核在性能方面有优势,因为服务进程与内核之间通信开销较小。相比于宏内核,混合内核在可靠性和安全性方面有优势,因为服务进程出现故障不会影响整个系统。
混合内核的结构图如下:

MacOS使用的是Darwin内核,我们来看一下它的结构图

我们可以看到Darwin中有两个内核层,Mach层(微内核)和BSD层(宏内核)。Mach内核提供简单的进程、线程、IPC通信、虚拟内存设备驱动相关的功能服务,而BSD则提供强大的安全特性,完善的网络服务,各种文件系统的支持,同时对Mach中的功能进行细化、扩展延伸。所以MacOS操作系统属于混合内核架构。
总的来说,宏内核的优点是性能好和设计简单,但缺点是缺乏模块化、可靠性差、灵活性差等。这些缺点促使操作系统设计朝着微内核(Microkernel)的方向发展,以提高系统的可靠性、安全性和可扩展性。Linux内核在20多年的发展历程中,不断融入了微内核的精华,如模块化设计、抢占式内核、动态加载内核模块等。
微内核设计在可靠性、安全性和实时性方面有明显优势,但也带来了一定的性能损耗和设计复杂度。需要根据具体应用场景权衡取舍。
混合内核在传统宏内核和微内核之间寻求一种平衡点,保留了宏内核的性能优势,同时也引入了微内核的可靠性和安全性特点。这种折中设计使混合内核在某些应用场景下成为一种不错的选择。
原文作者:代码背包客;如有侵权,请联系管理员删除。