导航:网站首页 >

Linux 为什么还要坚持使用宏内核?

时间:2016-5-14

相关问题:

匿名网友:

目前主流的操作系统(MAC OS X,Windows)都是使用了微内核来实现,但是...答:这问题就和 CISC 和 RISC 之争一样没有意义。容易归纳出来一个结论,很多时候极端终将会归于中庸。

热心网友:

这问题就和 CISC 和 RISC 之争一样没有意义。容易归纳出来一个结论,很多时候极端终将会归于中庸。

热心网友:

本文还这个回答的一个债:Linux 战略或生态圈是什么? - in nek 的回答。里面提到微内核都是学院派的意淫,这里回答为什么。

我没有指向——我只是为了说明问题——如果是真心问这个问题很大程度上反映了提问者还是个代码中二:)

我说的“中二”,是那种没有经验,只有“名”,没有“实”的思考者。具体名称空间定义参考这里:《道德经》讲了什么?为什么它广受推崇? - in nek 的回答。这种人,在社会中是会被老子这样的人K的:)

对应地,这样的人在Linux世界中也是要被Linus K的。

我解释一下为什么:“是否微内核”仅仅是一个名字定义的问题,和用户要解决的问题一点关系都没有。我们在维护架构的时候,首先保证不创建额外的概念解决非直接用户相关的问题。这种情况下,为什么要为Linux引入微内核?现在没有问题要解决了?到了吃饱饭没事干瞎做死的时候了吗?

微内核只是学院概念,学院概念都是听着很有道理,但经过打磨以后才能肯定是否正确道路的。你看每年有多少红点设计奖?有几个被复制到所有的类似产品中的?为什么没有复制?不是专利和版权限制,是那个设计有创意,但并不实用。

微内核有成功的例子么?Minix是个教学系统,WindowsNT一开始说微内核,结果怎么呢?把图像渲染丢内核里了,QNX算是最成功的商用微内核系统了,但我告诉你QNX是怎么工作的:你要把用户程序,协议栈,驱动都放到一个进程中的。

这背后反映了什么?这反映了,如果你要参与市场竞争,你要用尽一切能力去保证功能和性能,其他一切理论优势,都是不靠谱的。微内核可以优化到和宏内核一样的数据流效率吗?如果它能够,它就不是微内核了好吧?所以,你让微内核系统如何在市场竞争中活下去?不能在市场竞争中活下去,谁来开发微内核系统?

而且,比如Linux这样的架构,有什么东西阻止你把驱动放到用户态了吗?(否则你以为fuse是什么?)有什么阻止你在其中增加一个优化的进程间通讯吗?什么都没有。换言之,宏内核系统分分钟可以变成微内核系统,而微内核系统是无法回头的。

你要成为一个想Linus那样的好架构师,真要好好学学这个基础的虚心实腹的设计理念。这个理念现在贯穿所有的Linux核心维护者的维护哲学。比如他们基本上,不接受没有硬件支持的代码,不接受概念产品的代码,不接受已经上市产品的代码。这些都是这个基本理念的一脉相承。

热心网友:

我想说,现在没有绝对宏内核,也没有绝对微内核,只是某种形式的杂种

热心网友:

目前得票第二的 @王垠 的答案比较有误导性。所以说明一下。

Micro-kernel 和 kernel 的「动态性」无关。实际上,Linux kernel 内部有大量的动态行为。包括动态地使用文件系统 driver,动态加载 module。只要这些动态行为都发生在 kernel-space,就还是 monolithic-kernel。所以 @王垠 的基本比喻就是错误的。

用类似的比喻,Micro-kernel 的性能问题不在于「问这东西在哪」,而在于必须「把这东西复制一份,外加校验」,从而防止内存 corruption 引起的 bug。

系统越大,bug 越多,这个事实不假。但是 micro-kernel 的拥趸搞错了一件事情:bug 增长的拐点在什么地方。在拐点之前,要用艰苦奋斗修 bug 来解决,拐点之后,才需要加 defensive 机制。否则就是 over-defensive。什么叫 over-defensive?如果你的代码每次访问一个指针都要检查 nullity,不管是高层模块还是底层模块,就是 over-defensive。Over-defensive 不光不能减少 bug,还会把一些在 sanity/smoking test 就能发现的 bug 整成 random failure。事实证明,Unix 内核根据「mechanism, not policy」制定的极为精简的功能需求的复杂度远远在造成 bug 增长的拐点之前。

最后,monolithic-kernel 就是 micro-kernel。谁也不能阻止你把 Linux kernel driver 的 policy 部分挪到 user-space,甚至你可以把 Linux 的 paging policy 也写成 demon。很多 Linux 的 CPU 中断相应调度就是在 user-space 控制的。Micro-kernel 只是强制的 micro-kernel。

大家还关注:

问题推荐

宏内核linux,Linux 为什么还要坚持使用宏内核?相关推荐

  1. container_of宏定义分析---linux内核

    问题:如何通过结构中的某个变量获取结构本身的指针??? 关于container_of宏定义在[include/linux/kernel.h]中: /*_* * container_of - cast ...

  2. Linux内核基础——Linux内核基础编程

    任务一.模块编程 子任务1.编写最简单的内核模块,并将其加载到内核中 hello.c #include<linux/module.h> #include<linux/kernel.h ...

  3. 高端内存映射之kmap持久内核映射--Linux内存管理(二十)

    日期 内核版本 架构 作者 GitHub CSDN 2016-09-29 Linux-4.7 X86 & arm gatieme LinuxDeviceDrivers Linux内存管理 在内 ...

  4. 【Linux内核】Linux内核介绍

    Linux学习内核思路 学习过程: Linux内核引导及如何初始化 进程管理.内存管理 内核引导及过程: CPU通电后,首先执行引导程序,引导程序把内核加载到**内存,**然后执行内核,内核初始化完成 ...

  5. 深入理解Linux内核-第3版 第二章 内存寻址 内核2.6.11 强调:本章出现参见其他章节的地方不做深究,留到看到对应章节时深究

    本章介绍寻址技术.值得庆幸的是,操作系统自身不必完全了解物理内存:如今的微处理器包含的硬件线路使内存管理既高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问. 作为本书的一部分,本章将详细描 ...

  6. linux 3.5.0-23-generic内核版本系统调用数目,Linux操作系统分析(三)- 更新内核与添加系统调用...

    环境:Ubuntu 12.10     学号:SA****199 1.更新内核: 直接安装的系统内核版本一般不是最新,用 uname -a 查看一下 自己的版本,OK,我的是: Linux chenh ...

  7. 【内核】linux内核启动流程详细分析【转】

    转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...

  8. 【内核】linux内核启动流程详细分析

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...

  9. 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录 一.禁止 / 开启内核抢占 与 方法保护临界区 二.编译器优化屏障 三.preempt_disable 禁止内核抢占 源码 四.preempt_enable 开启内核抢占 源码 一.禁止 / ...

最新文章

  1. java 和 Android Base64加密
  2. svn的一些相关资料
  3. cnblog博客CSS定制
  4. JQuery Smart UI 简介(五) — 框架设计【前篇】(前台UI层架构)
  5. SpringBoot v2.2.6 踩的坑 --- dubbo.scan.base_packages
  6. 11无监听程序_腾讯开心鼠英语 小程序实践与总结
  7. delphi 回调函数例子 用函数过程作为参数
  8. idea中Terminal终端无法执行GIT命令
  9. [工具]iperf测试带宽
  10. 学习笔记之linux网络属性配置及其命令用法
  11. AjaxPro2完整入门教程
  12. 优达学城 python 人工智能入门_深度学习TensorFlow入门资源汇总-如何从零开发人工智能...
  13. 安装Office2007
  14. 思科模拟器CIsco Packet Tracer路由器上配置 DHCP
  15. vob文件怎么转换成mp4?
  16. gateway请求就是404 nacos+gateway 搭建网关gateway
  17. ffmpeg实用命令总结,直播流处理相关
  18. Java代码审计手册(1)
  19. rdesktop远程使用Windows的一些技巧
  20. 【原创】所谓“读心术”的伎俩

热门文章

  1. 简单页面跳转生命周期(简单清晰)
  2. springaop事务逻辑原理_搞懂Spring AOP,这一篇就够了
  3. 验证手机号码归属地_手机号码归属地能否取消? 工信部回复了
  4. idea撤销与恢复快捷键_IntelliJ IDEA 重做快捷键和配置哲学
  5. int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null.....
  6. python永久保存数据_python如何保存数据
  7. python怎么画出圆润的曲线_利用python画出AUC曲线的实例
  8. Java基础之HashMap流程分析
  9. linux内核函数kmalloc,Linux_Linux平台上几个常见内核内存分配函数,* kmallocPrototype:#incl - phpStudy...
  10. linux查询所建文件夹,linux中的文件和文件夹的新建、查询、删除