地址翻译方法和装置的制造方法
【专利摘要】本发明提供一种地址翻译方法和装置。执行本发明提供的地址翻译方法的处理器中添加有地址域标识,该处理器的TLB中存储有地址域值与TLB的页表项的对应关系,本发明提供的方法包括:通过预设程序或指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值;在所述处理器的TLB的对应关系中,查找与所述第一地址域值对应的页表项;根据查找到的与所述第一地址域值对应的页表项将所述待翻译虚拟地址翻译成物理地址。本发明提供的地址翻译方法解决了现有技术中基于MIPS构架的虚拟化规范,由于为虚拟态模式设置的专用寄存器并不适用于二进制翻译,而导致采用该虚拟化规范执行地址翻译的实用性和灵活性较差的问题。
【专利说明】
地址翻译方法和装置
技术领域
[0001]本发明涉及计算机技术,尤其涉及一种地址翻译方法和装置。
【背景技术】
[0002]在当前的高性能处理器中,由于程序所使用的地址为虚拟地址,处理器所使用的地址为物理地址,通常通过翻译快速查找缓冲器(Translat1n Lookaside Buffer,简称为:TLB)对处理器执行虚拟地址到物理地址(以下简称为:虚-实地址)翻译的速度进行加速,具体通过TLB中存储的页表进行虚-实地址翻译。在无内部互锁流水级的微处理器(Microprocessor without interlocked piped stages,简称为:MIPS)构架中,部分虚拟地址仅能由处理器中预先设定的规则进行翻译,而不经过TLB的处理。
[0003]为了解决MIPS构架中的部分虚拟地址的翻译不经过TLB处理的问题,现有技术提供其它翻译规则,例如二进制翻译和虚拟机。其中,二进制翻译可以通过软件方式提供MIPS构架外的其它翻译规则,但是其运行速度较慢;虚拟机的应用例如为Linux操作系统中的基于内核的虚拟机(Kernel-based Virtual Machine,简称为:KVM)模块,其翻译规则要求所有虚拟地址都可以用程序指的翻译规则进行翻译;具体地,在MIPS构架中提出了虚拟化规范,规定当处理器运行于虚拟态模式时,可以使用除MIPS构架中原有地址翻译规则之外的另一套地址翻译规则,使得所有虚拟地址都可以通过TLB中的页表进行翻译。在处理器处于上述虚拟态模式时,访问的部分资源为虚拟机专用资源,因此需要对该些专用资源设置特定的专用寄存器,而使得上述虚拟态模式仅适合运行虚拟机的应用。
[0004]然而,现有技术中基于MIPS构架的虚拟化规范,由于为虚拟态模式设置的专用寄存器并不适用于二进制翻译,而导致采用该虚拟化规范执行地址翻译的实用性和灵活性较差。
【发明内容】
[0005]本发明提供一种地址翻译方法和装置,以解决现有技术中基于MIPS构架的虚拟化规范,由于为虚拟态模式设置的专用寄存器并不适用于二进制翻译,而导致采用该虚拟化规范执行地址翻译的实用性和灵活性较差的问题。
[0006]第一方面,本发明提供一种地址翻译方法,执行所述地址翻译方法的处理器中添加有地址域标识,所述处理器的翻译快速查找缓存器TLB中存储有地址域值与TLB的页表项的对应关系,所述方法包括:
[0007]通过预设程序或指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值;
[0008]在所述处理器的TLB的对应关系中,查找与所述第一地址域值对应的页表项;
[0009]根据查找到的与所述第一地址域值对应的页表项将所述待翻译虚拟地址翻译成物理地址。
[0010]在第一方面的第一种可能的实现方式中,所述预设程序为修改所述地址域标识之前写入所述处理器中的,所述通过预设程序将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值,包括:
[0011]通过所述预设程序中的指令读取所述地址域标识的当前地址域值;
[0012]在所述当前地址域值与所述待翻译虚拟地址对应的第一地址域值不同时,通过所述预设程序中的指令将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值。
[0013]根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值之前,还包括:
[0014]执行所述处理器当前程序中的所有指令,并阻止后续指令进入所述处理器。
[0015]在第一方面的第三种可能的实现方式中,所述通过指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值,包括:
[0016]在所述待翻译虚拟地址所属的指令中加入所述指令前缀;
[0017]将所述待翻译虚拟地址对应的当前地址域值修改为所述指令前缀所指定的第一地址域值。
[0018]根据第一方面、第一方面的第一种到第三种可能的实现方式中任意一种,在第四种可能的实现方式中,所述地址域值包括原始地址域值和非原始地址域值,所述方法还包括:
[0019]所述TLB在所述地址域标识为所述非原始地址域值时产生失效;
[0020]将所述地址域标识修改为所述原始地址域值,并根据所述原始地址域值对应的页表项将所述虚拟地址翻译成物理地址;或者,
[0021]通过所述TLB失效时的地址域值对应的页表项对所述虚拟地址进行翻译。
[0022]根据第一方面、第一方面的第一种到第三种可能的实现方式中任意一种,在第五种可能的实现方式中,所述方法还包括:
[0023]从虚拟地址取指令时,根据所述预设程序所修改的第二地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为取指令之前的虚拟地址中的指令;或者,
[0024]从虚拟地址取指令时,根据当前地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译以取得所述虚拟地址中的指令,已取得指令中包括用于指定地址域值的附加指令,其中,所述待取得指令为取指令之前的虚拟地址中的指令,所述已取得指令为取指令时从所述虚拟地址中取出的指令;
[0025]根据所述附加指令所指定的第三地址域值在所述TLB的对应关系中查找到的页表项,对所述已取得指令的后续指令所在的虚拟地址进行翻译;或者,
[0026]从虚拟地址取指令时,根据所述原始地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为取指令之前的虚拟地址中的指令。
[0027]第二方面,本发明提供一种地址翻译装置,设置于添加有地址域标识的处理器中,所述处理器的翻译快速查找缓存器TLB中存储有地址域值与TLB的页表项的对应关系,所述装置包括:
[0028]修改模块,用于通过预设程序或指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值;
[0029]查找模块,用于在所述处理器的TLB的对应关系中,查找与所述修改模块修改的第一地址域值对应的页表项;
[0030]翻译模块,用于根据所述查找模块查找到的与所述第一地址域值对应的页表项将所述虚拟地址翻译成物理地址。
[0031]在第二方面的第一种可能的实现方式中,所述预设程序为修改所述地址域标识之前写入所述处理器中的,所述修改模块包括:
[0032]读取单元,用于通过所述预设程序中的指令读取所述地址域标识的当前地址域值;
[0033]修改单元,用于在所述读取单元读取的当前地址域值与所述待翻译虚拟地址对应的第一地址域值不同时,通过所述预设程序中的指令将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值。
[0034]根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述修改模块还包括:处理单元,用于在所述修改单元将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值之前,执行所述处理器当前程序中的所有指令,并阻止后续指令进入所述处理器。
[0035]在第二方面的第三种可能的实现方式中,所述修改模块包括:
[0036]添加单元,用于在所述待翻译虚拟地址所属的指令中加入所述指令前缀;
[0037]修改单元,用于将所述待翻译虚拟地址对应的当前地址域值修改为所述指令前缀所指定的第一地址域值。
[0038]根据第二方面、第二方面的第一种到第三种可能的实现方式中任意一种,在第四种可能的实现方式中,所述地址域值包括原始地址域值和非原始地址域值,所述装置还包括:
[0039]判断模块,用于判断在所述地址域标识为所述非原始地址域值时,所述TLB的失效状态;
[0040]则所述修改模块,还用于在所述判断模块判断出所述TLB在所述地址域标识为所述非原始地址域值时产生失效,将所述地址域标识修改为所述原始地址域值;
[0041]所述翻译模块,具体用于据所述原始地址域值对应的页表项将所述虚拟地址翻译成物理地址;或者,
[0042]所述翻译模块,还用于在所述判断模块判断出所述TLB在所述地址域标识为所述非原始地址域值时产生失效,通过所述TLB失效时的地址域值对应的页表项对所述虚拟地址进行翻译。
[0043]根据第二方面、第二方面的第一种到第三种可能的实现方式中任意一种,在第五种可能的实现方式中,还包括:
[0044]取指处理模块,用于从虚拟地址取指令时,根据所述预设程序所修改的第二地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为取指令之前的虚拟地址中的指令;或者,
[0045]所述取指处理模块,还用于从虚拟地址取指令时,根据当前地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译以取得所述虚拟地址中的指令,已取得指令中包括用于指定地址域值的附加指令,其中,所述待取得指令为取指令之前的虚拟地址中的指令,所述已取得指令为取指令时从所述虚拟地址中取出的指令;并根据所述附加指令所指定的第三地址域值在所述TLB的对应关系中查找到的页表项,对所述已取得指令的后续指令所在的虚拟地址进行翻译;或者,
[0046]所述取指处理模块,还用于从虚拟地址取指令时,根据所述原始地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为取指令之前的虚拟地址中的指令。
[0047]本发明提供一种地址翻译方法和装置,由添加有地址域标识的处理器执行,在该处理的TLB中存储地址域值与TLB的页表项的对应关系,因此,通过预设程序或指令前缀将地址域标识修改为待翻译虚拟地址对应的第一地址域值后,可以在上述对应关系中查找与该第一地址域值对应的页表项,以根据该查找到的页表项来执行虚拟地址的翻译,通过本实施例提供的方法对虚拟地址进行翻译,在保证所有虚拟地址都可以通过TLB的页表进行翻译的同时,同样可以将处理器中TLB的加速功能应用于二进制翻译,提高了二进制翻译的速度,解决了现有技术中基于MIPS构架的虚拟化规范,由于为虚拟态模式设置的专用寄存器并不适用于二进制翻译,而导致采用该虚拟化规范执行地址翻译的实用性和灵活性较差的冋题。
【附图说明】
[0048]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0049]图1为本发明实施例所提供的一种地址翻译方法的流程图;
[0050]图2为本发明实施例所提供的另一种地址翻译方法的流程图;
[0051]图3为本发明实施例所提供的又一种地址翻译方法的流程图;
[0052]图4为本发明实施例所提供的再一种地址翻译方法的流程图;
[0053]图5为本发明实施例所提供的一种地址翻译装置的结构示意图;
[0054]图6为本发明实施例所提供的另一种地址翻译装置的结构示意图;
[0055]图7为本发明实施例所提供的再一种地址翻译装置的结构示意图。
【具体实施方式】
[0056]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057]在介绍本发明实施例提供的技术方案之前,先对本发明实施例涉及到的一些概念以及基本测试原理进行阐述,以便本领域技术人员清楚准确地理解本发明实施例提供的技术方案。
[0058]地址翻译的最小单位为“页”,通常使用页表进行虚-实地址翻译。TLB为设置于处理器中用于加速虚-实地址翻译速度的特殊缓冲器,该TLB中存放的是页表的一部分,该TLB中每一项内容都是一个页表项,具体可以包括以下几个部分:虚拟地址及进程号(ASID)部分,表示该页表项的索引,用于和输入TLB的待翻译虚拟地址和ASID进行比较;物理地址部分,是该页表项的结果,当输入该TLB的待翻译虚拟地址在页表项命中时,输出其物理地址;页属性部分,包括这个页是否有效、是否可写、是否可执行等多种属性。
[0059]在每一种处理器构架中,地址翻译规则有一些预先定义好的限制,例如部分虚拟地址拥有特定的虚-实地址翻译规则,即仅能由处理器中预先设定的规则进行翻译,而不经过TLB的处理。以MIPS架构为例予以说明,32位虚拟地址0x80000000到OxBFFFFFFF之间的虚-实地址翻译规则是规定好的,具体地,将虚拟地址和立即数OxlFFFFFFF进行按位与操作就得到了物理地址,如32位虚拟地址OxBFCOOOOO必定映射到32位物理地址OxlFCOOOOOo然而,在例如虚拟机和二进制翻译的应用中,要求所有虚拟地址都可以用程序制定的翻译规则进行翻译。
[0060]虚拟机的应用,如基于MIPS的虚拟化规范上述已经介绍;对二进制翻译的实现方式做以简要说明,二进制翻译为一种软件实现的翻译方式,通常使用的软件为虚拟操作系统模拟器(Quick Emulator,简称为:QEMU),具体地,在目的架构的处理器上运行源架构的程序,通常要求将程序的虚拟地址按照源架构的翻译规则进行翻译,例如在MIPS架构上运行X86程序时,X86程序要求所有虚拟地址都是通过页表进行虚-实地址翻译,由于MIPS构架中对地址翻译规则的限制,若程序使用的虚拟地址恰好落在被限制的区域,那么就无法实现使用页表来翻译该虚拟地址的目的,即不能满足X86构架中对虚拟地址翻译的要求。因此,目前的二进制翻译具体由QEMU通过一段程序查找模拟页表,以通过页表进行虚-实地址翻译,从而无法利用处理器中的TLB来加速虚-实地址的翻译速度。
[0061]图1为本发明实施例所提供的一种地址翻译方法的流程图。本实施例提供的地址翻译方法适用于对程序中的虚拟地址进行翻译的情况,该方法可以由地址翻译装置执行,该装置通常以硬件或软件的方法来实现,可以集成在终端设备的处理器中,例如集成在处理器芯片的存储单元中,供处理器调用执行。如图1所示,本实施例的方法可以包括:
[0062]S110,通过预设程序或指令前缀将地址域标识修改为待翻译虚拟地址对应的第一地址域值,其中,该地址域标识添加于处理器中,该处理器的TLB中存储有地址域值与TLB的页表项的对应关系。
[0063]其中,待翻译虚拟地址对应的第一地址域值是指为该待翻译虚拟地址指定的第一地址域值,该指定的目的在于为待翻译虚拟地址分配一个合适的翻译规则(以便该待翻译虚拟地址可以转换成对应的物理地址),而该翻译规则是与地址域值对应的。
[0064]在当前的高性能处理器中,程序所使用的地址为虚拟地址,而处理器所使用的地址为物理地址,虚拟地址和物理地址之间的地址翻译规则一般由OS来指定。本实施例以MIPS构架中的地址翻译为例予以说明,TLB作为处理器中用于加速虚-实地址翻译速度的特殊缓冲器,该TLB中通常存放页表的一部分,其中,每一项的内容都是一个页表项,页表项的具体内容上述已经具体说明;然而,MIPS构架中的一些虚拟地址拥有特定的虚-实地址翻译规则,例如32位虚拟地址OxBFCOOOOO必定映射到32位物理地址0xlFC00000,这是为了在页表尚未建立好时可以进行一部分虚-实地址翻译工作,也就是说,这些虚拟地址的翻译并不经过TLB。
[0065]需要说明的是,现有技术中已经采用基于MIPS的虚拟化规范解决了上述问题,然而在该规范中,仅当处理器处于虚拟态模式时才能解决上述问题,然而该虚拟态模式仅适合运行虚拟机的应用,即如何将处理器中TLB的加速功能应用于二进制翻译,没有提出任何的解决方法。
[0066]在本实施例中,在TLB的页表项中加入一个代表地址域标识的变量,具体可以通过在处理器中加入一个地址域寄存器(CPO)来实现该变量(即地址域标识)的加入,该地址域标识中的值为地址域值,用于指示待翻译虚拟地址对应的翻译规则,该地址域标识可以被设置为多个地址域值,通常每个该地址域值在TLB中都可以查找到对应的页表项,即为对待翻译虚拟地址进行翻译时所使用的页表项,本实施例提供的方法在具体实现中,需要通过对处理器中硬件进行改变来支持方法的实现,通常地,TLB中存储有上述地址域值与页表项的对应关系。举例而言,地址域标识的宽度为2比特(bit)时,可以被修改为4个地址域值,其中O为原始地址域值,指示MIPS构架中的原始翻译规则,I?3为非原始地址域值,指示为非原始翻译规则,即除MIPS构架中翻译规则之外的其它翻译规则,例如为X86构架中的翻译规则,通过QEMU执行的翻译规则等。需要说明的是,本实施例中的原始地址域值和非原始地址域值是根据处理器的构架划分的,指定当前处理器构架的原始翻译规则对应的地址域值为原始地址域值,该原始地址域值通常为一个,非原始地址域值可以是一个或多个,并且本实施例中不限制第一地址域值为上述原始地址域值或非原始地址域值,可以为地址域标识中可修改的任意一个地址域值。
[0067]S120,在处理器的TLB的对应关系中,查找与第一地址域值对应的页表项。
[0068]在本实施例中,具体通过第一地址域值表示程序中访存指令所使用的虚拟地址应通过TLB中的哪一个页表项进行翻译,通常的,地址域值和页表项是一一对应的,并且在TLB中存储有地址域值与页表项的对应关系,因此,可以将第一地址域值在TLB中的对应关系进行查找,以获取与该第一地址域值对应的页表项。本实施例中不同地址域值对应的页表项指示不同的虚-实地址翻译规则,例如,原始地址域值(O)对应的页表项所指示的虚-实地址翻译规则为处理器架构所规定好的翻译规则,本发明各实施例具体以MIPS架构为例予以说明,虚拟地址空间被划分为可映射和不可映射两个部分,可映射地址空间使用TLB进行地址翻译,不可映射地址空间使用预先设定好的规则进行地址翻译,如32位虚拟地址OxBFCOOOOO的物理地址被预设规则直接翻译为0xlFC00000。
[0069]本实施例中的非原始地址域值对应的页表项所指示的虚-实地址翻译规则是灵活的,不受MIPS架构的限制,例如可以要求部分地址域值所指示的翻译规则中,所有的虚拟地址都可以由TLB中的页表进行翻译,而在其它地址域值所指示的翻译规则中,可能存在其它构架下的限制。举例来说,地址域值为I时指示X86架构的地址翻译规则,所有虚拟地址都通过TLB进行虚-实地址翻译,对于X86架构下的某些特殊属性,例如段描述符,也可以被支持;在具体实现中,可以额外在处理器中加入上述特殊属性,并提供配置这些属性的具体方法。再举例来说,地址域值为2对应一个平坦的地址空间,即flat address space,可以通过软件对地址域值为2对应的页表项的内容进行修改,即,当虚拟地址使用地址域值2所对应的页表项进行翻译时,可以通过软件在运行时对该页表项进行修改,即该页表项所指示的翻译规则被修改。
[0070]需要说明的是,本实施例提供的方法在地址域值为O时,即使用MIPS构架中的原始翻译规则时,存在对虚拟地址的翻译不经过TLB的情况,此时可以通过将代表地址域标识的变量修改为非O的值来避免上述问题;并且本实施例提供的方法可以支持二进制翻译,例如,在MIPS构架中运行X86构架的程序时,可以通过将地址域标识的当前地址域值修改为地址域值2,以通过本实施例提供的地址翻译方式替换现有的二进制翻译中通过QEMU执行的软件地址翻译方式,即实现了将处理器中TLB的加速功能应用于二进制翻译的同时,保证了 X86程序中的所述虚拟地址按照X86构架的翻译规则进行翻译。
[0071]在本实施例中,由于地址域标识可以通过设置上述地址域寄存器(CPO)的方式实现,通常地,处理器从复位状态启动时,可以将地址域标识的当前地址域值设置为0,即该地址域寄存器(CPO)的复位值为O。可选地,可以通过软件对该地址域寄存器(CPO)的值,SP当前地址域值进行修改,该软件例如为一段预设的程序;或者,通过在待翻译虚拟地址所属的指令中加入指令前缀的方式修改该指令当前所属的地址域值,指定对该指令中的虚拟地址进行翻译时所使用的页表项为第一地址域值对应的页表项;具体地,指令前缀可以使得该指令无视当前地址寄存器(CPO)中所指定的地址域值,强制使得这条指令中的虚拟地址通过指令前缀所指定的第一地址域值对应的页表项进行翻译,因此,对该指令中的虚拟地址进行虚-实地址翻译时,就可以按照指令前缀所指定的第一地址域值在TLB的对应关系中进行查询。
[0072]S130,根据查询到的与该第一地址域值对应的页表项将该虚拟地址翻译成物理地址。
[0073]在本实施例中,已对程序指令中的虚拟地址指定第一地址域值,即已确定对该虚拟地址进行翻译时应该使用的页表项,即已规定该虚拟地址所采用的翻译规则,如上所述,处理器中加入的地址域标识可以被设置为不同的地址域值,并且对应不同的页表项,也就是说,在对虚拟地址进行翻译时,仅需在TLB的各个页表项中,查找与待翻译虚拟地址对应的第一地址域值相同的地址域值对应的页表项,即在查找该第一地址域值对应的页表项时,仅通过该页表项进行翻译,翻译的过程与TLB中其它地址域值对应的页表项无关。
[0074]需要说明的是,本实施例提供的方法,通过对处理器和TLB进行适当修改,并将不同地址域值所指示的翻译规则写入TLB中,执行虚-实地址翻译在查找TLB时,可以仅查找已修改的第一地址域值对应的TLB页表项,因此,可以支持多个地址域值同时进行快速地址翻译,使得不同地址域值对应的TLB页表项之间可以并行的进行地址翻译,相应地提高了系统的处理效率。
[0075]本实施例所提供的地址翻译方法,由添加有地址域标识的处理器执行,在该处理的TLB中存储地址域值与TLB的页表项的对应关系,因此,通过预设程序或指令前缀将地址域标识修改为待翻译虚拟地址对应的第一地址域值后,可以在上述对应关系中查找与该第一地址域值对应的页表项,以根据该查找到的页表项来执行虚拟地址的翻译,通过本实施例提供的方法对虚拟地址进行翻译,在保证所有虚拟地址都可以通过TLB的页表进行翻译的同时,同样可以将处理器中TLB的加速功能应用于二进制翻译,提高了二进制翻译的速度,解决了现有技术中基于MIPS构架的虚拟化规范,由于为虚拟态模式设置的专用寄存器并不适用于二进制翻译,而导致采用该虚拟化规范执行地址翻译的实用性和灵活性较差的问题。
[0076]进一步地,现有技术中基于MIPS构架的虚拟化规范,处理器处于虚拟态模式时,OS中的一些特权指令可以被自由使用,例如由于虚拟态模式下可以使用Cache指令和TLB操作指令,从而导致MIPS构架中的特权管理失去控制的现象,使得在虚拟态模式中执行地址翻译时的安全性较差;本实施例提供的地址翻译方法,通过修改地址域值以指定虚拟地址翻译时所使用的页表项的方式,有效的避免了上述虚拟态模式中存在的安全性问题。
[0077]可选地,图2为本发明实施例所提供的另一种地址翻译方法的流程图。本实施例具体对通过预设程序设置地址域的方式进行说明,本实施例提供的方法在上述图1所示的基础上,SllO具体包括:
[0078]S111,通过预设程序中的指令读取地址域标识的当前地址域值。
[0079]S112,在该当前地址域值与待翻译虚拟地址对应的第一地址域值不同时,通过该预设程序中的指令将该地址域标识的当前地址域值修改为待翻译虚拟地址对应的第一地址域值。
[0080]在本实施例中,同样可以将地址域寄存器(CPO)的复位值设置为0,即地址域值的初始值为0,对地址域变量的修改具体由软件执行,通常为一段预设的程序指令,例如使用MIPS构架中的MFCO和MTCO等多条指令对地址域寄存器(CPO)的值进行读取和修改,修改后的第一地址域值对应的页表项为对待翻译虚拟地址进行翻译时所需使用的页表项,即,程序中所有访存指令中的虚拟地址都采用上述修改后的第一地址域值对应页表项进行翻译。
[0081]在具体实现中,在S112中将地址域标识的当前地址域值修改为待翻译虚拟地址对应的第一地址域值之前,还可以包括:执行处理器当前程序中的所有指令,并阻止后续指令进入当前进程。由于处理器执行的程序指令通常是乱序执行的,要保证对地址域标识的修改立即可以见,因此,在处理器执行该预设程序中的指令并完成地址域的修改之前,要求该预设程序之前的所有指令均执行完毕,即预设程序中的MTCO或DMTCO指令为处理器的流水线中最先处理的指令,并且在对地址域寄存器(CPO)中地址域标识的修改完成之前,后续的指令不得进入当前的流水线,以此保证地址域寄存器(CPO)修改的原子性。
[0082]在图1所示实施例的另一种可能的实现方式中,如图3所示,为本发明实施例所提供的又一种地址翻译方法的流程图。本实施例具体对通过指令前缀设置地址域的方式进行说明,本实施例提供的方法在上述图1所示的基础上,SllO具体包括:
[0083]SI 11,在待翻译虚拟地址所属的指令中加入指令前缀。
[0084]S112,将待翻译虚拟地址对应的当前地址域值修改为该指令前缀所指定的第一地址域值。
[0085]在本实施例中,采用了一种不同于修改地址域寄存器(CPO)的方式来修改地址域标识的当前地址域值,具体地,通过指令前缀来修改待翻译虚拟地址所属的指令对应的当前地址域值;这里需要说明的是,指令前缀是MIPS架构下的一类特殊指令,该指令并不进行运算或其它操作,而是指示接下来的下一条指令,即待翻译虚拟地址所属的指令具备的特点。本实施例提供的方法,通过在指令中添加了指令前缀的方式,使得该指令中有一个域表示对本条指令的虚拟地址进行翻译时使用哪一个地址域值对应的页表项,并且当该指令前缀加入一条访存指令时,该指令前缀不会对地址域寄存器(CPO)或内存产生影响,例如,该指令前缀可以被译码为一条NOP指令。
[0086]与上述实施例类似的,该指令前缀可以使得加入其的指令无视地址寄存器(CPO)中所指定的当前地址域值,强制使得这条指令中的虚拟地址通过指令前缀所指定的第一地址域值对应的页表项进行翻译,因此,对该指令中的虚拟地址进行虚-实地址翻译时,就可以按照指令前缀所指定的第一地址域值查询TLB。也就是说,该指令前缀所指定的地址域值的优先级高于图2所示实施例中预设程序修改后的地址域值。
[0087]进一步地,如图4为本发明实施例所提供的再一种地址翻译方法的流程图。本实施例可以在上述任一实施例的基础上进行扩展,图4以在图1的基础上为例予以示出,本实施例具体包括以下步骤:
[0088]S210,通过预设程序或指令前缀将地址域标识修改为待翻译虚拟地址对应的第一地址域值,其中,该地址域标识添加于处理器中,该处理器的TLB中存储有地址域值与TLB的页表项的对应关系。
[0089]S220,在处理器的TLB的对应关系中,查找与第一地址域值对应的页表项。
[0090]S230,根据查询到的与该第一地址域值对应的页表项将该虚拟地址翻译成物理地址。
[0091]具体地,S210?S230的实现方式可以参照图1所示实施例中SllO?S130。
[0092]在具体实现中,TLB可能会存在失效的现象,图4所示实施例对TLB失效时的具体处理方法予以说明,可选地,本实施例提供的方法还包括:
[0093]S240,该TLB在地址域标识为非原始地址域值时产生失效,其中,地址域值包括原始地址域值和非原始地址域值。
[0094]S250,将该地址域标识修改为原始地址域值,并根据该原始地址域值对应的页表项将该虚拟地址翻译成物理地址;或者,通过该TLB失效时的地址域值对应的页表项对虚拟地址进行翻译。
[0095]通过图1所示实施例中的具体实例予以说明,O为原始地址域值,I?3为非原始地址域值,O?3这四个地址域值分别对应不同的页表项,若TLB的失效发生在地址域标识被设置为I?3这3个地址域值时,优选地,处理器可以选择强制将地址域标识是修改为原始地址域值(O),通过该原始地址域值对应的页表项对虚拟地址进行翻译,即通过MIPS构架中原有的翻译规则进行TLB的失效处理,同样也可以不强制修改地址域标识,依旧通过发生TLB失效的地址域值对应的页表项进行TLB的失效处理。与地址域标识的修改方式相同,处理器的选择同样可以通过修改寄存器的方式进行控制,具体通过软件对其进行配置。
[0096]举例来说,当32位虚拟地址OxBFCOOOOO在地址域值为2时访问TLB失效时,并通知OS进行处理。标准的MIPS构架下的OS远不会在该虚拟地址的翻译过程中发送TLB失效,因此OS应该被修改:首先读取TLB失效时访存指令对应的当前地址域值,包括当该访存指令包括一个指令前缀时,检查该指令前缀是否指定了一个地址域值;其次,根据读取出的当前地址域值,按照这个当前地址域值对应的页表项来进行地址翻译;最后,将虚拟地址、翻译后的物理地址以及当前地址域值等信息填入TLB当中。由于地址域值都是通过软件来进行修改的,因此OS需要保证在使用一个地址域值之前,拥有这个地址域值的翻译规则,即该地址域值在TLB中存在对应的页表项;如果访问的某个地址域值在TLB中没有对应的页表项,OS可以报错并进行处理,例如将这个访存指令所属的进程杀死。
[0097]需要说明的是,与本发明上述各实施例类似地,处理器从虚拟地址中取指令时,对虚拟地址的翻译方式同样可以使用上述地址翻译方式,定义待取得指令为取指令之前的虚拟地址中的指令,在具体实现中,对该待取得指令所在虚拟地址的翻译方法包括:方式一,从虚拟地址取指令时,根据预设程序所修改的第二地址域值在TLB的对应关系中查找到的页表项,对上述待取得指令所在的虚拟地址进行翻译;方式二,从虚拟地址取指令时,根据当前地址域值在TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译以取得该虚拟地址中的指令,并且已取得的指令中包括用于指定地址域值的附加指令,该已取得指令为取指令时从虚拟地址中取出的指令;进而根据该附加指令所指定的第三地址域值在TLB的对应关系中查找到的页表项,对该已取得指令的后续指令所在的虚拟地址进行翻译,这里需要说明的是,本实施例中所述的当前地址域值可以为地址域寄存器(CPO)中现有的地址域值,也可以为预设程序在取指令时所修改的地址域值,对该待取得指令所在虚拟地址的翻译采用当前地址域值对应的翻译规则,在获取该指令并发现该指令中存在上述附加指令时,对后续指令所在虚拟地址的翻译则采用该附加指令所指定的第三地址域值对应的翻译规则;方式三,从虚拟地址取指令时,根据原始地址域值在TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译。在本实施例中,优选地,可以将待取得指令所在的虚拟地址的翻译按照处理器中地址域寄存器(CPO)所指定的第二地址域值对应的翻译规则来执行,若该指令中还存在附加指令时,对后续指令所在的虚拟地址的翻译则可以按照该附加指令所指令的第三地址域值对应的翻译规则来执行;另外也可以将该指令所在的虚拟地址强制按照原始地址域值对应的原始翻译规则来翻译。类似地,处理器的选择同样可以通过设置寄存器的方式进行控制,具体通过软件对其进行配置。
[0098]在本发明上述各实施例的基础上,可以配合使用现有TLB中的ASID机制,即属于同一个地址域值中的虚拟地址可以进一步通过ASID机制,来进行不同规则的虚-实地址翻译。
[0099]图5为本发明实施例所提供的一种地址翻译装置的结构示意图。如图5所示,本实施例提供的装置设置于添加有地址域标识的处理器中,该处理器的TLB中存储有地址域值与TLB的页表项的对应关系,该装置具体包括:修改模块11、查找模块12和翻译模块13。
[0100]其中,修改模块11,用于通过预设程序或指令前缀将地址域标识修改为待翻译虚拟地址对应的第一地址域值。
[0101]查找模块12,用于在处理器的TLB的对应关系中,查找与修改模块11修改的第一地址域值对应的页表项。
[0102]翻译模块13,用于根据查找模块12查找到的与第一地址域值对应的页表项将该虚拟地址翻译成物理地址。
[0103]在本实施例中,可以通过在处理器中加入一个地址域寄存器(CPO)来实现变量“地址域标识”的加入,即采用本实施例提供的装置执行地址翻译时,需要通过对处理器中硬件的改变为来支持其实现。
[0104]本发明实施例提供的地址翻译装置用于执行本发明图1所示实施例提供的地址翻译方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
[0105]由于地址域标识可以通过设置上述地址域寄存器(CPO)的方式实现,通常地,处理器从复位状态启动时,可以将地址域标识的当前地址域值设置为0,即该地址域寄存器(CPO)的复位值为O。可选地,可以通过软件对该地址域寄存器(CPO)的值,即当前地址域值进行修改;或者,通过在待翻译虚拟地址所属的指令中加入指令前缀的方式修改该指令当前所属的地址域值,指定对该指令中的虚拟地址进行翻译时所所使用的页表项为第一地址域值对应的页表项。
[0106]图6为本发明实施例所提供的另一种地址翻译装置的结构示意图,本实施例具体对修改模块11通过预设程序修改地址域标识的方式进行说明,该预设程序为修改地址域标识之前写入处理器中的,图6所示装置在上述图5所示装置的结构基础上,修改模块11包括:读取单元14,用于通过预设程序中的指令读取地址域标识的当前地址域值;修改单元15,用于在读取单元14读取的当前地址域值与待翻译虚拟地址对应的第一地址域值不同时,通过该预设程序中的指令将地址域标识的当前地址域值修改为待翻译虚拟地址对应的第一地址域值。
[0107]在具体实现中,修改模块11中还包括:处理单元16,用于在修改单元15将地址域标识的当前地址域值修改为待翻译虚拟地址对应的第一地址域值之前,执行处理器当前程序中的所有指令,并阻止后续指令进入该处理器。
[0108]本发明实施例提供的地址翻译装置用于执行本发明图2所示实施例提供的地址翻译方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
[0109]在本发明实施例提供的另一种可能的实现方式中,还可以指令前缀修改地址域值的方式指定待翻译虚拟地址对应的第一地址域值,在上述图6所示装置的基础上,修改模块11还可以包括:添加单元17,用于在待翻译虚拟地址所属的指令中加入该指令前缀;上述修改单元15,还用于将该待翻译虚拟地址对应的当前地址域值修改为该指令前缀所指定的第一地址域值。
[0110]需要说明的是,本实施例中的添加单元17可以设置于图6所示实施例提供的装置中,与通过预设程序中的指令修改地址域标识的方式共同使用。
[0111]本发明实施例提供的地址翻译装置用于执行本发明图3所示实施例提供的地址翻译方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
[0112]进一步地,本发明各实施例提供的地址翻译装置中,地址域值可以包括原始地址域值和非原始地址域值,在地址域值为非原始地址域值的情况下,TLB可能会产生失效,本实例提供的装置具体执行对TLB的失效处理,可以在上述任一实施例的基础上进行扩展,如图7所示,为本发明实施例所提供的再一种地址翻译装置的结构示意图,具体以在图5所示装置的结构基础上进行扩展为例,本实施例对TLB失效时的处理方式为:其一、该地址翻译装置还包括:判断模块18,用于判断在地址域标识为非原始地址域值时,TLB的失效状态;则修改模块11,还用于在判断模块18判断出该TLB在地址域标识为非原始地址域值时产生失效,将该地址域标识修改为原始地址域值;相应地,翻译模块13,具体用于据原始地址域值对应的页表项将虚拟地址翻译成物理地址;其二,翻译模块13,还用于在判断模块18判断出该TLB在地址域标识为非原始地址域值时产生失效,通过该TLB失效时的地址域值对应的页表项对虚拟地址进行翻译。本实施例中修改模块11的具体结构和实现方式可以参考上述图6所示实施例,故在此不再赘述。
[0113]本发明实施例提供的地址翻译装置用于执行本发明图4所示实施例提供的地址翻译方法,具备相应的功能模块,其实现原理和技术效果类似,此处不再赘述。
[0114]需要说明的是,与本发明上述各实施例类似地,处理器从虚拟地址中取指令时,对虚拟地址的翻译方式同样可以使用上述地址翻译方式,定义待取得指令为取指令之前的虚拟地址中的指令,在具体实现中,本实施例提供的地址翻译装置还包括取指处理模块,采用本实施例提供的地址翻译装置对该待取得指令所在的虚拟地址的翻译方式为:方式一,取指处理模块,用于从虚拟地址取指令时,根据预设程序所修改的第二地址域值在TLB的对应关系中查找到的页表项,对该待取得指令所在的虚拟地址进行翻译;方式二,该取指处理模块还用于从虚拟地址取指令时,根据当前地址域值在TLB的对应关系中查找到的页表项,对该待取得指令所在的虚拟地址进行翻译以取得该虚拟地址中的指令,并且已取得的指令中包括用于指定地址域值的附加指令,该已取得指令为取指令时从虚拟地址中取出的指令,进而根据该附加指令所指定第三地址域值在TLB的对应关系中查找到的页表项,对该已取得指令的后续指令所在的虚拟地址进行翻译;方式三,该取指处理模块还用于从虚拟地址取指令时,根据原始地址域值在TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译。
[0115]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0116]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【主权项】
1.一种地址翻译方法,其特征在于,执行所述地址翻译方法的处理器中添加有地址域标识,所述处理器的翻译快速查找缓存器TLB中存储有地址域值与TLB的页表项的对应关系,所述方法包括: 通过预设程序或指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值; 在所述处理器的TLB的对应关系中,查找与所述第一地址域值对应的页表项; 根据查找到的与所述第一地址域值对应的页表项将所述待翻译虚拟地址翻译成物理地址。2.根据权利要求1所述的地址翻译方法,其特征在于,所述预设程序为修改所述地址域标识之前写入所述处理器中的,所述通过预设程序将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值,包括: 通过所述预设程序中的指令读取所述地址域标识的当前地址域值; 在所述当前地址域值与所述待翻译虚拟地址对应的第一地址域值不同时,通过所述预设程序中的指令将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值。3.根据权利要求2所述的地址翻译方法,其特征在于,所述将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值之前,还包括: 执行所述处理器当前程序中的所有指令,并阻止后续指令进入所述处理器。4.根据权利要求1所述的地址翻译方法,其特征在于,所述通过指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值,包括: 在所述待翻译虚拟地址所属的指令中加入所述指令前缀; 将所述待翻译虚拟地址对应的当前地址域值修改为所述指令前缀所指定的第一地址域值。5.根据权利要求1?4中任一项所述的地址翻译方法,其特征在于,所述地址域值包括原始地址域值和非原始地址域值,所述方法还包括: 所述TLB在所述地址域标识为所述非原始地址域值时产生失效;将所述地址域标识修改为所述原始地址域值,并根据所述原始地址域值对应的页表项将所述虚拟地址翻译成物理地址;或者, 通过所述TLB失效时的地址域值对应的页表项对所述虚拟地址进行翻译。6.根据权利要求1?4中任一项所述的地址翻译方法,其特征在于,所述方法还包括: 从虚拟地址取指令时,根据所述预设程序所修改的第二地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为所述取指令之前的虚拟地址中的指令;或者, 从虚拟地址取指令时,根据当前地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译以取得所述虚拟地址中的指令,已取得指令中包括用于指定地址域值的附加指令,其中,所述待取得指令为所述取指令之前的虚拟地址中的指令,所述已取得指令为取指令时从所述虚拟地址中取出的指令;根据所述附加指令所指定的第三地址域值在所述TLB的对应关系中查找到的页表项,对所述已取得指令的后续指令所在的虚拟地址进行翻译;或者, 从虚拟地址取指令时,根据所述原始地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为所述取指令之前的虚拟地址中的指令。7.—种地址翻译装置,其特征在于,设置于添加有地址域标识的处理器中,所述处理器的翻译快速查找缓存器TLB中存储有地址域值与TLB的页表项的对应关系,所述装置包括: 修改模块,用于通过预设程序或指令前缀将所述地址域标识修改为待翻译虚拟地址对应的第一地址域值; 查找模块,用于在所述处理器的TLB的对应关系中,查找与所述修改模块修改的第一地址域值对应的页表项; 翻译模块,用于根据所述查找模块查找到的与所述第一地址域值对应的页表项将所述虚拟地址翻译成物理地址。8.根据权利要求7所述的地址翻译装置,其特征在于,所述预设程序为修改所述地址域标识之前写入所述处理器中的,所述修改模块包括: 读取单元,用于通过所述预设程序中的指令读取所述地址域标识的当前地址域值; 修改单元,用于在所述读取单元读取的当前地址域值与所述待翻译虚拟地址对应的第一地址域值不同时,通过所述预设程序中的指令将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值。9.根据权利要求8所述的地址翻译装置,其特征在于,所述修改模块还包括:处理单元,用于在所述修改单元将所述地址域标识的当前地址域值修改为所述待翻译虚拟地址对应的第一地址域值之前,执行所述处理器当前程序中的所有指令,并阻止后续指令进入所述处理器。10.根据权利要求7所述的地址翻译装置,其特征在于,所述修改模块包括: 添加单元,用于在所述待翻译虚拟地址所属的指令中加入所述指令前缀; 修改单元,用于将所述待翻译虚拟地址对应的当前地址域值修改为所述指令前缀所指定的第一地址域值。11.根据权利要求7?10中任一项所述的地址翻译装置,其特征在于,所述地址域值包括原始地址域值和非原始地址域值,所述装置还包括: 判断模块,用于判断在所述地址域标识为所述非原始地址域值时,所述TLB的失效状态; 则所述修改模块,还用于在所述判断模块判断出所述TLB在所述地址域标识为所述非原始地址域值时产生失效,将所述地址域标识修改为所述原始地址域值; 所述翻译模块,具体用于据所述原始地址域值对应的页表项将所述虚拟地址翻译成物理地址;或者, 所述翻译模块,还用于在所述判断模块判断出所述TLB在所述地址域标识为所述非原始地址域值时产生失效,通过所述TLB失效时的地址域值对应的页表项对所述虚拟地址进行翻译。12.根据权利要求7?10中任一项所述的地址翻译装置,其特征在于,还包括: 取指处理模块,用于从虚拟地址取指令时,根据所述预设程序所修改的第二地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为取指令之前的虚拟地址中的指令;或者, 所述取指处理模块,还用于从虚拟地址取指令时,根据当前地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译以取得所述虚拟地址中的指令,已取得指令中包括用于指定地址域值的附加指令,其中,所述待取得指令为所述取指令之前的虚拟地址中的指令,所述已取得指令为所述取指令时从所述虚拟地址中取出的指令;并根据所述附加指令所指定的第三地址域值在所述TLB的对应关系中查找到的页表项,对所述已取得指令的后续指令所在的虚拟地址进行翻译;或者, 所述取指处理模块,还用于从虚拟地址取指令时,根据所述原始地址域值在所述TLB的对应关系中查找到的页表项,对待取得指令所在的虚拟地址进行翻译,所述待取得指令为所述取指令之前的虚拟地址中的指令。
【文档编号】G09B9/38GK105989758SQ201510061084
【公开日】2016年10月5日
【申请日】2015年2月5日
【发明人】吴瑞阳, 汪文祥, 郝守青, 胡伟武
【申请人】龙芯中科技术有限公司