代码翻译处理方法、系统、计算机系统及计算机设备与流程

文档序号:36717002发布日期:2024-01-16 12:16阅读:20来源:国知局
代码翻译处理方法、系统、计算机系统及计算机设备与流程

本技术涉及计算机,尤其涉及一种代码翻译处理方法、系统、计算机系统及计算机设备。


背景技术:

1、二进制翻译可以用来解决在二进制层面,程序跨体系结构运行的问题。通常在计算机系统中会同时存在静态代码或动态自修改代码,静态代码通常不会发生修改或变化,而动态自修改代码在运行过程中经常发生修改,因此需要在代码修改后,重新翻译修改后的代码,在实际应用中,涉及动态自修改代码的跨体系结构运行性能表现不佳。

2、在现有的二进制翻译方案中,在对代码进行翻译之后,将翻译代码依次存储到缓存中。由于动态自修改代码的反复修改,会不断地进行代码翻译以及向缓存中存入翻译代码,当缓存写满后,由于无法区分缓存中存储的代码类型,就会将全部缓存清空,然后再重新翻译最新的所有代码并存储。这样就导致对于静态代码,也会删除其翻译代码并重新翻译,从而降低了代码运行效率和性能。


技术实现思路

1、基于上述技术现状,本技术提出一种代码翻译处理方法、系统、计算机系统及计算机设备,能够提高代码运行效率和性能。

2、本技术第一方面提出一种代码翻译处理方法,应用于计算机系统的处理器,所述计算机系统的缓存被划分为缓存块,所述缓存块中包括第一缓存块,所述第一缓存块用于存储动态自修改代码的翻译代码,所述方法包括:

3、确定待翻译的目标代码的代码类型;所述代码类型为静态代码、动态自修改代码或未知类型代码;

4、对所述目标代码进行翻译,得到翻译代码;

5、在所述目标代码为动态自修改代码的情况下,将所述翻译代码存储至所述第一缓存块。

6、在一些实现方式中,所述缓存中还包括第二缓存块和第三缓存块,所述第二缓存块用于存储静态代码的翻译代码,所述第三缓存块用于存储未知类型代码的翻译代码,所述方法还包括:

7、在所述目标代码为静态代码的情况下,将所述翻译代码存储至所述第二缓存块;

8、在所述目标代码为未知类型代码的情况下,将所述翻译代码存储至所述第三缓存块。

9、在一些实现方式中,在所述目标代码为动态自修改代码的情况下,所述方法还包括:

10、基于针对目标代码所在内存块的属性变更事件,确定所述目标代码中被修改的代码页;

11、所述对所述目标代码进行翻译,得到翻译代码,包括:

12、对所述目标代码中的被修改的代码页进行翻译,得到修改翻译代码;

13、所述将所述翻译代码存储至缓存中的第一缓存块,包括:

14、从存储所述被修改的代码页的原有翻译代码的第一缓存块中,删除所述被修改的代码页的原有翻译代码,并将所述修改翻译代码存储至该第一缓存块。

15、在一些实现方式中,基于针对目标代码所在内存块的属性变更事件,确定所述目标代码中被修改的代码页,包括:

16、基于针对目标代码所在内存块的属性变更事件,确定目标代码所在内存块的属性变更情况;所述属性变更事件用于将目标代码所在内存块的属性设置为只读属性或可写属性;

17、在目标代码所在内存块的属性从只读属性变为可写属性时,记录所述目标代码的各个代码页的第一摘要;

18、在所述目标代码所在内存块的属性从可写属性变为只读属性时,记录所述目标代码的各个代码页的第二摘要;

19、根据所述各个代码页的第一摘要和第二摘要,从所述目标代码中确定出被修改的代码页。

20、在一些实现方式中,对所述目标代码进行翻译,得到翻译代码,包括:

21、对所述目标代码进行翻译,并在翻译后的代码头部添加计数代码,得到翻译代码;其中,所述计数代码用于统计所述翻译代码被运行的次数。

22、在一些实现方式中,确定待翻译的目标代码的代码类型,包括:

23、基于针对目标代码所在内存块的属性变更事件,确定所述目标代码所在内存块的内存地址;所述属性变更事件用于对目标代码所在内存块的内存地址的属性进行设置;

24、判断所述目标代码所在内存块的内存地址是否处于第一内存范围之外,以及所述目标代码所在内存块的内存大小是否在设定的内存大小范围内;其中,所述第一内存范围包括静态代码映射到内存后所占用的内存地址范围;

25、在所述目标代码所在内存块的内存地址处于第一内存范围内的情况下,确定所述目标代码为静态代码;

26、在所述目标代码所在内存块的内存地址处于第一内存范围之外,并且所述目标代码所在内存块的内存大小在设定的内存大小范围内的情况下,确定所述目标代码为动态自修改代码;

27、在所述目标代码不能被确定为静态代码或动态自修改代码的情况下,确定所述目标代码为未知类型代码。

28、在一些实现方式中,在所述目标代码为动态自修改代码的情况下,所述方法还包括:

29、检测所述缓存中的第一缓存块的空闲存储空间是否足以容纳所述翻译代码;

30、若所述缓存中的第一缓存块的空闲存储空间不足以容纳所述翻译代码,则从所述缓存中选出空闲缓存块作为第一缓存块。

31、在一些实现方式中,所述处理器记录所述缓存中的各个缓存块的运行信息,所述运行信息包括代码动态程度、代码被失效的次数、代码最后一次被运行的时间、代码运行次数,其中,动态自修改代码的代码动态程度大于未知类型代码的代码动态程度,未知类型代码的代码动态程度大于静态代码的代码动态程度;所述方法还包括:

32、在所述缓存中没有空闲的缓存块的情况下,基于所述缓存中各个缓存块的运行信息,从各个缓存块中选出待释放的缓存块,并清除所述待释放的缓存块中的代码。

33、在一些实现方式中,基于所述缓存中各个缓存块的运行信息,从各个缓存块中选出待释放的缓存块,包括:

34、至少按照代码被失效次数从大到小的顺序,对各个缓存块进行排列,得到缓存块序列;

35、从所述缓存块序列中,选出排在序列首位的缓存块,作为待释放的缓存块。

36、在一些实现方式中,至少按照代码被失效次数从大到小的顺序,对各个缓存块进行排列,得到缓存块序列,包括:

37、按照代码被失效次数从大到小的顺序,对各个缓存块进行排列,得到缓存块序列;

38、其中,在所述缓存块序列中,代码被失效次数相同的缓存块按照代码动态程度从大到小的顺序排列,代码动态程度相同的缓存块按照代码被运行次数从小到大的顺序排列,代码被运行次数相同的代码块按照代码最后一次被运行的时间从先到后的顺序排列。

39、本技术第二方面提出一种代码翻译处理系统,应用于计算机系统的处理器,所述计算机系统的缓存被划分为缓存块,所述缓存块中包括第一缓存块,所述第一缓存块用于存储动态自修改代码的翻译代码,所述系统包括:

40、动态代码检测模块,用于确定待翻译的目标代码的代码类型;所述代码类型为静态代码、动态自修改代码或未知类型代码;

41、代码翻译模块,用于对所述目标代码进行翻译,得到翻译代码;在所述目标代码为动态自修改代码的情况下,将所述翻译代码存储至所述第一缓存块。

42、在一些实现方式中,所述处理器记录所述缓存中的各个缓存块的运行信息,所述运行信息包括代码动态程度、代码被失效的次数、代码最后一次被运行的时间、代码运行次数,其中,动态自修改代码的代码动态程度大于未知类型代码的代码动态程度,未知类型代码的代码动态程度大于静态代码的代码动态程度;所述系统还包括:

43、失效策略模块,用于在所述目标代码为动态自修改代码并且所述缓存中没有空闲的缓存块的情况下,基于所述缓存中各个缓存块的运行信息,从各个缓存块中选出待释放的缓存块;清除所述待释放的缓存块中的代码,以使所述代码翻译模块将所述翻译代码存储至该缓存块。

44、本技术第三方面提出一种计算机系统,所述计算机系统的缓存被划分为缓存块,所述缓存块中包括第一缓存块,所述第一缓存块用于存储动态自修改代码的翻译代码,所述计算机系统的处理器被配置为执行上述的代码翻译处理方法。

45、本技术第四方面提出一种计算机设备,包括上述的计算机系统。

46、本技术提出的代码翻译处理方法将缓存划分为缓存块,并且在缓存块中设置用于存储动态自修改代码的翻译代码的第一缓存块。基于上述的缓存块划分,在对动态自修改代码进行翻译后,将翻译代码存储至第一缓存块,这样就使得动态自修改代码的缓存与静态代码的缓存区分开,从而当缓存写满时,能够从缓存中识别出用于存储动态自修改代码的翻译代码的缓存块,进而可以有选择性地将动态自修改代码的翻译代码清空,这样可以避免对静态代码的翻译代码清空并重新翻译,因此能够提高代码运行效率和性能。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1