我认为微内核的意义(1)

 一直都在学习或分析与内核相关的东西,无论宏内核Linux或微内核,微内核的社群(社区有点窄,群体又不明确,社区群体吧,就社群了),一直想要在性能上超越Linux。从第一次微内核失败开始,每隔一段时间就会有微内核要媲美Linux的声音出现:我们出了基于消息的IPC机制,颤抖吧Linux;我们出了基于capability的安全机制,颤抖吧Linux。而Linux很遗憾的没有颤抖,相反Linus同志替Linux一遍又一遍的在语言和各种应用场合蹂躏微内核。

很遗憾的,我是站在微内核这边的;并且我非常坚定的认为微内核会取宏内核而代之,这可能是通过宏内核自行进行架构的更迭,也可能是某个设计完善的微内核取而代之。

我提一些点,关于当前微内核对Linux的优势:

1.微内核更符合现代软件工程思想。

现代软件工程思想产生的益处都适用于微内核,可以更合理的设计,可以更容易理解,我说当前Linux内核的的复杂是非常严重且头疼的事我想没人反对,这似乎也是Linux内核BUG频出的一个重要原因。

2.微内核更稳定

将驱动放到用户态,将内核变为一个机制性程序,微内核可以做到匪夷所思的小,如5000行。每一个驱动的崩溃都不会引起系统的整体崩溃,这是一个多么诱人的特性,相比较Linux。。。

3.微内核伸缩性更强

Linux的伸缩性同样很强,所以我也不能非常理直气壮地强调这一优势,但是我认为这是需要提出的,毕竟微内核可以轻而易举的在大量硬件平台移植(当然,移植后也是没有驱动的,不过大多都可以有个串口嘛)。

微内核的优势的前两条我认为是非常重要的支柱性优势,这是我坚挺微内核的原因。

于是为什么微内核从未在主流应用中有一片天地?

微内核大多用在一些嵌入式、或是TrustZone、hypervisor或其他我不知道的场合。没有基于微内核的驱动、应用是微内核不能广泛使用的原因吗?我认为这只是一言以蔽之的借口而已。所谓没有驱动,没有应用,最重要的原因是因为写驱动、写应用的人不看好它的未来;我认为开发者都是聪明的,是最能评估这个平台的生命力的。

我坚定地认为微内核架构将会取代宏内核,所以我认真的分析了微内核为什么不能与宏内核媲美,我找到了3点,从内核技术的角度找到3点,我所谓从内核技术的角度指的是内核的效率。我看Linux的代码,如果将Linux内核将内核与驱动割裂开来看,Linux真的很少,Linux内核本身活着的线程只有3个,Linux在执行initcall外设驱动相关的代码之前,流程非常短暂。虽然Linux内核很庞大,但是Linux作为一个内核,给计算机带来的开销真的是少的可怜。同时Linux又提供了极度高效率的系统调用、驱动模型,在Linux,一切一切都是为了效率。

所以,我提出微内核对Linux的劣势,只有一个:

1.效率。

有人可能觉着我要开始老调重弹,将几百年前微内核基于IPC的失败尝试拿出来鞭挞一遍。

本文对几百年前微内核的鞭挞截止到上一句。

微内核在很多年来有了非常优秀的进化,我认真的阅读过seL4的白皮书,分析了它的各个系统调用。

也学习过Fiasco,也去看了几遍zircon的系统调用、设计白皮书等等。当然,还是看的不够多的,毕竟有些是闭源的。

这一系列的L4微内核或L4.1代微内核,从各个方面我都无法批评其设计的不合理之处,都是考虑的非常周到,对于安全、进程间通讯速度等微内核的劣势有着非常完备的考虑,针锋相对的解决了问题。

可惜,还是效率不足。

如何效率不足?如何就有效率?

所谓效率,并不是通过寄存器实现短消息就叫做效率,更不是什么endpoint之流;当然,这都是极其优秀的设计。但是这并没有得到最终的效率。所谓效率最直接的体现就是我打开一个文件可以飞快的打开,我打开很多文件,也能飞速的打开;我频繁的来来回回读写文件,系统依旧反应流畅。对于一个内核,效率是用最小的开销实现功能以承载更大的负载和用最快的响应速度实现操作。内核的设计面向进程,进程的业务、功能;能以更小的开销承载更大更多的进程,能够更快速的完成进程操作(包括处理进程所需的外部设备提供相关逻辑)。

当前的阶段的微内核优秀吗?

优秀,这一答案我是深以为然的。

当前阶段的微内核解决了效率问题吗?

没有。

发布了37 篇原创文章 · 获赞 4 · 访问量 3385
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章