当前位置:   article > 正文

从.Net到Android之八:Android宏内核和微内核_安卓 monolithic kernel

安卓 monolithic kernel

Android刚学了点皮毛,突然中美之间发生贸易战争,突然Google被一纸禁令框住,然后我们就等待着鸿蒙系统的崛起。可能后面就要开始写《从.Net到鸿蒙》系列文章了。

安卓是基于Linux开发出来的,而Linux是“宏内核”。有些新闻介绍说,华为的鸿蒙系统是基于“微内核”的,也就是说并非基于Linux,和安卓有本质区别。这说的是什么意思?

宏内核(Monolithic kernel)是说,操作系统的核心代码都是以特权模式运行在一块核心内存空间(kernel space)中的。这些核心代码虽然分模块各做各的事,但算是一个团伙,互相紧密关联,一荣俱荣,代码规模比较大,很难修改成其它类型的操作系统。典型的就是Linux代码,模块不少,核心代码已经很长了,也不太好拆开来,而是精心安排让各模块共同运作好。要开发,就得按照它的套路来,不好自己灵活安排。有时一个设备,要不了太多功能,但是整个宏内核都得放上来,想剪裁就很麻烦。

而微内核(Micro kernel),只提供操作系统最基本的少数核心功能,是精简版本。核心模块互相独立,运行提供服务时有自己的内存空间,和用户进程一样运行,不是特权模式。微内核就很灵活了,要什么服务就把相关的模块放上来,互相独立不影响,不用太顾虑配合问题。这样就有很好的扩展性。

安卓是基于Linux的,是宏内核,由一堆底层特权模式的核心代码紧密组合在一起。这个架构,它的灵活性是不够的。面对各种硬件配置的手机,或者平板、电视之类的系统,它都是这一个架构,怎么适应?于是就搞出一个叫“虚拟机”的东西,假设大家都是在虚拟机上运行,代码是跨平台的,这么幻想着开发。每一个安卓应用,都在操作系统底层对应着一个虚拟机实例,由这个虚拟机来伺候运行应用程序的代码。

安卓程序开发者写的代码,其实是针对虚拟机的,所有机型都是一样的程序文件。但是不同机型,底层的机器代码其实不一样,如CPU类型不同。这样,虽然开发者能够一套程序所有安卓机都能跑(就是常见的APK安装文件),但是中间就需要经过虚拟机的翻译。

在早期版本的安卓系统中,这个虚拟机甚至是在实时解释翻译应用程序的代码,而且每次运行都要解释一次。执行时碰到一段代码,就解释翻译一段,变成机器码交给底层执行。不能整个应用程序一次性全翻译完,这样会卡。应用需要点一下就立刻能进去,等用户真开始操作了再把相关代码调上来解释翻译。

后来安卓进步了,在第一次安装APK程序时,直接一次性全翻成机器码,效率就得到了提高。虽然安装过程会慢一点,程序占用空间也大了一点,但每次点开运行时都好多了。

程序如果能直接针对底层机器硬件优化,性能可以提升非常多,就如苹果机器那样。华为方舟编译器也是这样,直接生成底层高效机器码。但是通用的安卓平台真不好办,只能对虚拟机搞点通用的优化把APK文件弄好点,然后虚拟机把APK翻译成机器码时也搞些通用的优化。这种分段通用优化的办法不可能做得多好,比APP直接针机器码优化要差不少。

有些APP开发者是可以绕过安卓,直接对某一机型优化。例如腾讯的王者荣耀,检测到用户是OPPO的机子,OPPO又给腾讯交了足够的“特别优化费”,就调用经过特别精心优化的高效机器码。但是这个过程就很麻烦,一般开发者搞不了,这也说明安卓要高效支持多种机型很困难。

长久以来,安卓系统就被诟病不如苹果iOS性能好,原因也被业界人士分析清楚了。苹果系统优势的基础是封闭性,不需要考虑兼容,所以可以自己控制,优化尽情地做。例如苹果APP就是直接编译成高效的机器码,在苹果自己开发的CPU如A12上执行,编译器优化可以做得很好。苹果还可以对开发者进行严格的管理,提供丰富的高效率底层接口给开发者,不许开发者使用低效的操作拖累整机效果。

安卓系统方便各种手机厂商开发,兼容做得好,所以占领了市场。但是既然要考虑兼容,管理就不可能太严厉,不可避免会带来效率降低。例如内存管理,各种安卓机各种APP都要能跑,内存操作就会比较零碎,一会分配一会释放,最后内存空间就碎片化了。到一定程度,没有可用的大块内存了,安卓系统就要运行一个内存整理程序把碎片化的内存合并成大块。这时不管机器上在运行什么程序,都会暂停一段时间,等待内存整理完毕,用户就会发现很厌烦又难以理解的机器卡顿了。增大内存也不一定能解决问题,有时安卓机6G内存还不如苹果机3G内存流畅。

这些毛病谷歌其实知道,安卓系统在不断升级,人们对安卓系统慢慢觉得能够接受了。但是就怕比较,和苹果机比起来顺滑流畅的感觉总是差一些,原理上就比不了。就算是安卓机阵营内部也在比较,想要更好的性能。安卓又要兼容,谷歌要协调使用者的利益,一些改进不能只针对某些机型。安卓升级改进,或者APP开发时最麻烦一点就是“适配”,各种机型多得很,这些机子看着弄好了,那些机又不行了。人们已经得出结论了,在现有这个兼容框架下,安卓的固有弱点不好改,会永远受束缚。例如优化就不可能做到极致。

华为通过引入方舟编译器已经证明了,用编译器取代安卓系统的中间环节,从APP代码到机器硬件执行一步到位,直接生成高效机器码,能一举取得高达60%的性能提升。这就是说,从代码到机器是可以直接对话的,不需要安卓在中间插手。也就是说,单独一个安卓系统机器,优化潜力是很大的。只是面对的机器种类太多,兼容适配太麻烦,没法统一搞。这其实就蕴含着安卓阵营崩溃解体的力量。既然捆在一起潜力不大了,不如分开来各过各的,各自发展自己的分叉,不需要谷歌协调了。

谷歌也知道这个情况,在开发Fuchsia操作系统,试图从底层重新出发,解决安卓系统的问题。例如Fuchsia不要Linux的宏内核了,改用灵活的微内核。谷歌的计划,是时机成熟时用Fuchsia取代安卓系统,手机、平板等各种机器都包括。这听上去和鸿蒙系统有些象。

但是鸿蒙系统看样子会比Fuchsia更早大规模投入市场。还是那个问题,谷歌不能自己搞分裂,还想维持表面上的一统天下,开发时要考虑的事情就多。而华为开发鸿蒙时不怕和安卓分家,可以大胆操作。这也是创新时常见局面,旧的市场大佬利益太多不敢革自己的命,新入场的却能放手大干一场。

理论上来说,鸿蒙基于微内核,比Linux要灵活,对机器进行优化组合更有空间。而编译器对于操作系统效率是非常关键的,华为会用方舟编译器积累的技术,甩开安卓虚拟机的限制,直接对各类机器进行高效编译。微内核架构有利于在这个方向进行努力,如一个关键组件并不是象Linux那样已经定好了代码写死了,而是在不同机型由高效编译器分别准备好。

这种开发非常有难度,需要对操作系统底层有深入的了解。但只要投入足够的人力去做,原理上有把握做出来一个开放的高效操作系统。其实这一步并不是最关键的,最关键的是应用程序开发商要配合在新系统上编译,而且不是随便编译能用就行,要深度优化共建生态。由于美国无理对华为禁运,已经帮华为解决了这个最大的问题,中国APP的开发者都会积极与华为配合。如果没有谷歌对华为禁用安卓这事,华为独自推出一个新操作系统,要邀请别的大公司配合会很麻烦,中国别的大公司可能会各有算盘,会不会深度配合优化不好说。作为开放的操作系统,最好其它厂商也来试用。看来在美国倒逼和中国市场舆论影响下,中国手机厂商也会积极地参与进来。

从以上的技术分析可知,安卓阵营崩溃解体是有深刻的技术背景的。但是由于开发新系统的各种麻烦,真要动手促成安卓解体,也没那么容易开始。因为可能白费钱没有成果,光自己努力不行,没有生态就不行。华为如果不是被逼,也许就不推出了。

美国人悍然对中国发动了技术战争,自以为能用一纸禁令绝杀中国最优秀的高科技企业。但是,华为公司以超强的战略眼光和执行力作好了准备,中国IT公司也经过多年努力建立了自主的互联网生态。以此为基础,中国公司从安卓开放系统的固有弊端入手,推出新的操作系统,对美国发动反击。虽然这是为了生存,也确有可能沉重打击美国的互联网霸权。

摘抄自:安卓阵营面临崩溃解体危机

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/324317
推荐阅读
相关标签
  

闽ICP备14008679号