高可移植性x86模拟器的指令翻译和系统态实现框架
发布时间:2020-05-15 16:32
【摘要】:过去的三十多年来,无论是在商用领域还是个人家用领域,基于Intelx86[7]架构的服务器和个人主机都具有很高的市场份额[8]。不过近些年来,随着消费者对智能手机和平板电脑等移动计算设备的需求越来越大,以ARM[4]为领头羊的RISC[1]芯片因为其省电、开发周期短、芯片尺寸小等优势,对x86芯片发起了挑战。另一方面,出于对国家安全和科技发展的战略角度考虑,中国也自主研发出了“龙芯”[26]和“众志Unicore-2"[27]等一批RISC处理器。倘若ARM、“龙芯”和“众志Unicore-2"等RISC处理器能够兼容流行架构x86的操作系统和应用程序的话,则能够更容易地获得终端用户的接受。 为了使得异体系架构处理器对x86上运行的软件可兼容,x86模拟器是个理想的解决方案。它可以运行在非x86体系架构的平台上,模拟出符合x86标准的虚拟硬件环境,使得专门针对x86架构编写的软件可以通过模拟器建立的虚拟x86环境,运行在异体系架构的处理器上。 口前,支持多种微处理器架构宿主硬件平台的x86模拟器都是运行在用户态的,而可运行在系统态的x86模拟器都是专门针对特定宿主硬件平台开发的。因此,针对中国自主研发的微处理器架构的系统态x86模拟器需要专门研发。 本文章要介绍一个高可移植性的x86模拟器PEX86 (Portable Emulator for x86)的动态二进制指令翻译方法和该模拟器在系统态实现的软件框架。PEX86的解释型动态二进制指令翻译技术具有较好的可移植性。它运行在计算机的系统态,即PEX86无需操作系统的支持,直接管理所有的系统硬件资源。由于要模拟整个x86硬件平台的工作量较大,PEX86现阶段仅支持x86硬件平台工作在实模式下的模拟。不过,这为今后进一步支持x86硬件平台工作在保护模式下的模拟打下了坚实基础。 本文的主要贡献如下: 1、探索了针对中国自主研发的微处理器面向x86操作系统和应用程序的可兼容问题的解决方法。 2、使用了具有较好可移植性的动态二进制指令翻译技术和模拟器在系统态的实现框架,令运行在系统态的模拟器可较容易地支持不同微处理器架构的宿主硬件平台。 3、使用按功能分层和抽象化、模块化的系统态实现框架,使得虚拟外设和宿主平台外设之间的映射关系灵活、可配置,也使得在模拟器中增加和修改一个虚拟外设的工作变得简单。
【图文】:
内存访问地址对齐(ByteAl19恤ent)所有处理器能处理的数据长度都是2的n次方(n为大于等于O的整数)字节。比如一个典型的x8632位处理器能处理的数据类型有Byte类型(l个节),WORD类型(2个字节)和Dw0RD类型(4个字节),若是64位处理器的还能处理长度是8个字节或者16个字节的数据。因此有些处理器会要求存放个x个字节长度的数据时,其内存地址必须也是x个字节对齐的。例如当程序求存放一个占据4字节的整型时,该整型一定要存放在4字节对齐的地址(即内存地址必须能被4整除)。为什么会有上述的限制呢?理解了内存组织,就会清楚了。CPU通过地址线来存取内存中的数据,32位的CPU的地址总线宽度为32位,标为A【O:31〕。一个总线周期内,CPU从内存读/写32位。但是每次CPU只能在能够被4整除地址进行内存访问,这是因为32位CPu不使用地址总线的A1和A2。比如ARM,的A[O:l]用于字节选择,用于逻辑控制,而不和存储器相连,存储器连接A〔2:31〕。当一个32位的CPU从内存中要取出一个char类型的数据(占1个
接下来我们研究一下一个在ARM上运行的x86模拟器动态地翻泽一条MOVEAX,〔EBX〕指令(将EBX寄存器内所指的内存地址的32位数据读取到EAX寄存器,卜,【23])的流程,如图2.3所示。尽叩code尽mod-翻翻译指令令 XXX86RAMMM写写操作数数 数模拟计算 算 MMMOVEAX,[EBXIII尸一一一少\}{月ov‘一,/!’“r 11llOVr7,r2r6,,X86--RAM一BASE+r7 f1.r6图2.3动态指令翻译的工作流程一个二进制指令翻译模块一般都会被设计成一个包含了取指令、翻译指令、取出操作数(从被模拟的X86内存中)、模拟计算、写回操作数(向被模拟的x86内存)这5个阶段的无限循环。除非遇到一些特殊情况,比如产生了x86的硬件或者软件中断等,否则这个无限循环会一直进行下去。为了模拟 x86CPU取指令的行为,x86模拟器中也会有一个EIP寄存器
【学位授予单位】:复旦大学
【学位级别】:硕士
【学位授予年份】:2011
【分类号】:TP332
【图文】:
内存访问地址对齐(ByteAl19恤ent)所有处理器能处理的数据长度都是2的n次方(n为大于等于O的整数)字节。比如一个典型的x8632位处理器能处理的数据类型有Byte类型(l个节),WORD类型(2个字节)和Dw0RD类型(4个字节),若是64位处理器的还能处理长度是8个字节或者16个字节的数据。因此有些处理器会要求存放个x个字节长度的数据时,其内存地址必须也是x个字节对齐的。例如当程序求存放一个占据4字节的整型时,该整型一定要存放在4字节对齐的地址(即内存地址必须能被4整除)。为什么会有上述的限制呢?理解了内存组织,就会清楚了。CPU通过地址线来存取内存中的数据,32位的CPU的地址总线宽度为32位,标为A【O:31〕。一个总线周期内,CPU从内存读/写32位。但是每次CPU只能在能够被4整除地址进行内存访问,这是因为32位CPu不使用地址总线的A1和A2。比如ARM,的A[O:l]用于字节选择,用于逻辑控制,而不和存储器相连,存储器连接A〔2:31〕。当一个32位的CPU从内存中要取出一个char类型的数据(占1个
接下来我们研究一下一个在ARM上运行的x86模拟器动态地翻泽一条MOVEAX,〔EBX〕指令(将EBX寄存器内所指的内存地址的32位数据读取到EAX寄存器,卜,【23])的流程,如图2.3所示。尽叩code尽mod-翻翻译指令令 XXX86RAMMM写写操作数数 数模拟计算 算 MMMOVEAX,[EBXIII尸一一一少\}{月ov‘一,/!’“r 11llOVr7,r2r6,,X86--RAM一BASE+r7 f1.r6图2.3动态指令翻译的工作流程一个二进制指令翻译模块一般都会被设计成一个包含了取指令、翻译指令、取出操作数(从被模拟的X86内存中)、模拟计算、写回操作数(向被模拟的x86内存)这5个阶段的无限循环。除非遇到一些特殊情况,比如产生了x86的硬件或者软件中断等,否则这个无限循环会一直进行下去。为了模拟 x86CPU取指令的行为,x86模拟器中也会有一个EIP寄存器
【学位授予单位】:复旦大学
【学位级别】:硕士
【学位授予年份】:2011
【分类号】:TP332
【相似文献】
相关期刊论文 前10条
1 马平涛;;浅析公司服务器虚拟化[J];中国新技术新产品;2009年21期
2 安建峰;樊晓桠;;x86指令集兼容处理器中微指令的设计与验证[J];西北工业大学学报;2010年02期
3 张伦;;X86虚拟机的实现[J];计算机与网络;2007年10期
4 俞建新;PowerPC发展综述[J];工业控制计算机;2000年02期
5 王爱荣;;防火墙三大硬件体系市场未来分析[J];信息安全与通信保密;2006年02期
6 陈q
本文编号:2665324
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/2665324.html