宏内核、微内核和混合内核

Monolithic Kernel

无论是Windows还是Linux等等,这些寻常使用的操作系统,都是用内核和管理和使用硬件的。

宏内核。

Monolithic,词典义是『单一的,庞大的』,简单理解,就是内核的所有功能,从文件系统,到内存管理,到CPU调度,等等等等,都放在内核态中。这样做有一个很大的好处,那就是所有这些功能都在同一个地址空间下,大家做通信会非常方便,而且通信的成本肯定也是低的,实现起来会快糙猛一些。就是很莽很厉害。

但是,这样也会导致一些其他问题。我觉得最大的问题就是代码复杂度会提高。Linux Kernel的代码量太美不看。同时,这样也会导致容错性不是很好,只要一个地方出了问题,会导致整个Kernel都挂掉。

Micro Kernel

那既然Monolithic Kernel有这样的问题,做研究的人一定不会放过这样的好机会,于是就有了微内核的概念。所谓微内核,是指内核只提供最必要的功能,比如IPC,内存管理,CPU调度等等。而其他,诸如文件系统,网络IO等等,都放在用户态来实现。

这样做的好处首先是内核变小了,内核是常驻内存的,小了自然就节约了内存的空间。但是,这样的性能就会不如很莽很厉害的Monolithic Kernel要好,因为IPC通信的overhead还是有一些的。

Hybrid Kernel

那既然Micro Kernel和Monolithic Kernel都有问题,能不能把两个结合一下,互相中和呢。

PPAP (Kernel Version)
I have a Monolithic Kernel.
I have a Micro Kernel.
Bow!
Hybrid Kernel!

这大概是研究的惯用套路,一个事情有两种极端的做法,然后中和一下,就有了第三种做法。那Hybrid Kernel就是把一部分不常使用的内核模块,或者是原本需要的时间就很长,因此IPC的overhead看起来就不是那么夸张的功能,移出内核,而其他的就会放在内核里。

之前说到的Monolithic Kernel也好,Micro Kernel也好,它们对资源的保护和管理都是在内核里去做的,也就是说,它们都是先对硬件做抽象,然后向上不直接暴露硬件,而是暴露硬件的抽象。一个例子,硬盘是硬件设备,但是我们的应用程序看到的是一个个的文件,文件本身就是一种抽象。而应用程序,是没办法直接操作硬件的,只能跟操作系统提供的抽象打交道。

https://zhuanlan.zhihu.com/p/34334336

原文地址:https://www.cnblogs.com/feng9exe/p/12420962.html

时间: 2024-10-14 05:28:47

宏内核、微内核和混合内核的相关文章

[完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览器 使用IE内核的非主流浏览器 使用Chrome内核的非主流浏览器 使用混合内核的非主流浏览器 获取浏览器版本方法: function getBroswer(){ var sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s

Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938393.html 在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch. 此函数根据构架而异,对于ARM构架的详细分析如下: void __init setup_arch(char **cmdlin

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3  RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口.PM(Process Management)进程管理.MM(Memory Managem

Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7) 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4938388.html 研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程.我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这促使我这次仔细地研究内核的启动代码. CPU在bootloader的帮助下将内核载入到了内存中,并开始执行.当然,bootloader必须为zImage做好必要的准备:  1. CPU 寄存器的设置: R0

十天学Linux内核之第一天---内核探索工具类

原文:十天学Linux内核之第一天---内核探索工具类 寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间里还是希望能够补充一下Linux内核相关知识,接下来继续待在实验室里想总结一下Linux内核编程,十天肯定完全掌握不了Linux内核,这里我也只是把自己认为不是很好懂并且很重要的难点疑点写出来,和大家一起分享,希望大家改正互相学习. Linux的具体概述这里就不多说了,今天主要讲的是Linux内核中

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938396.html 在基本分析完内核启动流程的之后,还有一个比较重要的初始化函数没有分析,那就是do_basic_setup.在内核init线程中调用了do_basic_setup,这个函数也做了很多内核和驱动的初始化工作,详解

Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】

原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938390.html 在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核C语言代码:init/main.c中的start_kernel函数,在这个函数中Linux内核开始真正进入初始化阶段, 下面我就顺这代码逐个函数的解释,但是这里并不会过于深入

Linux内核@系统组成与内核配置编译

Linux系统由什么组成? 由用户空间(应用程序+GNU C标准库)和内核空间(系统调用接口+内核+内核架构代码)组成. Linux内核到底是什么?以及组成. ARM的七种操作级别? 内核网络协议栈(Network Stack)的作用? 为Linux提供了丰富的网络协议(TCP/IP.PPPOE)实现.将网络协议栈放在内核中为了提高网络性能,减少CPU开销. 虚拟文件系统的作用? 为了支持多种文件系统,并为它们提供统一的操作接口. Linux内核源代码结构 关于每个文件夹中的具体内容分析:参考h