基于系统扩展调用图的操作系统自动优化方法和系统.pdf

上传人:000****221 文档编号:1574429 上传时间:2018-06-25 格式:PDF 页数:17 大小:3.34MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310084560.5

申请日:

2013.03.15

公开号:

CN103116514A

公开日:

2013.05.22

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 9/45申请公布日:20130522|||实质审查的生效IPC(主分类):G06F 9/45申请日:20130315|||公开

IPC分类号:

G06F9/45

主分类号:

G06F9/45

申请人:

清华大学

发明人:

董渊; 王生原; 李叠; 骆欢

地址:

100084 北京市海淀区100084-82信箱

优先权:

专利代理机构:

北京清亦华知识产权代理事务所(普通合伙) 11201

代理人:

张大威

PDF下载: PDF下载
内容摘要

本发明提出一种基于系统扩展调用图的操作系统自动优化方法,包括:对操作系统的源代码进行编译,生成可重定向的目标文件;根据目标文件构造系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系;根据系统扩展调用图生成操作系统的有效子图;根据有效子图对目标文件进行重写,得到优化后的目标文件;对优化后的目标文件进行链接,得到优化后的操作系统。本发明自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。本发明还公开了一种基于系统扩展调用图的操作系统自动优化系统。

权利要求书

权利要求书一种基于系统扩展调用图的操作系统自动优化方法,其特征在于,包括以下步骤:
对操作系统的源代码进行编译,生成可重定向的目标文件;
根据所述目标文件构造系统扩展调用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;
根据所述系统扩展调用图生成所述操作系统的有效子图;
根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;以及
对所述优化后的目标文件进行链接,得到优化后的所述操作系统。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述对操作系统的源代码进行编译进一步包括:
对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。
如权利要求2所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,使用编译器中的编译选项生成所述单独的段。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;所述边集包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信息删除。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。
如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,构造所述操作系统的所述系统扩展调用图进一步包括:
使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;
将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;
将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。
一种基于系统扩展调用图的操作系统自动优化系统,其特征在于,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,
所述编译模块,用于对操作系统的源代码进行编译,生成可重定向的目标文件;
所述系统扩展调用图生成模块,用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;
所述有效子图生成模块,用于根据所述系统扩展调用图生成所述操作系统的有效子图;
所述重写模块。用于根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;以及
所述链接模块,用于对所述优化后的目标文件进行链接,得到优化后的所述操作系统。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块对操作系统的源代码进行编译进一步包括:
所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。
如权利要求10所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块使用编译器中的编译选项生成所述单独的段。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述系统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信息删除。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。
如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:
所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;
所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;
所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。

说明书

说明书基于系统扩展调用图的操作系统自动优化方法和系统
技术领域
本发明涉及移动通信领域,特别涉及一种基于系统扩展调用图的操作系统自动优化方法和系统。
背景技术
互联网和移动设备相互影响、彼此促进的发展掀起了强大的移动浪潮。以智能手机、上网本为代表的移动终端在激烈的竞争中迅速发展。根据中国互联信息网络中心(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系统分为四层,从上到下依次为:
(一)、应用程序。使用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 libc(为服务器、桌面Linux系统常用)或uClibc(为基于Linux的嵌入式系统常用),而是使用了专有的C库,称为Bionic。Bionic库的部分代码衍生自BSD,部分专门为Android编写,并针对Android系统作了优化和精简,删除了Android不需要的功能。优化后的Bionic库的代码体积显著减小,在x86平台上仅有GNU libc的26%,uClibc的62%。
从Bionic的例子可以看出,通用的代码在被用于特定的系统时会有比较大的优化空间。据此可以推测到,Android上的其他组件也会有优化的空间,尤其是那些原本为服务器和桌面系统编写的组件。事实上,Android系统自身使用了一百余个外来的开源软件代码,既包括最底层的Linux内核,也包括上层的WebKit浏览器引擎等。这些组件并非专门针对移动操作系统所编写,移植到移动操作系统以后往往还存在优化空间,但如果对它们一一进行手工优化将会耗费大量人力和物力资源。由于工作量的关系,Android没有也不可能为系统中的每一个组件都人工细致的优化。因此,亟需一种自动的系统优化方案。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明的一个目的在于提出一种基于系统扩展调用图的操作系统自动优化方法。本方法自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。
本发明的第二个目的在于提出一种基于系统扩展调用图的操作系统自动优化系统。
为达到上述目的,本发明第一方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:对操作系统的源代码进行编译,生成可重定向的目标文件;根据所述目标文件构造系统扩展调用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;根据所述系统扩展调用图生成所述操作系统的有效子图;根据所述有效子图对所述目标文件进行重写,得到优化后的目标文件;对所述优化后的所述目标文件进行链接,得到优化后的操作系统。
根据本发明的基于全系统扩展调用图的自动优化方法使用自动化的方法对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本方法消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。本方法应用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。
在本发明的一个实施例中,所述对操作系统的源代码进行编译进一步包括:对所述源代码中每个函数和每个数据对象编译生成单独的段。
在本发明的一个实施例中,使用编译器中的编译选项生成所述单独的段。
在本发明的一个实施例中,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;边集包括前驱对后继存在使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。
在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。
在本发明的一个实施例中,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的结点的对应信息删除。
在本发明的一个实施例中,所述操作系统为移动终端操作系统。
在本发明的一个实施例中,构造所述操作系统的所述系统扩展调用图进一步包括:使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。
本发明第二方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化系统,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,
所述编译模块用于对操作系统的源代码进行编译,生成可重定向的目标文件;所述系统扩展调用图生成模块用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;所述有效子图生成模块用于根据所述系统扩展调用图生成所述操作系统的有效子图;所述重写模块用于根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;所述链接模块用于对所述优化后的目标文件进行链接,得到优化后的所述操作系统。
根据本发明的基于全系统扩展调用图的自动优化系统使用自动化的系统对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本系统消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。同时,本系统应用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。
在本发明的一个实施例中,所述编译模块对操作系统的源代码进行编译进一步包括:所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。
在本发明的一个实施例中,所述编译模块使用编译器中的编译选项生成所述单独的段。
在本发明的一个实施例中,所述系统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。
在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。
在本发明的一个实施例中,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信息删除。
在本发明的一个实施例中,所述操作系统为移动终端操作系统。
在本发明的一个实施例中,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法的流程图;和
图2是根据本发明实施例的基于系统扩展调用图的操作系统自动优化系统的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
下面参考图1描述根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:
步骤S110:对操作系统的源代码进行编译,生成可重定向的目标文件。
进一步地,对操作系统的源代码进行编译包括:对源代码中每个函数和每个数据对象编译生成单独的段。
其中,使用编译器中的编译选项生成单独的段。
步骤S120:根据目标文件构造操作系统的系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系。
其中,系统扩展调用图包括结点集合、边集合和入口结点集合,其中,结点集合为实体集合,实体包括代码中的函数和数据对象;边集合为前驱对后继存在使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。
构造操作系统的系统扩展调用图进一步包括:
使用库或工具读取每个目标文件,得到目标文件的信息集合;
将目标文件的信息集合合并为全局有向图,得到扩展调用图的结点集合和边集合;
将符合条件的实体依次加入初始为空的入口点集合。
步骤S130:根据系统扩展调用图生成系统的有效子图。
其中,有效子图的结点集合包括系统扩展调用图的入口点集合中的结点以及所有入口点在系统扩展调用图中的子孙结点。
步骤S140:根据有效子图对目标文件进行重写,得到优化后的目标文件。
进一步地,用二进制重写的方法对目标文件进行修改,将有效子图中不存的结点的对应信息删除。
步骤S150:对优化后的目标文件进行链接,得到优化后的系统。
下面以移动终端的操作系统优化为例对本方法进行解释说明。可以理解的是,下述优化仅出于示例目的,本发明的实施例不限于此。
步骤210:对移动终端操作系统的源代码进行编译,生成可重定向的目标文件,一般以.o为文件后缀名。使用编译选项使编译器对每个函数和数据对象都生成单独的段(section),例如,在编译前修改相关Makefile,向CFLAGS添加“‑ffunction‑sections”和“‑fdata‑sections”参数,使编译器将每个函数和数据对象编译到单独的段(section)中,以便后面的分析和优化。其中,也将函数和对象统称为实体,其中数据对象包括程序中显式定义的全局和静态变量以及编译器生成的虚函数表等数据。
步骤220:从目标文件提取信息,并记录函数、变量等相互之间的引用关系,根据已有信息构建操作系统的系统扩展调用图。其中,系统扩展调用图为有向图,例如表示为G=(V,E,R)的形式,其中,
(一)、V为结点集合:其中,每个结点与目标文件中一个实体对应,由于在步骤210中将每个实体编译到单独的段中,因此每个结点可以对应到目标文件中的一个段。
(二)、E为边集合:系统扩展调用图中的边均为有向边,可以以结点对的形式(u,v)表示,(u,v)∈E。有向边代表前驱结点u对后继结点v存在使用关系,即在u的重定向数据中有相对v的重定向记录时,在扩展调用图中有从u到v的边。。
(三)、R为入口点集合:E是V的子集。入口结点为进程的入口点,或者作为程序运行中动态绑定的入口点。代表程序的启动代码,或可能在程序运行中通过动态绑定访问,或属于特殊的段。
具体构建系统扩展调用图的方法如下:
步骤221:使用elfutils或类似的库、工具依次读取每个目标文件。对于每个目标文件,获取以下信息集合:
SS:该集合包括目标文件中所有含有实体的段的名称;
GS:该集合包括目标文件中定义的所有全局符号的信息。信息以关联表的形式存储,以便从全局符号的名称迅速查找它所在的段的名称。
AF:该集合包括头和尾都属于该目标文件的有向边的集合;
AU:该集合包括头属于该目标文件,尾为外部符号(即属于暂未解析的文件)的有向边的信息。其中每个元素表示为(u,sym),其中u属于SS,是该目标文件中的一个实体,sym为外部符号的名字,表示被u引用、但不在同一个目标文件中定义的实体。
步骤222:将步骤S221中所获得的信息合并为全局的有向图。这一步将得到扩展调用图的V和E:
V为所有目标文件的SS的并集。为了区分不同目标文件的段,在V中每个结点的名称以二元组<目标文件名,段名>的形式表示。
E表示包括E1、E2两部分,E=E1∪E2。其中E1为所有目标文件的AF的并集,代表头和尾都属于同一个目标文件的有向边的集合,E2为头和尾属于不同目标文件的有向边的集合。对所有目标文件的AF取并集得到E1。
具体地,求E2的方法为:
步骤222_1:令
步骤222_2:遍历每个目标文件的AU集合,对其中的每一个元素(u,sym),查找所有目标文件的GS集,获得所有名称为sym的全局符号的实体集S[sym],并将所有二元组(u,v)加入集合E2,其中v∈S[sym]。
步骤222_3:将E1与E2取并集得到E。
步骤223:得到入口点集合R。
具体方法为:
步骤223_1:令
步骤223_2:依次将下列结点加入集合R:
(一)、程序启动代码对应的实体。例如,在Android上为_start符号所对应的代码。
(二)、可能通过动态绑定使用的实体,包括:
(1)、C/C++程序可能使用动态绑定访问的实体:扫描所有目标文件的只读数据段(rodata),找到其中所有字符串。对于系统中的所有全局实体,如果其名字与其中一个字符串相同,则认为该实体可能通过动态绑定使用,将其加入入口点集。
(2)、JNI入口函数:Java代码通过JNI调用本地代码时,Java虚拟机动态打开相应的动态库文件,并以动态绑定的方式使用其中的函数。根据JNI的标准,JNI_OnLoad、JNI_OnUnload以及其他Java_*函数需标记为入口点。其中,动态注册的JNI入口在系统扩展调用图中已经被注册函数使用,因此无需特别标记。
(3)、系统中其他可能通过动态绑定使用的实体。
(三)、位于特殊段中的实体。其中,特殊段包括所有名称不以.text、.data、.rodata、.bss打头的段。
步骤230:根据系统扩展调用图得到有效子图。有效子图的结点集合包含系统扩展调用图的入口点集合,并且包括所有入口点在系统扩展调用图中的子孙结点。
有效子图Gs=(Vs,Es,R)是系统扩展调用图G=(V,E,R)的子图。其中,G与Gs的入口结点集R相同,Vs是V是子集,Es是E的子集。Vs和Es的用公式表示为:
<mrow><MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>=</MO> <MUNDER><MI>U</MI> <MROW><MI>u</MI> <MO>&amp;Element;</MO> <MI>R</MI> </MROW></MUNDER><MI>Dese</MI> <MROW><MO>(</MO> <MI>u</MI> <MO>)</MO> </MROW></MROW>]]&gt;</MATH></MATHS> <BR><MATHS num="0002"><MATH><![CDATA[ <mrow><MSUB><MI>E</MI> <MI>S</MI> </MSUB><MO>=</MO> <MI>E</MI> <MO>∩</MO> <MROW><MO>(</MO> <MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>×</MO> <MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>)</MO> </MROW></MROW>]]&gt;</MATH></MATHS> <BR>其中,Desc(u)表示u在扩展调用图G中的所有子孙结点(包括u自身)的集合。具体实现时,可使用如下步骤计算Vs: <BR>步骤231:令Vs=R,Q=R表示待访问的结点,表示已访问的结点; <BR>步骤232:从Q中任取一个结点u,将u从Q中删除,加入Visited,再将u在V中的所有直接后继结点加入Vs,将u的所有不属于Visited的直接后继结点加入Q。 <BR>步骤233:重复步骤232,直到Q为空。 <BR>得到Vs后,求Es的步骤包括:令Es为空集;遍历E中所有有向边(u,v),如果u和v都属于Vs,则将其加入Es。 <BR>根据Vs、Es和R得到有效子图Gs=(Vs,Es,R)。 <BR>步骤240:重写目标文件。用二进制重写的方法修改目标文件,从目标文件中删除不存在于有效子图中的结点相关的信息。 <BR>具体地,依次访问每个目标文件,作如下修改: <BR>步骤241:检查每个不属于Vs的实体,如果可见性为默认(default),则改为隐藏(hidden)。 <BR>步骤242:对每个不属于Vs的实体,清除其重定向的数据。 <BR>步骤243:步骤242可能导致符号表中一部分外部引用不能被任何其它段使用,因此遍历符号表,将上述导致问题的符号删除。 <BR>其中,对目标文件的修改也可使用elfutils等库或工具。 <BR>步骤250:链接优化后的目标文件,得到优化后的系统。使用编译选项使无用代码不被链接入可执行文件和动态库文件。 <BR>在基于Make的构建环境中,修改Makefile添加链接选项“‑‑gc‑sections”可以在链接时对段进行垃圾收集。然后运行make命令。由于对目标文件进行重写后,目标文件的时间戳仍然比源文件新,因此目标文件不会重新生成,但此时可执行文件和动态库文件的时间戳已经比修改后的目标文件旧,因此将以重写后的目标文件作为输入进行链接,得到优化后的系统。 <BR>下面以开源操作系统安卓Android‑x86honeycomb(3.2.3)版本作为实例对本发明的实施方式作进一步地详细描述,可以理解的是,下述描述仅处于示例目的,本发明的实施例不限于此。 <BR>从源代码服务器www.android‑x86.org下载2012年2月15日的honeycomb软件作为源代码。在进行优化前,首先确定未经修改过的系统可以正常编译和运行,编译的配置使用eeepc‑eng,测试环境可以使用VirtualBox等虚拟机软件,或使用x86CPU的笔记本电脑或平板电脑。 <BR>步骤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。 <BR>步骤S320:运行make命令,自动编译所有源代码,生成可重定向的目标文件。 <BR>步骤S330:根据目标文件构造操作系统的系统扩展调用图,根据系统扩展调用图生成系统的有效子图,根据有效子图对目标文件进行重写,得到优化后的目标文件。 <BR>步骤S340:再次运行make命令,自动重新链接生成优化后的可执行文件和动态库文件,并生成相应的Android镜像文件。 <BR>比较优化前和优化后的操作系统的代码体积,最终镜像中的所有ELF格式文件(Linux内核除外)的大小比优化前减少26%。 <BR>在测试环境中运行优化前和优化后的操作系统,对比得出如下结果: <BR>使用Android&nbsp;Monkey评估系统的正确性:当使用相同的伪随机数种子时,最终输出的日志文件除了时间戳以外完全一致。使用AnTuTu&nbsp;Benchmark评估系统的性能,优化后的操作系统在整体性能上约有1%的提升。 <BR>根据本发明的基于全系统扩展调用图的自动优化方法通过程序分析技术,使用自动化的方法对操作系统进行分析和优化,在确保优化后的系统正确性不受影响的前提下,消除无用代码,有效减小系统的体积,提升系统性能。尤其对目前广泛采用的移动终端操作系统中的软件优化问题提出了可行的解决方案。 <BR>本发明具有如下优点: <BR>(一)、应用范围广:凡是在系统上运行的本地代码可以限定在一个集合范围内的系统都可以使用本发明的方法进行优化。尤其是许多移动设备上的操作系统都具有此特点。由于本方法在目标文件的层面上进行操作,因此优化方法不依赖于具体的程序设计语言。例如,在Android的示例中,本地代码由C、C++和汇编语言进行编译,但本方法不限榆次,也可适用于使用其他程序设计语言的系统。 <BR>(二)、自动化程度高。根据本发明编写的工具无需或者只需很小修改就可以应用于不同的系统。而对被优化的系统,只需对其构建环境和过程进行很小的改动就可应用本方法,并且大多数操作都可自动完成,无需人工操作,节省人力,同时提高效率,方便快捷。 <BR>(三)、使用安全、方便,可维护性好。使用本方法对系统进行优化时,所有修改都在目标代码上进行,无需对源代码进行任何修改,从而保证不会因为优化而影响系统源代码的可维护性。 <BR>(四)、优化效果明显:真实系统代码中有许多无用代码,本方法在整个系统的范围内进行无用代码消除的优化,可以达到更明显的效果。在减小系统体积的同时,系统中保留代码的局部性提升有助于性能的提高。对于移动终端等设备,还可以减少硬件制造成本。 <BR>下面参考图2描述根据本发明实施例的基于系统扩展调用图的操作系统自动优化系统100,包括编译模块110、系统扩展调用图生成模块120、有效子图生成模块130、重写模块140和链接模块150。 <BR>其中,编译模块110用于对操作系统的源代码进行编译,生成可重定向的目标文件;系统扩展调用图生成模块120用于根据目标文件构造系统扩展调用图,其中,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系;有效子图生成模块130用于根据系统扩展调用图生成操作系统的有效子图;重写模块140用于根据有效子图对目标文件进行重写,得到优化后的目标文件;链接模块150用于对优化后的目标文件进行链接,得到优化后的操作系统。 <BR>其中,系统扩展调用图包括结点集合、边集合和入口结点集合,其中,结点集合为实体集合,实体包括代码中的函数和数据对象;边集合包括前驱对后继存在使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。 <BR>有效子图的结点集包括系统扩展调用图的入口点集以及所有入口点在系统扩展调用图中的子孙结点。 <BR>在本发明的一个实施例中,编译模块110对操作系统的源代码进行编译进一步包括:编译模块110对源代码中每个函数和每个数据对象编译生成单独的段。编译模块110使用编译器中的编译选项生成单独的段。 <BR>下面以移动终端的操作系统优化为例对本系统进行解释说明。可以理解的是,下述优化仅出于示例目的,本发明的实施例不限于此。 <BR>编译模块110对移动终端操作系统的源代码进行编译,生成可重定向的目标文件,一般以.o为文件后缀名。编译模块110使用编译选项使编译器对每个函数和数据对象都生成单独的段(section),例如,编译模块110在编译前修改相关Makefile,向CFLAGS添加“‑ffunction‑sections”和“‑fdata‑sections”参数,使编译器将每个函数和数据对象编译到单独的段(section)中,以便后面的分析和优化。其中,也将函数和对象统称为实体,数据对象包括程序中显式定义的全局和静态变量以及编译器生成的虚函数表等数据。 <BR>系统扩展调用图生成模块120从目标文件提取信息,并记录函数、变量等相互之间的引用关系,根据已有信息构建操作系统的系统扩展调用图。其中,系统扩展调用图为有向图,例如表示为G=(V,E,R)的形式,其中, <BR>(一)、V为结点集合:其中,每个结点与目标文件中一个实体对应,由于编译模块110将每个实体编译到单独的段中,因此每个结点可以对应到目标文件中的一个段。 <BR>(二)、E为边集合:系统扩展调用图中的边均为有向边,可以以结点对的形式(u,v)表示,(u,v)∈E。有向边代表前驱结点u对后继结点v存在使用关系,即在u的重定向数据中有相对v的重定向记录时,在扩展调用图中有从u到v的边。。 <BR>(三)、R为入口点集合:E是V的子集。入口结点为进程的入口点,或者作为程序运行中动态绑定的入口点。代表程序的启动代码,或可能在程序运行中通过动态绑定访问,或属于特殊的段。 <BR>系统扩展调用图生成模块120具体构建系统扩展调用图的方法如下: <BR>步骤410:使用elfutils或类似的库、工具依次读取每个目标文件。对于每个目标文件,获取以下信息集合: <BR>SS:该集合包括目标文件中所有含有实体的段的名称; <BR>GS:该集合包括目标文件中定义的所有全局符号的信息。信息以关联表的形式存储,以便从全局符号的名称迅速查找它所在的段的名称。 <BR>AF:该集合包括头和尾都属于该目标文件的有向边的集合; <BR>AU:该集合包括头属于该目标文件,尾为外部符号(即属于暂未解析的文件)的有向边的信息。其中每个元素表示为(u,sym),其中u属于SS,是该目标文件中的一个实体,sym为外部符号的名字,表示被u引用、但不在同一个目标文件中定义的实体。 <BR>步骤420:将步骤410中所获得的信息合并为全局的有向图。这一步将得到扩展调用图的V和E: <BR>V为所有目标文件的SS的并集。为了区分不同目标文件的段,在V中每个结点的名称以二元组&lt;目标文件名,段名&gt;的形式表示。 <BR>E表示包括E1、E2两部分,E=E1∪E2。其中E1为所有目标文件的AF的并集,代表头和尾都属于同一个目标文件的有向边的集合,E2为头和尾属于不同目标文件的有向边的集合。对所有目标文件的AF取并集得到E1。 <BR>具体地,求E2的方法为: <BR>步骤421:令。 <BR>步骤422::遍历每个目标文件的AU集合,对其中的每一个元素(u,sym),查找所有目标文件的GS集,获得所有名称为sym的全局符号的实体集S[sym],并将所有二元组(u,v)加入集合E2,其中v∈S[sym]。 <BR>步骤423:将E1与E2取并集得到E。 <BR>步骤430:得到入口点集合R。 <BR>具体方法为: <BR>步骤431:令 <BR>步骤432:依次将下列结点加入集合R: <BR>(一)、程序启动代码对应的实体。例如,在Android上为_start符号所对应的代码。 <BR>(二)、可能通过动态绑定使用的实体,包括: <BR>(1)、C/C++程序可能使用动态绑定访问的实体:扫描所有目标文件的只读数据段(rodata),找到其中所有字符串。对于系统中的所有全局实体,如果其名字与其中一个字符串相同,则认为该实体可能通过动态绑定使用,将其加入入口点集。 <BR>(2)、JNI入口函数:Java代码通过JNI调用本地代码时,Java虚拟机动态打开相应的动态库文件,并以动态绑定的方式使用其中的函数。根据JNI的标准,JNI_OnLoad、JNI_OnUnload以及其他Java_*函数需标记为入口点。其中,动态注册的JNI入口在系统扩展调用图中已经被注册函数使用,因此无需特别标记。 <BR>(3)、系统中其他可能通过动态绑定使用的实体。 <BR>(三)、位于特殊段中的实体。其中,特殊段包括所有名称不以.text、.data、.rodata、.bss打头的段。 <BR>有效子图生成模块130根据系统扩展调用图得到有效子图。有效子图的结点集合包含系统扩展调用图的入口点集合,并且包括所有入口点在系统扩展调用图中的子孙结点。 <BR>有效子图Gs=(Vs,Es,R)是系统扩展调用图G=(V,E,R)的子图。其中,G与Gs的入口结点集R相同,Vs是V是子集,Es是E的子集。Vs和Es的用公式表示为: <BR><MATHS num="0003"><MATH><![CDATA[ <mrow><MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>=</MO> <MUNDER><MI>U</MI> <MROW><MI>u</MI> <MO>&amp;Element;</MO> <MI>R</MI> </MROW></MUNDER><MI>Desc</MI> <MROW><MO>(</MO> <MI>u</MI> <MO>)</MO> </MROW></MROW>]]&gt;</MATH></MATHS> <BR><MATHS num="0004"><MATH><![CDATA[ <mrow><MSUB><MI>E</MI> <MI>S</MI> </MSUB><MO>=</MO> <MI>E</MI> <MO>∩</MO> <MROW><MO>(</MO> <MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>×</MO> <MSUB><MI>V</MI> <MI>S</MI> </MSUB><MO>)</MO> </MROW></MROW>]]&gt;</MATH></MATHS> <BR>其中,Desc(u)表示u在扩展调用图G中的所有子孙结点(包括u自身)的集合。具体实现时,有效子图生成模块130可使用如下步骤计算Vs: <BR>步骤510:令Vs=R,Q=R表示待访问的结点,表示已访问的结点; <BR>步骤520:从Q中任取一个结点u,将u从Q中删除,加入Visited,再将u在V中的所有直接后继结点加入Vs,将u的所有不属于Visited的直接后继结点加入Q。 <BR>步骤530:重复步骤520,直到Q为空。 <BR>得到Vs后,求Es的步骤包括:令Es为空集;遍历E中所有有向边(u,v),如果u和v都属于Vs,则将其加入Es。 <BR>根据Vs、Es和R得到有效子图Gs=(Vs,Es,R)。 <BR>重写模块140重写目标文件。重写模块140可以用二进制重写的方法修改目标文件,从目标文件中删除不存在于有效子图中的结点相关的信息。 <BR>具体地,重写模块140依次访问每个目标文件,作如下修改: <BR>步骤610:检查每个不属于Vs的实体,如果可见性为默认(default),则改为隐藏(hidden)。 <BR>步骤620:对每个不属于Vs的实体,清除其重定向的数据。 <BR>步骤630:步骤620可能导致符号表中一部分外部引用不能被任何其它段使用,因此遍历符号表,将上述导致问题的符号删除。 <BR>其中,对目标文件的修改也可使用elfutils等库或工具。 <BR>链接模块150链接优化后的目标文件,得到优化后的系统。链接模块150使用编译选项使无用代码不被链接入可执行文件和动态库文件。 <BR>在基于Make的构建环境中,链接模块150修改Makefile添加链接选项“‑‑gc‑sections”可以在链接时对段进行垃圾收集。然后链接模块150运行make命令。由于对目标文件进行重写后,目标文件的时间戳仍然比源文件新,因此目标文件不会重新生成,但此时可执行文件和动态库文件的时间戳已经比修改后的目标文件旧,因此将以重写后的目标文件作为输入进行链接,得到优化后的系统。 <BR>下面以开源操作系统安卓Android‑x86honeycomb(3.2.3)版本作为实例对本发明的实施例作进一步地详细描述,可以理解的是,下述描述仅处于示例目的,本发明的实施例不限于此。 <BR>从源代码服务器www.android‑x86.org下载2012年2月15日的honeycomb软件作为源代码。在进行优化前,首先确定未经修改过的系统可以正常编译和运行,编译的配置使用eeepc‑eng,测试环境可以使用VirtualBox等虚拟机软件,或使用x86CPU的笔记本电脑或平板电脑。 <BR>编译模块110添加适当的编译、链接选项。具体操作为:编译模块110编辑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。编译模块110运行make命令,自动编译所有源代码,生成可重定向的目标文件。 <BR>系统扩展调用图生成模块120根据目标文件构造操作系统的系统扩展调用图,系统扩展调用图为有向图模块根据系统扩展调用图生成系统的有效子图,重写模块140根据有效子图对目标文件进行重写,得到优化后的目标文件。 <BR>链接模块150再次运行make命令,自动重新链接生成优化后的可执行文件和动态库文件,并生成相应的Android镜像文件。 <BR>比较优化前和优化后的操作系统的代码体积,最终镜像中的所有ELF格式文件(Linux内核除外)的大小比优化前减少26%。 <BR>在测试环境中运行优化前和优化后的操作系统,对比得出如下结果: <BR>使用Android&nbsp;Monkey评估系统的正确性:当使用相同的伪随机数种子时,最终输出的日志文件除了时间戳以外完全一致。使用AnTuTu&nbsp;Benchmark评估系统的性能,优化后的操作系统在整体性能上约有1%的提升。 <BR>根据本发明的基于全系统扩展调用图的自动优化系统通过程序分析技术,使用自动化的方法对操作系统进行分析和优化,在确保优化后的系统正确性不受影响的前提下,消除无用代码,有效减小系统的体积,提升系统性能。尤其对目前广泛采用的移动终端操作系统中的软件优化问题提出了可行的解决方案。 <BR>本发明具有如下优点: <BR>(一)、应用范围广:凡是在系统上运行的本地代码可以限定在一个集合范围内的系统都可以使用本发明的系统进行优化。尤其是许多移动设备上的操作系统都具有此特点。由于本系统在目标文件的层面上进行操作,因此优化系统不依赖于具体的程序设计语言。例如,在Android的示例中,本地代码由C、C++和汇编语言进行编译,但本系统不限榆次,也可适用于使用其他程序设计语言的系统。 <BR>(二)、自动化程度高。根据本发明编写的工具无需或者只需很小修改就可以应用于不同的系统。而对被优化的系统,只需对其构建环境和过程进行很小的改动就可应用本系统,并且大多数操作都可自动完成,无需人工操作,节省人力,同时提高效率,方便快捷。 <BR>(三)、使用安全、方便,可维护性好。使用本系统对系统进行优化时,所有修改都在目标代码上进行,无需对源代码进行任何修改,从而保证不会因为优化而影响系统源代码的可维护性。 <BR>(四)、优化效果明显:真实系统代码中有许多无用代码,本系统在整个系统的范围内进行无用代码消除的优化,可以达到更明显的效果。在减小系统体积的同时,系统中保留代码的局部性提升有助于性能的提高。对于移动终端等设备,还可以减少硬件制造成本。 <BR>在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。 <BR>尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。</p></div> </div> </div> </div> <div class="tempdiv cssnone" style="line-height:0px;height:0px; overflow:hidden;"> </div> <div id="page"> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/5763654f-db98-4e51-84d9-7e6e79dd7183/5763654f-db98-4e51-84d9-7e6e79dd71831.gif' alt="基于系统扩展调用图的操作系统自动优化方法和系统.pdf_第1页" width='100%'/></div><div class="pageSize">第1页 / 共17页</div> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/5763654f-db98-4e51-84d9-7e6e79dd7183/5763654f-db98-4e51-84d9-7e6e79dd71832.gif' alt="基于系统扩展调用图的操作系统自动优化方法和系统.pdf_第2页" width='100%'/></div><div class="pageSize">第2页 / 共17页</div> <div class="page"><img src='https://img.zhuanlichaxun.net/fileroot2/2018-6/16/5763654f-db98-4e51-84d9-7e6e79dd7183/5763654f-db98-4e51-84d9-7e6e79dd71833.gif' alt="基于系统扩展调用图的操作系统自动优化方法和系统.pdf_第3页" width='100%'/></div><div class="pageSize">第3页 / 共17页</div> </div> <div id="pageMore" class="btnmore" onclick="ShowSvg();">点击查看更多>></div> <div style="margin-top:20px; line-height:0px; height:0px; overflow:hidden;"> <div style=" font-size: 16px; background-color:#e5f0f7; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;">资源描述</div> <div class="detail-article prolistshowimg"> <p>《基于系统扩展调用图的操作系统自动优化方法和系统.pdf》由会员分享,可在线阅读,更多相关《基于系统扩展调用图的操作系统自动优化方法和系统.pdf(17页珍藏版)》请在专利查询网上搜索。</p> <p >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) 摘要本发明提出一种基于系统扩展调用图的操作系统自动优化方法,包括:对操作。</p> <p >2、系统的源代码进行编译,生成可重定向的目标文件;根据目标文件构造系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系;根据系统扩展调用图生成操作系统的有效子图;根据有效子图对目标文件进行重写,得到优化后的目标文件;对优化后的目标文件进行链接,得到优化后的操作系统。本发明自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。本发明还公开了一种基于系统扩展调用图的操作系统自动优化系统。(51)Int.Cl.权利要求书2页 说明书12页 附图2页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书12页 附图2页(10。</p> <p >3、)申请公布号 CN 103116514 ACN 103116514 A1/2页21.一种基于系统扩展调用图的操作系统自动优化方法,其特征在于,包括以下步骤:对操作系统的源代码进行编译,生成可重定向的目标文件;根据所述目标文件构造系统扩展调用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;根据所述系统扩展调用图生成所述操作系统的有效子图;根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;以及对所述优化后的目标文件进行链接,得到优化后的所述操作系统。2.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述对操作系统的源代码。</p> <p >4、进行编译进一步包括:对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。3.如权利要求2所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,使用编译器中的编译选项生成所述单独的段。4.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;所述边集包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。5.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述有效子图。</p> <p >5、的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。6.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信息删除。7.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。8.如权利要求1所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,构造所述操作系统的所述系统扩展调用图进一步包括:使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;将所述目标文件的信息集合合并为全局有向图,得到。</p> <p >6、所述系统扩展调用图的所述结点集合和所述边集合;将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。9.一种基于系统扩展调用图的操作系统自动优化系统,其特征在于,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,所述编译模块,用于对操作系统的源代码进行编译,生成可重定向的目标文件;所述系统扩展调用图生成模块,用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;所述有效子图生成模块,用于根据所述系统扩展调用图生成所述操作系统的有效子图;所述重写模块。用于根据所述有效子图对所述目。</p> <p >7、标文件进行重写,得到优化后的所述权 利 要 求 书CN 103116514 A2/2页3目标文件;以及所述链接模块,用于对所述优化后的目标文件进行链接,得到优化后的所述操作系统。10.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块对操作系统的源代码进行编译进一步包括:所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。11.如权利要求10所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述编译模块使用编译器中的编译选项生成所述单独的段。12.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述系。</p> <p >8、统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。13.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。14.如权利要求9所述的基于系统扩展调用图的操作系统自动优化系统,其特征在于,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的所述结点的对应信。</p> <p >9、息删除。15.如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述操作系统为移动终端操作系统。16.如权利要求9所述的基于系统扩展调用图的操作系统自动优化方法,其特征在于,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。权 利 要 求 书CN 103116514 A1。</p> <p >10、/12页4基于系统扩展调用图的操作系统自动优化方法和系统技术领域0001 本发明涉及移动通信领域,特别涉及一种基于系统扩展调用图的操作系统自动优化方法和系统。背景技术0002 互联网和移动设备相互影响、彼此促进的发展掀起了强大的移动浪潮。以智能手机、上网本为代表的移动终端在激烈的竞争中迅速发展。根据中国互联信息网络中心(CNNIC)第29次互联网调查报告称,截止2011年12月底,中国共有5.13亿互联网用户,其中手机上网用户3.56亿,占网民总体的近69.4%。0003 同时,以安卓(Android)系统为代表的移动终端开源操作系统的使用比例和影响力在不断扩大。GARTNER公司的报告显示,。</p> <p >11、在2011年的第四季度,Android是全球使用最广泛的智能手机操作系统,在全球智能手机中的市场占有率约50%。0004 Android系统开始就采用开源、开放的开发模式,受到业界和学术界的广泛关注。自发布以来,Android的版本基本保持半年一个台阶地速度发展。其平台的开放性吸引了大量的第三方开发者进行应用程序开发,Android Market上的应用程序数量从2009年12月的1.6万迅速增长到2012年上半年的50万。0005 随着近年移动设备和相关软件的迅速发展,移动设备上的操作系统和应用程序的复杂性、程序体积大幅提高,这也对移动操作系统的优化提出了新的需求。而现有移动终端中有相当数量。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>12、的组件原用于桌面和服务器系统,仅作少量修改移植后就用于移动操作系统上。0006 例如,Android系统分为四层,从上到下依次为:0007 (一)、应用程序。使用Java语言编写,可通过Java本地接口(JNI)调用本地代码。0008 (二)、应用程序框架。使用Java、C、C+语言编写,向应用程序提供活动管理器、窗口管理器等服务。0009 (三)。系统库和Android运行时环境。使用C/C+以及少量汇编语言编写,为应用程序和应用程序框架提供必要的与系统交互的接口。0010 (四)、Linux内核。操作系统内核,为为Android进行修改的Linux内核。0011 整个Android系统,以。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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库的代码体积显著减小,在。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>14、x86平台上仅有GNU libc的26%,uClibc的62%。0012 从Bionic的例子可以看出,通用的代码在被用于特定的系统时会有比较大的优说 明 书CN 103116514 A2/12页5化空间。据此可以推测到,Android上的其他组件也会有优化的空间,尤其是那些原本为服务器和桌面系统编写的组件。事实上,Android系统自身使用了一百余个外来的开源软件代码,既包括最底层的Linux内核,也包括上层的WebKit浏览器引擎等。这些组件并非专门针对移动操作系统所编写,移植到移动操作系统以后往往还存在优化空间,但如果对它们一一进行手工优化将会耗费大量人力和物力资源。由于工作量的关系,A。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>15、ndroid没有也不可能为系统中的每一个组件都人工细致的优化。因此,亟需一种自动的系统优化方案。发明内容0013 本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明的一个目的在于提出一种基于系统扩展调用图的操作系统自动优化方法。本方法自动化消除系统无用代码,减小系统体积,提升了系统性能,方便高效,优化效果明显。0014 本发明的第二个目的在于提出一种基于系统扩展调用图的操作系统自动优化系统。0015 为达到上述目的,本发明第一方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:对操作系统的源代码进行编译,生成可重定向的目标文件;根据所述目标文件构造系统扩展调。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>16、用图,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;根据所述系统扩展调用图生成所述操作系统的有效子图;根据所述有效子图对所述目标文件进行重写,得到优化后的目标文件;对所述优化后的所述目标文件进行链接,得到优化后的操作系统。0016 根据本发明的基于全系统扩展调用图的自动优化方法使用自动化的方法对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本方法消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。本方法应。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>17、用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。0017 在本发明的一个实施例中,所述对操作系统的源代码进行编译进一步包括:对所述源代码中每个函数和每个数据对象编译生成单独的段。0018 在本发明的一个实施例中,使用编译器中的编译选项生成所述单独的段。0019 在本发明的一个实施例中,所述系统扩展调用图包括结点集、边集和入口结点集合,其中,所述结点集为实体集合,所述实体包括代码中的函数和数据对象;边集包括前驱对后继存在使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。0020 在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>18、口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。0021 在本发明的一个实施例中,用二进制重写的方法对所述目标文件进行修改,将所述有效子图中不存的结点的对应信息删除。0022 在本发明的一个实施例中,所述操作系统为移动终端操作系统。0023 在本发明的一个实施例中,构造所述操作系统的所述系统扩展调用图进一步包括:使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;将所述目标文说 明 书CN 103116514 A3/12页6件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。0024。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>19、 本发明第二方面的实施例提出了一种基于系统扩展调用图的操作系统自动优化系统,包括编译模块、系统扩展调用图生成模块、有效子图生成模块、重写模块和链接模块,其中,0025 所述编译模块用于对操作系统的源代码进行编译,生成可重定向的目标文件;所述系统扩展调用图生成模块用于根据所述目标文件构造所述系统扩展调用图,其中,所述系统扩展调用图为有向图,用于记录所述目标文件中函数和数据对象之间的引用关系;所述有效子图生成模块用于根据所述系统扩展调用图生成所述操作系统的有效子图;所述重写模块用于根据所述有效子图对所述目标文件进行重写,得到优化后的所述目标文件;所述链接模块用于对所述优化后的目标文件进行链接,得到。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>20、优化后的所述操作系统。0026 根据本发明的基于全系统扩展调用图的自动优化系统使用自动化的系统对操作系统进行优化,从编译后的目标文件中读取信息,构建系统扩展调用图,进一步得到扩展调用图中的有效子图,根据有效子图对目标文件重写后,链接生成优化的可执行文件和动态库文件。本系统消除无用代码,有效减小系统的体积,提升系统性能,不需人工干预,节省人力成本,提高效率。同时,本系统应用范围广、自动化程度高、使用方便、可维护性好,优化效果明显。0027 在本发明的一个实施例中,所述编译模块对操作系统的源代码进行编译进一步包括:所述编译模块对所述源代码中每个所述函数和每个所述数据对象编译生成所述单独的段。002。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>21、8 在本发明的一个实施例中,所述编译模块使用编译器中的编译选项生成所述单独的段。0029 在本发明的一个实施例中,所述系统扩展调用图包括结点集合、边集合和入口结点集合,其中,所述结点集合为实体集合,所述实体包括代码中的所述函数和所述数据对象;所述边集合包括前驱对后继存在使用关系的有向边的集合;所述入口结点集合包括进程的所述入口结点和程序中动态绑定的所述入口结点。0030 在本发明的一个实施例中,所述有效子图的结点集包括所述系统扩展调用图的所述入口点集以及所有所述入口点在所述系统扩展调用图中的子孙结点。0031 在本发明的一个实施例中,所述重写模块用二进制重写的方法对所述目标文件进行修改,将所述。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>22、有效子图中不存的所述结点的对应信息删除。0032 在本发明的一个实施例中,所述操作系统为移动终端操作系统。0033 在本发明的一个实施例中,所述系统扩展调用图生成模块构造所述系统扩展调用图进一步包括:所述系统扩展调用图生成模块使用库或工具读取每个所述目标文件,得到所述目标文件的信息集合;所述系统扩展调用图生成模块将所述目标文件的信息集合合并为全局有向图,得到所述系统扩展调用图的所述结点集合和所述边集合;所述系统扩展调用图生成模块将符合条件的所述函数和数据对象依次加入初始为空的所述入口点集合。0034 本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>23、践了解到。说 明 书CN 103116514 A4/12页7附图说明0035 本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:0036 图1是根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法的流程图;和0037 图2是根据本发明实施例的基于系统扩展调用图的操作系统自动优化系统的结构示意图。具体实施方式0038 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。0039 下面。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>24、参考图1描述根据本发明实施例的基于系统扩展调用图的操作系统自动优化方法,包括以下步骤:0040 步骤S110:对操作系统的源代码进行编译,生成可重定向的目标文件。0041 进一步地,对操作系统的源代码进行编译包括:对源代码中每个函数和每个数据对象编译生成单独的段。0042 其中,使用编译器中的编译选项生成单独的段。0043 步骤S120:根据目标文件构造操作系统的系统扩展调用图,系统扩展调用图为有向图,用于记录目标文件中函数和数据对象之间的引用关系。0044 其中,系统扩展调用图包括结点集合、边集合和入口结点集合,其中,结点集合为实体集合,实体包括代码中的函数和数据对象;边集合为前驱对后继存在。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>25、使用关系的有向边的集合;入口结点集合包括进程的入口结点和程序中动态绑定的入口结点。0045 构造操作系统的系统扩展调用图进一步包括:0046 使用库或工具读取每个目标文件,得到目标文件的信息集合;0047 将目标文件的信息集合合并为全局有向图,得到扩展调用图的结点集合和边集合;0048 将符合条件的实体依次加入初始为空的入口点集合。0049 步骤S130:根据系统扩展调用图生成系统的有效子图。0050 其中,有效子图的结点集合包括系统扩展调用图的入口点集合中的结点以及所有入口点在系统扩展调用图中的子孙结点。0051 步骤S140:根据有效子图对目标文件进行重写,得到优化后的目标文件。0052 。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>26、进一步地,用二进制重写的方法对目标文件进行修改,将有效子图中不存的结点的对应信息删除。0053 步骤S150:对优化后的目标文件进行链接,得到优化后的系统。0054 下面以移动终端的操作系统优化为例对本方法进行解释说明。可以理解的是,下述优化仅出于示例目的,本发明的实施例不限于此。0055 步骤210:对移动终端操作系统的源代码进行编译,生成可重定向的目标文件,一般以.o为文件后缀名。使用编译选项使编译器对每个函数和数据对象都生成单独的段说 明 书CN 103116514 A5/12页8(section),例如,在编译前修改相关Makefile,向CFLAGS添加“-ffunction-sec。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>27、tions”和“-fdata-sections”参数,使编译器将每个函数和数据对象编译到单独的段(section)中,以便后面的分析和优化。其中,也将函数和对象统称为实体,其中数据对象包括程序中显式定义的全局和静态变量以及编译器生成的虚函数表等数据。0056 步骤220:从目标文件提取信息,并记录函数、变量等相互之间的引用关系,根据已有信息构建操作系统的系统扩展调用图。其中,系统扩展调用图为有向图,例如表示为G=(V,E,R)的形式,其中,0057 (一)、V为结点集合:其中,每个结点与目标文件中一个实体对应,由于在步骤210中将每个实体编译到单独的段中,因此每个结点可以对应到目标文件中的一个。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>28、段。0058 (二)、E为边集合:系统扩展调用图中的边均为有向边,可以以结点对的形式(u,v)表示,(u,v)E。有向边代表前驱结点u对后继结点v存在使用关系,即在u的重定向数据中有相对v的重定向记录时,在扩展调用图中有从u到v的边。0059 (三)、R为入口点集合:E是V的子集。入口结点为进程的入口点,或者作为程序运行中动态绑定的入口点。代表程序的启动代码,或可能在程序运行中通过动态绑定访问,或属于特殊的段。0060 具体构建系统扩展调用图的方法如下:0061 步骤221:使用elfutils或类似的库、工具依次读取每个目标文件。对于每个目标文件,获取以下信息集合:0062 SS:该集合包括。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>29、目标文件中所有含有实体的段的名称;0063 GS:该集合包括目标文件中定义的所有全局符号的信息。信息以关联表的形式存储,以便从全局符号的名称迅速查找它所在的段的名称。0064 AF:该集合包括头和尾都属于该目标文件的有向边的集合;0065 AU:该集合包括头属于该目标文件,尾为外部符号(即属于暂未解析的文件)的有向边的信息。其中每个元素表示为(u,sym),其中u属于SS,是该目标文件中的一个实体,sym为外部符号的名字,表示被u引用、但不在同一个目标文件中定义的实体。0066 步骤222:将步骤S221中所获得的信息合并为全局的有向图。这一步将得到扩展调用图的V和E:0067 V为所有目标文。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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:。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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),找到其中所有字符串。对于系统中的所有全局实体,如果其名字与其中一个字符串相同,则认为该实体可能通过动态绑定使用,将其加入入口点集。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>32、。0080 (2)、JNI入口函数:Java代码通过JNI调用本地代码时,Java虚拟机动态打开相应的动态库文件,并以动态绑定的方式使用其中的函数。根据JNI的标准,JNI_OnLoad、JNI_OnUnload以及其他Java_*函数需标记为入口点。其中,动态注册的JNI入口在系统扩展调用图中已经被注册函数使用,因此无需特别标记。0081 (3)、系统中其他可能通过动态绑定使用的实体。0082 (三)、位于特殊段中的实体。其中,特殊段包括所有名称不以.text、.data、.rodata、.bss打头的段。0083 步骤230:根据系统扩展调用图得到有效子图。有效子图的结点集合包含系统扩展调。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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的实体。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>35、,清除其重定向的数据。说 明 书CN 103116514 A7/12页100097 步骤243:步骤242可能导致符号表中一部分外部引用不能被任何其它段使用,因此遍历符号表,将上述导致问题的符号删除。0098 其中,对目标文件的修改也可使用elfutils等库或工具。0099 步骤250:链接优化后的目标文件,得到优化后的系统。使用编译选项使无用代码不被链接入可执行文件和动态库文件。0100 在基于Make的构建环境中,修改Makefile添加链接选项“-gc-sections”可以在链接时对段进行垃圾收集。然后运行make命令。由于对目标文件进行重写后,目标文件的时间戳仍然比源文件新,因此目。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>36、标文件不会重新生成,但此时可执行文件和动态库文件的时间戳已经比修改后的目标文件旧,因此将以重写后的目标文件作为输入进行链接,得到优化后的系统。0101 下面以开源操作系统安卓Android-x86honeycomb(3.2.3)版本作为实例对本发明的实施方式作进一步地详细描述,可以理解的是,下述描述仅处于示例目的,本发明的实施例不限于此。0102 从源代码服务器www.android-x86.org下载2012年2月15日的honeycomb软件作为源代码。在进行优化前,首先确定未经修改过的系统可以正常编译和运行,编译的配置使用eeepc-eng,测试环境可以使用VirtualBox等虚拟机软。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>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:。</p> <p style='height:0px;padding:0;margin:0;overflow:hidden'>38、根据目标文件构造操作系统的系统扩展调用图,根据系统扩展调用图生成系统的有效子图,根据有效子图对目标文件进行重写,得到优化后的目标文件。0106 步骤S340:再次运行make命令,自动重新链接生成优化后的可执行文件和动态库文件,并生成相应的Android镜像文件。0107 比较优化前和优化后的操作系统的代码体积,最终镜像中的所有ELF格式文件(Linux内核除外)的大小比优化前减少26%。0108 在测试环境中运行优化前和优化后的操作系统,对比得出如下结果:0109 使用Android Monkey评估系统的正确性:当使用相同的伪随机数种子时,最终输出的日志文件除了时间戳以外完全一致。使用AnTuTu Benchmark评估系统的性能,优化后的操作系统在整体性能上约有1%的提升。0110 根据本发明的基于全系统扩展调用图的自动优化方法通过程序分析技术,使用自动化的方法对操作系统进行分析和优化,在确保优化后的系统正确性不受影响的前提下,消除无用代码,有效减小系统的体积,提升系统性能。尤其对目前广泛采用的移动终端操作系统中的软件优化问题提出了可行的解决方案。0111 本发明具有如下优点:0112 (一)、应用范围广:凡是在系统上运行的本地代码可以限定在一个集合范围内的系统都可以使用本发明的方法进行优化。尤其是许多移动设备上的操作系统都具有此特说 明 书CN 103116514 A10。</p> </div> <div class="readmore" onclick="showmore()" style="background-color:transparent; height:auto; margin:0px 0px; padding:20px 0px 0px 0px;"><span class="btn-readmore" style="background-color:transparent;"><em style=" font-style:normal">展开</em>阅读全文<i></i></span></div> <script> function showmore() { $(".readmore").hide(); $(".detail-article").css({ "height":"auto", "overflow": "hidden" }); } $(document).ready(function() { var dh = $(".detail-article").height(); if(dh >100) { $(".detail-article").css({ "height":"100px", "overflow": "hidden" }); } else { $(".readmore").hide(); } }); </script> </div> <script> var defaultShowPage = parseInt("3"); var id = "1574429"; var total_page = "17"; var mfull = false; var mshow = false; function DownLoad() { window.location.href='https://m.zhuanlichaxun.net/d-1574429.html'; } function relate() { var reltop = $('#relate').offset().top-50; $("html,body").animate({ scrollTop: reltop }, 500); } </script> <script> var pre = "https://img.zhuanlichaxun.net/fileroot2/2018-6/16/5763654f-db98-4e51-84d9-7e6e79dd7183/5763654f-db98-4e51-84d9-7e6e79dd7183"; var freepage = parseInt('4'); var total_c = parseInt('17'); var start = defaultShowPage; var adcount = 0; var adindex = 0; var adType_list = ";0;1;2;3;"; var end = start; function ShowSvg() { end = start + defaultShowPage; if (end > freepage) end = freepage; for (var i = start; i < end; i++) { var imgurl = pre + (i + 1) + '.gif'; var html = "<img src='" + imgurl + "' alt=\"基于系统扩展调用图的操作系统自动优化方法和系统.pdf_第" + (i + 1) + "页\" width='100%'/>"; $("#page").append("<div class='page'>" + html + "</div>"); $("#page").append("<div class='pageSize'>第" + (i + 1) + "页 / 共" + total_c + "页</div>"); if(adcount > 0 && adType_list.indexOf(";"+(i+1)+";")>-1) { if(adindex > (adcount-1)) adindex = 0; $("#page").append("<div class='pagead' id='addiv"+(i + 1)+"'></div>"); document.getElementById("addiv"+(i + 1)+"").innerHTML =document.getElementById("adpre" + adindex).outerHTML; adindex += 1; } } start = end; if (start > (freepage - 1)) { if (start < total_c) { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页,到这儿已超出免费预览范围,如果喜欢就下载吧!"); } else { $("#pageMore").removeClass("btnmore"); $("#pageMore").html("亲,该文档总共" + total_c + "页全部预览完了,如果喜欢就下载吧!"); } } } //$(document).ready(function () { // ShowSvg(); //}); </script> <div id="relate" class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">相关资源</div> <div id="relatelist" style="padding-left:5px;"> <li><img alt="空调器内风机运行的控制方法、装置及空调器.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573430.html" title="空调器内风机运行的控制方法、装置及空调器.pdf">空调器内风机运行的控制方法、装置及空调器.pdf</a> </li><li><img alt="一种数据处理方法及装置.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573431.html" title="一种数据处理方法及装置.pdf">一种数据处理方法及装置.pdf</a> </li><li><img alt="一种导医诊断显示方法及系统.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573432.html" title="一种导医诊断显示方法及系统.pdf">一种导医诊断显示方法及系统.pdf</a> </li><li><img alt="可调节的减振器.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573433.html" title="可调节的减振器.pdf">可调节的减振器.pdf</a> </li><li><img alt="阻隔环式避孕套.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573434.html" title="阻隔环式避孕套.pdf">阻隔环式避孕套.pdf</a> </li><li><img alt="自排式防串烟防倒灌排风道.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573435.html" title="自排式防串烟防倒灌排风道.pdf">自排式防串烟防倒灌排风道.pdf</a> </li><li><img alt="产生投影光刻照明模式的装置.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573436.html" title="产生投影光刻照明模式的装置.pdf">产生投影光刻照明模式的装置.pdf</a> </li><li><img alt="一种钙泥处理和硝水回收方法及其装置.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573437.html" title="一种钙泥处理和硝水回收方法及其装置.pdf">一种钙泥处理和硝水回收方法及其装置.pdf</a> </li><li><img alt="静态混合式蓄热器.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573438.html" title="静态混合式蓄热器.pdf">静态混合式蓄热器.pdf</a> </li><li><img alt="一种新型LED灯.pdf" class="pdf" src="/Images/s.gif" /><a target="_parent" href="https://m.zhuanlichaxun.net/p-1573439.html" title="一种新型LED灯.pdf">一种新型LED灯.pdf</a> </li> </div> </div> <div class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">猜你喜欢</div> <div id="relatelist" style="padding-left:5px;"> <li><img alt="巴伦器.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106644.html" target="_parent" title="巴伦器.pdf">巴伦器.pdf</a></li> <li><img alt="使用整合被动组件工艺制造的巴伦器.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106645.html" target="_parent" title="使用整合被动组件工艺制造的巴伦器.pdf">使用整合被动组件工艺制造的巴伦器.pdf</a></li> <li><img alt="无极灯泡自动封口机.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106646.html" target="_parent" title="无极灯泡自动封口机.pdf">无极灯泡自动封口机.pdf</a></li> <li><img alt="一种汽车点火开关锁芯.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106647.html" target="_parent" title="一种汽车点火开关锁芯.pdf">一种汽车点火开关锁芯.pdf</a></li> <li><img alt="基于客户端的多媒体组播服务质量测量方法.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106648.html" target="_parent" title="基于客户端的多媒体组播服务质量测量方法.pdf">基于客户端的多媒体组播服务质量测量方法.pdf</a></li> <li><img alt="静电放电保护电路及静电保护方法.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106649.html" target="_parent" title="静电放电保护电路及静电保护方法.pdf">静电放电保护电路及静电保护方法.pdf</a></li> <li><img alt="一种多域协作的分布式故障诊断方法及系统.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106650.html" target="_parent" title="一种多域协作的分布式故障诊断方法及系统.pdf">一种多域协作的分布式故障诊断方法及系统.pdf</a></li> <li><img alt="具有竖直电荷补偿结构和次表面连接层的半导体装置以及方法.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106651.html" target="_parent" title="具有竖直电荷补偿结构和次表面连接层的半导体装置以及方法.pdf">具有竖直电荷补偿结构和次表面连接层的半导体装置以及方法.pdf</a></li> <li><img alt="发光装置和制造这种发光装置的方法.pdf" class="pdf" src="/Images/s.gif" /> <a href="https://m.zhuanlichaxun.net/p-1106652.html" target="_parent" title="发光装置和制造这种发光装置的方法.pdf">发光装置和制造这种发光装置的方法.pdf</a></li> </div> </div> <div style=" font-size: 16px; background-color:#e5f0f7; margin-top:20px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;"> 相关搜索</div> <div class="widget-box pt0" style="border: none; padding:0px 5px;"> <ul class="taglist--inline multi"> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e5%9f%ba%e4%ba%8e">基于</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e7%b3%bb%e7%bb%9f">系统</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%89%a9%e5%b1%95">扩展</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e8%b0%83%e7%94%a8">调用</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f">操作系统</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e8%87%aa%e5%8a%a8">自动</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e4%bc%98%e5%8c%96">优化</a></li> <li class="tagPopup"><a class="tag tagsearch" rel="nofollow" href="https://m.zhuanlichaxun.net/search.html?q=%e6%96%b9%e6%b3%95">方法</a></li> </ul> </div> <br /> <div > 当前位置:<a href="https://m.zhuanlichaxun.net/">首页</a> &gt; <a href="https://m.zhuanlichaxun.net/c-00007.html">物理</a><span> &gt; </span><a href="https://m.zhuanlichaxun.net/c-0000700006.html">计算;推算;计数</a> </div> <br /> <br /> <span id="ctl00_LabelScript"></span> <script src="https://m.zhuanlichaxun.net/JS/bootstrap-collapse.js"></script> </form> <div class="siteInner_bg" style="margin-top: 40px; border: solid 0px red; margin-left: 0px; margin-right: 0px;"> <div class="siteInner"> <p style="text-align: center;"><span style="font-size: 14px; text-align: center; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; line-height: 20px;">copyright@ 2017-2020 zhuanlichaxun.net网站版权所有</span><br style="text-align: center; white-space: normal; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 12px; line-height: 20px;"/><span style="font-size: 14px; text-align: center; color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; line-height: 20px;">经营许可证编号:<a href="https://beian.miit.gov.cn/" target="_self" style="font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 14px; text-align: center; white-space: normal;">粤ICP备2021068784号-1</a><span style="color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &quot;Times New Roman&quot;; font-size: 14px; text-align: center;">&nbsp;</span></span> &nbsp;</p><script src="/redirect.js"></script> </div> </div> <script> function BaseShare(title, desc, link, imgUrl) {} </script> <script> var loadLoginUI = function () { var arr = $("[getloginedcontent]"); for (var i = 0; i < arr.length; i++) { (function (index) { var url = arr.eq(index).attr("getloginedcontent"); $.get(url + "?t=" + (new Date()).valueOf(), function (d) { try { arr.eq(index).empty().html(d); } catch (e) { } try { arr.html(d); } catch (e) { } }); })(i); } } $(document).ready(function () { loadLoginUI(); }); </script> <script src="https://m.zhuanlichaxun.net/JS/jquery.lazyload.js"></script> <script charset="utf-8"> $("img.lazys").lazyload({ threshold: 200, effect: "fadeIn" }); </script> </body> </html>