目前得票第二的
@王垠的答案比较有误导性。所以说明一下。
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。
其实所有的理论上完美的问题在实践过程中都会遇到各种不得不妥协的折衷.因为你制造出的东西是要部署到实际生活生产环境中使用的. 不是要一个只在实验室中看起来很完美的作品. 微内核的高度模块化,自然要付出成本的,那就是增加代码交互的冗余与效率的损耗, 而这恰恰是很大的问题.
P.S. 建议你看看Linus在刚发布Linux后不久与Tanenbaum的一场关于linux为何不使用microkernel的著名的争论:
http:// en.wikipedia.org/wiki/T anenbaum%E2%80%93Torvalds_debate这次著名的口水仗中, 展现了工程派代表[1]及典型学院派老学究[2]之间的分歧,很有代表性, 值得一读.
[1] 从Linus本人的作品与平时在Linux邮件列表上的发言来看,他是一名实用主义者,他说过句名言: Talk is cheap. Show me the code. (
https:// lkml.org/lkml/2000/8/25 /132)
[2] Tanenbaum开发了Minix这个微内核的unix-like操作系统, 这就是一个纯为教学而开发的系统, 它是代表学院派理念性的作品
主要还是Linus的技术水平太差了吧。美国人技术水平太差,目前还做不到。
华为就比较厉害,每次Android更新的时候,就抽取掉一小块Linux,换成鸿蒙OS。从今年8月份到12月份,华为已经一点点地把Linux的“宏内核”部分,基本全部通过Android更新替换成了“鸿蒙OS”的微内核。
从这一点来说,这是华为鸿蒙OS的先进之处。当然鸿蒙OS这么厉害的东西,现在也不可能开源出来,否则被Linux基金会和Linus本人就学走了——也就无法达到“华为通过鸿蒙OS制裁美国”的目的了。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有