13919049954

安卓 Dalvik虚拟机

作者:金城在线 日期:2018/1/22 10:02:33 人气:39

Shell是什么?Shell是每个OS上,最终用户直接操作的界面(除了App内的操作界面)。在Windows上,Shell就是Explorer。在GNU/Linux上,是Gnome/KDE。在OSX上是Aqua。以上这些都是GUI,也就是图形操作界面。除此之外还有纯文本的CLI,也就是命令行界面。MS/DOS就只有CLI,*nix上的对应物是各种sh(其他答案里有提到tty,但我认为tty只是提供sh的装置)。绝大多数图形操作系统上都有模拟CLI的装置,如cmd(Windows)等。OS可能提供也可能不提供切换Shell的能力,因为它影响整个用户交互流程,通常是不同设计哲学的产物,切换的结果很可能是为了达到相同的目的会需要截然不同的操作。而Android作为一个GNU/Linux衍生产品(它离其他Linux发行版实在太远了,已经很难说是一个distribution),它上面对应Shell的是Launcher启动器。去Google Play搜索这个关键字装个Launcher可以体验一下改变Shell的感觉,比如最近听说的老人桌面。

而dalvik,或者泛化一点说,无论哪种语言的VM(注意不要跟模拟硬件的VM混淆),都是软件开发者才需要去面对的东西。VM的目的是封装其下层,包括OS在内的细节,使上层开发者可以在VM提供的API上开发而不受VM所在的底层平台变迁的影响。有国内公司开发了dalvik(和绝大多数Framework)的Windows版,理论上说所有没有用到NDK的Android app都将可以直接在windows上跑(当然实践上。。。嗯你懂的)。VM跟Shell的设计用途毫无关系,是程序员最喜欢的「抽象」概念的一个具体体现(当然,OS本身也是这么一种抽象)。回到题主的问题1,VM一般不直接与硬件打交道,而是通过其下层的具体OS进行,原因是一般VM都要在OS上跑,而OS kernel处于安全等各种原因,一般不允许上层的任何程序包括VM在内直接访问硬件;但也有直接在裸机(bare metal)上跑的VM


问题2,registry-based和stack-based是VM设计的两大派别。这里的寄存器跟CPU上的寄存器不是一个东西,虽然实现上有时会直接利用CPU的。

3,厂商内核这个东西……怎么说呢。绝大多数android机器的内核,据我所知都不是在主线上维护的。原因还是要从历史说起。ARM硬件上自古以来(。。。)就没有BIOS的对应物,自然也没有类似ACPI表这种记录硬件细节的数据结构,再加上ARM的几种总线也都没有类似PCI的枚举总线上部件的能力,这导致内核里必须对板级细节硬编码(通过编译选项区分),这意味着即使同一个厂商的不同SOC,在片上设备稍有不同时也无法使用同一个编译好的内核。iPhone引起ARM大爆发后,大量SOC厂商往linux核心开发组提交代码,代码里绝大部分是在描述“该SOC有几种总线,某总线上有xx设备“之类细节。直到2011年linus在arm linux邮件组发飙,喊出「this whole ARM thing is a f*cking pain in the ass」,arm社区才临时抱佛脚,捡起之前Open Firmware定义的device tree结构,让这种细节得以统一的格式(dtb字节码)在内核启动后再加载动态处理。但当时已经有很多公司开发了自己的类似结构,结果因为这些结构本质上跟device tree是一样的,而不能被linux社区接受,否则依存于这些结构的linux驱动就得兼容所有这些结构,结果将是代码量以几何级数增长。典型比如淘宝上常见的各种电视棒、开发板,开源的基本上都会给你一个他们自己维护的内核,通常是比较老的比如3.0、3.4(个别甚至还有2.6的),因为修改太多又不是以patchset维护,想移植到主流内核上基本没有指望。不过从好的方面看,高通/nvidia都已经整合进了主流内核,国产SoC商的基本上也都有民间开发组在努力,总的前景还是乐观的,近几年别指望太多就行。

4,看厂商。android手机开发商基本上下层(HAL、驱动)完全依赖SoC芯片供货商,而上层是否修改Launcher就是自己的选择了。出于差异化的要求,多半会改,个别还会改得很大以致难以看出原生系统的痕迹,比如Kindle Fire/小米。


            金城在线专注网站、软件、APP、微信公众平台、小程序、抖音、头条等开发推广,如果您有这方面的需求或者不同的观点,欢迎联系交流。

    官方微信

    本文网址:http://lz.net.cn/zixunzhongxin/672.html
    读完这篇文章后,您心情如何?
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    更多>>网友评论
    发表评论