用于解码可执行代码的方法和相关设备的制作方法

文档序号:6654871阅读:149来源:国知局
专利名称:用于解码可执行代码的方法和相关设备的制作方法
技术领域
本发明涉及一种用于解码诸如VLIW处理器之类的处理器中的可执行代码的方法和相关设备,特别是在尤其用于加载和再定位存储器中的处理器可执行代码的运行期(run-time)操作系统中。
背景技术
随着采用多媒体处理的增加,已经开发了能够支持大而复杂的多媒体应用的大功率处理器。
在关于这类应用的可执行代码能够被运行之前,有必要将可执行映像加载到存储器中并且随后再定位。这种再定位是二进制打补丁(binary-patching)的过程以便将可执行代码中的地址的引用与实际加载的地址空间相配。对这种地址的引用通常可以包括可执行文本片段中的决策树的起始地址,或者data、datal或bss片段中的数据地址。
可从Philips那里购买到TriMedia处理器是VLIW处理器的例子。TriMedia可执行代码是如上所述的这类代码的例子,并且在可执行代码打补丁之后,包含TriMedia可执行代码的文本片段必须被位洗牌(bit-shuffled)以便允许处理器以高速缓存高效方式解码可执行代码,特别地是在运行期。然而,这种位洗牌包括密集存储器、计算昂贵的操作,并且也将发现与正在加载的程序尺寸成比例。
当从存储器中加载可执行代码时,比如例如从高速缓存的文件系统中加载,人们发现上述的位洗牌操作形成经受的加载时间的主要组成部分。
在运行期操作系统中,比如在有人需要频繁地加载可执行代码的情况下,或者在大静态链接程序将被加载的情况下,这种位洗牌操作被认为表示对性能的重要限制。

发明内容
本发明设法提供一种用于解码运行期操作系统中的可执行代码的方法和相关设备,并且显示出优于已知这种方法和设备的优点。
根据本发明的第一方面,提供了一种用于解码包括位洗牌代码的处理系统中的可执行代码的方法,并且包括下列步骤将代码划分成多个子部分;标识能够在处理之前被位洗牌的代码的子部分;以及在处理之前对所述标识子部分进行位洗牌以便减少所需的处理位洗牌。
本发明能够被优选地应用于预洗牌二进制代码的处理阶段,例如在稍后的链接时间段期间链接预洗牌的二进制目标代码。
在一个特定设备中,所述处理系统包括运行期操作系统并且包含在运行期的位洗牌以及标识能够在运行期之前被位洗牌的子部分。
优选地,所述一部分代码的预洗牌可能导致在20-25%的数量级内运行期洗牌延迟的减少并且优选地用来增加可执行代码加载和再定位时间。
因此能够实现运行期性能改善并且将会认识到的是,本发明证明当处理TriMedia程序和可执行代码时尤其是有利的。
优选地,所述方法包括下列步骤在链接时,产生用于加载和再定位代码的再定位补丁表。
此外,在上述链接的末尾检查再定位补丁表以便确定打补丁代码中的哪一个地址。
优选地,所述方法包括下列步骤产生将打补丁的子部分的记录并且在运行期按位图(bitmap)的形式洗牌。
本发明也可以包括下列步骤读取程序加载器内的代码元素以供执行所述程序。
接着,程序加载器能够被设置成读取再定位补丁表和可执行代码并且在可执行代码内写回所述结果。
根据本发明的另一个方面,提供了用于解码处理器中的可执行代码的解码设备,并且包括用于位洗牌代码的装置,所述设备还包括用于将代码划分成多个子部分的装置;标识能够在处理之前被位洗牌的代码的子部分的装置;和在处理之前对所述标识子部分进行位洗牌以便减少处理所需的位洗牌的装置。
优选地,所述处理器包括运行期操作系统。
优选地,所述应用包括用于产生再定位补丁表的装置,所述补丁表用于在链接时加载和再定位代码。
此外,本发明能够包括用于在链接时位洗牌已标识的子部分的装置。
优选地,提供用于产生将在运行期按位图的形式打补丁和洗牌的子部分的记录的装置。
在一个实施例中,包含程序加载器并且将其设置成读取再定位补丁表和可执行代码并且在可执行代码内写回结果。
本发明还提供一种用于这种解码的控制和用于提供上面所示的这种方法步骤的计算机程序单元和产品。


在下文中仅仅以举例的方式参照附图进一步描述本发明,其中图1包括举例说明根据本发明实施例的程序可执行映像的产生的示意性框图;图2是举例说明加载和再定位图1的程序可执行映像的示意性框图。
具体实施例方式
正如将从本发明的上述定义认识到的是,有利地操纵位洗牌操作以便相对于所述代码的子部分实施洗牌操作,其中所述子部分优选地包括高速缓存尺寸块。例如,供TriMedia处理之用,特别是TriMedia1300,所述代码能够按64字节的块的形式被分解为指令高速缓存尺寸块。
通过采用本发明,人们发现可执行映像中的75-80%数量的高速缓存尺寸块需要在运行期打补丁和位洗牌。正如将认识到的是,这留下20-25%未打补丁的,从而正如本发明确定的那样,能够在运行期之前被位洗牌,特别是当程序正在被链接以形成可执行映像时。
由此,注意这种未打补丁的64个字节块的预洗牌优选地用于按通常经验经减少运行期洗牌开销的20-25%,从而导致可执行加载和再定位时间方面的优势增加。
注意本发明优选地在运行期之前并且在程序正在被链接时提供位洗牌。因此,在链接时,链接器优选地被设置成产生用于在运行期加载和再定位可执行代码的再定位补丁表。
在这种链接的末尾,链接器被设置成检查再定位补丁表以确定文本片段中的哪一个地址接着被打补丁。通过标识这种已打补丁的片段,很容易识别出64字节块中的哪一块需要在运行期被打补丁和洗牌。
不受打补丁影响的64字节的块接着在链接时被预洗牌,哪些块将在运行期被打补丁和洗牌的记录是由链接器按位图的形式产生的,这有利于被添加到可执行映像。
这种位图可以优选地按表示可执行文本片段中的64字节块的每一单个位排列。位图中的每一位接着充当对于加载器来说容易识别是否位洗牌与它相关联的特定的64字节块的标志。由此,位图中的第N位表示可执行文本片段中的第N个64字节块。
因此,对于N字节的可执行文本片段,需要位图中的(N+63)/64位。利用8位的字节,这仅仅将(N+63)/512添加到整个可执行代码。
现在转向图1,以示意性块的形式举例说明了根据本发明的用于产生具有预洗牌部分代码的程序可执行映像的设备。
图1中举例说明的设备10包括程序链接器12,其被设置成读取对象文件14A、14B以便将所述对象链接在一起并由此形成所需的程序可执行映像。
根据这个举例说明的本发明的实施例,并且在链接过程期间,在链接器12内形成将被打补丁的文本片段的地址的表16并且接着利用文本片段预洗牌器20通过参考文本片段补丁地址18的表16来对在运行期不需要打补丁的文本片段的64字节块进行预洗牌。
当结束这个过程时,可执行代码22能够继而沿箭头B的方向被读出并且例如包含a.out或ELF首部的可执行首部24、指示文本片段的哪一个64字节块仍需要在运行期洗牌的洗牌位图26、设置成能在运行期打补丁文本和数据段的再定位补丁表28、文本和数据片段30,32以及BSS片段34。
现在转向图2,将会认识到如何有利地根据需要加载图1中举例说明的可执行代码22。
如上所述,所述可执行代码22包括相同的片段,尤其是洗牌位图26,标识再定位补丁表28以及文本片段30以便于引用。
TriMedia可执行文本片段的加载和再定位按如下进行。
程序加载器36被设置用于按箭头B和C所示的那样从可执行映像22中读取再定位补丁表和洗牌位图以及可执行文本代码并且用来按箭头D所示的那样再定位图像以及将此作为再定位后的文本片段30写回。
程序加载器36接着按箭头A指示的那样逐位读取洗牌位图,并且这确定是否文本片段的每一个64字节块都需要被程序加载器36内的文本片段洗牌器38洗牌。如果识别出正在考虑的片段需要洗牌,则文本片段洗牌器38能够按箭头C所示的从文本片段中读取64字节块然后对它进行洗牌,并按箭头D所示的将其写回。
正如将会认识到的是,本发明带来的优点是可适用于供运行期操作系统内所需的任何可执行代码(诸如必须在执行之前加载和再定位的TriMedia可执行代码)使用。
本发明不仅应用于程序可执行代码而且还应用于可运行库,比如TriMedia动态链接库(DLL)。
正如将认识到的是,程序和库的加载通常是由例如pSOS实时操作系统中的加载器库担任的,或者是由诸如在UNIK类操作系统(比如,Linux)或实时操作系统的整体内核中的二进制加载器函数担任的。因此,将会认识到的是,本发明的尤其有利的使用就是与必须加载和再定位TriMedia可执行代码的操作系统一起使用。
本发明不局限于上述实施例的细节。具体来讲,所述原理不局限于与运行期操作系统一起使用而是同样地例如适用于预洗牌的二进制的处理阶段,比如在稍后链接时段期间列出预洗牌的二进制目标代码。
权利要求
1.一种用于解码包括位洗牌代码的处理器系统中的可执行代码的方法,并且包括下列步骤-将代码划分成多个子部分;-标识能够在处理之前被位洗牌的代码的子部分;以及-在处理之前对所述标识的子部分进行位洗牌以便减少所需的处理位洗牌。
2.根据权利要求1所述的方法,其中所述系统包括运行期操作系统,并且所述已标识的子部分在运行期之前被位洗牌。
3.根据权利要求2所述的方法,并且包括下列步骤,在链接时产生用于加载和再定位代码的再定位补丁表。
4.根据权利要求3所述的方法,并且包括下列步骤,在上述链接的末尾检查再定位补丁表以便确定代码中的哪一个地址被打补丁。
5.根据权利要求2、3或4所述的方法,其中所述已标识的子部分在链接时被位洗牌。
6.根据权利要求2-5中任何一项或多项所述的方法,并且包括下列步骤产生将在运行期按位图的形式打补丁和洗牌的子部分的记录。
7.根据权利要求6所述的方法,并且包括下列步骤将所述位图添加到可执行代码。
8.根据权利要求2-7中任何一项或多项所述的方法,并且包括下列步骤标识不需要在运行期打补丁的代码的子部分以便标识预洗牌的子部分。
9.根据权利要求2-8中任何一项或多项所述的方法,并且包括下列步骤读取程序加载器内的代码元素以执行程序。
10.根据权利要求9所述的方法,其中程序加载器被设置成读取再定位补丁表和可执行代码并且在可执行代码内写回结果。
11.根据权利要求2-10中任何一项或多项所述的方法,其中所述可执行代码包括具有包含TriMedia可执行代码的文本片段的TriMedia程序。
12.根据权利要求2-11中任何一项或多项所述的方法,其中代码的每一个子部分包括高速缓存尺寸块。
13.根据权利要求12所述的方法,其中每一个高速缓存尺寸块包括64字节的块。
14.根据权利要求2-13中任何一项或多项所述的方法,用于需要在执行之前加载和再定位的任何形式的TriMedia可执行映像。
15.根据权利要求1所述的方法,并且包括在稍后链接时段期间的预洗牌代码的链接。
16.用于解码处理器中的可执行代码并且包括用于位洗牌代码的装置的解码设备,所述设备还包括-用于将代码划分成多个子部分的装置;-标识能够在处理之前被位洗牌的代码的子部分的装置;和-在处理之前对所述标识子部分进行位洗牌以便减少所需的处理位洗牌的装置。
17.根据权利要求16所述的设备,其中所述系统包括运行期操作系统,并且已标识的子部分是那些能够在运行期之前被位洗牌的子部分。
18.根据权利要求17所述的设备,并且包括用于在链接时产生用于加载和再定位代码的再定位补丁表的装置。
19.根据权利要求17或18所述的设备,并且包括用于在链接时位洗牌已标识的子部分的装置。
20.根据权利要求17、18或19所述的设备,并且包括用于产生将在运行期按位图的形式打补丁和洗牌的子部分的记录的装置。
21.根据权利要求17、18、19或20所述的设备,并且包括代码元素被读取到其中以供程序执行的程序加载器。
22.根据权利要求21所述的设备,其中程序加载器被设置成读取再定位补丁表和可执行代码并且在可执行代码内写回结果。
23.根据权利要求17所述的设备,其中代码的每一个子部分包括高速缓存尺寸块。
24.根据权利要求17所述的设备,其中每一个高速缓存尺寸块包括64字节的块。
25.根据权利要求16所述的设备,并且被设置用于在稍后链接时间段期间链接预洗牌代码。
26.一种包括计算机程序代码装置的计算机程序单元,所述计算机程序代码装置令计算机执行解码包括位洗牌代码的处理器中的可执行代码的过程,并且用于-将代码划分成多个子部分;-标识能够在处理之前被位洗牌的代码的子部分;以及-在处理之前对所述标识的子部分进行位洗牌以便减少所需的处理位洗牌。
27.根据权利要求26所述的计算机程序单元,并且被设置成控制运行期操作系统中的解码。
28.根据权利要求26所述的计算机程序单元,并且被设置成控制在稍后链接时间段期间的预洗牌代码的链接。
29.一种包括计算机可读介质并且包括如权利要求26、27或28所述的程序单元的计算机程序产品。
30.一种包括如权利要求26、27或28所述的计算机程序单元的计算机可读介质。
全文摘要
本发明提供了一种用于解码处理系统(例如,运行期操作系统)中的可执行代码(包括运行期的位洗牌代码)的方法和相关设备以及控制程序,并且包括下列步骤将代码划分成多个子部分,标识能够在所述运行期之前被位洗牌的代码的子部分并且在运行期之前对所述已标识的子部分进行位洗牌以便减少在运行期所需的位洗牌。
文档编号G06F9/445GK1910551SQ200580002293
公开日2007年2月7日 申请日期2005年1月11日 优先权日2004年1月13日
发明者C·I·金 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1