论文部分内容阅读
近几年来,随着云计算的大力发展,它已经成为一种整合软、硬件资源的重要方式,通过云计算来改善硬件资源的部署和资源的管理模式。通过云计算服务,用户可以通过互联网像用煤电般扩展自身的计算与存储能力。另外,随着智能手机的越来越普及,用户对智能手机的上网体验、图像软件的处理速度等需求要求越来越高,进而对手机硬件配置提出更高的要求。在这种环境下,如果能将网络通信和云计算服务进行结合,它不仅充分利用了移动网络的带宽,而且结合了PC时代的云计算的云平台(PaaS)的服务模式,即是通过云计算平台供应商将业务软件的开发环境、运行环境作为一种服务,通过移动互联网提交给用户,在云端运行用户手机终端的应用程序,提高应用程序的运行速度。本论文就是结合云计算和安卓系统,提出了一个基于Android4.0平台的安卓应用的虚拟化框架,该框架包括静态分析模块、动态分析模块、虚拟化指令添加与内存获取模块、服务端克隆与手机端恢复模块以及服务端和移动端的通信模型五个部分。首先是对应用程序APK文件进行静态分析,确定适合迁移函数的范围,然后修改Android4.0系统,添加虚拟化指令,获取转移函数的上下文数据,接着对函数进行动态分析,若满足转移条件(该函数适合虚拟化),就将该函数通过网络转移到云端执行,并将函数执行的结果返回到移动端,以加速应用的执行效率。依据安卓虚拟化框架设计,本文着重研究了如下模块:首先,虚拟化指令添加和内存获取模块,该模块分为虚拟化指令添加和内存获取两个子模块。针对虚拟化指令添加模块,本文首先是通过调试分析了dex文件(安卓应用的可执行文件)解析过程和Android4.0平台的指令集的设计与实现原理,然后在根据应用程序函数训练的结果对满足转移条件的函数添加自定义的指令,以支持虚拟化。针对内存获取模块,本文通过研究Dalvik虚拟机的垃圾回收机制、Dalvik虚拟机自身访问内存的方式,设计并实现了一个获取函数上下文数据的模块。其次,服务器端和移动端的通信模块,该模块包括移动端和服务器端两部分。针对该通信模块的研究内容,移动端主要是解决何时创建迁移线程、如何和被转移线程通信以及出错处理;服务器端,除了解决移动端涉及的内容外,更重要的是采用程序插桩技术解决了如何执行移动端被转移的函数。