了解微内核

网络上不断地出现微内核OS的概念。特别是华为的鸿蒙OS 将采用微内核,更激发了对微内核的热情。其实Google Fuchsia OS 也采用了微内核Zircon收集了一些内容,帮助自己理解什么是微内核。

术语

微内核(Microkernel)

在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。

微内核是个消息转发站:当系统调用模块要给文档系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。

微内核设计的一个长处是在不影响系统其他部分的情况下,用更高效的实现代替现有文档系统模块的工作将会更加容易。我们甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统。另外一个长处是无需的模块将不会被加载到内存中,因此微内核就能够更有效的利用内存。

微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间。因此,就不可能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效祸及另一个。 

微内核的概念是由Richard Rashid在卡内基梅隆(Carnegie-Mellon)大学开发Mach操作系统时提出的,目标是建立一个基于消息传送(message passing)机制的最小内核,以便在此基础上建造对其它操作系统的模拟层来模拟其它操作系统的特性。

微内核设计带来了良好的兼容性、扩充性、灵活性、移植性、可靠性和网络支持。但是,微内核设计有一个重要缺点:由于微内核操作系统使用进程来隔离系统组件,这些组件之间的通信使用了消息传递方式来实现一个组件对另一个组件的调用-这实际上是进行了一次RPC(例如在NT上是LPC)调用。但这种类似RPC的方式是通过进程间通信(IPC)机制实现的,其性能一般低于传统操作系统的系统调用的性能。由于微内核操作系统的类似RPC调用是通过消息传送机制实现的,而传统操作系统的系统调用一般是通过类似trap的方法实现。相比于trap方法,通过消息传送机制实现的这种类RPC调用的方式较慢-微内核完成一次这样调用的操作较慢,这是由于需要创建消息、发送消息、进程切换等更多的步骤。这些步骤使得微内核操作系统的消息传送部分成为一个瓶颈,其性能大大低于传统操作系统的系统调用部分。例如,在Mach 3上,一个基于消息传送机制的类RPC调用在486-DX50上引入了230µs的开销,而一个传统Unix系统的系统调用在同一硬件上仅仅引入了20µs的开销。这就是说,传统Unix系统的系统调用比Mach 3的类RPC调用快10倍。这个巨大的差距明显地降低了许多运行在微内核操作系统上的应用程序的性能。例如,Chen和Bershad [2]在DEC-Station 5200/200上比较了应用程序在Mach和Ultrix操作系统 (一个Unix变种)运行时的速度,发现相对于Ultrix操作系统Mach最多降低了这些应用程序66%的性能。测量表明至少73%的性能下降和RPC或RPC相关活动有关[1]。这些性能下降除了是由于消息传送机制过多的步骤引起外,还和微内核设计导致的过多用户态和核心态之间的切换以及过多的不同地址空间之间的切换有关。

 单内核(Monolithic kernel)

单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数Unix系统都设计为单模块。

单内核好像一个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,它是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。

单内核的支持者声称微内核的消息传递开销引起了效率的损失。微内核的支持者则认为因此而增加的内核设计的灵活性和可维护性能够弥补任何损失。

目前由那些微内核OS?

-L4 是J. Liedtke 和他的团队1995年开发的。

- Mach Mach最初由卡内基梅隆大学的计算机科学系在20世纪80年代中期开发。据说apple 的Mac OS X 采取了Mach 内核。

- Exokernel 是MIT 1994/1995 年研发的。

- QNX Neutrino 一个商业的微内核OS

- google 的 Fuchsia OS 采用Zircon的微内核。它是由Magenta改为Zircon。

-据说华为的HongMeng OS 也使用微内核。是否会是Zircon呢?

你可能感兴趣的:(linux,C++)