微内核

微内核
微内核
  内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。微内核(英语:Microkernel,μ-kernel),又称为微核心,是一种内核的设计架构,由一群尽可能将数量最小化的软件程序组成,它们负责提供实现一个操作系统所需要的各种机制与功能,是提供操作系统核心功能的内核的精简版本。微内核的特点是功能被划分成独立的过程,过程间通过IPC进行通信,模块化程度高,一个服务失效不会影响另外一个服务。它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口,如UNIX、DOSWindows、Workplace OS、Workplace UNIX等。IBM、Microsoft、开放软件基金会(OSF)和UNIX系统实验室(USL)等新操作系统都采用了这一研究成果的优点。

简介

  微核心的设计理念,是将系统服务的实现,与系统的基本操作规则区分开来。它实现的方式,是将核心功能模块化,划分成几个独立的进程,各自运行,这些进程被称为服务器(service)。所有的服务器进程,都运行在不同的地址空间。只有需要绝对特权的进程,才能在具特权的运行模式下运行,其余的进程则在用户空间运行。  这样的设计,使内核中最核心的功能,设计上变的更简单。需要特权的进程,只有基本的线程管理,内存管理和进程间通信等,这个部份,由一个简单的硬件抽象层与关键的系统调用组成。其余的服务器进程,则移至用户空间。  让服务器各自独立,可以减少系统之间的耦合度,易于实现与除错,也可增进可移植性。它可以避免单一组件失效,而造成整个系统崩溃,内核只需要重新启动这个组件,不致于影响其他服务器的功能,使系统稳定度增加。同时,操作系统也可以视需要,抽换或新增某些服务器进程,使功能更有弹性。  因为所有服务器进程都各自在不同地址空间运行,因此在微核心架构下,不能像集成式核心一样直接进行函数调用。在微核心架构下,要创建一个进程间通信机制,通过信息传递的机制来让服务器进程间相互交换信息,调用彼此的服务,以及完成同步。采用主从式架构,使得它在分散式系统中有特别的优势,因为远程系统与本地进程间,可以采用同一套进程间通信机制。  但是因为进程间通信耗费的资源与时间,比简单的函数调用还多;通常又会涉及到核心空间到用户空间的环境切换(context switch)。这使得信息传递有延迟,以及传输量(throughput)受限的问题,因此微核心可能出现性能不佳的问题。

优势

微内核
微内核
  能够使得不同的API,文件系统,甚至不同的操作系统的特性在一个系统中共存。  系统非常灵活。当运行一个应用程序时,只需把选定的系统服务加载到系统中即可。而修改了服务以后可以通过联机进行测试;并不需要重新构建或者启动一个新的内核,他们并不影响系统的运行。  系统服务或者设备驱动故障和与它们有关的运行任务是隔绝的。  依存关系的服务器系统可以加以限制,使为安全重要至关信赖的计算基数的应用可被削减。  这种由微内核所决定的结构(IPC,多线程)能够应用在所有的应用程序和服务上。一个精炼的微内核接口能够有演绎成更多模块的系统结构。

结构

  微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。  可以用商业对比来解释微内核的模块概念。考虑一个过度忙碌的商务经理。通过将工作分给其他人,这位经理可以将他的能力更有效地用于重要的商务工作中去,并集中于其他一些任务,例如开辟新的商务分支等。可以雇佣一些新人来支持增长的商务活动。经理协调这些工作,但由其他的人做好雇佣他们时说好要做的事。与此类似,微内核操作系统支持执行少量核心任务,并管理可安装模块的活动。用这种方式,微内核对于它能做的工作是非常有效的,并是可移植的,这是指它可以被设计成在不同的处理器上运行。  基于微内核的操作系统具有如下特征:  微内核提供一组“最基本”的服务,如进程调度、进程间通信、存储管理、处理I/O设备。其他服务,如文件管理、网络支持等通过接口连到微内核。与此相反,内核是集成的,比微内核更大。  微内核具有很好的扩展性,并可简化应用程序开发。用户只运行他们需要的服务,这有利于减少磁盘空间和存储器需求。  厂商可以很容易地将微内核移植到其他处理器平台,并在上面增加适合其他平台需要的模块化部件。(这指文件服务器、工程应用等等)。  微内核和硬件部件有接口,并向可安装模块提供一个接口。在微内核中,进程通过传递消息或运行“线程”来发生相互作用。线程为将一个任务分解为多个子任务提供了途径,在多处理器环境下,线程可以在不同的处理器上独立运行。  象Mach和Nucleus这样的微内核操作系统,使用户可以自己选择操作系统的接口和特性。它们十分适合可以选择多处理器和多操作系统的变化的计算机市场,开发商也可从中受益。它们能够很快地从一个系统向另一个系统移植他们的产品,使最终用户可以得到许多应用产品。这种模块化的设计也保证了可以得到大量的可选服务。
上图分别为monolithic 和微内核类的操作系统的结构

特点

  微内核结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成;这些原语,仅仅包括了建立一个系统必需的几个部分;如 线程管理,地址空间和进程间通信等。  微核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最内核的部分的设计更简单。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分  微内核将许多OS服务放入分离的进程,如文件系统,设备驱动程序,而进程通过消息传递调用OS服务.微内核结构必然是多线程的,第一代微内核,在内核提供了较多的服务,因此被称为'胖微内核',它的典型代表是MACH,它既是GNU HURD也是APPLE SERVER OS 的内核,可以说,蒸蒸日上.第二代微内核只提供最基本的OS服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS。

微核心列表

  微内核结构必然是多线程的,第一代微内核,在内核提供了较多的服务,因此被称为“胖微内核”,它的典型代表是Mach,它既是GNU HURD也是Mac OS X的内核。第二代微内核只提供最基本的OS服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS。L4微内核系列也是着名的微核心。

变种的微内核

  包括Windows NT,Mac OS等,都采用微核心架构。但为了追求性能,他们将需要具备特权的服务组件放进核心空间,违反了微内核的基本设计原则。

操作系统

  Nucleus Chorus系统公司(Beaverton,oregon)设计,该公司总部设在法国。  Windows NT这种操作系统是围绕着Microsoft设计的微内核而设计的,它紧跟在Mach设计之后。它提供线程调度、中断和意外事件管理、多处理器同步和系统恢复(在掉电之后)。它永远不会被存储器管理程序调出内存,而且它的执行也永远不能被其它进程中断。  OSF/1MK这是开放式系统基金会的OSF/1 UNⅨ操作系统使用微内核研究的最新版本。它实现了Mach内核,并提供虚拟存储管理、进程间通信和设备驱动程序管理。  UNIX SVR4 UNIX系统实验室公司推出了一个微内核的UNIX SVR4(系统V版本4)。它实现了Nucleus微内核。它提供前面讨论的所有微内核特征;然而,在微内核中不管理驱动程序。  WorkPlace OS IBM的微内核是基于Mach微内核的。这种微内核在Motorola Power PC处理器上运行,它是Intel80486和Pentium处理器的直接竞争者。WorkPlace操作系统上的用户可以选择不同的运行于操作系统上的接口,如DOS、OS/2、Windows、U-NIX等。IBM微内核的体积很小(约40K),可处理基本的任务,如存储器管理、线程管理、中断管理和消息传递。

宏内核与微内核的对比

  宏内核(Monolithickernel)是将内核从整体上作为一个大过程来实现,所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。微内核(Micro kernel)功能被划分成独立的过程,过程间通过IPC进行通信,模块化程度高,一个服务失效不会影响另外一个服务。  两种设计各具特点,较早的一些操作系统都是用宏内核写成的,这样的内核通常以单个静态二进制文件的形式存放于磁盘,而后来随着模块化、分层思想的产生,人们开始对微内核感兴趣并持赞扬态度,认为微内核将成为内核的发展趋势。微内核的功能被划分为独立的过程,每个过程叫做一个服务器,各种服务器之间通过IPC机制互通消息,服务器的各自独立有效地避免了一个服务器的失效祸及另一个,而且这种独立机制更利于操作系统在不同硬件上的移植。  当然,微内核的这所有的优点都建立在因为消息传递开销而引起效率损失的前提下(IPC机制的开销比函数调用多,还会涉及到内核空间到用户空间的上下文切换),这些损失有一部分是靠着现在硬件效率的飞速提升而抵消着的,但这很明显是追不上宏内核的效率的。所以,有些使用微内核的操作系统(如新近版本的WindowsNT和MacOSX)让大部分或全部的服务器位于内核,这样就可以直接调用函数,消除频繁的上下文切换,但这已经违背了微内核设计的初衷。  而相反的,宏内核在通信上比较高效,因为大家都运行在内核态,并身处同一地址空间,内核可以直接调用函数,Linux和大多数的UNIX都为宏内核。对应的,宏内核不具有微内核的优点,宏内核的灵活性和可维护性不及微内核,而且移植起来并不简单(不过有些宏内核支持者认为这样的移植比微内核更能够有效地利用底层硬件)。  历史告诉我们,两种看似矛盾又各有长处的观点或解决方案总能找到结合点的。Cache的直接映射与关联映射结合产生了组关联映射;RISC和CISC也是各具优点,现代的好的CPU包括了这两种技术,将它们结合了起来。所以我相信宏内核与微内核也会最终找到结合点的。  Linux虽是宏内核,但已吸收了微内核的部分精华。Linux是模块化的、多线程的、内核本身可调度的系统,既吸收了微内核的精华,又保留了宏内核的优点,无需消息传递,避免性能损失。