Unikernel 基本概念

操作系统内核架构

操作系统内核是计算机系统的核心,负责管理硬件资源,包括处理器、内存、磁盘存储等,并为运行在操作系统上的应用程序提供一组接口(系统调用)来访问这些资源。操作系统内核架构是指操作系统内核设计和实现的方式。以下是几种常见的操作系统内核架构:

  1. 宏内核(Monolithic Kernel): 宏内核将操作系统的所有服务,如设备驱动、文件系统、网络协议栈和进程调度等都集成在一个大的内核中,运行在内核空间。这种设计使得各个模块可以直接相互通信,因此性能较好。然而,宏内核的缺点是任何一个故障都可能导致整个系统崩溃。另外,由于所有模块都紧密耦合在一起,修改或添加功能也比较困难。Linux和UNIX就是采用宏内核设计的例子。

  2. 微内核(Microkernel): 微内核只保留最基本的、必要的服务在内核空间,如进程间通信、内存管理和基本的I/O操作等,其他高级服务例如设备驱动、文件系统等都运行在用户空间。这样的设计使得系统更加稳定,因为即使一个服务出现故障也不会影响到整个系统,同时也使得系统更易于维护和扩展。但在性能方面,由于需要频繁地进行用户空间与内核空间之间的上下文切换,微内核的性能通常低于宏内核。Minix和QNX是采用微内核设计的例子。

  3. 混合内核(Hybrid Kernel): 混合内核是试图结合宏内核和微内核的优点的一种设计方式。它尽量将更多的服务放入内核空间执行以提高性能,同时也尽可能地减少模块之间的依赖以增强稳定性。Windows NT和MacOS X的XNU内核都是混合内核的例子。

  4. 外核(Exokernel): 外核将传统内核的抽象层次降低,允许应用程序直接管理硬件资源,从而提高效率。在外核架构中,内核仅负责确保资源的安全共享,而具体的资源管理策略则交给应用程序自己去确定。

  5. 单内核(Unikernel): 单内核是一种新兴的内核架构,它将应用程序和内核捆绑在一起形成一个单一的可执行映像,该映像可以直接运行在虚拟机或裸机上。单内核适用于云计算和物联网环境,它的优点是体积小,启动快,但对开发者的编程要求较高。

单内核(Unikernel)架构

单内核(Unikernel)架构有如下特点:

  1. 单一镜像:将应用程序代码与操作系统核心功能合并到一个单一的可执行镜像中。这个镜像包含了应用程序所需的所有组件,包括网络协议、文件系统和设备驱动等。因此,每个 Unikernel 实例都是一个独立的、自包含的单元。

  2. 定制性:根据应用程序的需求进行定制,只包含必要的组件和库。这种定制性减少了不必要的功能和复杂性,在资源受限的环境下更加高效。

  3. 轻量级:相比传统操作系统,内存占用更小,启动时间更短。由于只包含必要的组件,它可以更好地适应嵌入式系统、虚拟化环境和云计算平台等资源受限的场景。

  4. 性能效率:通过减少不必要的软件层和系统调用,减少了性能开销,使得应用程序可以更高效地运行。

总的来说,Unikernel 是一种精简、定制化的操作系统构建技术,旨在提供更高的性能、更低的资源消耗和更强的安全性。它适用于各种场景,包括嵌入式系统、云计算平台和容器化环境等。

为了更好的理解Unikernel,我们对 Unikernel(单一内核)、 Micro Kernel(微内核)、Monolithic Kernel(宏内核)进行对比。

Unikernel(单一内核)Micro Kernel(微内核)Monolithic Kernel(宏内核)
架构将应用程序、操作系统内核、必要的组件紧密集成在一起,以创建一个高度定制化和最小化的镜像。采用模块化设计,将操作系统的核心功能最小化,额外的功能和服务实现为用户空间的服务模块。将各种功能和服务集成到一个单体内核中,如进程管理、内存管理、文件系统、网络协议栈等。
功能分配包含应用程序所需的最小化操作系统功能和库。包含基本的操作系统功能,如进程管理、内存管理和进程间通信,而其他功能如文件系统、网络协议栈等被实现为用户空间的服务模块。包含大量的功能和服务,这些功能和服务直接运行在内核空间,具有较高的集成性和内核级别的访问权限。
性能镜像小,启动速度快,没有额外的组件和系统调用,具有更高的性能和较低的资源消耗。将功能模块化并移至用户空间,其性能相对较低。模块之间需要进行消息传递和系统调用,会引入额外的开销。内核和服务的紧密集成,有较高的性能
特权级同一地址空间同一特权级。只有进程管理和进程间通信在内核态所有硬件操作在内核态
代表系统ArceOS、Unikraft、MirageOS、IncludeOSQNX、MINIX、L4微内核系列Linux、Windows

参考文献