《基于系统扩展调用图的操作系统自动优化方法和系统.pdf》由会员分享,可在线阅读,更多相关《基于系统扩展调用图的操作系统自动优化方法和系统.pdf(17页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103116514 A(43)申请公布日 2013.05.22CN103116514A*CN103116514A*(21)申请号 201310084560.5(22)申请日 2013.03.15G06F 9/45(2006.01)(71)申请人清华大学地址 100084 北京市海淀区100084-82信箱(72)发明人董渊 王生原 李叠 骆欢(74)专利代理机构北京清亦华知识产权代理事务所(普通合伙) 11201代理人张大威(54) 发明名称基于系统扩展调用图的操作系统自动优化方法和系统(57) 摘要本发明提出一种基于系统扩展调用图的操作系统自动优化方法,包括:对操作。
2、系统的源代码进行编译,生成可重定向的目标文件;根据目标文件构造系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系;根据系统扩展调用图生成操作系统的有效子图;根据有效子图对目标文件进行重写,得到优化后的目标文件;对优化后的目标文件进行链接,得到优化后的操作系统。本发明自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。本发明还公开了一种基于系统扩展调用图的操作系统自动优化系统。(51)Int.Cl.权利要求书2页 说明书12页 附图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书12页 附图2页(10。
3、)申请公布号 CN 103116514 ACN 103116514 A1/2页21.一种基于系统扩展调用图的操作系统自动优化方法,其特征在于,包括以下步骤:对操作系统的源代码进行编译,生成可重定向的目标文件;根据所述目标文件构造系统扩展调用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;根据所述系统扩展调用图生成所述操作系统的有效子图;根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;以及对所述优化后的目标文件进行链接,得到优化后的所述操作系统。2.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述对操作系统的源代码。
4、进行编译进一步包括:对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。3.如权利要求2所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,使用编译器中的编译选项生成所述单独的段。4.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;所述边集包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。5.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述有效子图。
5、的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。6.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信息删除。7.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。8.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,构造所述操作系统的所述系统扩展调用图进一步包括:使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;将所述目标文件的信息集合合并为全局有向图,得到。
6、所述系统扩展调用图的所述结点集合和所述边集合;将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。9.一种基于系统扩展调用图的操作系统自动优化系统,其特征在于,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,所述编译模块,用于对操作系统的源代码进行编译,生成可重定向的目标文件;所述系统扩展调用图生成模块,用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;所述有效子图生成模块,用于根据所述系统扩展调用图生成所述操作系统的有效子图;所述重写模块。用于根据所述有效子图对所述目。
7、标文件进行重写,得到优化后的所述权 利 要 求 书CN 103116514 A2/2页3目标文件;以及所述链接模块,用于对所述优化后的目标文件进行链接,得到优化后的所述操作系统。10.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块对操作系统的源代码进行编译进一步包括:所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。11.如权利要求10所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块使用编译器中的编译选项生成所述单独的段。12.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述系。
8、统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。13.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。14.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信。
9、息删除。15.如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。16.如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。权 利 要 求 书CN 103116514 A1。
10、/12页4基于系统扩展调用图的操作系统自动优化方法和系统技术领域0001 本发明涉及移动通信领域,特别涉及一种基于系统扩展调用图的操作系统自动优化方法和系统。背景技术0002 互联网和移动设备相互影响、彼此促进的发展掀起了强大的移动浪潮。以智能手机、上网本为代表的移动终端在激烈的竞争中迅速发展。根据中国互联信息网络中心(CNNIC)第29次互联网调查报告称,截止2011年12月底,中国共有5.13亿互联网用户,其中手机上网用户3.56亿,占网民总体的近69.4%。0003 同时,以安卓(Android)系统为代表的移动终端开源操作系统的使用比例和影响力在不断扩大。GARTNER公司的报告显示,。
11、在2011年的第四季度,Android是全球使用最广泛的智能手机操作系统,在全球智能手机中的市场占有率约50%。0004 Android系统开始就采用开源、开放的开发模式,受到业界和学术界的广泛关注。自发布以来,Android的版本基本保持半年一个台阶地速度发展。其平台的开放性吸引了大量的第三方开发者进行应用程序开发,Android Market上的应用程序数量从2009年12月的1.6万迅速增长到2012年上半年的50万。0005 随着近年移动设备和相关软件的迅速发展,移动设备上的操作系统和应用程序的复杂性、程序体积大幅提高,这也对移动操作系统的优化提出了新的需求。而现有移动终端中有相当数量。
12、的组件原用于桌面和服务器系统,仅作少量修改移植后就用于移动操作系统上。0006 例如,Android系统分为四层,从上到下依次为:0007 (一)、应用程序。使用Java语言编写,可通过Java本地接口(JNI)调用本地代码。0008 (二)、应用程序框架。使用Java、C、C+语言编写,向应用程序提供活动管理器、窗口管理器等服务。0009 (三)。系统库和Android运行时环境。使用C/C+以及少量汇编语言编写,为应用程序和应用程序框架提供必要的与系统交互的接口。0010 (四)、Linux内核。操作系统内核,为为Android进行修改的Linux内核。0011 整个Android系统,以。
13、Android-x86,20120215版本为例,包含2270万行代码,包括C、C+、Java以及其他语言。除了Linux内核以外,系统中共有950万行本地代码,主要为C、C+及少量汇编语言组成。Android系统基于Linux内核,但并没有使用其他Linux系统常用的GNU libc(为服务器、桌面Linux系统常用)或uClibc(为基于Linux的嵌入式系统常用),而是使用了专有的C库,称为Bionic。Bionic库的部分代码衍生自BSD,部分专门为Android编写,并针对Android系统作了优化和精简,删除了Android不需要的功能。优化后的Bionic库的代码体积显著减小,在。
14、x86平台上仅有GNU libc的26%,uClibc的62%。0012 从Bionic的例子可以看出,通用的代码在被用于特定的系统时会有比较大的优说 明 书CN 103116514 A2/12页5化空间。据此可以推测到,Android上的其他组件也会有优化的空间,尤其是那些原本为服务器和桌面系统编写的组件。事实上,Android系统自身使用了一百余个外来的开源软件代码,既包括最底层的Linux内核,也包括上层的WebKit浏览器引擎等。这些组件并非专门针对移动操作系统所编写,移植到移动操作系统以后往往还存在优化空间,但如果对它们一一进行手工优化将会耗费大量人力和物力资源。由于工作量的关系,A。
15、ndroid没有也不可能为系统中的每一个组件都人工细致的优化。因此,亟需一种自动的系统优化方案。发明内容0013 本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明的一个目的在于提出一种基于系统扩展调用图的操作系统自动优化方法。本方法自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。0014 本发明的第二个目的在于提出一种基于系统扩展调用图的操作系统自动优化系统。0015 为达到上述目的,本发明第一方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:对操作系统的源代码进行编译,生成可重定向的目标文件;根据所述目标文件构造系统扩展调。
16、用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;根据所述系统扩展调用图生成所述操作系统的有效子图;根据所述有效子图对所述目标文件进行重写,得到优化后的目标文件;对所述优化后的所述目标文件进行链接,得到优化后的操作系统。0016 根据本发明的基于全系统扩展调用图的自动优化方法使用自动化的方法对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本方法消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。本方法应。
17、用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。0017 在本发明的一个实施例中,所述对操作系统的源代码进行编译进一步包括:对所述源代码中每个函数和每个数据对象编译生成单独的段。0018 在本发明的一个实施例中,使用编译器中的编译选项生成所述单独的段。0019 在本发明的一个实施例中,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;边集包括前驱对后继存在使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。0020 在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入。
18、口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。0021 在本发明的一个实施例中,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的结点的对应信息删除。0022 在本发明的一个实施例中,所述操作系统为移动终端操作系统。0023 在本发明的一个实施例中,构造所述操作系统的所述系统扩展调用图进一步包括:使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;将所述目标文说 明 书CN 103116514 A3/12页6件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。0024。
19、 本发明第二方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化系统,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,0025 所述编译模块用于对操作系统的源代码进行编译,生成可重定向的目标文件;所述系统扩展调用图生成模块用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;所述有效子图生成模块用于根据所述系统扩展调用图生成所述操作系统的有效子图;所述重写模块用于根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;所述链接模块用于对所述优化后的目标文件进行链接,得到。
20、优化后的所述操作系统。0026 根据本发明的基于全系统扩展调用图的自动优化系统使用自动化的系统对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本系统消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。同时,本系统应用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。0027 在本发明的一个实施例中,所述编译模块对操作系统的源代码进行编译进一步包括:所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。002。
21、8 在本发明的一个实施例中,所述编译模块使用编译器中的编译选项生成所述单独的段。0029 在本发明的一个实施例中,所述系统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。0030 在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。0031 在本发明的一个实施例中,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述。
22、有效子图中不存的所述结点的对应信息删除。0032 在本发明的一个实施例中,所述操作系统为移动终端操作系统。0033 在本发明的一个实施例中,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。0034 本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实。
23、践了解到。说 明 书CN 103116514 A4/12页7附图说明0035 本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:0036 图1是根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法的流程图;和0037 图2是根据本发明实施例的基于系统扩展调用图的操作系统自动优化系统的结构示意图。具体实施方式0038 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。0039 下面。
24、参考图1描述根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:0040 步骤S110:对操作系统的源代码进行编译,生成可重定向的目标文件。0041 进一步地,对操作系统的源代码进行编译包括:对源代码中每个函数和每个数据对象编译生成单独的段。0042 其中,使用编译器中的编译选项生成单独的段。0043 步骤S120:根据目标文件构造操作系统的系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系。0044 其中,系统扩展调用图包括结点集合、边集合和入口结点集合,其中,结点集合为实体集合,实体包括代码中的函数和数据对象;边集合为前驱对后继存在。
25、使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。0045 构造操作系统的系统扩展调用图进一步包括:0046 使用库或工具读取每个目标文件,得到目标文件的信息集合;0047 将目标文件的信息集合合并为全局有向图,得到扩展调用图的结点集合和边集合;0048 将符合条件的实体依次加入初始为空的入口点集合。0049 步骤S130:根据系统扩展调用图生成系统的有效子图。0050 其中,有效子图的结点集合包括系统扩展调用图的入口点集合中的结点以及所有入口点在系统扩展调用图中的子孙结点。0051 步骤S140:根据有效子图对目标文件进行重写,得到优化后的目标文件。0052 。
26、进一步地,用二进制重写的方法对目标文件进行修改,将有效子图中不存的结点的对应信息删除。0053 步骤S150:对优化后的目标文件进行链接,得到优化后的系统。0054 下面以移动终端的操作系统优化为例对本方法进行解释说明。可以理解的是,下述优化仅出于示例目的,本发明的实施例不限于此。0055 步骤210:对移动终端操作系统的源代码进行编译,生成可重定向的目标文件,一般以.o为文件后缀名。使用编译选项使编译器对每个函数和数据对象都生成单独的段说 明 书CN 103116514 A5/12页8(section),例如,在编译前修改相关Makefile,向CFLAGS添加“-ffunction-sec。
27、tions”和“-fdata-sections”参数,使编译器将每个函数和数据对象编译到单独的段(section)中,以便后面的分析和优化。其中,也将函数和对象统称为实体,其中数据对象包括程序中显式定义的全局和静态变量以及编译器生成的虚函数表等数据。0056 步骤220:从目标文件提取信息,并记录函数、变量等相互之间的引用关系,根据已有信息构建操作系统的系统扩展调用图。其中,系统扩展调用图为有向图,例如表示为G=(V,E,R)的形式,其中,0057 (一)、V为结点集合:其中,每个结点与目标文件中一个实体对应,由于在步骤210中将每个实体编译到单独的段中,因此每个结点可以对应到目标文件中的一个。
28、段。0058 (二)、E为边集合:系统扩展调用图中的边均为有向边,可以以结点对的形式(u,v)表示,(u,v)E。有向边代表前驱结点u对后继结点v存在使用关系,即在u的重定向数据中有相对v的重定向记录时,在扩展调用图中有从u到v的边。0059 (三)、R为入口点集合:E是V的子集。入口结点为进程的入口点,或者作为程序运行中动态绑定的入口点。代表程序的启动代码,或可能在程序运行中通过动态绑定访问,或属于特殊的段。0060 具体构建系统扩展调用图的方法如下:0061 步骤221:使用elfutils或类似的库、工具依次读取每个目标文件。对于每个目标文件,获取以下信息集合:0062 SS:该集合包括。
29、目标文件中所有含有实体的段的名称;0063 GS:该集合包括目标文件中定义的所有全局符号的信息。信息以关联表的形式存储,以便从全局符号的名称迅速查找它所在的段的名称。0064 AF:该集合包括头和尾都属于该目标文件的有向边的集合;0065 AU:该集合包括头属于该目标文件,尾为外部符号(即属于暂未解析的文件)的有向边的信息。其中每个元素表示为(u,sym),其中u属于SS,是该目标文件中的一个实体,sym为外部符号的名字,表示被u引用、但不在同一个目标文件中定义的实体。0066 步骤222:将步骤S221中所获得的信息合并为全局的有向图。这一步将得到扩展调用图的V和E:0067 V为所有目标文。
30、件的SS的并集。为了区分不同目标文件的段,在V中每个结点的名称以二元组的形式表示。0068 E表示包括E1、E2两部分,E=E1E2。其中E1为所有目标文件的AF的并集,代表头和尾都属于同一个目标文件的有向边的集合,E2为头和尾属于不同目标文件的有向边的集合。对所有目标文件的AF取并集得到E1。0069 具体地,求E2的方法为:0070 步骤222_1:令0071 步骤222_2:遍历每个目标文件的AU集合,对其中的每一个元素(u,sym),查找所有目标文件的GS集,获得所有名称为sym的全局符号的实体集Ssym,并将所有二元组(u,v)加入集合E2,其中vSsym。0072 步骤222_3:。
31、将E1与E2取并集得到E。0073 步骤223:得到入口点集合R。说 明 书CN 103116514 A6/12页90074 具体方法为:0075 步骤223_1:令0076 步骤223_2:依次将下列结点加入集合R:0077 (一)、程序启动代码对应的实体。例如,在Android上为_start符号所对应的代码。0078 (二)、可能通过动态绑定使用的实体,包括:0079 (1)、C/C+程序可能使用动态绑定访问的实体:扫描所有目标文件的只读数据段(rodata),找到其中所有字符串。对于系统中的所有全局实体,如果其名字与其中一个字符串相同,则认为该实体可能通过动态绑定使用,将其加入入口点集。
32、。0080 (2)、JNI入口函数:Java代码通过JNI调用本地代码时,Java虚拟机动态打开相应的动态库文件,并以动态绑定的方式使用其中的函数。根据JNI的标准,JNI_OnLoad、JNI_OnUnload以及其他Java_*函数需标记为入口点。其中,动态注册的JNI入口在系统扩展调用图中已经被注册函数使用,因此无需特别标记。0081 (3)、系统中其他可能通过动态绑定使用的实体。0082 (三)、位于特殊段中的实体。其中,特殊段包括所有名称不以.text、.data、.rodata、.bss打头的段。0083 步骤230:根据系统扩展调用图得到有效子图。有效子图的结点集合包含系统扩展调。
33、用图的入口点集合,并且包括所有入口点在系统扩展调用图中的子孙结点。0084 有效子图Gs=(Vs,Es,R)是系统扩展调用图G=(V,E,R)的子图。其中,G与Gs的入口结点集R相同,Vs是V是子集,Es是E的子集。Vs和Es的用公式表示为:0085 0086 0087 其中,Desc(u)表示u在扩展调用图G中的所有子孙结点(包括u自身)的集合。具体实现时,可使用如下步骤计算Vs:0088 步骤231:令Vs=R,Q=R表示待访问的结点,表示已访问的结点;0089 步骤232:从Q中任取一个结点u,将u从Q中删除,加入Visited,再将u在V中的所有直接后继结点加入Vs,将u的所有不属于V。
34、isited的直接后继结点加入Q。0090 步骤233:重复步骤232,直到Q为空。0091 得到Vs后,求Es的步骤包括:令Es为空集;遍历E中所有有向边(u,v),如果u和v都属于Vs,则将其加入Es。0092 根据Vs、Es和R得到有效子图Gs=(Vs,Es,R)。0093 步骤240:重写目标文件。用二进制重写的方法修改目标文件,从目标文件中删除不存在于有效子图中的结点相关的信息。0094 具体地,依次访问每个目标文件,作如下修改:0095 步骤241:检查每个不属于Vs的实体,如果可见性为默认(default),则改为隐藏(hidden)。0096 步骤242:对每个不属于Vs的实体。
35、,清除其重定向的数据。说 明 书CN 103116514 A7/12页100097 步骤243:步骤242可能导致符号表中一部分外部引用不能被任何其它段使用,因此遍历符号表,将上述导致问题的符号删除。0098 其中,对目标文件的修改也可使用elfutils等库或工具。0099 步骤250:链接优化后的目标文件,得到优化后的系统。使用编译选项使无用代码不被链接入可执行文件和动态库文件。0100 在基于Make的构建环境中,修改Makefile添加链接选项“-gc-sections”可以在链接时对段进行垃圾收集。然后运行make命令。由于对目标文件进行重写后,目标文件的时间戳仍然比源文件新,因此目。
36、标文件不会重新生成,但此时可执行文件和动态库文件的时间戳已经比修改后的目标文件旧,因此将以重写后的目标文件作为输入进行链接,得到优化后的系统。0101 下面以开源操作系统安卓Android-x86honeycomb(3.2.3)版本作为实例对本发明的实施方式作进一步地详细描述,可以理解的是,下述描述仅处于示例目的,本发明的实施例不限于此。0102 从源代码服务器www.android-x86.org下载2012年2月15日的honeycomb软件作为源代码。在进行优化前,首先确定未经修改过的系统可以正常编译和运行,编译的配置使用eeepc-eng,测试环境可以使用VirtualBox等虚拟机软。
37、件,或使用x86CPU的笔记本电脑或平板电脑。0103 步骤S310:添加适当的编译、链接选项。具体操作为:编辑build/core/combo/TARGET_linux-x86.mk文件,添加选项“-ffunction-sections-fdata-sections”到TARGET_GLOBAL_CFLAGS,添加选项“-Wl,-gc-sections”到TARGET_GLOBAL_LDFLAGS,添加选项“-strip-unneeded”到TARGET_STRIP_COMMAND。0104 步骤S320:运行make命令,自动编译所有源代码,生成可重定向的目标文件。0105 步骤S330:。
38、根据目标文件构造操作系统的系统扩展调用图,根据系统扩展调用图生成系统的有效子图,根据有效子图对目标文件进行重写,得到优化后的目标文件。0106 步骤S340:再次运行make命令,自动重新链接生成优化后的可执行文件和动态库文件,并生成相应的Android镜像文件。0107 比较优化前和优化后的操作系统的代码体积,最终镜像中的所有ELF格式文件(Linux内核除外)的大小比优化前减少26%。0108 在测试环境中运行优化前和优化后的操作系统,对比得出如下结果:0109 使用Android Monkey评估系统的正确性:当使用相同的伪随机数种子时,最终输出的日志文件除了时间戳以外完全一致。使用AnTuTu Benchmark评估系统的性能,优化后的操作系统在整体性能上约有1%的提升。0110 根据本发明的基于全系统扩展调用图的自动优化方法通过程序分析技术,使用自动化的方法对操作系统进行分析和优化,在确保优化后的系统正确性不受影响的前提下,消除无用代码,有效减小系统的体积,提升系统性能。尤其对目前广泛采用的移动终端操作系统中的软件优化问题提出了可行的解决方案。0111 本发明具有如下优点:0112 (一)、应用范围广:凡是在系统上运行的本地代码可以限定在一个集合范围内的系统都可以使用本发明的方法进行优化。尤其是许多移动设备上的操作系统都具有此特说 明 书CN 103116514 A10。