操作系统的内核

一、引 子摘自:http://server.it168.com/a2008/0822/201/000000201492_3.shtml)

       Microsoft Hyper-V和VMware ESX Server是比较相像的,都是Bare-Metal类型,但是它们的内核架构也有着明显的不同。微软在谈到竞争对手ESX Server时,总会提到,Hyper-V是微内核架构的,而VMware ESX Server是单内核(宏内核)架构,Hyper-V要更好。这两者(内核架构)具有什么不同?到底谁更好呢?

       操作系统的内核——实现核心功能的那部分——可能是微内核(Micro kernel),也可能是单内核(Monolithic kernel,有时也叫宏内核Macro kernel)。

二、 单内核宏内核)(Monolithic kernel)和  微内核(Micro kernel)概念等

0. 概述
    首先先说说操作系统:操作系统最核心的功能,任务调度、内存和设备的抽象和管理。然后,为了我们方便使用,才集成进了系统服务、驱动程序、文件系统之类的东西。我们平时运行的程序,每个程序各运行几十毫秒,大家来回轮换,这样子我们看起来这些程序好像在“同时”运行一样。应用程序之所以能够被操作系统通过时间片的方式调度,是因为对于CPU而言,普通的应用程序和操作系统的内核运行在不同的特权级别上,我们叫作rings。应用程序运行在Ring 3,而内核运行在Ring 0。
   
1. Monolithic Kernel
     早期的操作系统绝大多数是 Monolithic Kernel, 意思是整个操作系统 – 包括Scheduling 调度), File system 文件系统), Networking 网络), Device driver 设备驱动程序), Memory management 存储管理), Paging存储页面管理) – 都在内核中完成.一直到现在广泛应用的操作系统,如UNIX,Linux,和Windows还大都是monolithic kernel操作系统.

2. Micro Kernel
     随着科技的发展,操作系统变得越来越复杂,内核里面的东西也越来越多。并且随着操作系统变得越来越复杂现代操作系统的内核有一两百万行C程序是很常见的事情),把所有这些功能都放在内核中使设计难度迅速增加.人们也就开始考虑是否应该改变原有的架构,从而提高操作系统的性能和稳定性,主要是精简内核降低开发的复杂度,还有就是把各种程序尽可能的隔离,保证一个程序的崩溃不会牵连到其他的程序。上世纪80年代人们讨论得火热的微内核就是这样一种架构。
     微内核是一个与Monolithic Kernel相反的设计理念.它的目的是使内核缩到最小,把所有可能的功能模块移出内核.理想情况下,内核中仅留下Address Space Support地址空间支持),IPC Inter-Process Communication,进程间通讯),和Scheduling调度),其他功能模块做为用户进程运行。
     微内核考虑在操作系统的内核中保留操作系统最基本的功能,也就是任务调度、内存和设备的抽象和管理。其他的功能全部从内核移出,放到用户态中了实现,并以C/S模式对其他应用程序提供服务。
     微内核带来的好处主要是稳定性和实时性,即内核中模块数量少了,结构更精简更优化了,能够影响内核的程序和驱动也减少了,稳定性随之提高;另外就是实时性,内核精简了以后,响应的时延的减小。不过并不是精简了以后会使得性能提升,微内核使得内核中只有最关键的部分,其他模块和系统功能全部作为独立模块放到用户态空间中运行,功能分散了以后增加了通信的成本。不过微内核操作系统的特点尤其适合工控系统的控制,而且设计简单,在小型的系统中有不少的应用。另外亦有不少实时操作系统是使用微内核架构设计。

【注意】 L4是一组计算机程序,是最初由Jochen Liedtke设计的微内核构架的操作系统内核,现在已经形成一个微内核家族。L4这个微内核系统由于其出色的性能和很小的体积而开始被计算机工业所认知,被移植到了许多不同的硬件构架上。高通的 L4 提供了操作系统最基本的操作,是买别人的。
       REX 是在 L4 之上封装的服务,是一个抢占式,多任务的RTOS,所有的任务都以task的形式存在,REX提供包括任务创建,同步,互斥,计时器,中断控制等功能的API,这里的task实际上就是我们的线程,每个 task对应着一个线程。REX维护一个task list双向链表),始终运行高优先级的task。products里面所有的服务包括3g协议栈等都是以task的形式跑在rex之上的。
       而Brew的话是运行的环境,跟Java 有点儿类似,相当于是一个虚拟机。

3. 混合内核
    所有的理论设计,放到现实的工程中都是要做折衷的。所以,有混合内核的出现,综合宏内核和微内核的不同优点,在两个方案中折衷设计。OS X和Windows就属于这类。
    至于Linux,上千万行代码,架构岂是说改就能改的。使用Linux构建的系统,不少都是要追求性能的吧,前面也说到微内核会降低性能,在Linux中,我们为了使得一个事情性能更高,往往还要把这个模块放到内核中运行,比如PF_RING。所以在需要考虑性能的时候,微内核又显得不那么合适,像微软一样取一个折衷算是一个好的办法。

三、 单内核宏内核)(Monolithic kernel)    VS   微内核(Micro kernel)

       1. 单内核宏内核)(Monolithic kernel)――单内核是个很大的进程。它的内部又能够被分为若干模块(或层次,或其他),但是在运行的时候,它是一个单独的大型二进制映象。因为是在同一个进程内,其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是微内核那样在多个进程之间进行消息传递。因此在运行效率上,单内核会具有一定的好处。

       Monolithic kernel 对底层硬件进行了丰富的抽象;

       Monolithic kernel优点:高效。缺点:各module混和在一起,难于维护。一个module中的bug将可能导致整个系统的崩溃。改进:如今的Monolithic内核支持动态载入module,比如Linux。

       样例:Linux,Windows

  单内核操作系统的典型例子是,大部分Linux,包括BSD在内的几乎所有的Unix,MS-DOS,Windows 9x。例如Sun Solaris 的内核就运行着数百个线程以实现各种功能,而编译过Linux内核的人就知道Linux内核有数十MB之巨。

  

       2. 微内核(Micro kernel)――在微内核中,最常用的功能被精心挑选设计在内核模式(或者按照上一页的说法,在x86上是Ring 0权限下)运行的一个进程上,而其它大部分不怎么重要的核心功能都作为单独的进程运行在用户模式下(类似地,Ring 3权限下)运行,它们通过消息传递进行通讯(例如,Windows采用的进程间通信IPC机制,IPC就是Inter Process Communication)。最基本的思想就是要尽量地小。通常微内核只包含了进程调度、内存管理和进程间通信这几个根本的功能。
  这种设计具有许多好处,例如增加了灵活性,易于维护,易于移植。微内核的模块化设计让其他核心功能模块都只依赖于微内核模块或其他模块,并不直接依赖硬件。要添加新的特性只需要另行编写用户模式的微内核服务器。而只需把微内核本身进行移植就能够完成将整个内核移植到新的平台上。
  由于模块化的设计,不包含在微内核内的驱动程序可以动态地加载,或者卸载。同时,微内核也不依赖于固定的文件系统,用户可以随意选择对文件系统的支持。用户甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统。不需要的模块将不会被加载到内存中,因此微内核就能够更有效的利用内存。微内核还具有的好处是实时性、安全性比较好,并且更适合于构建分布式操作系统和面向对象操作系统。

       Micro kernel 只提供了最小的硬件抽象层,此时的OS拥有多个处在用户空间的Server,用来处理每个特定的任务,这些Server之间采用IPC进行通信。

        Micro kernel优点:安全,稳定,易于维护。缺点:过多的系统调用将降低系统性能。为了获得性能,苹果公司有向Monolithic kernel转变的趋势,毕竟Micro kernel向Monolithic kernel转变是比较容易,反过来就很难。

        样例:苹果公司的操作系统

  微内核操作系统的典型例子是,Mach(一个非原生的分布式操作系统内核,被众多操作系统采用,例如,被应用在Mac OS X上)、IBM AIX、BeOS,以及Windows NT(Windows Server 2003和Windows Server 2008都包含其内),还有著名的Minix(一个主要用于教学的Unix系统)和Amoeba(一个真正原生的分布式操作系统)。

四、单内核和微内核哪个更好???(Tanenbaum–Torvalds debate)

        必须说明的很有趣的一点是,这种争论经常会令人想到上一个时代CPU领域中RISC和CISC的斗争。现代的成功CPU设计中都包含了任何的这两种技术,就像现在Linux(单内核)和Windows NT(微内核)实际上都是微内核和单内核的混合产物一样,只是或多或少的问题而已。

        历史上有过这样的争论,Linux(单内核)的作者有魅力的路灯和Minix/Amoeba(均为微内核)的作者Andrew S. Tanenbaum 教授在讨论组论战,并卷入了大量的爱好者。最终有魅力的路灯也同意Tanenbaum微内核架构更为先进的论点。

        这次著名的口水仗中, 展现了工程派代表[1]及典型学院派老学究[2]之间的分歧,很有代表性, 值得一读.
        [1] 从有魅力的路灯本人的作品与平时在Linux邮件列表上的发言来看,他是一名实用主义者,他说过句名言: Talk is cheap. Show me the code. https://lkml.org/lkml/2000/8/25/132)
        [2] Tanenbaum开发了Minix这个微内核的unix-like操作系统, 这就是一个纯为教学而开发的系统, 它是代表学院派理念性的作品

https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate(争论)

http://wiki.osdev.org/Monolithic_Kernel(Monolithic_Kernel)

http://wiki.osdev.org/Microkernel(Microkernel


1.单内核宏内核)(Monolithic kernel)

     有魅力的路灯 Torvalds

        

Examples LinuxWindows 9x 95, 98, Me)Mac OS <= 8.6BSD

 

2.微内核(Micro kernel)
   Dr. Andrew S. Tanenbaum calledast, in comp.os.minix)

Examples MachQNXL4AmigaOSMinix

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注