发明名称 多处理器平台下的动态二进制翻译方法
摘要 本发明公开了一种多处理器平台下的动态二进制翻译方法。目的是提供一种利用操作系统缺页中断机制实现翻译控制的方法。技术方案是先搭建由多个处理器组成的硬件平台,然后设计翻译软件,由翻译软件负责二进制代码的转换;接着实现动态二进制翻译VMM,该VMM包含全局变量表、翻译控制例程和模式切换模块三大部分,具有普通模式和翻译模式两种工作模式;整合软硬件构建翻译系统,将VMM安装到主处理器,将翻译软件安装到协处理器,启动主处理器和协处理器;最后使用软硬结合的多处理器动态二进制翻译系统翻译执行用户程序。采用本发明能使翻译过程和执行过程在两个不同的处理器上并行,使程序高效翻译执行且具有更大的灵活性和可扩展性。
申请公布号 CN102087609B 申请公布日期 2013.06.05
申请号 CN201110043981.4 申请日期 2011.02.23
申请人 中国人民解放军国防科学技术大学 发明人 王志英;徐帆;沈立;赖鑫;陈微;陈顼颢;郑重;温家辉;郭辉
分类号 G06F9/45(2006.01)I 主分类号 G06F9/45(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种多处理器平台下的动态二进制翻译方法,其特征在于包括以下步骤:第一步,选择两个或两个以上的处理器并搭建硬件平台;第二步,结合协处理器的总线宽度、访存协议、地址空间大小设计翻译软件,翻译软件负责二进制代码的转换,由协处理器运行,翻译软件的流程如下:2.1初始化分支目标地址映射表和代码cache页面管理表,将表中各个字段设为0,进入空闲状态,等待来自主处理器的翻译请求;分支目标地址映射表是记录翻译前后的用户程序中分支目标地址的对应关系的表,包含用户程序分支目标地址、标志位和翻译后的分支目标地址三个字段;代码cache页面管理表是记录代码cache各页面状态的表,由页地址、有效位、LRU值三个字段组成,页地址为页面在代码Cache已翻译区中的地址,有效位表示所指页是否为空、LRU值为页地址所指的页面被访问的次数,翻译软件选择LRU值最小的页面进行替换;2.2接收到翻译请求后,在分支目标地址映射表中查询发生缺页的页地址,若不存在对应记录,则说明该地址未翻译,转步骤2.3;若存在对应记录则不启动翻译任务,直接将对应的分支目标地址发送给主处理器,转步骤2.4;2.3翻译用户程序页面:新建一个翻译任务,查代码Cache页面管理表,在表中找到一个空页面,并将该空页面的记录中的有效位置为1,更新LRU值,然后开始翻译用户程序页面,并将生成的已翻译代码存放到该空页面中;每翻译到一个分支目标地址,翻译软件在分支目标地址映射表中添加一项,并将翻译后的对应地址填入分支目标地址映射表中;当空页面页面满时,暂 停翻译动作;2.4发送响应消息:翻译软件以缺页地址为索引查分支目标地址映射表,找到其对应的“翻译后的分支目标地址”并发送给主处理器上运行的VMM;2.5继续翻译用户程序页面剩下的代码,直至翻译完毕;2.6若当前没有新的翻译任务,则等待主处理器的翻译请求;第三步,实现动态二进制翻译VMM,该VMM包含全局变量表、翻译控制例程和模式切换模块三大部分,具有普通模式和翻译模式两种工作模式:3.1实现全局变量表,其实现方法为:在内核/include/文件夹下添加“transsupport.h”文件,在“transsupport.h”文件中定义如下全局变量:·workmode:描述当前操作系统的执行模式;0为普通模式,1为翻译模式,2为翻译模式且有任务正在运行;·start_readyzone/end_readyzone:记录执行区起始/终止地址;·fault_address:记录发生缺页的地址,发送翻译请求时由主处理器发送给协处理器,翻译过程中将产生该地址对应的翻译后地址;·xaddr:交换地址,由协处理器翻译产生,发送翻译结果时发送给主处理器;该交换地址的偏移地址部分即为新入口地址的偏移地址;·start_code/end_code:原始程序代码段起始/终止地址;·start_data/end_data:原始程序数据段起始/终止地址;3.2实现翻译控制例程:3.2.1在内核文件fs/exec.c中的do_execve()函数中添加翻译控制例程代码,由翻译控制例程代码判断当前操作系统的执行模式,若当前workmode值为1,则设置workmode为2,打开后续翻译控制例程入口;3.2.2在内核文件fs/binfmt_elf.c中load_elf_binary()函数中添加 如下翻译控制例程代码:1)在调用函数elf_check_arch()对当前可执行文件的指令集进行检查处添加翻译控制例程代码,判断可执行文件的指令集是否为目标指令集,若是则将workmode值置为1,不启动后续翻译控制例程代码,按正常模式执行;否则跳过该指令集检查,按翻译模式执行;2)在调用函数elf_mmap()将可执行文件映射到虚存处添加翻译控制例程代码,将代码Cache已翻译区挂载到用户进程;3)在调用start_thread()函数设置程序返回点处添加翻译控制例程代码,若当前workmode值为2,则将原始程序代码段和数据段加载到的虚存空间的起始和终止地址分别记录到对应的环境变量中;3.2.3在缺页中断处理例程前端,内核文件fault.c的do_page_fault()函数中添加如下翻译控制例程代码:1)在调用handle_mm_fault()函数之前加入翻译控制例程代码,若当前workmode值为2且缺页发生在原始程序代码段,则将该缺页地址记录到对应环境变量中;2)在do_page_fault()函数返回前加入翻译控制例程代码,若当前workmode值为2且缺页发生在原始程序代码段,则将返回后的PC值reg.PC设置为已翻译页面上的入口地址,该地址保存在全局变量xaddr中;3.2.4在缺页中断处理例程后端,内核文件mm/memory.c的do_fault()中添加如下翻译控制例程代码:a)调用vmf.fault()函数,获取缺页中断页面处添加翻译控制例程代码,若当前workmode值为2,且该页地址位于原始程序代码段,则向协处理器发送翻译请求,并将缺页中断发生的地址一并发送给协处理器,然后等待翻译结果产生;b)在a)中所述翻译控制例程代码后添加翻译控制例程代码,若当前 workmode值为2且页地址位于原始程序代码段,则将接收到的响应消息包含的交换地址记录到对应的环境变量xaddr中,并直接返回上层函数,不填操作系统页表;3.2.5在内核文件fs/exit.c的do_exit()函数中添加翻译控制例程代码,若当前workmode值为2,则设置workmode值为1;3.3实现模式切换模块,方法如下:3.3.1建立文件MChange.c;3.3.2在文件MChange.c中加入内核模块的加载和卸载入口函数init_module()和卸载函数clean_module();3.3.3在init_module()函数中添加代码,将workmode值置为1,在clean_module()函数中添加代码,将workmode值置为0;3.4编译修改后的linux内核及模式切换模块,得到VMM;第四步,整合软硬件构建软硬结合的多处理器动态二进制翻译系统,将VMM安装到主处理器,将翻译软件安装到协处理器,启动主处理器和协处理器;第五步,使用该软硬结合的多处理器动态二进制翻译系统翻译执行用户程序,具体流程如下:5.1将已在源体系结构处理器上编译的用户程序拷贝到文件系统下;5.2挂载模式切换模块,将VMM切换到翻译模式;5.3运行用户程序;5.4软硬结合的多处理器动态二进制翻译系统采用以下步骤翻译执行用户程序:5.4.1用户程序加载:当用户程序刚开始运行,产生“execve”系统调用进入内核时,VMM开始执行初始化工作;位于函数load_elf_binary()中的翻译控制例程保证程序通过指令集检查,挂载代码Cache已翻译区,同时 记录用户程序代码段加载的位置,随后设置返回用户态后的PC值为用户程序代码段入口地址,返回用户态;5.4.2产生翻译请求:当主处理器从原始程序代码段入口取第一条指令时,由于当前页面不在内存,产生缺页中断再次进入内核,VMM开始处理翻译任务;5.4.3发送翻译请求:由于发生缺页的位置位于原始程序代码段,VMM中的翻译控制例程将截获该缺页中断,获取缺页地址,并将缺页地址发送给协处理器进行翻译;5.4.4等待响应消息:主处理器执行do_fault()函数,直到获得来自协处理器的响应消息为止;5.4.5翻译软件接收到翻译请求,查分支目标地址映射表确定该缺页地址处指令是否已翻译,若无需翻译则直接根据查表结果发送响应消息,若需要翻译则启动翻译任务;5.4.6翻译软件启动翻译任务,首先查代码Cache管理表确定已翻译代码写入的位置,若代码Cache满则根据LRU值进行页面替换,然后开始从缺页地址处翻译用户程序页面,并在翻译过程中不断更新分支目标地址映射表,直至产生第一个已翻译页面为止;5.4.7发送响应消息:产生第一个已翻译页面后,翻译软件将缺页地址对应的已翻译的分支目标地址发送给VMM;5.4.8继续翻译:翻译软件发送完响应消息后,若用户程序页面还有未翻译完的代码,则继续翻译直至完成;5.4.9翻译完用户页面后,翻译软件等待新的翻译请求产生;5.4.10VMM接收到响应消息后,位于此处的翻译控制例程将响应消息中的地址保存在全局变量xaddr中,然后直接让缺页处理例程返回上层函数do_page_fault(),不填操作系统页表;5.4.11链接已翻译页面:在函数do_page_fault()返回之前,翻译控制例程将regs.PC,即返回用户态后的用户程序入口点设置为xaddr的值,然后返回用户态;主处理器从代码Cache已翻译区的已翻译页面开始执行;主处理器执行已翻译代码过程中若遇到未翻译的分支目标地址,将跳回用户程序代码段,再次产生缺页中断,从而产生新的翻译请求;5.4.12用户程序执行结束,VMM位于exit()函数中的翻译控制例程将workmode置为1,关闭前面一系列翻译控制例程入口。
地址 410073 湖南省长沙市开福区德雅路109号