浅谈微内核

浅谈微内核

微内核是什么

  • 谈到微内核,其实是与宏内核相比所称为微内核。宏内核大家应该再熟悉不过了,也称为集成式核心、单体式核心。像Linux就是典型的宏内核,它除了时钟中断、进程创建与销毁、进程调度、进程间通信外,其他的文件系统、内存管理、输入输出、设备驱动管理都需要内核完成。微内核,又称为微核心,是一种内核的设计架构,由一群数量最小化的软件程序组成,严格意义上的微内核仅仅实现操作系统最基础的机制,包括底层地址空间管理线程管理进程间通信(IPC)
  • 微内核的设计理念是将系统服务的实现,与系统的基本操作规则区分开来。将核心功能模块化,划分成几个独立的进程,各自运行,这些进程被称为服务(service)。所有的服务进程,都运行在不同的地址空间。只有需要绝对特权的进程,才能在具特权的运行模式下运行,其余的进程则在用户空间运行。也就是说,它只完成内核不得不完成的功能,剩余的诸如文件系统、内存管理、设备驱动等的内容都被作为系统进程放到了用户态空间。
  • 简单的说,微内核就是一个皇帝,所有权利集中在他手上,但是,办具体的事情要找别人。
    宏内核像国务院之类的,组织机构很庞大,有好多人在管事。
  • 下图清晰的展示了宏内核和微内核的架构区别

微内核的优缺点

优点
  • 能够使得不同的API,文件系统,甚至不同的操作系统的特性在一个系统中共存。
  • 这种由微内核所决定的结构(IPC,多线程)能够应用在所有的应用程序和服务上。一个精炼的微内核接口能够有演绎成更多模块的系统结构。
  • 微内核这样的架构使得服务各自独立,减少系统之间的耦合度,易于实现与除错,也可增进可移植性。它可以避免单一组件失效,而造成整个系统崩溃,内核只需要重新启动这个组件,不致于影响其他服务器的功能,使系统稳定度增加。同时,操作系统也可以视需要,抽换或新增某些服务进程,使功能更有弹性。
缺点
  • 微内核最大的问题就在于传输效率,微内核通过进程间通信来协调各个系统进程间的合作,这就需要系统调用,而系统调用需要切换堆栈以及保护进程现场,比较耗费时间;而宏内核都是通过简单的函数调用来完成各个部门之间的合作的,所以理论上宏内核效率要比微内核高。而这一问题其实主要受限于硬件的传输速率,在我看来,一旦硬件发展到了一定地步,能达到内核内外通信时间差异不大时,也就是微内核真正蓬勃发展的时刻。

微内核效率问题的解决

  • 目前在硬件水平无法达到的情况下,解决这一问题就不得不提到一个为了妥协所做出的内核架构——混合内核,混合核心的基本设计理念,是以微内核架构来设计操作系统核心,但在实现上则采用宏内核的作法。它让一些微核结构运行在用户空间的代码运行在核心空间,这样让核心的运行效率更高些,例如包括Windows NT,Mac OS X等,为了追求性能,他们将需要具备特权的服务组件放进核心空间,即成为混合内核。

微内核的发展历程

  • 微内核结构必然是多线程的,第一代微内核,在内核提供了较多的服务,因此被称为“胖微内核”,它的典型代表是Mach,Mach的开发是为了取代BSD的UNIX核心,所以是许多新的操作系统的设计基础。Mach的研究至今似乎是停止了,虽然有许多商业化操作系统,它既是 GNU HURD 也是Mac OS X的内核。Mac OS X与FreeBSD并未保留Mach首倡的微核心结构,除了Mac OS X继续提供微核心于内部处理通信以及应用程序直接控制。但一个很大的问题是Mach使用的是one-size-fits-all的通用机制,以牺牲性能为代价而获取可移植性,导致他的IPC设计非常复杂,有许多额外的IPC开销。
  • 微内核结构被意识到效能不佳后,研发者们想要更薄的IPC层,对性能更关注,设计与硬件特性相关的架构,能有利于性能改进。这时L3微内核问世了,相对于Mach的复杂的IPC系统,L3仅简单的传递消息,而没有任何额外的开销。L3也使用了各种硬件的特性来传递消息,让每个调用都最大化的利用硬件特性,如同寄存器一样,同样的系统中,Mach需要114毫秒来发送即使是最短的消息,而L3可以用少于10毫秒的时间来发送同样的消息。一次系统调用的时间比Unix所花费的一半还少,而Mach执行同样的系统调用需要5倍于Unix的时间。在意识到其他的Mach问题后,经过改进,最终形成了L4微内核。L4这个微内核系统由于其出色的性能和很小的体积而开始被计算机工业所认知。随后,系统在多个方向上有了高速的发展,值得提及的是一个更加独立于硬件平台的版本,被称为Pistachio,之后又被移植到了许多不同的硬件构架上。现在已经形成一个微内核家族,包括Pistachio,L4/MIPS,与Fiasco,可看出第二代微内核只提供最基本的OS服务,典型的OS还有QNX,QNX在黑莓手机BlackBerry 10系统中被采用,QNX是类Unix实时操作系统。
  • 其实对于现在来说,只有宏内核架构的区分度比较大,混合内核与微内核的界限已经不是很清晰了,毕竟我们不能一味的追求移植性和方便性,性能对于操作系统永远是第一位的,硬件的提升必将会带来真正纯粹高效的微内核。

一些微内核(混合内核)架构的操作系统简介

  • MINIX 3:MINIX 3是一款免费的开源操作系统,可用于研究操作系统,作为研究项目的基础,或者用于微内核系统主导市场的商业(嵌入式)系统。该项目的大部分重点是通过容错和自我修复技术实现高可靠性。MINIX基于一个以内核模式运行的小型(大约12K行代码)微内核。操作系统的其余部分作为服务器进程的集合运行,每个服务器进程都受硬件MMU保护。这些进程包括虚拟文件系统,一个或多个实际文件系统,内存管理器,进程管理器,再生服务器和设备驱动程序,每个进程都作为单独的用户模式进程运行。这种设计的一个后果就是隔离了由于错误或攻击导致的系统故障。例如,由于错误或漏洞造成的音频驱动程序故障或接管可能会导致奇怪的声音,但不会导致完全接管操作系统。类似地,系统组件的崩溃在很多情况下可以在没有人为干预的情况下自动且透明地恢复。其他操作系统几乎没有像MINIX 3那样的自我修复功能之前新闻爆出每一个英特尔处理器内都有一个 minix 大管家,minix成为全球最流行的操作系统。
  • Fuchsia:Fuchsia是Google开发的操作系统,基于Zircon的微内核,Zircon受到Little Kernel的启发,用于嵌入式系统,主要使用C和C++编写,Fuchsia作为免费与开源软件分发,Zircon是纯粹的微内核。内核中主要的抽象只包括进程、虚拟内存和IPC机制。各种文件系统、设备驱动、服务都作为一个进程跑在用户态。 Zircon内核除了解决GPL污染的问题,它还有一些很吸引人的特性。Zircon是一个微型内核,灵活性非常高,不仅可以用于手机,还能用于嵌入式设备、桌面PC、平板电脑等多种平台之上。可以预计,Fuchsia并不会仅仅是某个平台专属系统,它应该会成为应用领域更胜于安卓的多面手。
参考资料

wiki
知乎微内核
Fushsia官网
MINIX 3官网

猜你喜欢

转载自blog.csdn.net/weixin_43122409/article/details/82823898