微内核


节日作文 2019-08-02 18:40:47 节日作文
[摘要]微内核篇(1):微内核与单内核微内核与单内核2010年06月20日 栏目:测试者 作者:火志溟 浏览(924) 评论(0)在之前的一篇内容里,我提到了关于内核(kernel)的问题,也就是宏内核与微内核的问题。我也提到Minix和Linux的两位大神曾经对这个问题进行过争论。我在这里简单说一下我对

【www.shanpow.com--节日作文】

微内核篇(1):微内核与单内核

微内核与单内核
2010年06月20日 栏目:测试者 作者:火志溟 浏览(924) 评论(0)
    在之前的一篇内容里,我提到了关于内核(kernel)的问题,也就是宏内核与微内核的问题。我也提到Minix和Linux的两位大神曾经对这个问题进行过争论。我在这里简单说一下我对宏内核与微内核的自己的认识。
    首先,微内核在英文中大概是Microkernel,而宏内核大概是Monolithic
kernel或简写位Monokernel。所以宏内核应该更准确的翻译为“单内核”,不过因为其个头很大,所以称为“宏(大)内核”或“巨(大)内核”
也是形象的,并且这种叫法大家也都在叫。
  
 微内核估计是大部分现代操作系统都在采用的结构,包括各种Unix(含Minix、BSD等),含GNU一直想开发出来的Hurd,BSD中含Mac
OS X,微软也说Windows同样是微内核(但好像有些研究内核的人不信微软的这个说法)。而单内核,目前估计就Linux比较有名了。
    两种内核的结构决定了它们之间吨位的巨大差别。据说这种吨位的差别真的很大。
    对于一个操作系统,怎么看哪些东西是属于内核的,哪些不是属于内核的。只要看哪些是运行在内核空间(Kernel
Space),哪些是运行在用户空间(User
Space)。这两个空间可以简单解释为内存上的两个不同的区域。内核空间中代码有更大的权限去访问硬件,但可使用的内存有限,并且为了保证安全(毕竟是
直接与硬件往来)还有其他的诸多限制。用户空间中的代码,通常就是一个个我们看到的线程或进程的东西,各个进程、线程通过内核空间中的代码进行调度或传递
数据,它们基本无法直接访问硬件,但是可以无限制使用内存,其他限制也很小。
  
 微内核的设计思路就是,除了是必须放在内核空间中运行的东西,否则就让它去用户空间。内核只做最最简单的工作:访问硬件,进行个进程间通讯。所以,一个
微内核的操作系统,其实是一个很小功能的内核,加上一堆程序,比如文件系统、显卡驱动、网卡驱动、声卡驱动……这些程序都是普通的进程。
    单内核的设计思路就是,既然都是和硬件有关的东西,那么我就要让它少点进程间通信的额外开销,于是把它们都放在内核空间中。于是一个单内核里就有无数的东西,比如文件系统、显卡驱动、网卡驱动、声卡驱动……这些程序全都是内核的一部分。
    从简单的思路描述上来看,单内核的开销会少一些,所以运行效率会高一些。而微内核看起来应该更灵活一些,而恰当的分配什么东西在内核空间中,也可以减少开支提高其运行的效率(混合内核)。
  
 微内核的确是灵活,这点非常肯定。内核只需要确定出一套标准(类似API),你随便改周围的一切都可以,都不会相互影响。哪怕改内核,只要不改标准,周
围的一切都可以不改变。内核看起来稳定性也高,毕竟周围的一切都在进程中,哪一部分崩溃,也只是会影响到和这个进程有关的东西。
    那么单内核的确就不怎么灵活了,改一点点东西,整个内核就要重新编译。而稳定性呢,不管哪个地方出问题,整个内核就全崩,而内核全崩,电脑也就全崩了。
    上面两段,就是微内核支持者的论据。也就是塔能鲍姆·教授与李纳斯·托瓦兹所争论的焦点。
    但是,GNU自己的内核Hurd为什么这么难开发呢?单内核作为一个整体,某一部分不正常很容易发现并调试。而微内核在这方面就比较难一些,Hurd进展缓慢据说就是这么回事。
    Linux的内核是什么样子的呢?显然它是单内核。不过它估计是前所未有最为先进的一种单内核。微内核为了达到减少开销而向单内核倾斜让内核管理较多的东西。而Linux作为单内核也在灵活性方面向微内核倾斜。
  
 Linux里建立了一个通用文件系统接口,保证它能很容易的使用多种文件系统(Linux支持的文件系统大概有几十种)。Linux把内核的各个部分进
行了模块化,它们可以静态编译进内核中去,也可以不编译进内核中。当需要这个模块的时候,Linux可以动态的载入这些模块来使用。当这些模块不被需要的
时候,Linux又可以动态卸载它们。这很像微内核,不过Linux的这些模块都是运行在内核空间的而不是用户空间。不过其实也挺麻烦的。
    从什么地方能看出Linux的这种模块化设计呢?Fedora 13升级的时候(其他Linux发行版也应该差不多),当执行yum
update的时候,如果恰好需要升级内核的时候。一个kernel需要升级,然后你会发现跟着有kmod开头的几个文件跟着升级,版本号和kernel
的一样。这些kmod就是模块。或者你用nVidia的显卡,在nVidia网站上下载驱动(那个run扩展名的),你会发现,只要换kernel,你的
驱动就在重新安装一遍,nVidia驱动的内核部分要重新编译。虽然模块可以动态装载卸载,但是可以看出,只要内核一变,所有的东西都要重新编译。
    嗯,现在好像也没有谁再争两种内核的优缺点了。毕竟微内核中有执行效率非常高的内核(L4),单内核中也有灵活性很高的内核(Linux)。
    OK,很和谐的结尾。
 
    推荐一本书:《Linux内核设计与实现(第二版)》(Linux Kernel Development),Robert Love著,机械工业出版社出版中文版。这本书基于kernel 2.6.x。简单翻翻都很有意思。

微内核篇(2):微内核与第二代微内核


微内核与第二代微内核
分类:
计算机基础
2009-07-10 09:31
336人阅读
评论(0)
收藏
举报 第一代微内核
 
微内核的概念是由Richard Rashid在卡内基梅隆(Carnegie-Mellon)大学开发Mach操作系统时提出的,目标是建立一个基于消息传送(message passing)机制的最小内核,以便在此基础上建造对其它操作系统的模拟层来模拟其它操作系统的特性。以Mach微内核为例,该微内核提供了进程管理、线程管理、内存管理、通信和I/O服务的功能。在Mach微内核基础上,建立了一些运行在用户态进程中的操作系统模拟程序,用来模拟4.3 BSD、System V、HP/UX、MS-DOS等操作系统的特性。这些模拟程序使得Mach操作系统能够支持许多运行于其它操作系统上的应用程序,如图1所示。所以微内核设计带来的一个重要优点是大大提高了操作系统的兼容性(compatibility) -- 使得基于微内核的操作系统能够模拟其它操作系统的特性,从而支持许多运行于其它操作系统上的运用程序。
 
图1. Mach微内核对其它操作系统的模拟
 
 
微内核设计带来的另外一个重要优点是提高了操作系统的扩充性(extensibility)。微内核设计的一个目标就是内核只提供对操作系统绝对必要的功能,而把其它属于传统操作系统内核部分的功能留给用户态进程来实现。以Mach操作系统为例,传统上属于操作系统内核功能的文件、目录服务都放在用户态进程实现了。本质上说,微内核可以被看作是对传统操作系统共性的进一步抽象,从某种意义上说可以被称作是“操作系统的操作系统”。这种进一步的抽象使得内核只提供机制,而把实现策略留给用户态进程 -- 或者说,服务程序。当新的硬件设备或软件技术出现时,只需要增加或修改服务程序即可,而不必象传统操作系统那样必须修改内核设计。微内核设计的这个优点在一个最有影响力的基于微内核的操作系统-- Windows NT的发展历史上得到了充分的体现:从Windows NT的第一版(3.1)开始到最新的Windows XP,其内核的改动远远小于传统操作系统如Unix。
 
另外,由于微内核对操作系统作了进一步抽象,基于微内核的操作系统更容易去掉一些不必要的特性从而被剪裁成一个较小的系统。也就是说,微内核设计使得操作系统有较好的灵活性(flexibility)。在基于微内核的操作系统上,所有的处理器相关的代码都被封装在微内核中,从而使得操作系统有较好的移植性(portability):因为微内核体积较小,所以移植工作也较少。微内核系统的可靠性(reliability)也较好,这是由于体积较小的内核可以得到更多的测试。同时,一些属于传统操作系统内核部分的功能是由服务程序实现的,所以一旦发生故障不至于导致系统的崩溃。最后,由于微内核设计基于消息传送机制,所以能更容易支持网络通信。
 
第二代微内核
 
总的来说,微内核设计带来了良好的兼容性、扩充性、灵活性、移植性、可靠性和网络支持。但是,微
内核设计有一个重要缺点:由于微内核操作系统使用进程来隔离系统组件,这些组件之间的通信使用了消息传递方式来实现一个组件对另一个组件的调用 -
这实际上是进行了一次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 在DEC-Station 5200/200上比较了应用程序在Mach和Ultrix操作系统 (一个Unix变种)运行时的速度,发现相对于Ultrix操作系统Mach最多降低了这些应用程序66%的性能。测量表明至少73%的性能下降和RPC或RPC相关活动有关。这些性能下降除了是由于消息传送机制过多的步骤引起外,还和微内核设计导致的过多用户态和核心态之间的切换以及过多的不同地址空间之间的切换有关。一个研究表明不同地址空间之间的切换导致较高的Cache未命中率(cache-miss rate)是导致性能下降的重要原因。
 
解决微内核设计性能问题的一个方法是扩大微内核并把一些关键的服务程序和驱动程序重新加入到内核中去,从而减少系统在用户态和核心态之间的切换以及系统在不同地址空间之间的切换。这方面的例子有Mach操作系统和Chorus操作系统。另一个特别有名的例子是Windows NT 4.0的设计:这个版本的Windows NT把本来运行在用户态的图形系统又重新加入到内核中,结果大大地提高了图形系统的性能。
 
但是,扩大内核的方法大大削弱了微内核思想带来的优点 – 扩大的内核降低了系统的扩充性、灵活性和可靠性。与扩大内核的思路相反,解决微内核性能问题的另一条思路是进一步减少内核的大小并对RPC调用进行直接优化。这种思路导致了被称为第二代微内核的一些新的内核设计的出现。在这些新的微内核中,L4微内核是一个著名的例子。
 
L4微内核
 
L4微内核的核心功能是支持一个基于消息传送的IPC原语,以便在此基础上实现高性能的RPC机制。在486-DX50上,L4实现了一个RPC调用开销仅用10μs的性能。相比之下,在Mach操作系统上一个RPC的调用开销为230μs,而在Unix上一个RPC的调用开销为20μs。也就是说,L4的IPC比第一代微内核的IPC快20倍以上,甚至比传统操作系统的IPC还要快。
 
除此之外,L4微内核还提供了地址空间管理原语和线程管理原语。L4的地址空间管理原语负责内存地址空间的映射,支持三个操作:Grant、Map和Flush。基于这些操作,L4可以支持由不同的用户进程以不同的策略来映射页面。L4的线程管理原语使得线程调度能够由用户进程以不同的策略来实现,从而支持用户态的线程调度器。由于L4微内核仅仅以7个系统调用接口就实现了以上功能,所以只占用了12K内存。相比之下,一个典型的第一代微内核占用300K内存以支持140个系统调用接口。
 
L4微内核的另一个特点在于它的中断处理方式:L4微内核把硬件中断处理成IPC消息。微内核把硬件当作是一些能够发送IPC消息给相关处理代码的线程,而把中断服务程序当作是一些正在接收这些IPC消息的线程。当一个硬件中断发生时,微内核会为这个中断产生一条消息并把此消息发送到和此中断相关联的用户进程中,然后由用户进程中的负责接收这条IPC消息的线程来处理这个硬件中断。这样,内核只负责产生中断消息,而不用涉及到具体的中断处理,从而使得中断处理的具体策略和内核隔离开来。这种处理方式使得设备驱动程序可以运行在用户态,其中断服务代码的大体结构如下:
driver thread:
do
wait for (msg, sender);
if sender = my_hardware_interrupt
then read/write I/O ports;
reset hardware interrupt
else …
endif
enddo
 
 
其它第二代微内核级的设计
 
Exokernel微内核
 
相对于L4微内核,Exokernel微内核是一个更加激进的设计。Exokernel微内核的核心观点是:只要内核还提供对系统资源的抽象,就不能实现性能的最大优化 -- 内核应该支持一个最小的、高度优化的原语集,而不是提供对系统资源的抽象。从这个观点上来说,IPC也是一个太高级的抽象因而不能达到最高的性能。Exokernel微内核的核心是支持一个高度优化的原语名叫保护控制转移(protected control transfer, PCT)。PCT是一个不带参数的跨地址空间的过程调用,其功能类似于一个硬件中断。在PCT的基础上,可以实现高级的IPC抽象如RPC。在MIPS R3000处理器上,一个基于PCT的RPC实现了仅10μs的开销,而在同一硬件上运行的Mach RPC为95μs[1]。
 
Rambler内核
 
Rambler操作系统不同于传统操作系统:它没有传统操作系统的严格意义上的内核。如果一定要定义一个内核
的话,它的IPC/HAL模块就扮演着传统内核的角色,可以被系统几乎所有的部分调用。系统核心通过支持跨地址空间和跨计算机的远程方法调用,在全系统的
各个部分架起了一座桥梁。在Rambler系统中,所有的远程调用都是通过OCP协议进行的。
 
在Rambler操作系统中也有一个内核态进程,但和传统操作系统的内核有很大不同的:Rambler的内核
进程只是一个运行在内核态的地址空间。
在这个内核态地址空间中有什么系统部件,是不可预知的,取决于处理器的体系结构。在目前的80386的实现上,内核进程包含了中断管理器、地址空间管理
器、8237A
DMA控制器驱动模块、OCP根地址空间和一些系统的启动代码。但这些部件的位置随时可以因系统的实现策略和处理器体系结构的需要而改变。例如在其它处理
器平台上,地址空间管理器可能被放在一个特定的用户态地址空间中,而不必运行在内核态。又如,在Rambler后继版本的实现中,OCP根地址空间可能会
放在在用户态地址空间中,而启动代码会被抛弃。
 
所以,Rambler内核进程实际不同于传统操作系统的内核。而传统操作系统内核的主要功能被Rambler
系统的各个子系统代替了。
如:进程管理被地址空间管理器(可能运行在用户态)所替代;进程切换被IPC模块的调用切换所代替;线程管理由IPC/HAL模块和应用程序运行环境所替
代; IPC模块的一部分是运行在用户态的;虚拟内存系统可以作为运行在用户态的系统服务,甚至嵌入到应用程序中作为私有的External
Pager;设备驱动程序一般运行在用户态地址空间中; 存储系统(包括传统文件系统)运行在用户态地址空间甚至嵌入到应用程序中。
 
因而从某种意义上说,Rambler 操作系统可以被认为是一种无核设计。

微内核篇(3):微内核和宏内核


今天看了《程序员》上的一篇文章,对微内核和宏内核,在系统调用的角度上,有了比较清晰地认识。这两种派系的代表人分别是Tanenbaum和Linus。Tanenbaum的一段话比较通俗易懂的说明了什么叫微内核什么叫宏内核。“老一点的操作系统都是宏内核的,也就是说,整个操作系统是一个运行在核心态的单独的a.out文件,这个二进制文件包含进程管理,内存管理,文件系统以及其他。具体实例包括UNIX,MS-DOS,VMS,MVS,OS/360,MULTICS等等。另一种便是微内核,在这种系统中,操作系统的大部分都运行在单独的进程,而且多数在内核之外。它们之间通过消息传递来通信。内核的任务是处理消息传递,中断处理,底层的进程管理,以及可能的I/O。这种设计实例有RC4000,Amoeba,Chorus,Mach以及还没有发布的Windows/NT”。
为了从概念上搞清楚微内核和宏内核,从网上搜到如下的资料
“l 微内核(Microkernel kernel)――在微内核中,大部分内核都作为独立的进程在特权状态下运行,它们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,如果在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其它进程(或模块)通讯以完成所需任务。在这些设计中,微内核部分经常只不过是一个消息转发站:当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。(某些时候,模块也可以直接给其它模块传递消息。)在一些微内核的设计中,更多的功能,如I/O等,也都被封装在内核中了。但是最根本的思想还是要保持微内核尽量小,这样只需要把微内核本身进行移植就可以完成将整个内核移植到新的平台上。其它模块都只依赖于微内核或其它模块,并不直接直接依赖硬件。微内核设计的一个优点是在不影响系统其它部分的情况下,用更高效的实现代替现有文件系统模块的工作将会更加容易。我们甚至可以在系统运行时将开发出的新系统模块或者需要替换现有模块的模块直接而且迅速的加入系统。另外一个优点是不需要的模块将不会被加载到内存中,因此微内核就可以更有效的利用内存。l 单内核(Monolithic kernel)――单内核是一个很大的进程。它的内部又可以被分为若干模块(或者是层次或其它)。但是在运行的时候,它是一个独立的二进制大映象。其模块间的通讯是通过直接调用其它模块中的函数实现的,而不是消息传递。单内核的支持者声称微内核的消息传递开销引起了效率的损失。微内核的支持者则认为因此而增加的内核设计的灵活性和可维护性可以弥补任何损失。l 微内核(Microkernel kernel)――在微内核中,大部分内核都作为独立的进程在特权状态下运行,它们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,如果在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其它进程(或模块)通讯以完成所需任务。在这些设计中,微内核部分经常只不过是一个消息转发站:当系统调用模块要给文件系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。(某些时候,模块也可以直接给其它模块传递消息。)在一些微内核的设计中,更多的功能,如I/O等,也都被封装在内核中了。但是最根本的思想还是要保持微内核尽量小,这样只需要把微内核本身进行移植就可以完成将整个内核移植到新的平台上。其它模块都只依赖于微内核或其它模块,并不直接直接依赖硬件。微内核设计的一个优点是在不影响系统其它部分的情况下,用更高效的实现代替现有文件系统模块的工作将会更加容易。我们甚至可以在系统运行时将开发出的新系统模块或者需要替换现有模块的模块直接而且迅速的加入系统。另外一个优点是不需要的模块将不会被加载到内存中,因此微内核就可以更有效的利用内存。l 单内核(Monolithic kernel)――单内核是一个很大的进程。它的内部又可以被分为若干模块(或者是层次或其它)。但是在运行的时候,它是一个独立的二进制大映象。其模块间的通讯是通过直接调用其它模块中的函数实现的,而不是消息传递。单内核的支持者声称微内核的消息传递开销引起了效率的损失。微内核的支持者则认为因此而增加的内核设计的灵活性和可维护性可以弥补任何损失。”
在了解这些知识的基础上,再看到杂志上的图解,就变得非常清楚了。

本文来源:https://www.shanpow.com/xx/398294/

《微内核.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关阅读
  • 节日作文600字精选3篇 节日作文600字精选3篇
  • 中华传统节日作文(合集九篇) 中华传统节日作文(合集九篇)
  • 节日作文开头集合3篇 节日作文开头集合3篇
  • 节日作文600字范文汇总三篇 节日作文600字范文汇总三篇
  • 节日作文500字(锦集5篇) 节日作文500字(锦集5篇)
  • 中秋节作文200字-节日作文汇编9篇 中秋节作文200字-节日作文汇编9篇
  • 节日作文600字初二【二十一篇】 节日作文600字初二【二十一篇】
  • 节日作文300字左右锦集十六篇 节日作文300字左右锦集十六篇
为您推荐
  • 节日作文高二范文(通用13篇)
    节日作文高二范文(通用13篇)
    春天,又称春季,是四季中的第一个季节,指立春至立夏期间,含节气有立春、雨水、惊蛰、春分、清明、谷雨。是万物复苏的季节。下面是小编为大家整理的节日作文高二范文(通用13篇),欢迎大家借鉴与参考,希望对大家有所帮助。
  • 节日作文300字左右范文(精选十六篇)
    节日作文300字左右范文(精选十六篇)
    以下是小编整理的节日作文300字左右范文(精选十六篇),仅供参考,希望能够帮助到大家。
  • 最吸引我的节日作文范文十四篇
    最吸引我的节日作文范文十四篇
    中秋节,又称拜月节。中秋节自古便有祭月、赏月、吃月饼、玩花灯、赏桂花、饮桂花酒等民俗,流传至今,经久不息。中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收、幸福,成为丰富多彩、弥足珍贵的文化遗产。以下是小编收集整理的最吸引我的节日作文范文十四篇,仅供参考,希望能够帮助到大家。
  • 中秋节-节日作文1000字范文(精选16篇)
    中秋节-节日作文1000字范文(精选16篇)
    以下是小编收集整理的中秋节-节日作文1000字范文(精选16篇),仅供参考,希望能够帮助到大家。
  • 节日作文高二(锦集15篇)
    节日作文高二(锦集15篇)
    春天,又称春季,是四季中的第一个季节,指立春至立夏期间,含节气有立春、雨水、惊蛰、春分、清明、谷雨。是万物复苏的季节。以下是小编为大家收集的节日作文高二(锦集15篇),仅供参考,欢迎大家阅读。
  • 中国传统节日作文精选十七篇
    中国传统节日作文精选十七篇
    许多人都有写作经验,他们对写作并不陌生。作文必须围绕主题,围绕同一主题进行深入讲解。无论如何,我们应该避免杂乱无章,主题松散甚至没有主题。以下是小编整理的中国传统节日作文精选十七篇,仅供参考,大家一起来看看吧。
  • 传统节日作文【汇编五篇】
    传统节日作文【汇编五篇】
    重阳节有登高的习俗,人们在这一天或赏菊以陶冶情操,或登高以锻炼体魄,给人生增添了无限乐趣。下面是小编精心整理的传统节日作文【汇编五篇】,仅供参考,大家一起来看看吧。
  • 节日作文300字左右精选14篇
    节日作文300字左右精选14篇
    下面是小编精心整理的节日作文300字左右精选14篇,仅供参考,大家一起来看看吧。
  • 节日作文300字左右【十五篇】
    节日作文300字左右【十五篇】
    以下是小编整理的节日作文300字左右【十五篇】,欢迎阅读与收藏。
  • 清明扫墓作文-节日作文范文(通用19篇)
    清明扫墓作文-节日作文范文(通用19篇)
    传统,世代相传、从历史沿传下来的思想、文化、道德、风俗、艺术、制度以及行为方式等。以下是小编整理的清明扫墓作文-节日作文范文(通用19篇),仅供参考,希望能够帮助到大家。