我认为微内核相对于单内核上没有明显的技术优势,微内核一般都宣称有如下的技术优势:

1. 各服务可以动态加载插入,使内核很小,减少内存。
2. 系统非常灵活。当运行一个应用程序时,只需把选定的系统服务加载到系统中即可。而修改了服务以后可以通过联机进行测试;并不需要重新构建或者启动一个新的内核,他们并不影响系统的运行。
3. 各服务地址空间独立,不影响其它模块(如文件系统服务调用内存管理服务的功能)。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分。
4. 可移植性强,各用户台服务与硬件无关。

1. 第一点,目前的Linux来说也有内核模块机制解决。当然还有不少功能是直接链接,没有实现为内核模块形式,但是这是目前实现问题,今后如果必要都是可以实现的(比如VFS组件也可以搞一个ko出来加载进去)。对于这点,微内核并无明显优势了。
2. 第二点同上。
3. 第三点,有两层含义。
  3.1 第一层是本服务实效的问题,这一点。我想Linux也是可以做到的,比如一个"功能",如VFS,如果其内部全局变量数据混乱了以后,有可能就会访问非法地址,现在一般做法是BUG, OOPS或panic。这其实也是可以修改为不进行oops,panic的,而是把资源清理回收一下,把所有的数据重新初始化一下。这个与是否是内核模块无关,目前的内核也可以做。大概你会说,这样其它的内核部分就会暂时不能使用这个服务了。但是微内核重启这个组件时,也一样不能使用该组件。因此微内核并无优势。
  3.2 第二层含义是影响其它部分,其它部分有三种可能。
  a) 可能是调用本功能的用户态线程,目前如果发生oops,该线程会被kill,其实也可以修改为不kill,而是取消它的资源。比如如果VFS功能实效,我就强制关闭所有文件句柄,释放资源如锁等等。
  b) 二是影响其它的组件,一个比较常见的问题就是VFS如果发生代码错误有了野指针,修改了网络组件的全局变量,因为内核的地址空间是所有代码共享的。这个问题,也不是没有办法解决。目前粗略想到的一个办法是取消所有进程的内核地址空间共享模式。每个进程有独立的内核地址空间,在这个空间内,每个内核组件就像一个用户态进程的一个动态库,你用的时候进行动态映射。比如你调用VFS的系统调用时,系统会帮你自动映射VFS代码段和数据段到你的内核空间;如果VFS访问了内存管理的API,在调用这个组件间API的接口时,进行内存组件的映射,同时把VFS解除映射。当内存管理分配完内存时,再进行VFS映射,内存解除映射动作。这样内核态运行时,在某一时刻只有一个组件存在地址映射,因此它要想非法访问其它组件的地址必然会引起page fault。至于中断,也是一样,在某一时刻必然只会映射一段代码。当从中断返回内核态时,只要恢复被打断时刻的映射状态即可。其实映射早就映射好了的,只不过是修改页目录项中"存在"的1位标志而已,性能并不会受到多大的影响。当然这个映射和解除映射的动作,如果现在要全部加在内核中工作量是巨大的。但是如果有必要,我想是可以通过编译时的插桩技巧来实现的。
  c) 三是内核,就是目前Linux比较严重的问题,一般都是oops,panic重启。这点我前面说了,这个也只是实现的问题,只要3.1, 以及3.2.a), 3.2.b) 三点做好了,可以不用强制重启内核。
4. 第四点比较牵强,所谓移植,无非就是对一些硬件驱动的修改,CPU体系结构部分的处理等。不管你的服务包括驱动运行在用户态还是内核态,该修改的还是要修改。与宏内核,微内核的设计没有关系。

综述,第1,2,3个问题其实都是目前"实现"上的问题,只是因为目前Linux的可靠性,灵活性问题还没有到非那样做不可的地步,而并非Linux从设计上就不能那么实现,因此并不是单内核还是微内核"设计"上的问题。微内核上宣称的所谓的技术优势,Linux上也一样是可以实现的。没有必要非要通过另外设计一套基于IPC的内核组件服务模型,把问题隐藏。

微内核相对于单内核优势之我见相关推荐

  1. [Kernel]微内核、单内核

    [Kernel]微内核.单内核 一.从应用层面直观说明采用各种内核的系统 微内核:华为鸿蒙系统.Windows系统.塞班系统 单内核:Unix.Linux.FreeBSD.安卓系统 二.各自的特点 这 ...

  2. linux系统微内核,微内核操作系统的定义及用微内核设计的系统,附Linux是单内核结构介绍...

    本文为你介绍微内核操作系统的定义,及其采用微内核设计的操作系统都有哪些?同时附有 Linux 是一个单内核结构的介绍,不过 Linux 还吸收了微内核的优点,所以系统表现相当的出色.微内核如今非常受关 ...

  3. 操作系统单内核和微内核的区别

    单内核 单内核就是从整体上把内核作为一个大过程来实现,同时也运行在一个单独的地址空间上.因此单内核通常以单个静态二进制文件的形式存放于磁盘中.而进程管理.内存管理等是其中的一个个模块,所有内核模块都在 ...

  4. 单内核与微内核的比较

    操作系统内核分为单内核.微内核.外内核(科研中). 单内核 所谓的单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上.因此单内核通常以单个静态二进制文件的形式存放于磁盘 ...

  5. LINUX内核杂记(1)-处理器与单内核

    一.处理器在任何时间点的活动可分为以下三类: 1.运行于用户空间,执行用户进程 2.运行于内核空间,处于进程上下文,代表某个 特定的进程执行 3.运行于内核空间,处于中断上下文,与任何进程无关,处理某 ...

  6. type转HDMI2.0方案|typec转HDMI 4K60Hz电路|CS5265 typec单转优势方案

    Capstone 新推出的一款单芯片4K 60HZ Typec转HDMI音视频转换芯片,该芯片对比市面上其他方案如:普瑞的 PS176 .瑞昱RTD2172.龙迅LT8711.昆泰CH7211等typ ...

  7. 基本概念之内核(Kernel)

    内核是操作系统最基本的部分.它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间.内核的分类可分为单内核和双内核以及微内核 ...

  8. pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法

    摘 要:基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux核心定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统 ...

  9. 关于客户机服务器与微内核结构操作系统,第1章 操作系统概述1

    <第1章 操作系统概述1>由会员分享,可在线阅读,更多相关<第1章 操作系统概述1(41页珍藏版)>请在人人文库网上搜索. 1.操作系统概述 苏锐丹 操作系统概述 n操作系统的 ...

最新文章

  1. 跨进程访问(AIDL服务)
  2. 死磕算法第二弹——栈、队列、链表(5)
  3. 二分查找的实现---java版本
  4. 轻松应对1亿+月活,《迷你世界》背后有啥黑科技
  5. 点击头像显示大图Dialog
  6. 【Hadoop篇】--Hadoop常用命令总结
  7. Windows10安装Gooey
  8. gradle排除jar依赖
  9. Autoware 矢量地图标注(Autoware Maptool插件)
  10. HCIE证书有用吗?
  11. 信号预处理电路(三角波和正弦波转换成方波)
  12. 基于Tasking的连接器文件配置技巧
  13. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?
  14. 无声交流的读心术,正在剥夺我们的沟通能力
  15. 包含min函数的栈和两个栈实现一个队列
  16. DDR中bank,die,rank,channel的概念
  17. 【题解】POJ 3069 Saruman's Army(贪心)
  18. 80%的人分不清传感网与物联网的区别,这二者之间的具体区别到底是什么?
  19. 抖音矩阵系统源码定制。look here
  20. 凭栏听音,化险为夷——配电系统中的电磁隐患解析

热门文章

  1. 国外stripe支付,超简单几行代码搞定
  2. ubuntu14.04 安装五笔输入法(fcitx)
  3. 论文精度 —— 2017 CVPR《High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis》
  4. 详谈PCB电路板结构系列之PCB材料组成笔记
  5. CUDA C/C++ 流和并发
  6. java排班算法-几班几倒
  7. VLC全部参数,libvlc_new函数参数,VLC SDK开发
  8. Android的增量更新
  9. 并发编程五:java并发线程池底层原理详解和源码分析
  10. Go中rune类型浅析