贾德祥,何加铭,陈 平,黄锦涛
(宁波大学通信技术研究所,浙江宁波315211)
移动中间件SDK两级重定位算法优化
贾德祥,何加铭,陈 平,黄锦涛
(宁波大学通信技术研究所,浙江宁波315211)
移动中间件被越来越广泛地应用于手机平台,但终端硬件限制复杂,对SDK运行效率要求高,给平台应用带来很大困难。该文提出一种改进的重定位算法,将通常意义下的重定位算法扩展为两级索引表结构,使用二级跳转完成代码重定位。在主频≤110MHz移动终端环境下进行比较测试,结果表明,使用该算法,可以有效提高库的执行效率,实现代码快速重定位,并降低了应用解释与执行的系统消耗。
中间件;重定位;开发包;应用开发环境
IBM的CICS是最早具有中间件技术思想及功能的软件,但由于其不是分布式环境的产物,人们一般把1984年由贝尔实验室开发的Tuxedo作为第一个严格意义上的中间件产品,尽管中间件的概念很早就产生,但其广泛应用却是在最近10年[1]。国内在中间件起步于整个世界范围内中间件的初创时期。东方通信科技早在1992年就开始中间件的研究和开发,1993年推出第一个产品TongLINK/Q,而且中科院软件所、国防科技大学等研究机构也对中间件技术进行了同步研究,可以说,在中间件领域,国内的起步时间并不比国外晚多少。而随着移动设备的普及,越来越多的机构将中间件的思想应用于移动通信领域,国内的斯凯、沃勤等都是比较成功的典范[2]。本文提出的中间件开发SDK,侧重研究基于移动中间件的应用扩展方法,通过优化的两级重定位算法为移动设备提供了一个完整高效的开发平台,使得终端制造商可以在跨芯片平台上进行手机应用研发,同时也使得移动应用商能够得到开发工具和支持。
移动中间件的提出,最早是为了解决分布异构问题。通俗来讲,中间件是处于操作系统和应用程序之间的软件及通用服务,也有人认为它应该属于操作系统的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台)。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现。中间件在系统中的位置如图1所示:
图1 中间件示意图
而SDK作为中间件应用开发的主要环境和工具,其设计的是否合理直接关系到应用的执行效果。当前大多数开发环境都能解决系统间接调用的问题,但其解释代码执行的效率往往达不到终端硬件的限制要求,导致应用的运行消耗资源大,表现为系统卡机等,由此设计出代码效率高,定位迅速的SDK非常必要,本文通过研究中间件应用开发中的重定位机制,并对其进行了两级重定位的扩展,加快了代码解释执行的效率,解决了应用运行难的问题。
在Windows中程序都是以文件形式存储在文件系统中,然后通过操作系统控制这些程序的运行,也就是说,它的程序是分散式的。而在嵌入式系统中通常是将程序烧录在Flash芯片中,CPU直接从Flash芯片中读取指令运行,并不经过文件系统,称这种程序是一体式的。因此为了使中间件开发环境SDK正在可用,必须建立类似Windows文件系统的分散式结构,实现应用与系统的分离。
一个分散式系统需要有3个部分组成:平台、软件开发工具包(SDK:Software Development Kit)和应用程序。分散式应用程序的运行需要平台的支持,应用程序则通过SDK进行开发,开发出源程序经过编译之后可以运行在运行平台之上。平台分为开发平台和运行平台,开发平台是SDK运行的平台,用来开发可以在运行平台上运行的应用程序,对于一些系统还会提供模拟运行平台的模拟器,以便于在没有显而易见的运行设备时可以看到开发的效果;运行平台是应用程序运行的平台,它提供应用程序运行的环境,并控制应用的运行。它们之间的关系如图2所示:
图2 SDK系统关系图
由图1可知,应用开发环境最核心的部分是SDK,其创造了应用与终端系统之间的互动环境,应用可通过SDK提供的接口访问终端系统函数,而程序的动态分发,由SDK中最核心的开发库实现。开发库是供模块调用者链接使用的专有库,与相关模块一一对应,将封装的模块接口供目标程序使用。除此之外,它还有一个运行时才确定的模块重定位表地址指针和模块动态查找定位的代码[3]。
当开发库被使用时,库初始化代码会被执行,它通过指定的系统调用来初始化库中的模块重定位表基地址指针。此后每次目标程序使用模块提供的函数接口时,都通过以下公式得到该接口在系统中的实际地址:
其数学表达式为YE=N+Ln×4,YE为接口实际地址,N为重定位表基地址,Ln为函数在表中的位置。
在式1中,函数index是指对应函数在模块重定位表中的数组下标值。因为根据模块声明文件生成的开发库中已经包含了每个函数的索引信息(index),同时在32位系统中需要乘以4得到准确的偏移量,所以当开发库中重定位表地址被初始化后,可以通过这个公式得到指定接口实际地址,完成函数调用。
在本文的设计中,为了降低性能开销和增加确定性,在终端系统端不进行程序重定位的工作,而将其在主机端完成[4],即在应用开发端完成。为了实现系统动态扩展,必须使各个模块能够单独链接生成执行程序,并且运行时不用关心彼此的定位。本文通过两级重定位表机制来完成这一协调性工作。其示意图如图3所示:
图3 两级重定位表示意图
其算法描述如下:
(1)进入定位循环,如果全部模块已经遍历完毕,则停止循环,说明要定位的模块并不存在于定位表中;否则进行下一个模块判断;
(2)将第i个表地址与待判断模块比较;若匹配,转至(3);否则,转至(1);
(3)记录i,并取出其对应的模块二级重定位表首地址;
(4)记录二级重定位表首地址为tad,并在该表中进入定位循环,遍历查找接口,若匹配,则取接口index,并以下面公式计算。
tad为引用的外部接口所在模块地址(即二级重定位表首地址),i为一级表模块位置,ts为二级重定位表大小,pAdress为所要求的实际引用外部接口地址,index为其在表中的位置,得到pAdress后便可以使用下面的方法对该接口进行引用:((void(*)())pAdress)();这样就可以做到函数运行地址的可浮动,也就是在主机端便创造了动态加载的条件。
为了测试算法的可用性及执行效率,分别在使用一般的重定位算法和使用本文所提出的改进的重定位算法两种情况下,在同一测试平台BIRD D717上,对同一应用进行了测试。测试平台BIRD D717的详细参数如表1所示:
表1 测试环境BIRD D717参数
为了比较两种算法的代码定位效率,在应用中对入口函数sr_app_entry使用了RDTSC指令,以生成时间比对数据。函数定位测试数据如表2所示,表2中所记时间均为从加载完成后,到成功重定位到sr_app_entry函数所经过的CPU执行周期数(即时间片):
表2 入口函数sr_app_entry代码定位数据
两种算法下应用的实际运行效果比对如表3所示,由数据可知,本文重定位算法对同一函数的定位时间比通常算法的实现平均小43个CPU时间片,这表明使用本文提出的两级重定位算法,可以有效提高应用的执行效率,实现运行代码的快速重定位,这样就保证了应用的流畅运行;因此采用包含本文所提算法的SDK进行应用开发,可以降低应用的系统消耗,使得应用开发更加具有可操作性。
表3 实验-两种平台下实际运行结果比较
一个实用、可靠的中间件平台,必须要有稳定的终端运行模块及完整高效的应用开发环境,本文针对典型的中间件平台SDK在中低端手机上的不足,研究提出了一种基于C语言的移动终端应用SDK,设计实现简单,占用资源少,解决了第三方业务内容在中低端手机上应用推广难的问题,降低了应用开发成本,并成功应用于MTKOS,实验结果表明,由本文提供的开发环境制作的应用程序体积精简,加载速度快,运行效率高,实现了手机应用的快速开发与推广。
本文所提出的中间件SDK,由于侧重于研究环境使用的间接可操作性,在文件安全[5]方面并未做有效工作,下一步将考虑在应用的开发过程中加入安全设计,由开发环境自主完成对应用关键资源及代码的安全加密及认证签名,藉此保护应用开发者的利益。
[1]李娜,王维哲.基于CORBA的异构数据库访问中间件的研究与实现[J].计算机应用与软件,2010,27(5):61-83.
[2]徐照 .面向服务的普适计算中间件若干技术研究[D].杭州:浙江大学,2008.
[3]范文彬.基于智能手机平台的RFID中间件研究[D].厦门:厦门大学,2009.
[4]段雪峰,王小鸽.基于反射的中间件设计[D].西安:西北工业大学,2004.
[5]冯国瑞.基于中间件技术的异构机器人网络控制系统的研究[J].工业控制计算机,2010,23(2):101-123.
The Two-level Relocation Algorithm Optimization of Mobile M iddleware SDK JIA De-xiang,HE Jia-m ing,CHEN Ping,HUANG Jin-tao
(Instituteof Communication,Ningbo University,Ningbo Zhejiang315211,China)
Themobilemiddleware platform has been applied inmobile terminalsmore and morewidely.But the mobile terminals havemany complex restrictions on the hardware part,which bring a lot of difficult to the platform’s commercial application.So this request themidd leware platform has an efficient SDK.For this point,wemade changes based on the general relocation algorithm,improve the algorithm to a two-level index structure,and use tow-stage jumpmethod to realize the code relocation.We tested the improved algorithm in amobile terminalenvironmentwith≤110MHz CPU.The results show that this algorithm can effectively improve the execution efficiency of the SDK,realize the quick code relocation,and reduce the system implementation of running application.
middleware;relocation;SDK;application development environment
TP301.6
A
1001-9146(2010)05-0069-04
2010-07-20
国家重大专项核高基资助项目(ZX01039-001-002-004、ZX03001-016、ZX03004-005);科技部公共服务平台创新基金资助项目(C26243314159);浙江省科技计划资助项目(C31107);国际科技合作资助项目(DFA12120)
贾德祥(1986-),男,山东泰安人,在读研究生,通信终端核心应用软件技术.