移动终端操作系统基于全系统扩展调用图的自动优化方法

文档序号:6618195阅读:248来源:国知局
专利名称:移动终端操作系统基于全系统扩展调用图的自动优化方法
技术领域
本发明涉及移动通信领域,特别涉及一种移动终端操作系统基于全系统扩展调用图的自动优化方法。
背景技术
在中国,互联网和移动设备的发展相互影响,形成强大的普及浪潮。以智能手机、上网本为代表的移动终端在激烈的竞争中迅猛发展。根据中国互联信息网络中心(CNNIC)第29次互联网调查报告称,截止2011年12月底,中国有5. 13亿互联网用户,其中手机上网用户3. 56亿,占网民总体的近69. 4%。以安卓(Android)系统为代表的移动终端开源操作系统的使用比例和影响能力在不断扩大。GARTNER公司的报告显示,在2011年的第四季度,Android是全球使用最广泛的智能手机操作系统,在全球智能手机中的市场占有率约50%。Android系统一开始就是用开源、开放的开发方式,受到业界和学术界的广泛关注,自从发布以来,Android的版本基本上每半年一个台阶地向前发展。其平台的开放性也吸引了大量的第三方开发者进行应用程序开发,Android Market上的应用程序数量从2009年12月的1.6万迅速增长到2012年上半年的50万。随着近年移动设备和相关软件的迅速发展,移动设备上的操作系统和应用程序的复杂性、程序体积都比几年前大幅提高,这也就对移动操作系统的优化提出了很多新的需求。在这些快速发展中,有相当数量原来用于桌面和服务器系统的组件仅作少量移植后就用于移动操作系统上,例如Android系统自身就使用了一百余个外来的开源软件代码,它们既包括最底层的Linux内核,也包括上层的WebKit浏览器引擎等。这些组件并非专门针对移动操作系统所编写,移植到移动操作系统以后往往还存在优化空间,但如果对它们一一进行手工优化将耗费大量人力物力资源。因此发明一种能自动进行全系统优化的方法非常有必要。Android系统分为四层,从上到下依次为·应用程序使用Java语言编写,可通过Java本地接口(JNI)调用本地代码。 应用程序框架使用Java、C、C++编写,向应用程序提供活动管理器、窗口管理器等服务。·系统库和Android运行时环境使用C/C++以及少量汇编编写,为应用程序和应用程序框架提供必要的与系统交互的接口。· Linux内核操作系统内核,使用为Android修改过的Linux内核。整个Android系统(Android_x86,20120215版本)包含2270万行代码,包括C、C++、Java以及其他语言。除了 Linux内核以外,系统中共有950万行本地代码(C、C++及
少量汇编)。Android系统基于Linux内核,但并没有使用其他Linux系统常用的GNU Iibc(服务器、桌面Linux系统常用)或uClibc (基于Linux的嵌入式系统常用),而是使用了专有的C库,称为Bionic。Bionic库的部分代码衍生自BSD,部分专门为Android编写,并针对Android系统作了优化和精简,删除了 Android不需要的功能。优化后的Bionic库的代码体积显著减小,在x86平台上仅有GNU Iibc的26%, uClibc的62%。从Bionic的例子可以看出,通用的代码在被用于特定的系统时会有比较大的优化空间。据此可以推测=Android上的其他组件也会有优化的空间,尤其是那些原本为服务器和桌面系统编写的组件。由于工作量的关系,Android没有也不可能为系统中的每一个组件都人工进行如此细致的优化。本发明通过一种自动进行全系统优化的方法解决了这个问题。本发明给出移动终端操作系统基于全系统扩展调用图的自动优化方法,从全系统编译后的目标文件中读取信息,基于这些信息构建全系统的扩展调用图,进一步找出扩展调用图中的有效子图,根据有效子图对目标文件进行二进制重写后,链接生成优化后的可执行文件和动态库文件。本发明使用自动的方法进行全系统分析和优化,不影响系统的源代码,优化过程不需人工干预,优化后的系统体积减小,性能有所提升,具有重要的实际意义和应用价值。

发明内容
本发明使用程序分析技术,设计出一种移动终端操作系统基于全系统扩展调用图的自动优化方法,方法针对目前广泛采用的移动终端操作系统中的软件优化问题,给出自动优化的方法。以Android系统为例,要求考虑除了底层Linux内核以外的所有本地代码,对它们进行自动优化,在确保优化后的系统正确性不受影响的前提下,消除无用代码,减小代码体积,提升系统性能。本发明的特征在于,是在计算机中依次按以下步骤实现的步骤(I):编译移动终端操作系统的源代码,生成可重定位的目标文件;从源代码服务器中下载源代码,修改相关的Makefile,向CFLAGS添加“-ffunction-sections”参数和“-fdata-sections”参数以使编译器将每个函数和数据对象编译到单独的段中,再运行make命令自动编译所述源代码生成可重定位的目标文件,其中函数和数据对象统称为“实体”,所述数据对象既包括源代码中定义的全局和静态变量,也至少包括虚函数表在内的编译器生成的数据对象;步骤(2):按以下步骤构造有向的全系统扩展调用图步骤(2.1):对步骤(I)得到的目标文件,读取以下信息,其中包括SS、GS、AF和AU SS,所述目标文件中所有包含有所述实体的段的名称集合,GS,所述目标文件中定义的所有全局符号及其名称,并以关联表的形式存储,以便从全局符号的名称迅速查找所在的段的名称,AF,头和尾都属于同一个所述目标文件的有向边形成的集合,AU,头属于一个所述目标文件,尾为暂未解析的符号的有向边,其中每一个兀素表示为(u, sym),其中u属于SS,是所述目标文件中的一个所述实体,sym为一个外部符号的名,表示被实体u引用,但不在同一个所述目标文件中定义的实体,
步骤(2. 2),根据步骤(2.1)中所得到的信息,合并为一个系统全局的有向图,从而得到所述扩展调用图的V和E,其中V为所有所述目标文件SS的并集,是一个结点集,其中每一个结点的名称用所对应的一个二元组表示,其中包括目标文件名和段名,E为有向边集,它包括两部分=E=E1 U E2,其中E1为所有所述目标文件的AF的并集,代表了头和尾都属于同一个所述目标文件的有向边所形成的集合,E2为头和尾属于不同的所述目标文件的有向边形成的集合,按以下方法得到首先,令馬=0,再遍历每个所述目标文件的AU集合,对其中的每一个元素(U,sym),查找所有所述目标文件的GS集,得到所有名称为sym的全局符号的所述实体集合S[sym],将所有二元组(U,V) I ves[sym]加入集合E2,并将E1与E2取并集得到E,其中每一个元素是一对结点(U,V),对应所述系统扩展调用图中一条从u到V的有向边,当且仅当u的重定位数据中有相对V的重定位记录时,在所述系统扩展调用图中存在一条从u到V的边,步骤(2. 3),按以下步骤得到入口点集R 步骤(2.3.1),令i =0,步骤(2. 3. 2),把同程序启动代码对应的所述实体作为一个结点加入所述入口点集R,在Android中_start符号所对应的实体即为程序启动代码,步骤(2. 3. 3),把可能通过动态绑定使用的所述实体作为一个结点加入所述入口点集R,步骤(2. 3. 4),把位于不以.text、, data、, rodata、. bss打头的段中的所述实体作为一个结点加入所述入口点集R,步骤(2.4),从步骤(2.1)至步骤(2.3)得到的V、E、R表示为一个所述的系统调用图 G=(V,E,R);步骤(3),按以下步骤从步骤(2)得到的所述系统扩展调用图G中得到有效子图Gs= (Vs, Es, R),其中Vs为有效结点集,Es为有效的有向边集,表示为
权利要求
1.一种移动终端操作系统基于全系统扩展调用图的自动优化方法,其特征在于,是在计算机中依次按以下步骤实现的步骤(I):编译移动终端操作系统的源代码,生成可重定位的目标文件;从源代码服务器中下载源代码’修改相关的Makefile,向CFLAGS添加 “-ffunction-sections”参数和“-fdata-sections”参数以使编译器将每个函数和数据对象编译到单独的段中,再运行make命令自动编译所述源代码生成可重定位的目标文件,其中函数和数据对象统称为“实体”,所述数据对象既包括源代码中定义的全局和静态变量, 也至少包括虚函数表在内的编译器生成的数据对象;步骤(2):按以下步骤构造有向的全系统扩展调用图步骤(2.1):对步骤(I)得到的目标文件,读取以下信息,其中包括SS、GS、AF和AU SS,所述目标文件中所有包含有所述实体的段的名称集合,GS,所述目标文件中定义的所有全局符号及其名称,并以关联表的形式存储,以便从全局符号的名称迅速查找所在的段的名称,AF,头和尾都属于同一个所述目标文件的有向边形成的集合,AU,头属于一个所述目标文件,尾为暂未解析的符号的有向边,其中每一个兀素表不为 (u, sym),其中u属于SS,是所述目标文件中的一个所述实体,sym为一个外部符号的名,表示被实体u引用,但不在同一个所述目标文件中定义的实体,步骤(2. 2),根据步骤(2.1)中所得到的信息,合并为一个系统全局的有向图,从而得到所述扩展调用图的V和E,其中V为所有所述目标文件SS的并集,是一个结点集,其中每一个结点的名称用所对应的一个二元组表示,其中包括目标文件名和段名,E为有向边集,它包括两部分=E=E1 U E2,其中E1为所有所述目标文件的AF的并集,代表了头和尾都属于同一个所述目标文件的有向边所形成的集合,E2为头和尾属于不同的所述目标文件的有向边形成的集合,按以下方法得到首先,令及=0 ,再遍历每个所述目标文件的AU集合,对其中的每一个元素(u,sym),查找所有所述目标文件的GS集,得到所有名称为sym的全局符号的所述实体集合S [sym],将所有二元组(u, v) I ve S[sym]加入集合E2, 并将E1与E2取并集得到E,其中每一个元素是一对结点(U,V),对应所述系统扩展调用图中一条从U到V的有向边,当且仅当U的重定位数据中有相对V的重定位记录时,在所述系统扩展调用图中存在一条从U到V的边,步骤(2. 3),按以下步骤得到入口点集R :步骤(2. 3. 1),令R=0,步骤(2. 3. 2),把同程序启动代码对应的所述实体作为一个结点加入所述入口点集R, 在Android中_start符号所对应的实体即为程序启动代码,步骤(2. 3. 3),把可能通过动态绑定使用的所述实体作为一个结点加入所述入口点集R,步骤(2. 3. 4),把位于不以.text、, data、, rodata、. bss打头的段中的所述实体作为一个结点加入所述入口点集R,步骤(2. 4),从步骤(2.1)至步骤(2. 3)得到的V、E、R表示为一个所述的系统调用图 G= (V, E, R);步骤(3),按以下步骤从步骤(2)得到的所述系统扩展调用图G中得到有效子图 Gs= (Vs, Es, R),其中Vs为有效结点集,Es为有效的有向边集,表示为
全文摘要
一种移动终端操作系统基于全系统扩展调用图的自动优化方法,涉及移动终端软件领域,所述方法适用于移动终端操作系统,可以实现在全系统范围内消除无用代码,在不降低系统性能的前提下减小系统代码体积,从而减少移动终端硬件制造成本。方法的主要步骤如下编译源代码得到目标文件;从目标文件出发,构建全系统所有本地代码的扩展调用图;对扩展调用图进行分析,从入口点开始得到扩展调用图的有效子图;对编译生成的目标文件进行重写,删除所有不在有效子图中的代码;链接生成优化的二进制代码。本发明具有应用范围广、自动化程度高、使用方便、优化效果明显等特点。
文档编号G06F9/44GK103034486SQ20121049545
公开日2013年4月10日 申请日期2012年11月28日 优先权日2012年11月28日
发明者董渊, 王生原, 李叠, 骆欢 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1