跨环境通信框架转让专利

申请号 : CN201180057951.7

文献号 : CN103262057B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : L.C.贝内德克O.金希桑C.翰希拉A.拉塞罗

申请人 : Z124

摘要 :

一种具有在没有虚拟化的情况下在共享内核上并发且独立运行的移动操作系统和桌面操作系统的移动计算设备。所述移动操作系统提供适合于移动环境的所述移动计算设备的用户体验。当所述移动计算设备对接到第二终端环境时,所述桌面操作系统提供完整的桌面用户体验。所述桌面操作系统的应用通过跨环境通信框架与所述移动操作系统的应用和服务通信。所述跨环境通信框架可以包括允许所述移动操作系统中的进程和所述桌面操作系统中的进程以线程安全的方式共享存储器的到远程对象的接口。所述移动计算设备可以是在修改后的Android内核上运行Android移动操作系统以及完整的桌面Linux发行版的智能电话。

权利要求 :

1.一种用于经由进程间通信通道在移动操作系统的服务和桌面操作系统的应用之间通信的方法,所述方法包括:由所述桌面操作系统的应用请求绑定到所述移动操作系统的服务的远程接口;

由所述桌面操作系统的应用从所述移动操作系统的服务接收远程对象,响应于所述桌面操作系统的请求而由所述移动操作系统的服务来实例化所述远程对象;

由所述桌面操作系统的应用发送对所述远程对象的调用;以及由所述桌面操作系统的应用从所述移动操作系统的服务接收从对所述远程对象的调用的返回,其中,所述移动操作系统在第一设备上运行;

其中,当第一设备连接到第二设备时,用户通过第二设备的体验而在第二设备的显示器上体验所述应用;

其中,第一设备和第二设备之间的连接没有中间系统;

其中,第二外部设备包括计算机监视器和输入设备,并且第一设备是移动计算设备;

其中,所述移动操作系统和桌面操作系统在共享内核上并发地运行;

其中,所述移动操作系统和所述桌面操作系统在没有虚拟化的存储器的情况下通过所述共享内核进行系统调用。

2.如权利要求1所述的方法,其中所述共享内核的进程间通信驱动器将第一包裹对象编排到所述移动操作系统的服务的进程空间,其中,所述编排是对数据和参数进行封装和解除封装以便IPC通信可以发生的过程。

3.如权利要求2所述的方法,其中所述桌面操作系统包括针对所述桌面操作系统的用户库编译的移动操作系统的进程间通信库,所述进程间通信库包括用于所述远程对象的基类。

4.如权利要求1所述的方法,其中对所述远程对象的调用包括第一包裹对象。

5.如权利要求1所述的方法,其中对所述远程对象的调用包括将由所述移动操作系统的服务执行的动作。

6.如权利要求5所述的方法,其中所述移动操作系统在执行对所述远程对象的调用的动作之后返回第二包裹对象。

7.如权利要求1所述的方法,其中对所述远程对象的调用包括以线程安全的方式对共享存储器空间的引用,或其中对所述远程对象的调用包括文件描述符。

8.一种用于在移动操作系统的第一应用和桌面操作系统的第二应用之间通信的方法,所述方法包括:由所述移动操作系统的远程通信服务接收所述第一应用的绑定到所述远程通信服务的请求;

响应于所述第一应用的请求,实例化远程对象;

从所述远程通信服务向所述第一应用传递所述远程对象;

由所述移动操作系统的远程通信服务通过进程间通信通道接收所述第二应用的绑定到所述远程通信服务的请求;以及从所述远程通信服务向所述第二应用传递所述远程对象;

其中,所述移动操作系统在第一设备上运行;

其中,当第一设备连接到第二设备时,用户通过第二设备的体验而在第二设备的显示器上体验所述第二应用;

其中,第一设备和第二设备之间的连接是对接连接;

其中,第二外部设备包括计算机监视器和输入设备;

其中,所述移动操作系统和桌面操作系统在共享内核上并发地运行;

其中,所述移动操作系统和所述桌面操作系统在没有虚拟化的存储器的情况下通过所述共享内核进行系统调用。

9.如权利要求8所述的方法,还包括下列步骤:由所述移动操作系统的远程通信服务从所述第一应用接收对所述远程对象的调用,所述调用包括第一包裹对象。

10.如权利要求9所述的方法,还包括下列步骤:响应于接收到对所述远程对象的调用,由所述移动操作系统的远程通信服务返回第二包裹对象。

11.如权利要求9所述的方法,其中所述第一包裹对象包括对共享存储器空间的引用。

12.一种移动计算设备,包括存储用于物理处理器的指令的计算机可读介质,所述指令在被执行时使得所述处理器执行下列步骤,所述步骤包括:由移动操作系统的服务接收桌面操作系统的应用的绑定到所述服务的请求;

响应于所述桌面操作系统的应用的绑定到所述移动操作系统的服务的请求,由所述服务实例化远程对象;

由所述移动操作系统的服务通过进程间通信通道向所述桌面操作系统的应用发送所述远程对象;

由所述移动操作系统的服务接收所述桌面操作系统的应用对所述远程对象的调用,对所述远程对象的调用包括将由所述服务执行的动作;以及响应于接收对所述远程对象的调用,从所述移动操作系统的服务返回对所述远程对象的引用;

其中,所述移动操作系统在移动计算设备上在第一执行环境中在共享内核上运行,并且所述桌面操作系统在第二执行环境中在所述共享内核上运行;

其中,当移动计算设备连接到第二设备时,用户通过第二设备的体验而在第二设备的显示器上体验所述应用;

其中,第一设备和第二设备之间的连接没有中间系统;

其中,所述移动操作系统和所述桌面操作系统在没有虚拟化的存储器的情况下通过所述共享内核进行系统调用。

13.如权利要求12所述的移动计算设备,其中第二外部设备包括计算机监视器和输入设备。

14.如权利要求12所述的移动计算设备,其中所述动作包括调用所述服务的远程方法。

15.如权利要求12所述的移动计算设备,其中所述服务是绑定服务。

说明书 :

跨环境通信框架

[0001] 相关申请的交叉引用
[0002] 本申请是2010年10月1日提交的、名称为“Multi-Operating System Portable Docking Device”的美国临时申请No.61/389,117;2011年7月13日提交的、名称为“Dockable Mobile Software Architecture”的美国临时申请No.61/507,199;2011年7月13日提交的、名称为“Cross-Environment Communication Framework”的美国临时申请No.61/507,201;2011年7月13日提交的、名称为“Multi-Operating System”的美国临时申请No.61/507,203;2011年7月13日提交的,名称为“Auto-Configuration of a Docked System in a Multi-OS Environment”的美国临时申请No.61/507,206;以及2011年7月13日提交的,名称为“Auto-Waking of a Suspended Secondary OS in a Dockable System”的美国临时申请No.61/507,209的非临时申请并且要求所述临时申请的提交日的权益,其中为了所有目的将上述优先权申请的全部内容通过引用合并于此。

技术领域

[0003] 本申请总地涉及移动计算环境的领域,更具体地涉及通过在单个移动计算设备中使用多个操作系统而支持多个用户环境。

背景技术

[0004] 在现今的社会中,移动计算设备正在变得无处不在。例如,截至2008年底,百分之九十的美国人拥有移动无线设备。同时,移动设备的能力快速发展,包括将先进的计算能力与移动电话能力结合的智能电话。移动电话提供者在过去3年中基于几种不同的平台(例如,苹果iPhone、Android、BlackBerry、Palm、和Windows Mobile)已经推出了数百种新的智能电话。在美国,到2010年中期时,智能电话渗透率几乎达到23%,并且在一些年龄群体中超过35%。在欧洲,从2009年到2010年智能电话市场增长了41%,其中截至2010年7月仅在五个最大的欧洲国家中就有超过6千万智能电话用户。
[0005] 虽然智能电话在普及度和计算能力方面不断增加,但它们提供有限的用户体验。具体地,它们通常具有为移动设备硬件修改的操作系统和对所述修改后的操作系统可用的一组受限的应用。例如,许多智能电话运行谷歌的Android操作系统。Android仅运行专门开发以便在基于Java的虚拟机运行时环境内运行的应用。此外,虽然Android基于修改后的Linux内核,但它使用与Linux不同的标准C库,系统管理器和服务。因此,在没有修改或移植(porting)的情况下为Linux写的应用不能在Android上运行。类似地,苹果的iphone使用iOS移动操作系统。同样,虽然iOS来源于Mac OS X,但为OS X开发的应用不能在iOS上运行。因此,虽然许多应用可用于例如Android和iOS的移动操作系统,但是用于例如Linux和Mac OS X的桌面操作系统的许多其他常见的应用在移动平台上不可用。
[0006] 因此,智能电话通常适用于一组有限的用户体验,并提供主要为移动环境设计的应用。具体地,智能电话不提供合适的桌面用户体验,它们也不运行大多数常见的桌面应用。作为结果,许多用户携带和使用多个计算设备,包括智能电话、笔记本计算机和/或平板计算机。在这种情况下,每个设备具有自己的CPU、存储器、文件贮存器和操作系统。
[0007] 智能电话和其他计算设备之间的连接和文件共享涉及通过无线或有线连接将一个设备(例如,运行移动OS的智能电话)链接到第二个完全不同的设备(例如,运行桌面OS的笔记本计算机、桌面计算机或平板计算机)。通过在每个设备上分别运行的应用之间同步数据而在设备上共享信息。通常被称为“同步”的这个过程是麻烦的并且通常需要由用户主动管理。

发明内容

[0008] 本发明的实施例针对在单个移动计算设备中提供智能电话的移动计算体验和第二终端环境的合适的用户体验。第二终端环境可以是通过有线(例如,USB、火线、雷电接口(thunderbolt)等)或无线(例如,蓝牙、WiFi等)连接而连接到所述计算设备的视觉呈现设备(例如,监视器或显示器)、输入设备(例如,鼠标、触摸板、触摸屏、键盘等)、以及其他计算外围设备(例如,HDD、光盘驱动器、记忆棒、相机、打印机等)的某种组合。在实施例中,在共享内核上并发并独立运行与移动环境的用户体验相关联的移动操作系统和与第二终端环境的用户体验相关联的桌面操作系统。
[0009] 根据符合各种实施例的一个方面,桌面操作系统的应用通过下列步骤与移动操作系统的服务通信:请求绑定到移动操作系统的服务的远程(remotable)接口;从移动操作系统的服务接收远程对象,响应于桌面操作系统的请求而由移动操作系统的服务将所述远程对象实例化;发送对所述远程对象的调用,对远程对象的调用包括第一包裹对象(parcel object);以及由桌面操作系统的应用从移动操作系统的服务接收第二包裹对象。
[0010] 根据符合各种实施例的其他方面,移动操作系统和桌面操作系统在共享内核上并发地运行。所述共享内核的进程间通信驱动器可以将第一包裹对象编排(marshal)到移动操作系统的服务的进程空间。第一包裹对象可以包括要由移动操作系统的服务执行的动作。移动操作系统在执行第一包裹对象的动作之后可以返回第二包裹对象。第一包裹对象可以包括对共享存储器空间和/或文件描述符的引用。可以针对桌面操作系统的用户库编译包括用于远程对象的基类的进程间通信库。进程间通信库可以是绑定器库。
[0011] 根据符合各种实施例的其他方面,移动操作系统的第一应用和桌面操作系统的第二应用通过下列步骤通信:由移动操作系统的远程通信服务接收所述第一应用的绑定到所述远程通信服务的请求;响应于所述第一应用的请求而实例化远程对象;从所述远程通信服务向所述第一应用传递所述远程对象;由移动操作系统的远程通信服务通过进程间通信通道接收所述第二应用的绑定到所述远程通信服务的请求;以及从所述远程通信服务向所述第二应用传递所述远程对象。
[0012] 根据符合各种实施例的其他方面,移动操作系统和桌面操作系统可以在共享内核上并发地运行。第一应用和第二应用之间的通信还可以包括:由移动操作系统的远程通信服务从第一应用接收对远程对象的调用,所述调用包括第一包裹对象。所述调用可以是同步或异步调用。响应于接收到对远程对象的调用,移动操作系统的远程通信服务可以返回第二包裹对象。所述第一包裹对象可以包括对共享存储器空间的引用。
[0013] 根据符合各种实施例的其他方面,计算设备包括存储用于物理处理器的指令的计算机可读介质,所述指令在被执行时使得所述处理器执行下列步骤,所述步骤包括:由移动操作系统的服务接收桌面操作系统的应用的、绑定到所述服务的请求;响应于桌面操作系统的应用的、绑定到移动操作系统的服务的请求,由所述服务实例化远程对象;由移动操作系统的服务通过进程间通信通道向桌面操作系统的应用发送所述远程对象;由移动操作系统的服务接收由桌面操作系统的应用对所述远程对象的调用,对所述远程对象的调用包括将由所述服务执行的动作;以及响应于接收到对所述远程对象的调用,从移动操作系统的服务返回对所述远程对象的引用。
[0014] 根据符合各种实施例的其他方面,所述指令还可以使得处理器执行下列步骤:在第一执行环境中在共享内核上运行移动操作系统,并且在第二执行环境中在共享内核上并发地运行桌面操作系统。所述动作可以包括调用所述服务的远程方法。所述服务可以是绑定(bound)服务。

附图说明

[0015] 在附图的参考图中图示本发明的实施例,其中贯穿附图的描述,相同的数字指代相同的元件。
[0016] 图1图示根据各种实施例的提供多个用户计算体验的计算环境。
[0017] 图2图示根据各种实施例的移动计算设备的示例系统架构。
[0018] 图3图示根据各种实施例的用于计算环境的操作系统架构。
[0019] 图4图示根据各种实施例的移动计算设备的移动操作系统的一个实施例。
[0020] 图5图示根据各种实施例的用于计算环境的操作系统架构的各方面。
[0021] 图6图示根据各种实施例的可以在操作系统架构中使用的桌面操作系统。
[0022] 图7图示根据各种实施例的跨环境通信框架的各方面。
[0023] 图8图示根据各种实施例的使用跨环境通信架构的各方面的通信流。
[0024] 图9图示根据各种实施例的使用跨环境通信架构的各方面的可替换的通信流。
[0025] 图10图示根据各种实施例的使用跨环境通信架构的各方面的可替换的通信流。
[0026] 图11图示根据各种实施例的使用跨环境通信架构的各方面的可替换的通信流。

具体实施方式

[0027] 传统上,手持式移动电话设备(即,“手机”)被独立地开发并且服务于与例如桌面计算机和笔记本计算机的个人计算机(“PC”)的目的分开的和不同的目的。手持式移动电话设备主要专注于通信,而PC专注于例如创建和编辑文件、基于本文的通信(例如,电子邮件等)、多媒体、和web浏览的计算任务。然而,移动电话设备包括不断增加的计算能力,并且用户日益希望将通信和计算能力集中到多用途移动设备。
[0028] 例如,包括计算能力的被称为“智能电话”的移动电话设备的普及度不断增加。许多这些智能电话包括在移动处理器上运行的移动操作系统(“OS”)。虽然移动处理器和移动OS已经增加了这些设备的能力,但至少因为所提供的有限的用户体验,智能电话尚无趋向取代例如桌面或笔记本计算机的PC环境。具体地,对于例如输入或编辑文档的某些任务,全尺寸键盘和大显示器比通常在智能电话上发现的用户接口组件更易于使用。例如,智能电话通常使用小的拇指式QWERTY键盘、触摸屏显示器、点击轮(click-wheel)、和/或滚动轮作为用户接口组件。选择菜单选项或项目通常涉及使用触摸屏显示器、或使用点击轮或滚轮来导航菜单并选择项目。这个接口适合于在智能电话中通常发现的小显示屏和有限的菜单选项,但不适合于控制具有更大数量的菜单选项、更大的屏幕区域、和在例如传统鼠标的指点设备周围建立的用户界面的更传统的程序。
[0029] 本发明的实施例针对创新的跨环境通信框架(“CECF”),其允许在相同的共享内核上独立和并发地运行的多个操作系统的应用和服务之间的快速通信。例如,实施例允许在共享内核上运行的Android移动OS的应用和服务与在相同的共享内核上运行的Linux桌面OS的应用和服务之间的快速通信。实施例包括对允许Android OS内的应用对应用通信的Android“绑定器(Binder)”进程间通信(“IPC”)机制的扩展。例如,内部的Android OS应用可以向远程通信服务登记以便能够以同步和/或异步的方式通信(例如,同步数据、设置等)。其他实施例包括允许Linux桌面OS的应用与Android OS应用和服务之间的通信的、用于Linux桌面OS的绑定器机制的基类。例如,在Android OS上运行的Android应用可以与在Linux桌面OS上运行的Linux应用共享数据、设置、和首选项。
[0030] 图1图示根据各种实施例的提供多个用户计算体验的计算环境100。计算环境100包括移动计算设备110。移动计算设备110包括移动计算硬件和软件组件。移动计算设备110的硬件组件包括移动处理器114、显示器116、一个或多个I/O设备118、和/或端口120。移动计算设备110的软件组件包括第一OS130和第二OS160。在一个实施例中,第一OS130是移动OS并且第二OS160是桌面OS。当将移动计算设备110作为独立移动设备操作时,移动OS130通过显示器116和一个或多个I/O设备118提供典型的移动计算用户体验。由移动OS130提供的移动计算体验通常包括移动电话能力和适合于包括显示器116和一个或多个I/O设备118的移动环境的图形用户界面(“GUI”)。例如,显示器116可以是触摸屏显示器并且可以通过触摸屏显示器116上的移动OS130的GUI来控制在移动OS130上运行的应用程序(即,“应用”)。
[0031] 移动计算设备110可以通过端口120连接到I/O设备114、146和/或148。I/O设备144、146和/或148可以组成第二终端环境140。在某些情况中,与移动OS130相比,第二终端环境140可能更适合于桌面OS160。例如,第二终端环境140可以包括键盘144、指点设备146、和显示器设备148。在这些情况中,桌面OS160可以与第二终端环境140相关联以便通过第二终端环境140提供笔记本或桌面计算机环境的完整能力。在其他情况中,与桌面OS160相比,第二终端环境140可能更适合于移动OS130。例如,第二终端环境140可以包括触摸屏显示器。在这些情况中,移动OS130可以与第二终端环境140相关联。
[0032] 在图1中,端口120被示出为通过接口122连接到第二终端环境140的端口142。然而,端口120可以包括通过接口122到每个I/O设备144、146和148的单独的连接。接口
122可以是用于连接例如键盘、监视器、指点设备等的设备的任何合适的有线或无线接口或者有线和无线接口的组合。例如,接口122可以是显示接口(例如,VGA、DVI、HDMI等)和设备通信接口(例如,USB、蓝牙、火线、其他串行通信接口等)的组合。可替换地,接口122可以是支持视频和设备通信信号(例如,雷电接口等)两者的单个通信接口。
[0033] 传统上,因为不同的使用模型和对于产品设计的竞争约束,手机环境和PC环境的硬件和软件开发路径已经完全独立。包括桌面和笔记本计算机的PC被设计为灵活的和强大的。具体地,PC硬件架构通常基于通过主板上的各种通用接口连接到存储器、图形组件和外部组件的通用PC处理器。例如,个人计算机主板可以包括通过逻辑芯片组连接到图形处理器的处理器、系统存储器(例如,RAM)、和通过通信接口(PCI、USB、ISA、IDE等)的各种其他组件。一些更高度集成的PC处理器包括处理器上的到图形处理器(例如,AGP等)的接口和/或到系统存储器(例如,SDR、DDR、DDR2、DDR3、DRDRAM等)的接口。
[0034] 对高处理器时钟速度和计算密集型任务优化PC处理器。目前由基于x86CPU架构的处理器主导个人计算机市场。用于桌面计算机的当前的基于x86的PC处理器具有多个64位中央处理单元(“CPU”)(或“核”),所述中央处理单元具有超过2.5GHz的时钟速度和接近100瓦特的功耗。用于笔记本计算机的当前的基于x86的PC处理器通常以高达2.0GHz的时钟速度运行并且具有在15-45瓦特范围中的功耗。因为这些处理器的大功耗,桌面和笔记本计算机可能需要例如风扇或散热器的冷却设备以便从处理器消除浪费的热量。此外,使用基于x86的PC处理器的笔记本计算机的电池寿命通常小于四小时。
[0035] 相反,为了低功耗和高集成度而优化用于手机的移动处理器以便减少手机的整体大小。例如,诸如智能电话的手机的移动处理器通常以低于2.0GHz的时钟速度运行,具有低于1瓦特的功耗,并且集成对移动环境常见的功能,例如图像控制器、通信接口、和相机控制器。最常见的移动处理器架构是精简指令集计算(“RISC”)处理器架构。具体地,“ARM”移动处理器架构是当前为智能电话和其他超便携和低功耗计算设备设计的移动处理器的主要架构。一些PC处理器制造商也将为了在笔记本计算机中使用而设计的PC处理器称为“移动处理器”。然而,如在这里使用的,术语“移动处理器”指代适合于在手机或智能电话中使用的、通常消耗小于1瓦特并且集成移动功能的处理器。
[0036] 个人计算机和手机通常也具有不同的系统资源、输入/输出(“I/O”)设备、和外围设备。例如,桌面和笔记本计算机通常具有比手机更大量的系统存储器和贮存能力。虽然典型的笔记本计算机可以具有大于2GB的RAM和具有大于250GB的容量的硬驱动器,但是手机通常具有小于512MB的RAM和具有小于32GB的容量的固态驱动器。个人计算机的用户接口组件通常包括对角线大于9英寸的显示屏、全键盘、和一个或多个指点设备以用于用户输入。相反,手机通常包括对角线小于7英寸的显示屏以及例如拇指式QWERTY键盘、触摸屏显示器、点击轮、和/或滚动轮的用户接口组件。在个人计算机上发现的外围设备通常包括光盘驱动器(例如,CD、DVD、DVD-RW等)、扩展端口(例如,PCMCIA、SCSI、快速卡等)、视频输出端口(例如,VGA、DVI、HDMI等)、以及通用设备端口(例如,USB等)。相反,手机通常不具有光盘驱动器或扩展端口。然而,其他设备通常被集成到手机中,包括一个或多个无线通信接口(例如,GSM、CDMA、LTE、EDGE、WiFi、WiMax等)、GPS芯片组、加速度计、一个或多个相机、和/或固态存储器端口(SD、记忆棒等)。
[0037] 传统上还独立开发用于个人计算机和手机的软件。例如,包括桌面和笔记本计算机的个人计算机通常运行与移动设备不同的操作系统。操作系统是管理计算机硬件和资源并且提供用于在计算机硬件上执行应用软件的常见服务的软件。操作系统通常被描述为具有各种抽象层,其中每个层通过接口与下面的层连接。
[0038] 通常,操作系统的内核是指管理例如一个或多个CPU(CPU调度)、存储器、和I/O(包括外围设备和文件系统访问)的计算设备资源的核心OS层。内核通常将提供用于进程的低级调度(调遣)、进程间通信、进程同步、上下文切换、进程控制块的操纵、中断处理、进程创建和销毁、以及进程暂停和恢复的特征。OS内核可以或可以不包括设备驱动程序(driver)。OS的其他层通过系统调用或应用编程接口(“API”)层与内核连接。
[0039] 通常,其他OS层包括库层、应用框架层、和应用层。库层通常包括系统库和其他用户库。应用框架层包括服务、管理器、和运行时环境。应用层包括用户应用,所述用户应用可以在应用框架层的运行时环境内运行。用户通过OS GUI与OS交互。GUI提供用户选择以便控制和使用在OS上运行的应用的菜单、按钮、和控件。通常,术语“桌面环境”被用于指代GUI的类型,通过所述GUI,用户使用图标、窗口、工具栏、文件夹、和/或桌面小工具与OS交互,并且所述“桌面环境”不限于桌面OS。例如,移动OS可以具有指代移动OS GUI的外观和感觉的桌面环境。
[0040] 用于个人计算机的操作系统(桌面OS)被设计用于多任务、较大屏幕面积、并且为应用开发者提供灵活的环境。如在这里使用的,术语桌面OS指代被设计用于与例如桌面或笔记本计算机使用环境的个人计算机环境一起使用的操作系统。除了许多其他的示例以外,桌面OS的示例包括Linux、Mac OS X、和Windows7的各种发行版。
[0041] 用于移动设备的操作系统(移动OS)被开发用于通常在手机和智能电话上发现的较小的屏幕面积、较低的处理能力、较小的存储器、和较小的盘空间。示例移动OS包括Android、苹果的iOS(用于iPhone和iPad)、微软的Windows Mobile(由Windows Phone7取代)、诺基亚的Symbian、和Palm的Palm OS(由HP webOS取代)。如在这里使用的,术语移动OS指代被设计用于与移动环境一起使用的操作系统,所述移动环境包括利用与PC环境(即,桌面或笔记本计算机系统)相比减少的系统资源在低功率处理器上运行。
[0042] 移动操作系统通常具有被用于创建在移动OS上运行的应用程序(即,“应用”)的特定应用开发环境。应用开发环境通过提供用于访问系统资源和服务的常用工具和API来便利应用开发,并且限制允许应用做什么,使得移动设备能够继续提供其他需要的功能。例如,到来的电话呼叫和文本(text)可以中断正在运行的应用以便向用户通知该到来的呼叫或文本。
[0043] 最广泛采用的移动OS是谷歌的Android。虽然Android基于Linux,其包括为了移动环境和移动处理器而对内核和其他OS层进行的修改。具体地,虽然Linux内核被设计用于x86CPU架构,但是Android内核被修改以用于基于ARM的移动处理器。还为除了其他设备以外的包括触摸屏、移动连接(GSM/EDGE、CDMA、Wi-Fi等)、电池管理、GPS、加速度计、和相机模块的通常在移动硬件架构中存在的设备特别定制Android设备驱动程序。
[0044] 在Android中,应用在具体为移动硬件架构的存储器和处理器速度限制设计的面向对象的应用框架上的Dalvik虚拟机内运行。通过Android SDK开发用于Dalvik虚拟机的应用。此外,Android不具有原生X视窗系统,其也不支持标准GNU库的完整集,这使得难以将现有GNU/Linux应用或库移置(port)到Android。
[0045] 类似地修改苹果的iOS操作系统(在iPhone上运行)和微软的Windows Phone7以用于移动环境和移动硬件架构。例如,虽然iOS源自Mac OS X桌面OS,常见的Mac OS X应用不能在iOS上原生地运行。具体地,通过SDK为iOS开发应用以便在iOS的“Cocoa Touch”运行时环境内运行所述应用,所述iOS的“Cocoa Touch”运行时环境提供基本应用体系结构并且对例如基于触摸的输入、推送通知、和系统服务的重要iOS特征的支持。因此,在没有通过iOS SDK移植为Mac OS X写的应用的情况下,所述应用不能在iOS上运行。此外,因为两个OS的用户库和应用框架层之间的不同,以及移动和桌面硬件的系统资源的不同,可能难以将Mac OS X应用移植到iOS。
[0046] 因为处理需求、系统资源、和应用开发上的不同,为桌面OS开发的应用通常不能在移动OS上运行。此外,因为针对较大的屏幕面积、更快的处理速度、更大的系统存储器、不同的库、以及通常不同的GUI而优化桌面应用,所以桌面应用可能不易移植到移动OS。作为结果,对于每个用户环境,用户通常使用单独的计算设备,包括智能电话、平板计算机、笔记本计算机、和/或桌面计算机。在这种情况中,每个设备具有其自己的CPU、存储器、文件贮存器、和OS。
[0047] 智能电话和其他设备之间的连接和文件共享涉及将一个设备(例如,运行移动OS的智能电话)通过无线或有线连接而链接到第二个完全不同的设备(例如,运行桌面OS的笔记本计算机、桌面计算机、或平板计算机)。通过在每个设备上单独运行的应用之间同步数据而在设备间共享信息。通常被称为“同步”的这个过程是麻烦的并且通常需要由用户主动管理。
[0048] 近年来,已经做出了一些尝试来利用单个移动计算设备提供更完整的用户体验。例如,智能电话可以连接到外部监视器和输入设备,例如全键盘,以便提供更类似于桌面的用户体验,其中移动OS图形用户界面被扩展到更大的屏幕并且接受来自输入设备的输入。
然而,因为外部监视器和输入设备只是智能电话的操作系统和用户界面的扩展,所对接的环境的能力受到智能电话的移动OS限制。例如,在桌面OS上可用的很多软件应用在移动OS上不可用或具有有限的功能。因此,这些设备在被连接到外部环境时不提供完整的桌面用户体验。
[0049] 仍然参考图1,计算环境100提供没有上面的限制的多个用户计算体验。具体地,因为移动计算设备110包括多个OS,其中每个OS适合于特定的计算环境,移动计算设备110可以与外部设备适配以便利用单个移动计算设备提供范围广泛的用户体验。例如,用户可以具有移动计算设备110和当连接到移动计算设备110时提供笔记本计算机的用户体验的第二终端环境140。在这种情况中,当第二终端环境连接到移动计算设备110时,移动计算设备的桌面OS160与第二终端环境140相关联。对于用户,通过第二终端环境140,可以获得桌面OS160的完整能力。
[0050] 图2图示根据各种实施例的移动计算设备110的示例硬件系统架构。移动计算设备硬件112包括移动处理器114,所述移动处理器114包括一个或多个CPU核204和外部显示器接口220。通常,移动计算设备硬件112还包括通过各种通信信号和接口连接到处理器114的一个或多个I/O设备118、存储器206、一个或多个贮存设备208、连接到触摸屏显示器116的触摸屏显示器控制器210、连接到电池216的电源管理IC214、蜂窝调制解调器218、一个或多个通信设备222、和/或一个或多个其他设备224。一个或多个I/O设备118通常包括可以在移动计算设备110中使用的按钮和其他用户接口组件。例如,一个或多个I/O设备118可以包括一组按钮(例如,后退、菜单、主页、搜索等)、屏幕外手势区域(off-screen gesture area)、点击轮、滚动轮、QWERTY键盘等。一个或多个其他设备224可以包括例如GPS设备、LAN连接、麦克风、扬声器、相机、加速度计、和/或MS/MMC/SD/SDIO卡接口。外部显示器接口220可以是任何合适的显示接口(例如,VGA、DVI、HDMI等)。
[0051] 处理器114可以是基于ARM的移动处理器。在实施例中,移动处理器114是移动的基于ARM的处理器,例如德州仪器OMAP3430、Marvell PXA320、飞思卡尔iMX51、或高通QSD8650/8250。然而,移动处理器114可以是另一合适的基于ARM的移动处理器或基于其他处理器架构的处理器,所述其他处理器架构为例如诸如基于x86的处理器架构或其他基于RISC的处理器架构。
[0052] 虽然图2图示移动计算设备110的一个示例硬件实施方式112,但其他架构被设想为在本发明的范围内。例如,在图2中被示出为位于移动处理器114外部的各种组件可以被集成到移动处理器114中。可选地,在图2中被示出为集成到移动处理器114中的外部显示器接口220可以位于移动处理器114的外部。此外,使用系统总线、分立的图形处理器、和/或其他架构变化的其他计算机架构适合于使用本发明的各方面。
[0053] 图3图示根据各种实施例的可以被用于在移动计算设备110上并发地运行移动OS130和桌面OS160的OS架构300。如图3中所示,移动OS130和桌面OS160是独立的操作系统。具体地,移动OS130和桌面OS160可以具有独立的和不兼容的用户库和/或框架层。用于OS架构300的功能(function)和指令可以在移动计算设备110的有形的计算机可读介质上被存储为计算机程序代码。例如,可以在移动计算设备硬件112的一个或多个贮存设备208中存储用于OS架构300的指令。
[0054] 如图3中所示,移动OS130具有库层330、应用框架层340、和应用层350。在移动OS130中,应用352和354在由移动OS130的应用框架层340支持的应用层350中运行。应用框架层340包括由在移动OS130上运行的应用使用的一个或多个管理器342和一个或多个服务344。例如,应用框架层340可以包括用于移动环境的窗口管理器、活动管理器、分组管理器、资源管理器、电话管理器、手势控制器、和/或其他管理器和服务。应用框架层340可以包括执行为移动OS130开发的应用的移动应用运行时环境。可以针对例如较低的处理能力或有限的存储器空间的移动计算资源优化移动应用运行时环境。移动应用运行时环境可以依赖内核以进行进程隔离、存储器管理、和线程支持。库层330包括实施例如I/O和串操纵的常用功能的用户库332(“标准C库”)、图形库、数据库库、通信库、和/或其他库。
[0055] 如图3中所示,桌面OS160具有库层360、框架层370、和应用层380。在桌面OS160中,应用382和384在由桌面OS160的应用框架层370支持的应用层380中运行。应用框架层370包括由在桌面OS160上运行的应用使用的一个或多个管理器372和一个或多个服务374。例如,应用框架层370可以包括常见于桌面环境的窗口管理器、活动管理器、分组管理器、资源管理器、和/或其他管理器和服务。库层360可以包括实施例如I/O和串操纵的常用功能的用户库332(“标准C库”)、图形库、数据库库、通信库、和/或其他库。
[0056] 在本公开的各种实施例中,桌面OS160在与移动OS130分开的执行环境中运行。例如,移动OS130可以在根执行环境中运行,并且桌面OS160可以在根执行环境下面建立的第二执行环境中运行。在移动OS130上运行的进程和应用访问在根执行环境中的用户库332、一个或多个管理器342、和一个或多个服务344。在桌面OS160上运行的进程和应用访问在第二执行环境中的用户库362、一个或多个管理器372、和一个或多个服务374。
[0057] 通常,为移动OS130开发的应用不能直接在桌面OS160上运行,并且为桌面OS160开发的应用不能直接在移动OS130上运行。例如,在桌面OS160的应用层380中运行的应用382可能与移动OS130不兼容,意味着应用382不能在移动OS130上运行。具体地,应用382可能使用桌面OS160的应用框架层370的一个或多个管理器372或一个或多个服务374,它们在移动OS130中的应用框架层340中不可用或与移动OS130中的应用框架层340中的一个或多个管理器342和一个或多个服务344不兼容。此外,应用382可能试图访问用户库362,所述用户库362存在于桌面OS160的库层360中,但在移动OS130的库层330中不可用或与移动OS130的库层330中可用的用户库332不兼容。
[0058] 在OS架构300中,移动OS130和桌面OS160在共享内核320上并发运行。这意味着移动OS130和桌面OS160同时在共享内核320上运行。具体地,移动OS130和桌面OS160都经由相同的内核接口322、例如通过对共享内核320进行系统调用连接到共享内核320。共享内核320管理对于移动OS130和桌面OS160两者的进程的任务调度。在这方面,移动OS130和桌面OS160在共享内核320上独立和并发地运行。此外,如由硬件接口312所示,共享内核320直接在移动计算设备硬件112的移动处理器114上运行。具体地,共享内核
320直接管理移动计算设备硬件112的计算资源,例如CPU调度、存储器访问、和I/O。在这方面,硬件资源没有被虚拟化,意味着移动OS130和桌面OS160在没有虚拟化的存储器或I/O访问的情况下通过内核接口322进行系统调用。
[0059] 存在用于在相同的计算设备上提供多个OS的几个已知的技术。然而,这些技术都没有提供在共享内核上并发并独立地运行的多个不同的OS。更具体地,这些技术都没有提供用于在共享内核上运行的移动OS和桌面OS的解决方案。
[0060] 在一个被称为双重引导的技术中,在计算设备上加载多个OS,一次一个。例如,在引导时,用户可以从多个可用OS中选择一个OS以便在设备上运行,其中每个OS具有其自己的内核、库、框架、和应用。然后,系统引导到该操作系统中并且其他一个或多个OS没有运行(即,没有与运行的OS并发地加载一个或多个其他OS的进程)。因此,这个技术没有在共享内核上运行多个OS,这个技术也没有并发地运行多个OS。
[0061] 用于在相同的设备上运行多个OS的另一技术是使用虚拟机管理器(“VMM”)、或“管理程序(Hypervisor)”。VMM或管理程序直接在硬件上运行并且将每个OS的各个内核与硬件分开,在任何给定时间控制哪些计算机硬件资源对每个OS是可用的。管理程序有效地从一个设备创建多个虚拟机,使得每个OS看见单独的虚拟机。因此,通过管理程序和VMM在相同的设备上运行的多个OS没有在共享内核上运行。由于每个OS不得不通过管理程序中的虚拟化来访问系统资源,管理程序增加了系统开销。此外,因为管理程序必须分配CPU和其他计算资源,每个OS可能不能够有效地调度进程和任务。
[0062] 用于在相同设备上运行多个OS的再一技术是使用托管的(hosted)虚拟机。在这个技术中,每个OS具有其自己的内核,其中客人OS的内核在主机OS中的虚拟机上运行。虚拟机可以是与物理硬件平台不同的虚拟化硬件平台。可以在主机OS的内核中实施主机OS中的虚拟机。在这种情况中,主机OS的内核用作客人OS的内核借以访问处理器和硬件资源的管理程序。不管在这个技术中在哪里实施虚拟机,主机OS和客人OS都具有分开的内核。因此,托管的虚拟机不具有在共享内核上运行的多个OS。由于对于客人OS的硬件资源的虚拟化,使用这个技术的系统性能可能降低。
[0063] 虚拟化的另一形式是操作系统级虚拟化。在这个技术中,在操作系统的内核上可以创建多个隔离的用户空间实例,从每个用户空间实例的用户的观点来看,所述多个隔离的用户空间实例像分开的OS实例。在这个技术中,主机OS和一个或多个客人OS必须是相同的OS。因此,这个技术没有提供移动OS和桌面OS在共享内核上独立和并发地运行的解决方案。此外,类似于托管的虚拟机,这个技术对于一个或多个客人OS使用盘空间和存储器虚拟化。因此,这个技术没有为每个并行OS提供对存储器和系统资源的直接访问。
[0064] 运行多个OS的这些技术在并发并独立地运行两个操作系统的方面有局限性。例如,虚拟化涉及为客人OS设置不同的地址空间,并且模拟到客人OS的I/O。因此,对于使用虚拟化的客人OS,对包括系统存储器的硬件的访问具有较高的开销。此外,使用管理程序的技术导致在每个OS的进程控制方面缺乏确定性。具体地,管理程序管理分配到每个OS的CPU时间量,然后每个OS在不知道在其他OS中正在发生什么的情况下为该OS内的进程分配CPU时间。在这方面,因为OS通过管理程序共享CPU时间,这无法解决在每个OS内运行的进程的相对优先级,所以可能没有给予一个OS内的高优先级进程所需的CPU时间来完成它们的任务。因为相对于桌面处理器架构,在移动处理器架构中处理能力可能是有限的,所以依赖于包括管理程序和操作系统级虚拟化的虚拟化的技术不能为在移动处理器上与移动OS并发地运行的桌面OS提供最优的性能。
[0065] 在一个符合OS架构300的实施例中,Android移动OS和完整的Linux OS在修改后的Android内核上独立和并发地运行。在这个实施例中,Android OS可以是修改后的Android发行版(distribution),而Linux OS(“Hydroid”)可以是修改后的Debian Linux桌面OS。图4-6更详细地图示根据各种实施例的、可以在OS架构300中使用的Android移动OS430、Android内核520、和Hydroid OS660。
[0066] 如图4中所示,Android OS430在通过应用框架层440访问的库层432中包括一组C/C++库。库层432包括专门为Android开发以便比“glibc”Linux C-库更小和更快的“bionic”系统C库439。库层432还包括进程间通信(“IPC”)库436,其包括用于Android OS的“绑定器(Binder)”IPC机制的基类。绑定器专门为Android开发以便允许进程和服务之间的通信。在图4中的库层432中示出的其他库包括支持媒体格式的记录和重放的媒体库435、管理对显示子系统的访问并且合成来自多个应用的图形层的表面管理器434、2D和3D图形引擎438、以及轻量级关系数据库引擎437。可以在库层432中包括但没有在图4中画出的其他库包括位图和矢量字体呈现库、实用程序库、浏览器工具(即,WebKit等)、和/或安全通信库(即,SSL等)。
[0067] Android OS430的应用框架层440提供允许开发者使用设备硬件的组件、访问位置信息、运行后台服务、设置警报、向状态栏增加通知等的开发平台。框架层440还允许应用公开它们的能力并且利用其他应用所公开的能力。Android移动OS430的应用框架层440的组件包括活动管理器441、资源管理器442、窗口管理器443、对接管理器444、硬件和系统服务445、桌面监视服务446、多显示器管理器447、和远程通信服务448。在Android移动OS430的框架层440中可以包括的其他组件除了其他管理器和服务之外,还包括视图系统、电话管理器、分组管理器、位置管理器、和/或通知管理器。
[0068] 在Android OS430上运行的应用在Android面向对象应用框架之上的Android运行时环境433中的Dalvik虚拟机431内运行。Dalvik虚拟机431是基于寄存器的虚拟机,并且运行被设计为减少存储器使用和处理需求的紧凑的可执行格式。在Android OS430上运行的应用包括主屏幕451、电子邮件应用452、电话应用453、浏览器应用454、和/或一个或多个其他应用(“一个或多个应用程序”)455。
[0069] 因为这些原因,为Android写的应用通常不能在Hydroid OS660上运行,并且为标准Linux发行版写的应用通常不能在Android OS430上运行。在这方面,用于Android OS430和Hydroid OS660的应用不是字节码兼容的,意味着用于一个的编译的和可执行的程序不能在另一个上运行。
[0070] 图5更详细地图示根据各种实施例的修改后的Android内核520。修改后的Android内核520包括触摸屏显示器驱动器(driver)521、一个或多个相机驱动器522、一个或多个蓝牙驱动器523、共享存储器分配器524、一个或多个IPC驱动器525、一个或多个USB驱动器526、一个或多个WiFi驱动器527、一个或多个I/O设备驱动器528、和/或电源管理模块530。一个或多个I/O设备驱动器528包括用于外部I/O设备的设备驱动器,所述外部I/O设备包括可以通过端口120连接到移动计算设备110的设备。修改后的Android内核520可以包括其他驱动器和功能块,包括低存储器消除器(killer)、内核调试器、日志记录能力、和/或其他硬件设备驱动器。
[0071] 图6更详细地图示根据各种实施例的Hydroid OS660。Hydroid是能够运行为标准Linux发行版开发的几乎任何应用的完整的Linux OS。具体地,Hydroid OS660的库层662包括支持网络连接、图形处理、数据库管理、和其他常用程序功能的Linux库。例如,用户库662可以包括标准Linux C库(glibc)664、Linux图形库662(例如,GTK等)、Linux实用程序库661、Linux数据库库、和/或其他Linux用户库。应用在Hydroid上、在使用X-Server674、窗口管理器673、和/或桌面环境672的X-窗口Linux图形环境内运行。图示的应用包括文字处理器681、电子邮件应用682、电子表格应用683、浏览器684、和一个或多个其他应用685。
[0072] 在一个实施例中,Hydroid OS660包括通过共享内核520便利于与Android OS430通信的跨环境通信框架的组件。这些组件包括IPC库663,所述IPC库663包括Android OS的绑定器IPC机制和远程通信服务671的基类。
[0073] 在一个实施例中,Hydroid OS660在Android根环境内创建的改变根目录的(利用“chroot”命令创建的)第二执行环境内运行。Hydroid OS660内的进程和应用在第二执行环境内运行,使得被这些进程和应用看见的可见的根目录是第二执行环境的根目录。以这种方式,Hydroid OS660可以在没有修改的情况下运行为标准Linux发行版写的程序,因为Linux用户库662对在改变根目录的第二执行环境中在Hydroid OS660上运行的进程是可用的。
[0074] 在抢占式(preemptive)多任务操作系统中,因为安全和可靠性的原因,通常阻止独立进程之间的直接通信。相反,必须使用一种形式的IPC来跨进程边界(即,在进程地址空间之间)发送信息。必须跨进程边界编排从一个进程向另一进程发送的对象。编排是对数据和参数进行封装和解除封装以便IPC通信可以发生的过程。可以使用一些形式的IPC来在网络上的不同计算机上的进程之间传递信息。一种IPC方法是允许一个地址空间中的进程使子例程或过程在另一地址空间中执行。这种IPC方法被称为远程过程调用(“RPC”)。
[0075] 一些IPC方法是与平台无关的。例如,因特网套接字或网络套接字是跨基于因特网协议(“IP”)的计算机网络的双向IPC的机制。因特网套接字可以被用于基于本地或远程IP地址和端口号向应用进程或线程递送数据分组。每个本地或远程机器的操作系统保持每个套接字向适当的应用进程或线程的映射。
[0076] 返回参考图3,OS架构300包括在共享内核320上并发地运行的OS130和桌面OS160。如图1中所示,移动计算设备110可以与第二终端环境140对接。第二终端环境140可以具有与桌面OS160相关联的用户体验概况。在这种情况下,移动OS130通过移动计算设备硬件112的触摸屏显示器116和I/O设备118提供移动计算体验。同时,桌面OS160通过第二终端环境140提供桌面计算体验。
[0077] 因此,用户能够通过在移动计算设备110的用户接口组件上提供的移动计算体验而使用在移动OS130上运行的移动应用(例如,应用352和354)并与所述移动应用交互,同时通过第二终端环境140使用在桌面OS160上运行的桌面应用(例如,应用382和384)并与所述桌面应用交互。在这种情况下,移动OS130的应用独立于桌面OS160的应用。在这方面,移动OS130的应用的设置、用户偏好、用户数据和应用状态与桌面OS160的应用的设置、用户偏好、用户数据、和应用状态是分开的和彼此独立的。例如,移动OS130的应用352和桌面OS160的应用382可以是电子表格应用。当用户利用应用352打开电子表格文件并且开始编辑数据时,由应用352锁定所述电子表格文件和相关联的数据。应用382不能够访问所编辑的电子表格数据,因为该数据被保持在应用352的进程空间中。
[0078] 本发明的实施例包括跨环境通信框架,所述跨环境通信框架扩展在共享内核上运行的移动OS的应用和服务与在相同的共享内核上运行的桌面OS的应用和服务之间的IPC。跨环境通信框架支持桌面OS的应用与移动OS的应用和服务之间的通信。跨环境通信框架还支持移动OS应用和其他移动OS应用之间的通信。
[0079] 图7图示跨环境通信框架的一个实施例。在跨环境通信框架700中,移动应用352、服务741、和一个或多个其他移动应用和一个或多个服务354在移动OS130上运行,而桌面应用382和384在桌面OS160上运行。每个应用和服务包括一个或多个进程,其中每个进程具有其自己的进程空间。
[0080] 服务是对应用执行后台操作(即,不直接涉及与应用的用户交互)和/或协助应用和硬件之间的交互的组件。虽然各种操作系统可以通过其他名字指代这些组件,但是如这里使用的,服务意图被广义地解释为包括一个或多个进程的组件,所述一个或多个进程实施不直接涉及用户交互的功能,所述功能可以由应用、操作系统和/或其他服务使用。
[0081] 如图7中所示,在桌面OS160上运行的桌面应用382通过包括内核320中的IPC驱动器721的进程间通信通道而与在移动OS130上运行的服务741通信。最初,桌面应用382通过IPC驱动器721发送调用以便绑定到服务741。服务741创建远程对象742的实例,所述远程对象742的实例定义桌面应用382借以与服务741通信的IPC接口。服务741通过IPC驱动器721将远程对象742返回给桌面应用382。然后,桌面应用382可以对远程对象742进行调用以便通过IPC驱动器721与服务741通信。
[0082] 在跨环境通信框架700的一种通信形式中,桌面应用382可以通过对远程对象742进行调用而调用服务741的远程方法。对远程对象742的调用可以包括向服务741的远程方法传递的零个或多个参数、和/或将从服务741的远程方法返回的零个或多个参数。由到远程对象的IPC接口打包参数并且由IPC驱动器721跨进程边界而编排所述参数。在这方面,桌面应用382可以以包裹对象的形式向远程对象742传递调用中的参数。IPC驱动器721将包裹对象编排到服务741的进程空间。服务741将包裹对象解包,并使用解包的参数在其进程空间中执行远程方法,并将另一包裹对象返回到桌面应用382。所返回的包裹对象可以包括对远程对象的引用。
[0083] 对远程对象的调用可以是同步或异步的。例如,如果桌面应用382对远程对象进行同步调用,则桌面应用382中的调用线程阻滞,并在继续之前等待从远程对象的返回。可替换地,如果桌面应用382对远程对象进行异步调用,则桌面应用382中的调用线程继续,并且不等待对远程对象的调用返回。
[0084] 远程对象742允许桌面应用382和服务741都以线程安全的方式访问共享存储器空间。例如,可以在通过对远程对象742的调用传递的包裹对象中包括对共享存储器空间的引用。因为跨进程边界而对远程对象742进行引用计数,所以应用382和服务741可以以线程安全的方式跨进程边界而共享存储器。在各种情况下,对共享存储器空间的引用可以是文件描述符或文件句柄。
[0085] 在实施例中,服务741可以是例如电话服务、相机服务、位置服务的移动OS的核心服务。服务741还可以是执行与移动OS130或桌面OS160的应用有关的操作的定制服务。
[0086] 在一个实施例中,服务741可以是允许应用对应用通信的服务。例如,服务741可以是实施跨环境通信框架的各方面以便提供在移动OS130上运行的应用之间的应用对应用通信的远程通信服务。所述远程通信服务还可以允许在桌面OS160上运行的桌面应用和在移动OS130上运行的移动应用之间的通信。在一个实施例中,Android OS430的远程通信服务448促进在Android OS430和/或Hydroid OS660上运行的应用之间的应用对应用通信。
[0087] 例如,移动应用352可以绑定到服务741。然后,服务741实例化远程对象742,并且将远程对象742返回到移动应用352。移动应用354也可以绑定到服务741,并且服务741可以将远程对象742返回到移动应用354。移动应用352和354可以通过对远程对象
742的调用而通信。例如,移动应用352可以使用对远程对象742的调用而传递包裹对象。
所述包裹对象可以包括数据和/或对共享存储器的引用。移动应用也可以通过对远程对象
742进行调用而访问共享存储器。以相同的方式,桌面应用382也可以绑定到服务741,并且使用对远程对象742的调用而与移动应用352和354通信。
[0088] 在一个实施例中,Android移动OS430和Linux桌面OS160在共享内核520上并发地运行。Android OS包括被称为“绑定器(Binder)”的轻量级远程过程调用机制。所述绑定器机制使用共享存储器来实现高效安全的IPC。绑定器机制包括Android内核520中的绑定器IPC驱动器525和包括绑定器IPC库436的用户类库,所述绑定器IPC库436包括用于绑定器对象的基类。在Android OS430中,针对Bionic C库439编译绑定器IPC库436。绑定器引用(reference)是由绑定器驱动器525保持的对于远程绑定器对象的接口的描述符。进程可以通过所述接口调用远程绑定器对象。Android绑定器机制提供引用计数,并且管理跨进程的对象引用的映射。然而,Android绑定器机制仅提供Android应用和全局登记的Android服务之间的通信。因此,Android应用不能通过绑定器机制彼此直接通信。
[0089] 在Linux OS中可用的IPC机制是管道(pipe)、命名管道、系统V消息队列、系统V信号量(semaphore)、系统V共享存储器段、和网络连接套接字。这些IPC机制不直接与Android OS中的绑定器IPC机制或用于Android绑定器IPC机制的绑定器内核驱动器兼容。因此,运行的Linux应用不能使用这些标准Linux IPC机制来与在Android OS上运行的应用和/或一个或多个服务通信。
[0090] 在一个实施例中,跨环境通信框架扩展绑定器机制以便允许Linux桌面OS660的应用访问Android OS430的服务。在一个实施例中,跨环境通信框架包括允许Android OS430内的应用对应用通信的远程通信服务。在其他实施例中,远程通信服务允许在Linux桌面OS660上运行的Linux应用与在Android OS430上运行的Android应用通信。
[0091] 在实施例中,跨环境通信框架还支持用于跨环境通信的用户数据报协议(“UDP”)的使用。UDP是因特网协议(“IP”)的协议组的部分。UDP是没有隐式握手对话的异步数据传输机制。因此,UDP不提供可靠的传输协议,它也不保证传输期间的数据排序或数据完整性。然而,因为UDP具有最小的开销,对于实时系统中的时间敏感的信息,它可以是优选的传输机制。例如,在丢弃分组比延迟传输优选的情况下,UDP可以是优选的传输机制。
[0092] 图8图示根据各种实施例的使用跨环境通信框架的各方面的通信流800。在通信流800中,如由过程步骤802所示,在Android OS430上运行的Android应用852通过调用Android OS上下文的方法而向远程通信服务448登记。作为响应,在步骤806,远程通信服务448返回到远程对象804(即,绑定器对象)的接口。在步骤808,Android应用854向远程通信服务448登记。在步骤810,远程通信服务448将到相同的远程对象804的接口返回到Android应用854。
[0093] 在Android OS430上运行的Android应用852可以使用远程对象804通过对所述远程对象进行调用而与Android应用854通信。对远程对象的调用可以包括远程方法调用和/或打包的数据。打包的数据可以包括各种数据类型,所述数据类型除了其他可能的数据类型以外还包括整数、字符串、数组、和/或文件描述符。在通信流800的步骤812,Android应用852调用远程通信服务448的远程方法FN1。在步骤814,内核IPC驱动器525跨进程边界编排远程调用,并且远程通信服务448接收对远程对象的调用。然后,在步骤816,远程通信服务448将远程调用的数据解包,并且在它的进程空间中使用所述数据运行远程方法。在步骤818和820,远程通信服务448通过到远程对象的接口返回另一包裹对象。
[0094] 在步骤822,Android应用854对远程对象804进行调用。例如,Android应用854可以调用远程通信服务448的远程方法(FN2)。应用854可以向远程方法传递包括用于远程方法的参数的包裹对象。在步骤824,内核IPC驱动器525将所述包裹对象编排到远程通信服务448的进程空间,并且远程通信服务448接收所述包裹对象。然后,在步骤826,远程通信服务448将数据解包,并且在它的进程空间中使用所述数据运行远程方法。在步骤828,远程通信服务448通过到远程对象的接口返回另一包裹对象。在步骤830,内核IPC驱动器525跨进程边界而编排包裹对象,并且Android应用854接收所述包裹对象。
[0095] 在一个实施例中,远程通信服务448可以是Android OS430的绑定服务。在这个实施例中,当客户端通过Android OS430的Context(上下文)类绑定到绑定服务时,由Android OS430创建所述服务。只要客户端(绑定到该服务的应用和/或服务)绑定到绑定服务,所述服务就运行,并且当最后的客户端从所述服务解除绑定时,破坏所述服务。绑定服务可以实施允许客户端共享用户偏好、设置、和/或用户数据的共享存储器接口。
[0096] 通信流800提供用于在Android OS430上运行的Android应用852和854之间共享数据的线程安全跨进程通信。Android应用852和854可以通过使用远程对象804传递对共享数据的引用而以线程安全的方式来在共享存储器空间中共享数据。例如,Android应用852和854可以通过远程对象804传递包括对共享存储器空间的引用的包裹对象。
[0097] 通信流800图示Android应用852和854与远程通信服务448之间的同步通信。然而,Android应用852和854与远程通信服务448之间的通信可以是异步的,意味着Android应用852和854将立刻从对远程对象的调用返回并且不等待来自远程方法调用的结果。
[0098] 图9图示根据各种实施例的使用跨环境通信框架的各方面的通信流900。在通信流900中,在Hydroid OS660上运行的应用682与Android OS430的服务941通信。
[0099] 服务941将绑定器接口暴露给客户端,并且在步骤902,Hydroid应用982通过经由绑定器内核驱动器525使用所暴露的接口绑定到服务941来向服务941登记。服务941返回到远程对象904的接口,在步骤908,Hydroid应用982接收所述到远程对象904的接口。在步骤910,Hydroid应用382对远程对象904进行调用。例如,Hydroid应用382可以调用服务941的远程方法(FN1)。所述远程方法调用可以包括包裹对象,所述包裹对象包括用于远程方法调用的参数。在步骤912,绑定器驱动器525将包裹对象编排到服务941的进程空间,并且服务941接收数据。在步骤914,服务941将数据解包并且使用所述解包的数据在它的进程空间中运行所述方法。在步骤916和918,服务941通过绑定器驱动器525返回包括所述方法的返回值的包裹对象。使用通信流900,在Hydroid OS660上运行的Hydroid应用982可以访问Android OS430的服务941的方法和数据。
[0100] 通信流900提供用于在Android OS430的进程和Hydroid OS660的应用之间共享数据的线程安全跨进程通信。例如,Hydroid应用982可以通过使用远程对象904传递对共享存储器的引用而经由共享存储器访问Android OS430的服务的共享数据。
[0101] 通信流900可以被用于允许在Hydroid OS660上运行的应用访问Android OS430的各种服务。例如,Android OS430的服务941可以是Android OS430的核心服务,例如电话服务、相机服务、位置服务等。可替换地,服务941可以是定制服务,例如远程通信服务448。
[0102] 图10图示根据各种实施例的使用跨环境通信框架的通信流1000。最初,远程通信服务448将绑定器接口暴露给客户端。在步骤1002,Android OS430的Android应用852向远程通信服务448登记(即,绑定到远程通信服务448)。在步骤1006,远程通信服务448实例化远程对象1004,并且将远程对象1004返回到Android应用852。
[0103] 在步骤1008,Hydroid OS660的Hydroid应用982通过经由绑定器内核驱动器525使用所暴露的接口绑定到远程通信服务448来向远程通信服务448登记。远程通信服务448返回远程对象1004,在步骤1014,Hydroid应用982接收所述远程对象1004。
[0104] 在步骤1016,Android应用852对远程对象1004进行调用。例如,Android应用852可以调用远程通信服务448的远程方法(FN1)。Android应用852可以向远程方法传递包括用于该远程方法的参数的包裹对象。所述包裹对象可以包括对共享存储器空间的引用。在步骤1018,绑定器驱动器525跨进程边界编排打包的数据,并且远程通信服务448接收所述数据。在步骤1020,远程通信服务448将数据解包,并且使用所述解包的数据在它的进程空间中运行所述方法,并且在步骤1022和1024,通过绑定器驱动器525返回远程对象。
[0105] 在步骤1026,Hydroid应用982通过远程对象1004调用远程通信服务448的远程方法(FN2)。该远程方法调用可以包括被打包到远程对象1004中的数据。在步骤1028,绑定器驱动器525跨进程边界编排打包的数据,并且远程通信服务448接收所述数据。然后,在步骤1030,远程通信服务448将数据解包并且使用所述数据在它的进程空间中运行所述方法,并且在步骤1032和1034,通过绑定器驱动器525返回远程对象1004。
[0106] 通信流1000提供用于在Android OS430的应用和Hydroid OS660的应用之间共享数据的线程安全跨进程通信。例如,Hydroid OS660的Hydroid应用982和Android OS430的Android应用852可以通过使用远程对象1004传递对共享存储器的引用而通过所述共享存储器共享数据。在通信流1000中,Android应用852和Hydroid应用982在远程方法调用返回时阻滞。因此,通信流1000提供Android应用852和Hydroid应用982之间的同步通信。然而,来自Android应用352和Hydroid应用982的远程方法调用可以是异步的,意味着应用852和982将立刻从对远程对象1004的调用中返回,并且不等待返回结果。
[0107] 在通信流1000的一个实施例中,远程通信服务448是Android OS430的绑定服务。在这个实施例中,当Android应用或Hydroid应用绑定到绑定服务时,由Android OS430创建所述服务。所述服务可以实施共享存储器接口,该共享存储器接口允许Android应用和Hydroid应用共享用户偏好、设置、和/或用户数据。
[0108] 在符合通信流1000的一个示例中,Android应用852和Hydroid应用982是电子表格程序。在通过远程对象访问的共享存储器中存储用户数据。在这个示例中,Android电子表格应用852和Hydroid电子表格应用982两者可以通过经由对远程对象1004的调用传递包括对共享存储器的引用的包裹对象而操纵用户数据。以这种方式,Android电子表格应用852和Hydroid电子表格应用982可以以线程安全的方式操纵在共享存储器中存储的电子表格的用户数据。
[0109] 因此,通信流1000允许在Hydroid OS660上运行的应用使用Android绑定器机制与在Android OS430上运行的应用通信。以这种方式,在Android OS430上运行的Android应用852和在Hydroid OS660上运行的Hydroid应用982可以快速和高效地共享设置、用户偏好、和/或用户数据。
[0110] 图11图示根据各种实施例的使用跨环境通信框架的各方面的通信流1100。如图11中所示,Android OS430的远程通信服务448包括UDP通信模块1146,并且Hydroid OS660的远程通信服务671包括UDP通信模块1176。在通信流1100中,Hydroid OS660的Hydroid应用982通过Android OS430的UDP模块1146和Hydroid OS660的UDP模块1176而与Android OS430的Android应用852通信。
[0111] 在一个示例中,Android应用852通过UDP模块1146绑定到共享内核520中的一个或多个套接字驱动器1121的套接字。Hydroid OS660的Hydroid应用982也通过UDP模块1176绑定到一个或多个套接字驱动器1121的所述套接字。然后,Android应用852向所述套接字发送UDP分组,并且Hydroid应用982通过Hydroid OS660的UDP模块1176接收所述UDP分组。
[0112] 如上面描述的,UDP不包括用于提供可靠性的握手或隐式数据排序。因此,通信流1100可以适合于Android OS430和Hydroid OS660的应用之间的通信,其中数据可靠性不是主要的考虑。例如,通信流1100可以被用于Linux流传送音频客户端以便从Android流传送音频应用或服务接收流传送音频信号。在这种情况下,对于Linux流传送音频客户端来说可能更重要的是保持通过通信流1100接收分组,而不是等待握手或重新发送任何丢弃的分组。
[0113] 如上面描述的,在一个实施例中Android移动OS和Linux桌面OS(“Hydroid”)在单个移动计算设备的相同的共享内核上并发地运行。Android移动OS通过移动计算硬件提供移动计算体验,并且Linux桌面OS通过具有与Linux OS相关联的用户体验概况的第二终端环境而提供桌面计算机体验。然而,其他OS组合被设想为在本发明的各种实施例内。例如,本发明的各方面可以被用于在共享内核上运行Windows Mobile和Windows7或者被用于运行共享共同内核-模式进程的Windows Mobile和Windows7。作为另一示例,在共享内核上运行的iOS和Mac OS X也在各种实施例的范围内。此外,由在共享内核上运行的嵌入式OS和桌面或移动OS的组合可以有利地使用本发明的各方面。
[0114] 为了图示和描述的目的提出上述描述。此外,所述描述不意欲将本发明的实施例限制为在这里公开的形式。虽然上面讨论了许多示例方面和实施例,本领域技术人员将认识到其某些变化、修改、置换、增加、和子组合。
[0115] 可以由能够执行对应功能的任何合适的手段来执行上面描述的方法的各种操作。所述手段可以包括一个或多个各种硬件和/或软件组件和/或模块,包括但不限于电路、专用集成电路(ASIC)、或处理器。
[0116] 可以利用被设计为执行在这里描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、现场可编程门阵列信号(FPGA)、或其他可编程逻辑设备(PLD)、分立门(discrete gate)、或晶体管逻辑、分立硬件组件、或其任何组合来实施或执行所描述的各种说明性逻辑块、模块、和电路。通用处理器可以是微处理器、但在替换方案中,处理器可以是任何市售处理器、控制器、微控制器、或状态机。处理器还可以被实施为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、与DSP核结合的一个或多个微处理器、或任何其他这样的配置。
[0117] 可以直接用硬件、用由处理器执行的软件模块、或用所述两者的组合实施结合本公开描述的方法或算法的步骤。软件模块可以在任何形式的有形存储介质中存在。可以使用的存储介质的一些示例包括随机存取存储器(RAM)、只读存储器(ROM)、闪存、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移除盘和CD-ROM等。存储介质可以被耦接到处理器,使得处理器可以从存储介质中读取信息和向存储介质写信息。在替换方案中,存储介质可以被集成到处理器中。软件模块可以是单个指令或许多指令,并且可以在几个不同的代码段上、在不同程序中、以及跨多个存储介质分布。
[0118] 在这里公开的方法包括用于实现所描述的方法的一个或多个动作。所述方法和/或动作可以彼此互换,而不背离权利要求的范围。换句话说,除非指定动作的具体顺序,否则可以修改具体动作的顺序和/或用途,而不背离权利要求的范围。
[0119] 可以用硬件、软件、固件或其任何组合实施所描述的功能。如果用软件实施,则所述功能可以被存储为有形的计算机可读介质上的一个或多个指令。存储介质可以是可以由计算机访问的任何可用有形介质。作为示例而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM、或其他光盘贮存器、磁盘贮存器、或其他磁贮存设备、或可用于以指令或数据结构的形式携带或存储所需程序代码并且可以由计算机访问的任何其他有形介质。如在这里使用的,盘(disk)和碟(disc)包括致密碟(CD)、激光碟、光学碟(optical disc)、数字通用碟(DVD)、软盘和蓝光 碟,其中盘通常磁性地再现数据,而碟利用激光光学地再现数据。
[0120] 因此,计算机程序产品可以执行在这里提出的操作。例如,这样的计算机程序产品可以是具有在其上有形地存储(和/或编码)了指令的计算机可读有形介质,可由一个或多个处理器执行所述指令以便执行在这里描述的操作。计算机程序产品可以包括封装材料(packaging material)。
[0121] 还可以经由传输介质传输软件或指令。例如,可以使用例如同轴电缆、光缆、双绞线、数字用户线(DSL)的传输介质、或例如红外线、无线电或微波的无线技术从网站、服务器、或其他远程源传输软件。
[0122] 此外,可以由用户终端和/或基站适当地下载和/或以其他方式获得用于执行在这里描述的方法和技术的模块和/或其他合适的装置。例如,这样的设备可以被耦接到服务器以便利于传递执行在这里描述的方法的装置。可替换地,可以经由贮存装置(例如,RAM、ROM、诸如CD或软盘的物理存储介质等)提供在这里描述的各种方法,使得用户终端和/或基站可以在将贮存装置耦接到或提供到所述设备时获得各种方法。此外,可以使用用于向设备提供这里描述的方法和技术的任何其他适当的技术。
[0123] 其他示例和实施方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,可以使用由处理器、硬件、固件、硬连线、或这些项目中的任何项目的组合执行的软件来实施上面描述的功能。实施功能的特征还可以在物理上位于各种位置,包括被分布使得在不同的物理位置处实施功能的多个部分。此外,如在这里使用的,包括在权利要求中,如在由“至少一个”结尾的项目列表中使用的“或”表示选言列表(disjunctive list),使得例如“A、B或C中的至少一个”的列表意味着A或B或C或AB或AC或BC或ABC(即,A和B和C)。此外,术语“示例的”不意味着所描述的示例是优选的或比其他示例更好。
[0124] 可以做出对在这里描述的技术的各种改变、替代和变更,而不背离如由所附权利要求定义的教导的技术。此外,本公开和权利要求的范围不限于上面描述的过程、机器、制造品、物质的组合、装置、方法、和动作的特定方面。可以使用现有的或后来开发的、执行与在这里描述的对应方面基本相同的功能或实现基本相同的结果的过程、机器、制造品、物质的组合、装置、方法或动作。因此,所附权利要求在它们的范围内包括这样的过程、机器、制造品、物质的组合、装置、方法、或动作。