移动操作系统带来差异化设计
移动设备市场一直以来都非常火爆,特别是具有苹果的iPhone和Verizon Wireless公司的Droid的智能手机市场。这些平台上的硬件技术令人印象深刻,但事实上,围绕系统的软件和服务基础架构使得这些产品实现了差异化。
大量iPhone应用程序显然说明了一个好的开发平台能使应用程序的普及非常容易。iPhone也许很流行,但它的软件平台是为有限数量的硬件平台设计的,并且全部是苹果公司的平台。Symbian操作系统和框架用于与iPhone相同的领域,但Symbian可以用于更广泛的平台,包括基于ARM的智能手机。Symbian操作系统现在是由Symbian Foundation负责的一个开源项目。
Android与这些操作系统框架非常类似,它的最初应用目标也是智能手机。这也就不奇怪它的赞助商是Open Handset了。Android与众不同的一点是,很多人将它用于智能手机以外的平台。如果开发人员想充分发挥Android的优势,那么他们就需要了解它的工作原理。为了与Android进行比较,先看看能够满足这一领域中硬件要求的另外两种平台。
最流行的平台之一是微软的Windows CE,在智能手机市场被称为Windows Mobile。但它的基本框架架构与微软的台式机和服务器平台上的是一样的,包括最新的台式机版本Windows 7。
另外一个平台是就像Android一样基于Linux的Moblin,它适用于使用Intel Atom处理器的上网本和移动互联网设备(MID)。从这个角度讲,Moblin与苹果和Symbian解决方案非常相似。
所有这些平台都很独特,但它们共享许多类型的公共组件。例如,Android和微软的.NET框架都是基于虚拟机(VM)技术创建的。
Android的优势
“Android在Linux基础上削繁就简,向开发人员提供源自谷歌的易用和著名环境用于图形化用户界面(GUI)创建,使它们专注于针对远不止手机的嵌入式系统开发有竞争力的解决方案。”德州仪器(TI)公司开放平台技术专家Jason Kridner表示,“这使得Android成为一种强大的操作系统,能用于基于OMAP3处理器的设计,例如TI的OMAP35x*估模块或非常流行并且拥有众多支持者的BeagleBoard,可以帮助开源创新公司建立具有高性能和低功耗且基于ARM Cortex-A8的小型低成本系统。”
图1:Android应用程序是用Java编写的,运行在Dalvik虚拟机(DVM)上。
基于Linux的Android使用固有设备驱动程序向Android基本框架提供整套服务。固有应用程序可以运行在这个系统上,并且可以访问这些服务,但大多数应用程序将用Java编写,目标是Dalvik VM(图1)。这些应用程序还能充分发挥应用程序框架的优势,提供Verizon Wireless Droid用户熟悉的用户界面。Droid就是一款Android智能手机 (图2)。
图2:Verizon Wireless的Droid手机采用Android 2.0,有许多亮点。
Dalvik VM(DVM)运行Dalvik可执行(.dex)文件。这些编译过的Java应用程序类似Sun Java虚拟机(JVM)使用的类文件。从概念上讲,DVM和JVM的应用层几乎没有区别。但从架构上讲,基于寄存器的DVM和基于堆栈的JVM有很大的差异。
DVM和JVM都使用VM代码模型。然而,DVM使用基于寄存器的操作码,相当于大多数目标平台已经执行的基于寄存器的字节码指令。DVM包括了许多架构,如ARM和MIPS架构以及英特尔(Intel)、AMD和威盛的x86兼容架构。
谷歌开发Android和选用DVM的原因有几个,首先大多数JVM具有许可问题;其次DVM在内存使用和执行基于寄存器的机器方面更加高效,而且在执行多个DVM实例时也被认为更加高效。应用程序有自己的实例,因此多个有效应用程序要求多个DVM实例。与大多数Java实现一样,DVM有一个自动垃圾收集器。
有趣的是要看到这些优势在长期运行时是否能保持,特别是随着目标上的内存容量和处理器性能的不断提高。在这个方面,DVM不支持及时(just-in-time)编译。另一方面,dex文件在加载进系统时可以针对硬件进行优化。
如上所述,Android针对自己提供的服务有自己的Java类,这些类与Sun公司的Java SE或Java ME提供的类服务类型相当,但不完全一致。Android不支持Sun风格平台常用的图形化AWT和Swing库。相反,Android有它自己的用户界面类,包括对OpenGL的支持。类的基集可以在包括像蓝牙和电话这种接口的智能手机平台上找到,但在其它嵌入式Android平台上可能不作要求。
Android软件开发套件(SDK)可以从Android网站上免费下载,并且可以和许多开发工具一起使用。Android开发工具(ADT)Eclipse插件允许开发人员使用开源Eclipse平台开发Android应用程序,包括基于Eclipse的大量第三方工具集,如Mentor Graphics的ESD。
Mentor Graphics还提供Android支持服务。这也带来了许多Android开发人员忽视的另外一个问题:Android平台支持。应用软件开发人员需要Android SDK。将Android用于新的平台是另外一个问题。Android确实运行在Linux上,但这将带来同样的支持问题。这正是像MontaVista、Lynuxworks和Mentor Graphics等操作系统供应商做大部分Linux移植的原因。
管理和支持更改是一项艰巨的工作,对运行在Linux上的Android来说也是如此。目前Android的更改和增强源自谷歌公司,今后也许会有改变,但仍意味着任*版本都需要对定制、缺陷修复和其它修改进行集成和测试。
适合Atom使用的Moblin
图3:基于Linux的Moblin主要用于上网本和移动互联网设备(MID)。
Moblin和Intel的Atom几乎形影不离。Moblin建立在x86 Linux堆栈基础之上,增加了一个用户界面和设计用于简化与系统交互的应用程序(图3)。它的显示功能有益于触摸屏,并以中等尺寸的屏幕为主要应用对象,比如在上网本、MID和汽车仪表台等目标平台上使用的屏幕(图4)。
图4:Moblin界面设计用于简化用户交互和解决触摸界面。
与台式机和全尺寸笔记本相比,Moblin的中等大小应用对象通常使用较小的屏幕和较低功耗并且处理能力较有限的处理器,因此电源管理是关键。应用程序需要有良好的响应能力,而且要能充分利用较有限的资源。
应用程序和应用服务是固有的Linux应用,允许使用已有的Linux开发成果。QT和GTK GUI库已被用来搭建主要的Linux GUI、Gnome和KDE。这意味着大多数现有应用程序无需重大修改就能移植到Moblin上。当然,从Gnome或KDE这样的通用视窗环境转移到像Moblin这样有更多限制的框架极具挑战性,具体还要取决于应用程序及其架构。Moblin支持Linux上使用的众多图形界面,包括X Windows和OpenGL。
Moblin带来的不止是一个用户界面和渲染库。它的通信子系统提供电话、蜂窝和VoIP之类的IP(互联网协议)服务。基于位置的服务、设备同步和内容管理只是可供Moblin应用程序使用的众多库中的一些。例如,mojito提供社区网页服务支持。多媒体支持包括用于管理多媒体元数据的bickley和用于管理多媒体播放列表的bognor-regis。
基于库服务方法考虑,C是选用的编程语言。C++同样可以使用,但Linux支持每种主流的编程语言,Moblin也如此。针对核心Moblin应用编程接口(API)的绑定产品适合像Ruby和Python这样的语言。
Intel收购风河对Moblin来说不应感到太惊讶。风河Linux和相关开发工具与Moblin有极好的匹配。在这个收购事件发生前,风河公司已经在与Intel和Moblin一起开展工作。
Moblin不是只能用于Atom或风河产品,它还能用于其它Linux平台,如Ubuntu和Xandros。Ubuntu Moblin Remix加入了Canonical公司的Ubuntu Netbook Remix。戴尔公司将提供Ubuntu Moblin Remix,用于采用Atom处理器的戴尔Inspiron Mini 10v上网本。
Moblin吸收了Linux最新的增强性能,它的快速启动时间是一大特色,此外还支持触摸屏和手势等特性。随着新的x86处理器继续降低功耗要求,手机将成为Moblin的应用目标。Moblin还得到了Intel以外的一些大公司的支持,使之成为这一领域中所用平台的重要组成部分。
其它Linux系统
x86统治着上网本市场,但MID和智能本可以使用更多的平台,包括基于ARM和MIPS架构的平台。Windows CE是用于这些架构的一种可行平台,虽然Debian Linux和诸如Ubuntu等变种可能主导这一领域。
像Ubuntu、Xandros和ThunderSoft等基于Debian的Linux版本的许多开发人员已经在展开合作。这样,很可能相似的平台出现在使用相同Linux内核的各种产品上,并具有相似的运行时库补充。
目前这一领域缺少的是各个系统提供商之间一致的开发和描述框架。大多数供应商已经在与谷歌合作开发Android,但在非电话平台上的Android是否能及时推出仍有待观察。更可能的情景是传统的Debian实现,再以硬件供应商提供的应用程序作为补充。
谷歌发布了谷歌Chrome操作系统。这种操作系统以目前运行在所有主要平台上的Chrome浏览器为核心,是另一种基于Linux的平台,但也是一个最小系统,其中浏览器将提供应用程序框架。这种方法在得到部署前仍有大量的不确定性。系统设计的关键因素包括速度、简单性和安全性。启动网页浏览应该在几秒种内完成。
采用这种方法仍需要解决许多重要问题,特别是在自由操作方面。当3G或Wi-Fi连接可用时,基于网页的应用程序没什么问题,但在这里讨论的所有其它平台上最常见的独立应用程序可能有问题。一些最初的方法采用双启动技术,将全套应用程序放在更传统的Linux或Windows实现上。
微软的移动解决方案
图5:.NET框架运行在所有Windows平台上,为.NET编程人员提供一致的环境。
Windows Embedded CE是微软移动解决方案的核心。就像微软的其它Windows解决方案一样,Windows CE采用了.NET架构(图5)。编写出能够在不同Windows平台的任意一种上运行的程序应该没什么问题,但.NET框架允许应用程序运行在几乎任何Windows操作系统上,其中包括了像Windows Mobile这样的平台,这是运行在诸如HTC Touch 2等多种智能手机上的一种Windows CE版本(图6)。
图6:HTC Touch2只是基于Windows Mobile的众多成功手机中的一种。
.NET框架基于类似Dalvik和JVM这样的VM架构。微软的公共语言运行时(CLR)能够在类似JVM的虚拟栈机器中执行公共中间语言(CIL)字节代码。
公共语言基础架构(CLI)是一种开放的ECMA-335和ISO/IEC 23271规范,它描述了CIL、CLR运行时环境以及公共类系统(CTS)和运行时汇编。Mono和DotGNU Portable.NET是CLI的两种开源实现,运行在许多非Windows平台上,如Linux。
JVM目前还支持Java以外的其它编程语言,但Java是主要目标。然而,.NET总是有意作为多语言主机。.NET框架支持多种来源的许多编程语言。从Cobol到F#(一种功能性编程语言)的每种语言都将运行在.NET框架上。
CLI可以被实现为一种运行CIL代码的解释器。但像Java一样,通过将应用程序转换成固有代码,CIL JIT编译器可以带来更高的性能。这种方法具有将优化功能移动到JIT的优势。提前(AOT)编译到固有代码也是可以的。这种方法将可执行代码锁定到当前平台,但消除了JIT要求的启动延时。
编译器仍需要产生高效的CIL代码,但它们不必关注针对执行优化目标硬件。垃圾收集是问题的一部分。C#有指针类型,但这些变量只能指向数值类型和数组。参考变量是用C#等语言跟踪数据的正确方法。CIL代码也被认为是在CLR内运行的“管理型代码”,提供诸如线程和内存管理等服务。应用程序必须在CLR的安全范畴内运行。可以拥有受管理的固有代码。Visual C++.NET是一种可以产生CIL管理型和固有无管理代码的语言环境。
管理型代码的优势是可以给编程人员提供便利的更高层提取。这种方法极大地增强了安全性。用不同编程语言编写的应用程序间的交互也更加容易。CTS使这一切成为可能。
VM和低端运行时间是性能和效率的关键,但.NET框架的类库尤其重要。在每个.NET框架平台中可以找到大多数基础类库。
.NET Mirco框架是例外,它直接运行在物理芯片(裸金属)上,没有Windows操作系统。这种框架也是模块化的,允许最小的外形尺寸。.NET Micro框架的应用目标是Android和Moblin等平台之下的低端产品,常见于过程控制等设备中的微控制器上。
最新版的.NET Micro框架是使用Apache许可的一种开源产品。CLI只实现为解释器,但支持.NET框架固有代码接口。.NET Micro框架可能会应用到受更高端.NET框架设备(如蜂窝电话)控制的设备中。拥有一个公共编程平台迟早派得上用场。典型的.NET框架环境包括比.NET Micro框架多得多的类库。图形、窗体和先进的数据库库很常见。在Windows Mobile平台中还能见到用于电话和通信的类。
Mono提供包括基础类在内的许多.NET框架类库,这样就允许编写出在Mono或.NET框架上运行的应用程序。对于开发人员来说问题在于,充分利用.NET框架的真正优势意味着使用像Windows Communication Foundation (WCF) 和Windows Workflow Foundation (WF)这样的基集之上的类。应用程序类库和诸如智能手机需要的服务将被发现运行Windows Mobile。
.NET框架和Windows在这方面是如此形影不离以致于它们无法分开。使用Windows界面(如COM)的固有代码应用程序可以与基于.NET框架的应用程序共存,但后者有很大的开发工作量,也是为基于Windows的移动设备开发应用程序的地方。
微软的Visual Studio一直是充分利用.NET框架的应用程序的主要开发平台。大多数.NET编程语言使用Visual Studio集成开发环境。目前有多种调试器,如CLR调试器。Visual Studio支持其它调试工具,包括支持甚至是混合应用环境中的无管理应用程序。
总之,.NET框架是一种可扩展和令人印象深刻的平台,达到甚至超过大多数竞争产品的性能。它能处理先进的用户界面,支持多点触摸界面。Windows 7也采用.NET框架,因此诸如Intel的Atom这样的平台自然适合。
iPhone应用程序店、Android市场和针对移动应用的Windows市场将是相应移动设备取得成功的主要因素。这些设备上的基础框架需要成为一个好的开发目标才能取得成功。带.NET框架的Windows和包括Android和Moblin在内的各种Linux版本将在新的硬件平台上继续收获成功。在拥有iPhone和Symbian的智能手机市场上它们仍有很大的竞争力,但这只是嵌入式领域的一部分。
评论
查看更多