[发明专利]移动终端操作系统基于全系统扩展调用图的自动优化方法有效
申请号: | 201210495453.7 | 申请日: | 2012-11-28 |
公开(公告)号: | CN103034486A | 公开(公告)日: | 2013-04-10 |
发明(设计)人: | 董渊;王生原;李叠;骆欢 | 申请(专利权)人: | 清华大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京思海天达知识产权代理有限公司 11203 | 代理人: | 楼艮基 |
地址: | 100084*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 一种移动终端操作系统基于全系统扩展调用图的自动优化方法,涉及移动终端软件领域,所述方法适用于移动终端操作系统,可以实现在全系统范围内消除无用代码,在不降低系统性能的前提下减小系统代码体积,从而减少移动终端硬件制造成本。方法的主要步骤如下:编译源代码得到目标文件;从目标文件出发,构建全系统所有本地代码的扩展调用图;对扩展调用图进行分析,从入口点开始得到扩展调用图的有效子图;对编译生成的目标文件进行重写,删除所有不在有效子图中的代码;链接生成优化的二进制代码。本发明具有应用范围广、自动化程度高、使用方便、优化效果明显等特点。 | ||
搜索关键词: | 移动 终端 操作系统 基于 全系统 扩展 调用 自动 优化 方法 | ||
【主权项】:
1.一种移动终端操作系统基于全系统扩展调用图的自动优化方法,其特征在于,是在计算机中依次按以下步骤实现的:步骤(1):编译移动终端操作系统的源代码,生成可重定位的目标文件;从源代码服务器中下载源代码,修改相关的Makefile,向CFLAGS添加“-ffunction-sections”参数和“-fdata-sections”参数以使编译器将每个函数和数据对象编译到单独的段中,再运行make命令自动编译所述源代码生成可重定位的目标文件,其中函数和数据对象统称为“实体”,所述数据对象既包括源代码中定义的全局和静态变量,也至少包括虚函数表在内的编译器生成的数据对象;步骤(2):按以下步骤构造有向的全系统扩展调用图:步骤(2.1):对步骤(1)得到的目标文件,读取以下信息,其中包括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∪E2,其中E1为所有所述目标文件的AF的并集,代表了头和尾都属于同一个所述目标文件的有向边所形成的集合,E2为头和尾属于不同的所述目标文件的有向边形成的集合,按以下方法得到:首先,令
再遍历每个所述目标文件的AU集合,对其中的每一个元素(u,sym),查找所有所述目标文件的GS集,得到所有名称为sym的全局符号的所述实体集合S[sym],将所有二元组(u,v)|v∈S[sym]加入集合E2,并将E1与E2取并集得到E,其中每一个元素是一对结点(u,v),对应所述系统扩展调用图中一条从u到v的有向边,当且仅当u的重定位数据中有相对v的重定位记录时,在所述系统扩展调用图中存在一条从u到v的边,步骤(2.3),按以下步骤得到入口点集R:步骤(2.3.1),令
步骤(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为有效的有向边集,表示为:V s = ∪ u ∈ R Desc ( u ) ]]> Es=E∩(Vs×Vs)其中Desc(u)表示u在扩展调用图G中包括u自身在内的子孙结点的集合,步骤(3.1),令Vs=R,Q=R表示待访问的结点集,
表示已访问的结点集,步骤(3.2),从待访问的结点集Q中任取一个结点u加入VisitedV,再把结点u在所述系统扩展调用图G中的所有直接后继结点加入所述Vs中,把述结点u的不属于所述已访问过的结点集VisitedV的直接后继结点加入待访问的结点集Q中,并从所述待访问的结点集Q中删除访问过的结点u,步骤(3.3),重复步骤(3.2),直到所述待访问的结点集Q为空,得到有效结点集Vs,步骤(3.4),令Es为空集,遍历E中的所有有向边(u,v),若结点u和结点v都属于所述有效结点集Vs,把从所述结点u到所述结点v的有向边加入Es,步骤(3.5),根据步骤(2)及步骤(3.1)至步骤(3.4)的结果得到有效子图Gs=(Vs,Es,R);步骤(4),按以下步骤重写所述目标文件,更新时间戳:步骤(4.1),每一个所述目标文件中的实体都带有一个可见性属性,包括默认default、受保护protected、内部internal、隐藏hidden四种,对每一个不属于有效结点集Vs的实体,若其可见性属性为默认default,则改为隐藏hidden,步骤(4.2),对每一个所述不属于有效结点集Vs的实体,清除其重定位数据,步骤(4.3),遍历所述目标文件的符号表,清除不再被任何段引用的符号,步骤(4.4),根据步骤(4.1)至(4.3)的结果,对所述目标文件进行二进制重写,对于有修改的所述目标文件,其时间戳被自动更新,步骤(5),按以下步骤链接得到优化化的Android镜像文件:在所述Makefile中添加用于链接时对段进行垃圾收集的链接选项“--gc-sections”,运行make命令,自动重新链接生成优化后的可执行文件、动态库文件并生成相应的Android镜像文件。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201210495453.7/,转载请声明来源钻瓜专利网。
- 上一篇:三类底盘及故障车下线装置
- 下一篇:叉车载荷稳定装置