一种基于ARM平台的Android启动加速方法

文档序号:6544814阅读:397来源:国知局
一种基于ARM平台的Android启动加速方法
【专利摘要】本发明提供一种基于ARM平台的Android启动加速方法,采用技术,对Android启动过程进行加速,通过采用BLCR技术对Android启动过程比较耗时的Zygote进程预加载类和预加载资源过程进程断点设置,然后在进程启动到执行断点时保存进程的当前状态和信息到一个镜像文件中,下次启动的时候直接从镜像文件中启动该进程,从而跳过了耗时的预加载类和预加载资源过程,达到开机启动加速的目的。通过本发明的BLCR技术实现的Android加速,可以将Android的启动时间缩短至少13秒,对Android的启动速度提高了接近30%~40%,而且这种方式对Android的后续性能没有影响。
【专利说明】-种基于ARM平台的Android启动加速方法

【技术领域】
[0001] 本发明属于计算机操作系统【技术领域】,特别是提供一种针对ARM平台的Android 启动加速的方法。

【背景技术】
[0002] Android开机启动加速,近年来越来越受人们关注了。主要是由于Android设备的 大量普及。而且相对于很少关机的手机,其他智能设备如:平板电脑等越来越普及,而且这 些设备相对于手机来说是需要经常的开关机,所以其启动速度直接影响到用户体验,也是 判断产品的优劣一个重要标准。
[0003] Android的开机启动优化一直以来都是一个非常热门的研究领域,而且现在业界 对Android开机快速启动的需求越来越紧迫。目前国内外有很多人对Android的开机启动 过程进行相关工作的研究。
[0004] 一种是采用电源管理的技术,使用休眠或睡眠的方式对Android系统进行非真正 意义上的关机,当用户需要使用设备时再唤醒设备。这种"热启动"的方式还是会有一定程 度的电源消耗,而且也不是真正意义上的关机,很难满足用户的需求。
[0005] 还有一种方式是将Android启动过程的Zygote预加载类和资源进行了裁剪,这种 方式对Android启动后的后续性能带来不良的影响。因为打开应用程序的次数远远多于用 户开关机的次数。因为这些预加载类和资源都是Google工程师精心设计的,缺少了这些预 加载的类和资源,后续的应用启动速度需要重新加载这些类和资源,从而导致应用程序启 动速度变慢。
[0006] 还有的是通过特殊的硬件支持实现的,类似休眠技术,不过这种加速方法可以实 现"冷启动",通过从FLASH非易失性存储介质中加载启动时需要的核心数据,等启动完成 后再后续加载其他非核心数据完成启动,虽然启动速度有很大的提升,但是需要特殊硬件 的支持,使用范围受到了很大的限制。
[0007] 在Android系统中,从目前来看这些优化方法有些存在方法使用范围具有局限 性,有些方法会带来一些Android启动后的后续性能问题,有些方法需要特殊的硬件支持 等。这些是不能满足Android启动加速需求的。


【发明内容】

[0008] 本发明的目的在于克服现有技术的不足,提供一种基于ARM平台的Android启动 加速方法。
[0009] 为了实现上述发明目标,采用的技术方案如下: 一种基于ARM平台的Android启动加速方法,包括如下步骤: (1)修改Linux内核编译选项,添加 Enable loadable module support以支持动态模 块加载。编译基于ARM平台的Linux内核镜像。修改Linux内核配置为基于ARM平台,修改 BLCR(Berkeley Lab Checkpoint/Restart)内核模块文件以支持ARM平台。然后交叉BLCR 编译动态内核模块。
[0010] (2)修改Android的bionic的线程库文件,添加 BLCR动态链接库模块所需的线程 库API函数接口,修改Android的启动脚本Init. rc,实现将BLCR的动态内核模块在系统进 入用户空间后添加进去的功能,以供后续BLCR动态链接库调用。
[0011] (3)编写了 Android平台下调用BLCR内核模块的动态链接库编译的Android, mk 文件,并对BLCR动态链接库模块进行了修改以支持Android系统。将BLCR在X86平台的 API库移植到ARM平台。
[0012] (4)编写了 Android平台下的JNI接口函数,调用BLCR底层动态链接库。编写了 在Zygotelnit. java文件中通过JNI调用BLCR模块,在耗时的预加载类及预加载资源过程 之后设置断点,将Zygote进程保存到镜像文件中。下次启动时通过恢复进程的镜像文件, 从断点处往下执行程序,跳过了耗时的预加载类及预加载资源的过程,从而提高了 Android 的启动速度。
[0013] (5)编写Android启动的Init. rc调用的脚本,判断镜像文件是否存在,如果存在 则直接从镜像文件启动,如果不存在,则生成通过调用BLCR动态内核模块生成Zygote进程 的镜像文件。
[0014] 如步骤(1)所述将BLCR技术移植到ARM平台,然后通过修改BLCR的内核模块源 码,使其支持ARM平台,然后通过交叉编译链将其编译成基于ARM平台的动态加载模块。
[0015] 步骤(2)中,由于Android为了具有更高的效率、低内存占用、非常快和小的线程 实现、内置了对Android特有服务的支持等特点。使用了优化和裁剪的libc库bionic, bionic使用的线程库由于部分被裁剪了,Android系统的bionic并没有实现所有的P0SIX 线程库中的API。所以为了支持BLCR底层函数API使用了的线程库,需要添加 BLCR所需的 线程函数API。
[0016] 所述步骤(3)修改BLCR的动态链接库文件,使其可以在Android平台下供上层 Java应用程序通过JNI进行调用,通过设置断点来实现进程镜像文件的生成。需要编写相 应平台的Android, mk文件生成ARM平台的动态链接库。
[0017] 步骤(4)通过对Zygotelnit. java文件的修改,对Android启动过程中比较耗时 的预加载类与预加载资源过程采用BLCR技术进行优化,优化的方式是采用BLCR的断点重 启技术,在断点处将Zygote进程保存到镜像文件中,下次启动的时候直接从镜像文件中启 动,从而加快Android的启动速度。
[0018] 所述步骤(5)通过修改Android的启动脚本Init. rc添加判断是否生成了 Zygote 进程的镜像文件的执行脚本,如果存在,则从该镜像文件启动Zygote进程,如果不存在则 通过执行正常的启动流程生成Zygote进程的镜像文件。
[0019] 步骤(5)实现Android系统的"冷启动",相比基于电源管理的休眠方式"热启动" 技术,可以更加有效的节约电能。而且,采用BLCR技术弥补了预加载类和预加载资源的裁 剪或定制影响Android系统后续性能的问题。
[0020] 与现有技术相比,本发明具有如下优点和技术效果: a、支持所有ARM平台的Android系统 通过移植BLCR技术,对Android系统的Zygote进程的耗时的预加载类及预加载资 源进行优化,从而达到加快Android启动的目的,这种方式适用于所有的基于ARM平台的 Android 系统。
[0021] b、采用"冷启动"方式实现的加速 本发明适用的加速方式是基于"冷启动的",相比其他基于电源管理技术的"热启动"方 式,可以让用户真正意义上的关机,这样可以更好的节约能源。同时也满足了用户对快速启 动Android系统的需求。
[0022] c、采用BLCR断点重启技术实现的加速 采用BLCR技术实现的加速方法,弥补了传统优化方法(对Android系统预加载类及预 加载资源进行定制和裁剪)对Android的后续性能产生不良影响的缺陷。本发明采用的方 法对Android启动后的后续性能没有影响。
[0023] d、Android启动加速的高效性和可靠性 本发明的BLCR技术对Android的启动加速,可以将Android的启动时间缩短至少13 秒,对Android的启动速度提高了接近309Γ40%。而且该项技术对Android启动后的后续性 能没有影响,是一项高效而且可靠的加速方法。
[0024] 本发明通过BLCR技术对基于ARM平台的Android的启动过程进行加速,通过移植 BLCR技术模块到ARM平台,并通过bootchart工具对Android的启动瓶颈进行度量,然后采 用BLCR技术对Android的启动过程的瓶颈进行优化,其中通过添加 Android的bionic库 的线程库API来支持BLCR技术的动态链接库模块的底层内核调用。然后在Zygote进程预 加载类及预加载资源完成之后对Zygote进程进行断点设置,保存Zygote进程到一个镜像 文件中,下次启动的时候,直接从镜像文件中启动Zygote进程,从而达到加速Android启动 过程的目的。这种方式对Android启动后的后续性能没有影响,弥补了传统加速方法(裁剪 模块或定制Android服务的方式)对后续性能产生影响的缺陷。而且适用于所有基于ARM 平台的Android系统,采用"冷启动"的方式,节约了设备的能源,也满足了 Android用户对 真正意义上的关机服务的需求。

【专利附图】

【附图说明】
[0025] 图1为Android启动加速总体架构逻辑示意图; 图2为BLCR设置断点保存Zygote进程流程示意图; 图3为BLCR设置断点恢复Zygote进程流程示意图; 图4为Android加速后的启动流程示意图。

【具体实施方式】
[0026] 下面结合附图,对本发明的具体实施做进一步的详细描述,但本发明的实施和保 护不限于此。
[0027] 图1展示了 Android启动加速的总体架构,该图主要包括: 1.实现Android启动加速对BLCR动态可加载内核模块改动。
[0028] 2.对BLCR基于Android平台的动态链接库的改动。
[0029] 3.支持BLCR技术的bionic线程库函数接口的添加。
[0030] 4. Android启动执行流程的改动。
[0031] 具体如下: 图中,BLCR技术可动态加载内核模块,主要将BLCR技术的动态加载内核模块移植到基 于ARM平台下,BLCR动态加载模块,是BLCR内核级单机检查点技术的核心,主要通过进入 内核态完成对Zygote进程上下文信息、进程地址空间信息的保存。
[0032] BLCR用户态的底层调用接口,主要对为支持Android平台进行相关的修改,BLCR 的动态链接库是链接Android启动加速框架层与Android内核层的桥梁,动态链接库通过 调用内核层的BLCR动态内核模块实现进程的动态保存。
[0033] 支持BLCR断点重启技术,对Zygote进程执行过程进行了相应的改动,主要是在比 较耗时的预加载类与预加载资源完成之后设置断点,在断点处保存进程的上下文信息、地 址空间信息、相关进程的寄存器信息。
[0034] 支持BLCR断点重启技术,对Init进程的执行流程进行的修改,主要有动态加载 BLCR技术的内核模块,根据镜像文件是否存在来决定是从镜像文件启动Zygote进程,从镜 像文件启动Zygote进程可以跳过耗时的预加载类与预加载资源的过程,从而达到Android 启动加速的目的。
[0035] 附图2展示了使用BLCR技术对Android进行加速时,对Zygote进程设置断点,将 Zygote进程保存到镜像文件中的过程,进程的镜像文件是下次启动时直接从文件恢复进程 后从断点处往下执行的基础。其具体执行过程如下: 步骤21、将Zygote进程进行阻塞,开始执行进程状态信息的保存; 步骤22、保存Zygote进程地址空间信息,主要包括进程的数据段、堆栈段信息,进程的 代码段不需要保存,可以通过保存进程的可执行二进制文件路径; 步骤23、保存Zygote进程进行上下文切换的CPU信息,主要包括PC程序计数器、PSW 寄存器的内容等等; 步骤24、保存Zygote进程的打开文件描述符,以便下次从镜像文件中启动后可以恢复 到保存时的状态。
[0036] 步骤25、保存Zygote进程的信号状态和信号处理函数,以便下次进程可以正常捕 获信号并进行相应的处理。
[0037] 步骤26、完成将进程保存到镜像文件后,启动Zygote进程让其继续往下执行,启 动Android系统。
[0038] 附图3展示了使用BLCR技术对Android进行加速时,从Zygote进程镜像文件中 恢复Zygote进程后,从保存的断点处开始继续往下执行的过程,这也是Android启动加速 的关键,跳过了耗时的Zygote预加载类和预加载资源的过程。具体如下: 步骤31、阻塞Zygote进程的运行,直接从镜像文件中加载Zygote进程,进程的代码段 通过保存的进程可执行文件路径进行恢复; 步骤32、将镜像文件中通过断点保存的Zygote进程地址空间信息进行恢复,主要包括 进程的数据段和堆栈段; 步骤33、将镜像文件中保存的Zygote进程的上下文切换信息进程恢复,主要有PC程序 计数器、PSW状态寄存器; 步骤34、根据镜像文件恢复Zygote进程的打开文件描述符; 步骤35、根据镜像文件恢复Zygote进程的信号状态和信号处理函数; 步骤36、启动Zygote进程,然后从断点处继续往下执行,这样便可以跳过耗时的预加 载类与预加载资源的过程,实现Android的启动加速; 附图4展示了采用BLCR技术对Android启动加速的完整启动过程,下面将详细描述 Android系统启动时使用该发明方法的启动过程,具体如下: 步骤41、Android启动开机,包括了 bootloader、Android底层linux内核的启动。
[0039] 步骤42、Kernel启动完成之后,开始启动Init进程,Init进程通过读取Init. rc 完成进入Android系统用户空间的初始化工作,包括文件系统的创建、Android系统服务的 创建等等。
[0040] 步骤43、如果步骤42成功完成,接下来就是通过insmod的方式执行BLCR动态内 核模块的加载,为后续BLCR技术加速Android启动建立基础。
[0041] 步骤44、判断是否存在Zygote进程的镜像文件来决定是否启动执行流程,如果存 在则从镜像文件中创建Zygote进程,从断点处开始往下执行,如果不存在,则执行正常的 Android启动流程。
[0042] 步骤45、如果Zygote进程镜像文件存在,从镜像文件中启动Android系统,跳过耗 时的预加载类和预加载资源的过程,从BLCR在Zygote进程中设置的断点处继续往下执行, 完成Android的启动流程。
[0043] 步骤46、如果镜像文件不存在,则执行Android的正常启动流程,执行到Zygote进 程的BLCR断点处时,将此时的Zygote进程保存到镜像文件中,主要包括进程的地址空间信 息和进程的上下文信息等等。
[0044] 步骤47、通过SystemServer进程完成Android系统除在Init进程启动的所有其 他服务的启动。
[0045] 步骤48、Android启动完成,进入系统主界面。
[0046] 本发明对Android启动速度进行深入的研究,采用BLCR (Berkeley Lab Checkpoint/Restart)技术,对Android启动过程进行加速,通过采用BLCR技术对Android 启动过程比较耗时的Zygote进程预加载类和预加载资源过程进程断点设置,然后在进程 启动到执行断点时保存进程的当前状态和信息到一个镜像文件中,下次启动的时候直接从 镜像文件中启动该进程,从而跳过了耗时的预加载类和预加载资源过程,达到开机启动加 速的目的。通过本发明的BLCR技术实现的Android加速,可以将Android的启动时间缩短 至少13秒,对Android的启动速度提高了接近30%?40%,而且这种方式对Android的后续性 能没有影响,是一种高效而且可靠的加速方法,满足了对Android系统开机快速启动的需 求。
【权利要求】
1. 一种基于ARM平台的Android启动加速方法,其特征在于包括如下步骤: (1) 修改Linux内核编译选项,添加 Enable loadable module support以支持动态模 块加载;编译基于ARM平台的Linux内核镜像;修改Linux内核配置为基于ARM平台,修改 Berkeley Lab Checkpoint/Restart即BLCR内核模块文件以支持ARM平台;然后BLCR编 译动态内核模块; (2) 修改Android的bionic的线程库文件,添加 BLCR动态链接库模块所需的线程库 API函数接口,修改Android的启动脚本Init. rc,实现将BLCR的动态内核模块在系统进入 用户空间后添加进去的功能,以供后续BLCR动态链接库调用; (3) 编写Android平台下调用BLCR内核模块的动态链接库编译的Android, mk文件,并 对BLCR动态链接库模块进行修改以支持Android系统;将BLCR在X86平台的API库移植 到ARM平台; (4) 通过使用BLCR技术实现Android系统的Zygote进程的镜像备份和从镜像文件中 直接启动的方法,从而跳过了耗时的Zygote进程预加载类与预加载资源的过程; (5) 编写Android启动的Init. rc调用的脚本,判断镜像文件是否存在,如果存在则直 接从镜像文件启动,如果不存在,则生成通过调用BLCR动态内核模块生成Zygote进程的镜 像文件。
2. 根据权利要求1所述的基于ARM平台的Android启动加速方法,其特征在于步骤(1) 然后通过修改BLCR的内核模块源码,使其支持ARM平台,然后通过交叉编译链将其编译成 基于ARM平台的动态加载模块。
3. 根据权利要求1或2所述的基于ARM平台的Android启动加速方法,其特征在于在 步骤(2)中,添加了 Android平台下BLCR动态链接库所需线程库API函数接口以及修改了 Android启动过程的Init. rc脚本,动态添加了 BLCR技术内核模块。
4. 根据权利要求3所述的基于ARM平台的Android启动加速方法,其特征在于所述步 骤(3)通过修改BLCR支持Android系统的动态库源码以支持ARM平台的所有Android系 统。
5. 根据权利要求4所述的基于ARM平台的Android启动加速方法,其特征在于步骤 (4)通过编写Android平台下的JNI接口函数,调用BLCR底层动态链接库;在Zygotelnit. java文件中通过JNI调用BLCR模块,在耗时的预加载类及预加载资源过程之后设置断点, 将Zygote进程保存到镜像文件中;下次启动时通过恢复进程的镜像文件,从断点处往下执 行程序,跳过耗时的预加载类及预加载资源的过程。
【文档编号】G06F9/445GK104102506SQ201410170411
【公开日】2014年10月15日 申请日期:2014年4月25日 优先权日:2014年4月25日
【发明者】刘发贵, 缪汉威 申请人:华南理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1