澎湃Logo
下载客户端

登录

  • +1

鸿蒙OS的微内核到底是什么?

2019-08-19 15:35
来源:澎湃新闻·澎湃号·湃客
字号

原创:品玩知科技
微内核一直是学界的宠儿,并不是业界的宠儿。
2019年8月9日,华为在其全球开发者大会上,正式发布了全新的自有系统 HarmonyOS 鸿蒙:基于微内核的面向全场景的分布式操作系统。余承东在现场表示, HarmonyOS 鸿蒙拥有分布架构、内核安全、生态共享、天生流畅四大优势。

        知乎答主@bacon xu 对全球开发者大会提到的微内核做了一个解答,从另一方面认识一个不同的鸿蒙OS:

        在经过好几代发展之后,微内核终于发展到了seL4,它成为了人类历史上第一个用形式化证明的操作系统。

        简单点说,用数学方法从逻辑的角度可以证明这个操作系统是 Bug Free没有 Bug的。但Linux就不可以,因为它的内核太复杂,没有办法证明,超出了人类人力所及范围。正所谓成也萧何,败也萧何。微内核的简单,成就了它的高安全。

        但是它的核心只保留了基本的资源管理:处理器的时间、内存、通讯、中断等。所有其他功能统统都扔给了应用层管理,从而以服务的形式去提供功能。服务之间采用IPC通讯(进程间通讯)。

        对比一下seL4的架构图和Linux的架构图,不难发现,Linux这种宏内核什么都有,seL4的东西好像都被排在用户空间里。也正因为这个原因,seL4的核心非常小,不到9000行C代码。

▲L4系统的架构
▲Linux的宏内核架构

        对于微内核,由于用MMU(内存管理单元)对进程空间(内存区域)做了隔离保护,没有授权的进程是无法访问其他进程的空间。这就阻止了恶意程序对其他进程数据的窃取。

        进程是一个操作系统的抽象概念。简单的说:每个进程运行一段用户编写的代码,从这个代码看过去,它好像拥有自己的CPU和所有的一切资源(内存、设备等)。当然我们都知道,这是操作系统给它造成的假象。当进程需要额外的资源时,得向操作系统申请。和别的进程通讯时,也得和操作系统申请。

        这个逻辑看起来什么繁琐,但好处是不言而喻的:

        没权限,什么都别想干。

        想干坏事?把你的资源全部收回!这个场景可以脑补一下用Windows Ctrl+Alt+del或者用Linux下的 Kill -9杀掉没有响应的程序。

        微内核连驱动都可以是进程的。也就说,只有内核不可以重启,其他的组件统统可以重启。但实际上它是最后防线,实践中并不会用到。因为系统不可能带着有重启Bug的驱动运行,虽然不会造成系统奔溃,但用户可不愿意买账。但对于写驱动的程序员这是一个好消息,至少不太容易把内核搞死,可以反复调试找问题。

        在微内核的管理下,因为MMU的封锁过于严格,用户进程要存储一个东西,必须请求内核,内核把数据丢给文件系统的进程处理。早期的办法,只得把数据从用户进程搬到文件系统进程。这个过程非常耗时,而且不幸的是,还没什么好办法突破MMU的保护。

        这是导致微内核性能低下的主要原因:CPU不支持微内核特性——微内核承受着性能上的惩罚——微内核不在主流的操作系统框架中——CPU们不会响应来自微内核的需求——CPU 不支持微内核特性。形成了一个恶性循环。

        反观Linux内核,如果驱动不好,搞死内核的事情是常有的事。但因为文件系统都在内核里,内核可以直接访问用户空间的数据。而Linux采用的是系统调用,非IPC的方法,速度较之IPC要快。当然,Linux下也有IPC,但不幸的是,IPC在Linux下,性能也不咋地。不过Linux并不依赖IPC通讯,微内核却十分依赖。

        因为IPC这个脚后跟的原因,微内核一直被Linux这种宏内核吊打。学界想了很多办法,L4提出了一个Fast IPC的办法,只要你IPC通讯没数据,可以借用CPU核心寄存器的办法传递消息,速度大大加快。也有人想到了dIPC, direct IPC。用标签内存的办法进行隔离,传递数据,无需通过内核空间。大大加快了通讯速度。但标签内存不符合现在计算机体系的架构,实践中,采用的可能性较小。

        上交的陈海波教授团队,19年想了两个办法进行IPC的加速。一个是XPC,一个是Skybridge。其中XPC是硬件,增加了一点点CPU硬件修改,使得IPC通讯无需内核的参与,也无需数据拷贝;Skybridge,采用的是双内核,一个RootKernel,类似type-1的虚化,专门负责IPC数据通讯,上层的Kernel为微内核。这样IPC绕过了MMU 机制,也不会对微内核之上的MMU保护机制产生破坏。在IPC通讯的时候,无内核参与,无需拷贝。

再来看看Android的架构。Android因为采用了非常多的服务,不同于普通的应用,非常依赖于IPC通讯。为了提高速度,开发出了 IPC Binder Drivers 来加速 Linux下的IPC通讯。但效果不是太理想。XPC对Binder IPC的加速只有50多倍。
▲17年的dIPC也是吊打Linux的 IPC
        
SkyBridge和dIPC处于同一性能级别,XPC则更高。从论文上看,SkyBridge更实用一些,未来XPC还需要继续依赖于硬件的革新。

        目前市场上依然是宏内核的天下,如Linux、Unix、Windows等,微内核商业上较为有名气的可算是QNX。好在巨头们都看到了微内核的进步,Google搞了Fuchsia OS (内核 Zircon),华为有了鸿蒙,苹果MAC和IOS也号称微内核,微软搞混合内核。一时间好不热闹。

        个人坚信微内核是未来的方向。微内核不到1万行的C代码,只要处理器支持MMU,就可以跑出微内核的全特性。服务也是可扩展的,依据不同的应用使用不同的服务就好,类似于USB热拔插。如同现在电脑没有光驱、硬盘、打印机,就用USB扩展。这也决定着微内核可以在各种场景下见到它的身影。手机上面可以弄一个Android Binder,堆上相关的库就可以运行Android;服务器上面弄一个Type-2的虚化或者容器,就可以运行各种各样的服务。嵌入式的体积不成问题,应用更不是问题。尤其是华为手握CPU的设计和操作系统的设计,想做一个带硬件优化的高性能系统并非难事。此举将会引领学界和产业界对微内核的一个小高潮。

        华为这次的发力,真正的用一种操作系统内核统一了大多数应用场景。配上他们自家的开发工具,相信应该是很好用的。对于华为的开源,还有鸿蒙的未来发展、生态都只是时间问题。

        而推动的微内核发展,则更是一个开启新纪元的事。

        本文作者:知乎答主@bacon xu丨操作系统行业从业者

        “品玩知科技”系知乎和 PingWest 联合出品的精品栏目,知科技是知乎科技数码领域的官方机构号。针对科技热点新闻和好玩儿的数码体验,第一时间为用户带来可信赖的解读。

    本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。

    +1
    收藏
    我要举报
            查看更多

            扫码下载澎湃新闻客户端

            沪ICP备14003370号

            沪公网安备31010602000299号

            互联网新闻信息服务许可证:31120170006

            增值电信业务经营许可证:沪B2-2017116

            © 2014-2024 上海东方报业有限公司

            反馈