代码多副本处理方法、装置、电子设备及存储介质与流程
- 国知局
- 2024-11-06 14:48:28
本发明涉及计算机,具体而言,涉及一种代码多副本处理方法、装置、电子设备及存储介质。
背景技术:
1、随着互联网技术的发展,各种各样的应用程序也越来越多,通常可以在本地系统运行应用程序。多线程应用程序作为一种大型的应用程序,其在本地的运行也成为了研究的热点。
2、相关技术中,在系统上运行大型多线程应用时存在跨节点执行代码的现象;在跨节点执行代码时,通常会跨节点访问同一内存节点。
3、但是,跨节点访问同一内存节点时,会存在延迟较大、带宽受限的问题。
技术实现思路
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、可选地,所述对所述临时文件进行修改,得到修改后的临时文件,包括:
47、将所述虚拟地址的分布信息编码至源文件中;
48、根据所述源文件生成支持库,并将所述支持库中生成的二进制代码添加到所述临时文件中;
49、根据所述原始文件中指令地址和所述虚拟地址,更新所述临时文件中寻址指令的偏移量;
50、对所述临时文件中的间接分支跳转指令替换为转移到支持库中对应函数的直接分支指令,得到所述修改后的临时文件。
51、第二方面,本技术实施例还提供了一种代码多副本处理装置,包括:
52、编译模块,用于将目标程序代码编译为具有多个代码段的文件;
53、绑定模块,用于采用内核的页面移动功能,对所述代码段的内存和节点标识进行绑定,得到绑定关系;
54、计算模块,用于根据所述绑定关系,计算待执行的用户态指令在当前节点标识对应的目标指令地址,其中,所述当前节点标识为当前处理器所在的节点标识;
55、修改模块,用于执行回调函数,将待执行的所述用户态指令的地址,修改为所述目标指令地址。
56、可选地,所述编译模块,具体用于采用编译器,根据所述目标程序代码生成目标代码文件;根据所述目标代码文件转换生成节点文件;根据所述节点文件以及链接脚本文件,生成所述具有多个代码段的文件。
57、可选地,所述编译模块,具体用于采用编译器,根据所述目标程序代码生成目标代码文件,并将所述目标程序代码中的间接分支指令生成为转移到跳板函数的直接分支指令,所述跳板函数的代码用于对所述间接分支指令的地址进行调整,并通过所述间接分支指令将控制转移到调整后的地址;根据所述目标代码文件以及所述跳板函数的代码对应的文件,转换生成所述节点文件。
58、可选地,所述编译模块,具体用于根据所述目标代码文件、所述跳板函数的代码对应的文件以及用于指示所述代码段开始和结束的指示文件,转换生成所述节点文件。
59、可选地,所述编译模块,具体用于将所述目标代码文件、所述跳板函数的代码对应的文件以及所述指示文件,分别复制为携带有节点标识的预设数量份文件,所述预设数量用于表示期望支持的节点数;将所述预设数量份文件,作为多个所述节点文件。
60、可选地,所述装置还包括:
61、解析模块,用于解析所述目标代码文件、所述跳板函数的代码对应的文件、所述指示文件中的符号表,确定函数名;
62、建立模块,用于根据所述函数名建立函数名数据库;
63、所述编译模块,具体用于采用所述链接脚本文件,根据所述节点文件、所述函数名数据库以及预设命令行参数顺序,生成所述具有多个代码段的文件。
64、可选地,所述编译模块,具体用于采用所述链接脚本文件根据所述节点文件,生成各节点对应的静态库;采用所述链接脚本文件,将所述静态库链接为所述具有多个代码段的文件。
65、可选地,所述编译模块,具体用于将所述目标代码文件、所述跳板函数的代码对应的文件以及所述指示文件中的待处理文件复制为携带有节点标识的预设数量份初始文件;判断所述各初始文件的符号表中的符号,是否为本地定义的符号或者在所述函数名数据库中定义的符号,若是,则将所述预设数量份初始文件中的所述符号更新为所述节点标识,得到所述携带有节点标识的预设数量份文件。
66、可选地,所述绑定模块,具体用于获取各节点标识的代码起始函数的地址和代码终止函数的地址;采用所述页面移动能力,根据所述各节点标识的所述代码起始函数的地址和所述代码终止函数的地址,将所述代码起始函数的地址和所述代码终止函数的地址之间的页面绑定至对应的节点标识。
67、可选地,所述计算模块,具体用于获取所述当前节点标识;根据所述当前节点标识和所述绑定关系,确定所述当前节点标识对应的目标代码段的内存中的代码起始函数和代码终止函数;根据所述目标代码段的内存中的所述代码起始函数和所述代码终止函数,确定所述目标代码段的长度;根据所述目标代码段的长度,计算所述待执行的用户态指令在所述当前节点标识对应的所述目标指令地址。
68、可选地,所述编译模块,具体用于将所述目标程序代码对应的原始文件中的代码段内容,读取到多个临时文件中;根据各所述临时文件的大小,为各所述临时文件分配虚拟地址,其中,所述虚拟地址的大小不小于所述临时文件的大小,且所述虚拟地址为起始地址和结束地址均页面对齐的地址;对所述临时文件进行修改,得到修改后的临时文件;根据所述修改后的所述临时文件,在所述原始文件中添加多个可加载代码段,得到所述具有多个代码段的文件。
69、可选地,所述编译模块,具体用于将所述虚拟地址的分布信息编码至源文件中;根据所述源文件生成支持库,并将所述支持库中生成的二进制代码添加到所述临时文件中;根据所述原始文件中指令地址和所述虚拟地址,更新所述临时文件中寻址指令的偏移量;对所述临时文件中的间接分支跳转指令替换为转移到支持库中对应函数的直接分支指令,得到所述修改后的临时文件。
70、第三方面,本技术实施例还提供了一种电子设备,包括:存储器和处理器,所述存储器存储有所述处理器可执行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面任一项所述的代码多副本处理方法。
71、第四方面,本技术实施例还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述计算机程序被读取并执行时,实现上述第一方面任一项所述的代码多副本处理方法。
72、本发明的有益效果是:本技术实施例提供的一种代码多副本处理方法、装置、电子设备及存储介质,该方法可以包括:将目标程序代码编译为具有多个代码段的文件;采用内核的页面移动功能,对代码段的内存和节点标识进行绑定,得到绑定关系;根据绑定关系,计算待执行的用户态指令在当前节点标识对应的目标指令地址,其中,当前节点标识为当前处理器所在的节点标识;执行回调函数,将待执行的用户态指令的地址,修改为目标指令地址。基于确定出的绑定关系,计算待执行的用户态指令在当前节点标识对应的目标指令地址,这样针对不同的节点标识所确定出的目标指令地址是不同的,将待执行的用户态指令的地址修改为目标指令地址,这样可以跨节点访问的内存节点是不同的,这样在可以减小时延,也避免带宽的受限,实现了在本地运行目标程序代码。
本文地址:https://www.jishuxx.com/zhuanli/20241106/324218.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表