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/小米。

提供最优质的资源集合

立即查看 了解详情