CN101246452B - 执行快速的mmu模拟的方法和装置、以及全系统模拟器 - Google Patents
执行快速的mmu模拟的方法和装置、以及全系统模拟器 Download PDFInfo
- Publication number
- CN101246452B CN101246452B CN2007100052608A CN200710005260A CN101246452B CN 101246452 B CN101246452 B CN 101246452B CN 2007100052608 A CN2007100052608 A CN 2007100052608A CN 200710005260 A CN200710005260 A CN 200710005260A CN 101246452 B CN101246452 B CN 101246452B
- Authority
- CN
- China
- Prior art keywords
- address
- page number
- injection space
- code
- translation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45537—Provision of facilities of other operating environments, e.g. WINE
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种在计算机系统中对计算机程序执行快速的存储器管理单元模拟的方法,其中,在计算机系统中分配有一个预定大小的地址注射空间,而且在其中存储虚拟页号和相应的物理页号,所述方法包括步骤:对于所述计算机程序的一个代码段中的加载/存储指令,将该加载/存储指令的虚拟地址的虚拟页号与所述地址注射空间中所存储的虚拟页号进行比较;如果两个虚拟页号相同,则根据所述地址注射空间中所存储的物理页号,获得相应的物理地址;否则,执行地址转换旁路缓冲器搜索、即TLB搜索,以获得相应的物理地址;以及从所获得的相应物理地址中读取数据,或者向其中写入数据。本发明还公开了一种用于实现上述方法的装置以及全系统模拟器。
Description
技术领域
本发明总体上涉及对计算机体系结构进行模拟的技术,并且尤其涉及利用动态二进制翻译技术的全系统模拟器(full-systemsimulator)。
背景技术
几乎所有的计算机体系结构,都可以通过模拟器来进行评估和研究。模拟器通过允许设计师快速地评估各种各样的体系结构的性能,降低了成本,并且节省了项目的开发时间。
例如,在Joshua J.Yi、David J.Liljia所著的“Simulation ofComputer Architectures:Simulators,Benchmarks,Methodologies,and Recommendations”(IEEE Transactions on Computers,2006年3月,第55卷,第3期,第268-280页)中,对模拟器技术及其分类进行了粗略的介绍。
全系统模拟器是一个用于为应用和操作系统(OS)提供虚拟执行环境的程序。例如,全系统模拟器可能允许在x86的Windows平台上运行PowerPC Linux和相关的Linux应用程序。动态二进制翻译(Dynamic binary translation,DBT)技术是当前的一种用于加速全系统模拟器的技术。虽然全系统模拟器并不一定需要使用动态二进制翻译技术,但是使用动态二进制翻译技术可以带来速度上很大的提高。采用动态翻译技术实现的全系统模拟器的典型例子包括:在由RichardUhlig、Roman Fishtein、Oren Gershon、Israel Hirsh和Hong Wang所著的“SoftSDV:A Presilicon Software Development Environmentfor the IA-64 Architecture”(Intel Technology Journal Q4,1999年)中公开的模拟器;以及QEMU(可参见http://fabrice.bellard.free.fr/qemu/)。此外,典型的全系统模拟器还包括:Simics系统(可参见http://virtutech.com/),Skyeye系统(可参见http://www.skyeye.org/index.shtml)和Wukong系统(可参见http://embedded.zju.edu.cn/wukong/)。
在本文中,将针对使用DBT技术的全系统模拟器进行描述,并且为了简单起见,将利用DBT技术的全系统模拟简称为全系统模拟。
大多数现代的计算机都包含一个存储器管理单元(memorymanagement unit,MMU),其用于将软件所使用的虚拟地址翻译成用来存取存储器和I/O设备的物理地址。MMU模拟是全系统模拟的一个重要部分。已知的用于实现MMU模拟的解决方案引入了较大的性能开销。
例如,在Emmett Witchel和Mendel Rosenblum所著的“Embra:fast and flexible machine simulation”(Proceedings of the 1996 ACMSIGMETRICS International Conference on Measurement andModeling of Computer Systems,美国宾夕法尼亚州费城,1996年,第68-79页)中,就公开了一种使用MMU模拟的全系统模拟器。其中,提供了下述这样的报告结果:如果对MMU进行模拟,则整个系统的速度至少会降低1/3或1/4。
图1示出了传统的MMU模拟的逻辑结构。如图1所示,在该图的左侧示出了翻译之前的一个示范性代码段,在图1的中间示出了在对该示范性代码段进行翻译之后所得到的代码段,而在图1的右侧示出了地址转换旁路缓冲器(Translation Lookaside Buffer,TLB)中所存储的内容(在下文中,将其称为TLB表)。
需要注意的是,在模拟器中,TLB表就是一个数组,所以可以直接存取,并且这里所说的TLB表是在模拟器内部模拟的TLB表,而不是真实硬件的TLB表。
MMU在TLB的帮助下完成地址翻译的任务。每个TLB条目(entry)包含4k大小的虚拟存储页的地址(即,虚拟地址)以及该页的相应物理存储器地址,并且其中还包含有某些比特位用于权限和保护的目的(为了简单起见,在图1中并未示出这些比特位)。
代码段中的每条加载/存储(load/store)指令,都需要进行地址翻译,而地址翻译的过程很复杂。一般说来,在进行代码二进制翻译时,一条目标机的加载/存储指令,需要翻译成多条宿主机的指令,才能完成相应功能。一般是把加载/存储指令翻译成一个函数调用,在该函数内部完成复杂功能。也就是说,将一条目标机的加载/存储指令翻译成宿主机上的一个函数。其中,与加载和存储指令相对应的函数是事先确定好的,对于不同公司的模拟器产品而言,对应的函数可能是不同的,但是在同一个模拟器中其对应的函数是固定的。所以,翻译过程很简单,只需将每条目标机上的加载指令翻译成一个与之对应的宿主机上的函数调用,将每条目标机上的存储指令翻译成一个与之对应的宿主机上的函数调用。
在当前的MMU模拟方法中,把每条加载/存储指令翻译成一个执行TLB搜索的函数调用。在每次需要进行地址翻译时,对模拟的TLB进行搜索(如图1所示)。如果虚拟地址在TLB中,则可以获得相应的物理地址。如果虚拟地址不在TLB中,则MMU可以生成一个TLB缺失异常(TLB-miss exception),或者MMU自动地从模拟的内存中读取页表填充到TLB中。搜索结果包括虚拟页号和物理页号,其中,虚拟页号和物理页号在一般情况下均为32位长的地址,其中低12位为0。这是因为,在一般的32位计算机系统中,一个32位长的地址可以分成两部分,其中,高20位为页号,低12位为页内偏移(对于64位的计算机系统可执行类似的处理)。页内偏移在虚拟地址空间和物理地址空间内是相同的。
由于需要频繁地执行加载/存储指令,所以MMU的速度会直接影响到整个系统的性能。然而,由于TLB搜索是非常耗时的过程,所以模拟的MMU运行速度不够快。
从真实硬件上来看,TLB本质上是一个高速缓存,因此,有关TLB的查找或搜索算法实质上就是高速缓存的查找或搜索算法,因此,可以参见《Computer Architecture:A Quantitative Approach》(作者:John L.Hennessy,David A.Patterson,译者:郑纬民,汤志忠,汪东升,电子工业出版社2004年7月出版,ISBN号为:7-5053-9916-0)。简单地说,TLB可以被看作是包含很多行,每一行都包含一个虚拟地址和一个物理地址。
基本的TLB搜索方法有两种:
(1)如果知道某个虚拟地址,则在TLB中逐行地进行对比,如果发现某一行的虚拟地址相同,就返回该行中对应的物理地址。如果在真实硬件中实现,搜索的速度会非常快,因为硬件可以并行地搜索多行,例如,可以一次搜索100行或更多行。因此,无论搜索多少行,其所需的时间都和搜索一行的时间是相同的。这种TLB被称为全相联的TLB(fully-associated TLB)。
(2)假定一个虚拟地址只能放在某一固定的行上面。例如,可以规定:如果虚拟地址被10除后余1,就放在第一行,余2就放在第2行,等等诸如此类。这样的话,TLB就只需要有10行即可。但是,可能会出现有很多虚拟地址都可以放在同一行中的情况,从而产生了冲突。因此,一般的做法是,谁最近被使用,就把谁放在该位置上。这样的话,搜索起来很方便,对于给定的一个虚拟地址而言,首先找到它对应的行号,然后判断该行上的虚拟地址和给出的虚拟地址是否相同,如果相同,就表示该虚拟地址在TLB中找到了,因此,返回该行中所包含的物理地址。这种TLB可以被称为组相联的TLB(set-associated TLB)。
从模拟器的角度来看,模拟器的目的是要对真实硬件进行模拟,所以模拟器要模拟上述TLB搜索的过程。对全相联的TLB而言,软件不能做到并行搜索(并行搜索用软件实现开销很大,得不偿失),只能逐行地去对比,这往往是通过一个循环体程序来实现的。这样的话,对于一个包含64行的TLB,就需要比较64次,所以TLB搜索的速度很慢。而对于组相联的TLB而言,可以直接算出行号,然后再去进行搜索,但是其搜索的速度还是不够快。经过实践分析,如果将计算和比较的过程计算在内,QEMU需要至少20条汇编指令才能完成上述功能。
例如,当目标机ISA(Instruction Set Architecture,指令集体系结构)是PowerPC,而宿主机ISA为x86时,在一个良好设计的全系统模拟器QEMU中,一条加载/存储指令被翻译为大约20条汇编指令。
在当前的模拟器中,MMU模拟的速度仍然不尽如人意,因此,需要提供新的模拟MMU的方法,以进一步减少加载/存储指令翻译后的指令数目,从而提高MMU模拟以及全系统模拟的运行速度。
为了克服现有技术中所存在的缺陷,加快MMU模拟的速度,进而提高整个系统的性能,而提出了本发明。
发明内容
通过实践发现,实际上,由于计算机程序具有一定的数据局部性(data locality)这一特点,所以邻近的加载/存储指令往往可能会存取同一存储页中的多个地址。例如,如图1所示,virt_addr1和virt_addr2可能是同一地址或者可能位于同一页中。如果是这样的话,就没有必要再次搜索TLB。
本发明的一个目的是提供一种能够快速进行MMU模拟的方法。在该方法中,仅仅需要对代码段中的第一条加载/存储指令进行地址翻译,因此执行第一次TLB搜索并且存储搜索结果,然后对于同一代码段内的非第一条加载/存储指令,使用所存储的搜索结果来执行快速的地址翻译,从而可以进行快速的MMU模拟。
按照本发明,需要在存储器中保存一个代码段中进行第一次TLB搜索的结果。在本发明的一个实施例中,把这个搜索结果保存在每个代码段的末尾(当然,也可以保存在代码段中的其它位置上,或者与代码段分开保存),这相当于向代码段中添加了一些内容或信息,在本发明中,将这种方式称为地址注射。
本发明的另一个目的是提供一种可以实现快速的MMU模拟的装置以及全系统模拟器。
为此,根据本发明的一个方面,提供了一种在计算机系统中对计算机程序执行快速的存储器管理单元模拟的方法,其中,在计算机系统中分配有一个预定大小的地址注射空间,而且在所述地址注射空间中存储虚拟页号和相应的物理页号,所述方法包括以下步骤:对于所述计算机程序的一个代码段中的加载/存储指令,获得所述加载/存储指令的虚拟地址;计算该虚拟地址的虚拟页号和页内偏移;将所计算的虚拟页号与所述地址注射空间中所存储的虚拟页号进行比较;如果两个虚拟页号相同,则根据所述地址注射空间中所存储的物理页号,获得相应的物理地址;如果两个虚拟页号不相同,则执行地址转换旁路缓冲器搜索、即TLB搜索,以获得相应的物理地址;以及从所获得的相应物理地址中读取数据,或者向其中写入数据。
根据本发明的另一个方面,还提供了一种用于在计算机系统中对计算机程序代码执行快速的存储器管理单元模拟的装置,包括:代码翻译器,用于将目标机程序代码翻译为宿主机程序代码,并且分配预定大小的地址注射空间;执行单元,用于执行翻译后的宿主机程序代码;翻译后代码缓存,用于存储由上述代码翻译器所翻译的宿主机程序代码;以及翻译缓存管理单元,用于对所述翻译后代码缓存和地址注射空间进行管理,其中,所述地址注射空间用于存储虚拟页号和相应的物理页号,代码翻译器在执行程序代码翻译时,对于所述目标机程序代码的一个代码段中的加载/存储指令,将该加载/存储指令的虚拟地址的虚拟页号与所述地址注射空间中所存储的虚拟页号进行比较,如果两个虚拟页号相同,则根据所述地址注射空间中所存储的物理页号,获得相应的物理地址,否则,由执行单元执行地址转换旁路缓冲器搜索、即TLB搜索,以获得相应的物理地址。
本发明还提供了一种包括上述装置的全系统模拟器。
本发明还提供了实现上述方法的相应的计算机可读存储介质和计算机程序产品。
在本发明中,假设一个计算机程序具有多个数据局部性良好的代码段。在此,需要说明的是,一个计算机程序或代码段具有“良好的局域性”,是指它在运行时平均来讲只需要较小的主存空间,并且也不会出现短时间的大主存空间的要求。
在多数情况下,在具有良好的数据局部性的代码段中,对于其中的第一条加载/存储指令,都需要执行TLB搜索,并且将搜索结果存储下来。搜索结果包括虚拟页面和物理页面的编号(即,虚拟页号和物理页号)。对于同一代码段内的非第一条加载/存储指令,使用所存储的搜索结果来执行快速的地址翻译。
本发明的一个优点在于,通过利用地址注射技术,可以快速地执行地址翻译,从而显著地提高了在全系统模拟器中进行MMU模拟的速度。
本发明的又一个优点在于,由于在每个代码段的末尾分配预定大小的地址注射空间,因此,可以非常方便地对地址注射空间进行维护和管理,便于快速地读取其中所存储的内容。
通过以下结合附图对本发明的优选实施例的详细说明,本发明的这些以及其他优点将变得更加明显。
附图说明
本发明可以通过参考下文中结合附图所给出的描述而得到更好的理解,其中,在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并且形成本说明书的一部分,而且用来进一步举例说明本发明的优选实施例和解释本发明的原理和优点。在附图中:
图1示出了传统的MMU模拟的逻辑结构;
图2示出了根据本发明的一个实施例对一段计算机程序中的一个代码段进行动态二进制翻译的方法200的处理流程图;
图3示出了根据本发明的一个实施例在利用图2所示的方法200对某一代码段进行翻译前后的代码段示例;
图4示出了根据该实施例对所述代码段中的第一条加载/存储指令进行翻译后所获得的代码序列(其对应于图3中的代码序列③,并且还对应于图2中的步骤S270);
图5示出了根据该实施例对所述代码段中的非第一条加载/存储指令进行翻译后所获得的代码序列(其对应于图3中的代码序列④,并且还对应于图2中的步骤S260);
图6示出了第一条加载/存储指令翻译成宿主机程序后的运行过程600的流程图。
图7示出了非第一条加载/存储指令翻译成宿主机程序后的运行过程700的流程图。
图8示出了根据本发明一个实施例的具有动态二进制翻译功能的全系统模拟器800的结构方框图;以及
图9示出了根据本发明的实施例在每个翻译后的代码段的末尾分配地址注射空间之后所获得的代码段的示意图。
具体实施方式
在下文中将结合附图对本发明的示范性实施例进行描述。为了清楚和简明起见,在说明书中并未描述实际实现方式的所有特征。然而,应该了解,在开发任何这种实际实施例的过程中必须做出很多实现方式所特定的决定,以便实现开发人员的具体目标,例如符合与系统及业务相关的那些限制条件,其中,这些限制条件会随着实施方式的不同而改变。此外,还应该了解,虽然开发工作有可能是非常复杂和费时的,但对得益于这个公开内容的本领域技术人员来说,这种开发工作仅仅是例行的任务。
此外,还需要说明的一点是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的装置结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
图2示出了根据本发明的一个实施例对一段计算机程序中的一个代码段进行动态二进制翻译的方法200的处理流程图。
正如上文中所提到的,本发明的方案基于下述这样的事实:一个计算机程序具有多个数据局部性良好的代码段。
可以有多种方法用来确定代码段的界限(boundary)。例如,可以将固定数目的相邻基本块(basic block)认为是一个代码段。或者,可以静态分析邻近的加载/存储指令的地址参数,以其为线索确定数据局部性。例如,根据基地址寄存器,如果一段代码所包含的加载/存储指令都是基于同一个基地址的,那么它们的局部性就很可能是良好的,也就是说,可以认为这段代码是本发明中所描述的一个具有良好数据局部性的代码段。当然,也可以有其它的很多方法来确定计算机程序中的局部性良好的各个代码段。由于如何确定代码段的界限并不是本发明所关注的焦点所在,而且对于使用何种方法来确定代码段的界限在本发明的方案中也没有任何限制,因此,可以使用现有技术中的任何一种已知的方法来确定代码段的界限,在此就不再详述了。
如图2所示,所述方法200在步骤S210中开始。然后,在步骤S220,获得代码段中的一条指令。
在步骤S230,判断该条指令是否为一条加载/存储指令,如果是的话,则方法200的处理流程进行到步骤S240。
在步骤S240,判断该条加载/存储指令是否为该代码段中的第一条加载/存储指令,如果是的话,则处理流程进行到步骤S250,否则,处理流程转到步骤S260。
在步骤S250,分配用于地址注射的存储空间。正如上文中所描述的,由于需要存储一个代码段中进行第一次TLB搜索的搜索结果,因此需要在存储器中分配一定的存储空间,用于存储第一次TLB搜索的搜索结果。
在该实施例中,为了便于对存储空间进行管理,在每个代码段的末尾分配具有一定大小的存储空间,例如,8个字节长度的存储空间,在其中存储一个虚拟页号(用变量virtual_page_num表示)和一个物理页号(用变量physical_page_num表示)。
接下来,处理流程进行到步骤S270,其中,按照一种特定的方式(例如,图4所示的方式)对所述第一条加载/存储指令进行翻译。
如果在步骤S240中确定该条加载/存储指令不是所述代码段中的第一条加载/存储指令,则处理流程进行到步骤S260,按照另一种特定的方式(例如,图5所示的方式)对所述加载/存储指令进行翻译。
对某一代码段中的第一条加载/存储指令以及非第一条加载/存储指令进行翻译的具体处理过程,将在下文中参照图3-5进行具体描述。
如果在步骤S230中确定所述指令不是加载/存储指令,则方法的处理流程转到步骤S280,按照常规方法对指令进行翻译。由于其翻译方法与现有技术中的相同,并且也不是本发明的方案所关注的焦点所在,因此在本文中省略了对其的具体说明。
在对所述指令进行翻译之后,方法200的处理流程进行到步骤S290,判断是否可以获得代码段中的下一条指令。如果是的话,则处理流程返回步骤S220,并且重复上述步骤S220至S290中的处理过程,直到到达所述代码段的最后一条指令为止。
如果到达了代码段的最后一条指令(即,步骤S290的判断结果为否),则方法200在步骤S295中结束处理流程。
图3示出了根据本发明的一个实施例在利用图2所示的方法200对某一代码段进行翻译前后的代码段示例。在图3的左侧,示出了翻译前的代码段,而在图3的右侧,示出了在利用图2所示的方法进行翻译后所获得的相应代码段。
如图3所示,通过利用如图2所示的方法200,将第一条加载/存储指令①翻译为代码序列③,将其后的一条加载/存储指令②翻译为代码序列④。由于代码段存在良好的数据局部性,所以代码序列③和④中的第一个分支转移(branch)将会以较高的概率发生。其中,page_num( )和offset( )是代码序列③和④中使用的两个函数,分别用于计算一个虚拟地址的前20位(即,页号)和后12位(即,页内偏移)。
另外,在图3的右下方,还示出了根据本发明一个实施例的地址注射空间⑤,在其中存储一个虚拟页号、即变量virtual_page_num和一个物理页号、即变量physical_page_num。physical_page_num和virtual_page_num是用于记录TLB搜索结果的两个变量(或参数),分别用于记录由指令①最近存取的虚拟页号(可通过将虚拟地址除以页面大小而获得)和物理页号(可通过将物理地址除以页面大小而获得)。在本发明的这个实施例中,这两个变量或参数被存储在经翻译之后的代码段的末尾处(如图3中的⑤所示)。
图4示出了根据该实施例对所述代码段中的第一条加载/存储指令进行翻译后所获得的代码序列(其对应于图3中的代码序列③),而图5示出了根据该实施例对所述代码段中的非第一条加载/存储指令进行翻译后所获得的代码序列(其对应于图3中的代码序列④)。
如图4所示,假定第一条加载/存储指令的虚拟地址为virt_addr1。分别使用函数page_num( )和offset( )来计算该虚拟地址的相应的虚拟页号(前20位)和页内偏移(后12位)。第一条加载/存储指令被翻译为一个以宿主机指令组成的分支转移结构,即如图4所示的if-else结构。
在翻译后的代码序列中,首先检查虚拟地址virt_addr1是否存在于地址注射空间中。这个检查过程通过把虚拟地址virt_addr1的虚拟页号和变量virtual_page_num进行比较来实现。正如以上所描述的那样,变量virtual_page_num存储在地址注射空间中,并且在代码段的翻译期间被初始化为一个无效的值。如果virt_addr1存在于地址注射空间中,则翻译后的代码序列可以直接计算相应的物理地址。否则,翻译后的代码序列中需要搜索TLB,并且把搜索结果(包括虚拟页号和物理页号)存储到地址注射空间中,即,分别存储到变量virtual_page_num和physical_page_num中。在第二个分支转移(即,else{ })结构中的TLB搜索动作与传统的TLB搜索方法是相同的,在此就不再详述了。
以下将结合图6来对图4所示的代码序列的执行过程进行进一步的说明。
图6示出了图4所示的代码序列的执行过程600(对应于图2所示的流程图中的步骤S270的生成结果的执行过程)。
如图6所示,处理过程600在步骤S610中开始。
在步骤S620,获得代码段中的第一条加载/存储指令的虚拟地址virt_addr(在本例中,为virt_addr1)。
然后,在步骤S630,检查虚拟地址virt_addr是否存在于地址注射空间中,即判断virt_addr的虚拟页号(即,利用page_num(virt_addr)获得)和变量virtual_page_num是否相等。
在此,需要说明的一点是,如果代码段是第一次执行的话,该代码段中的第一条加载/存储指令必然需要执行TLB搜索;然而,如果该代码段被反复执行多次的话,则对于其中的第一条加载/存储指令,也可能不需要搜索TLB了,这是因为,其TLB搜索结果可能已经被存储在地址注射空间中了。
如果在步骤S630中的判断结果为是,这表明虚拟地址virt_addr已经存在于地址注射空间中了,则处理过程600进行到步骤S640,利用下述计算公式和地址注射空间中所存储的变量physical_page_num来直接计算相应的物理地址(用phys_addr表示):
phys_addr=physical_page_num+offset(virt_addr)。
如上文中所提及的,在本发明的这个实施例中,分配的地址注射空间为8个字节长度。也就是说,其中存储的变量virtual_page_num和physical_page_num分别为4个字节长(即32位长),而且这两个32位长的变量的低12位为0。因此,由于页内偏移在虚拟地址空间和物理地址空间中是相同的,所以,将物理页号physical_page_num和页内偏移offset(virt_addr)直接相加,即可以获得相应的物理地址。
然后,处理过程600进行到步骤S650,从所计算的物理地址phys_addr中读取数据,或者向其中写入数据。
上述步骤S640和S650的处理过程对应于图4所示的代码序列中的第一个分支转移结构、即if{ }结构中的相应代码。
如果在步骤S630中的判断结果为否,则处理过程600进行到步骤S660,搜索TLB(即,逐行地进行TLB查找,该搜索处理与现有技术中的搜索处理是相同的,所以在此就不再详述了),以获得相应的物理地址phys_addr,然后从该物理地址中读取数据,或者向其中写入数据。
接下来,处理过程600进行到步骤S670,把TLB搜索的结果、即虚拟页号page_num(virt_addr)和物理页号page_num(phys_addr)存储到变量virtual_page_num和physical_page_num(即,地址注射空间)中。
上述步骤S660和S670的处理过程对应于图4所示的代码序列中的第二个分支转移结构、即else{ }结构中的相应代码。
然后,处理过程600在步骤S680中结束。
在此,需要说明的是,分配的地址注射空间也可能不是8字节长的。例如,如上文中所描述的,在计算机系统中,32位长的地址的高20位为页号,因此,在本发明的另一个实施例中,可以将地址注射空间内存储的两个变量virtual_page_num和physical_page_num均定义为20位长。这样的话,地址注射空间的大小仅需要40位长、即5个字节长即可,这有助于节省存储空间。在这种情况下,在计算物理地址时,需要将physical_page_num左移12位,从而将其从一个20位长的地址变为一个32位长的地址,然后再将其与页内偏移量(为12位长的地址)相加,就可以计算出相应的物理地址了。即,在这种情况下,上述步骤S640中使用的计算公式变为如下所示:
phys_addr=(physical_page_num<<12)+offset(virt_addr)。
对于代码段中的非第一条加载/存储指令,如图5所示,假定其虚拟地址为virt_addr2,并且其也会被翻译为以宿主机指令组成的分支转移结构,即if-else结构。
翻译后的代码序列也首先检查virt_addr2是否存在于地址注射空间中。这个检查过程仍然通过把virt_addr2的页号和所存储的变量virtual_page_num进行比较来实现。virtual_page_num在翻译期间被初始化为一个无效的值,并且在执行第一条加载/存储指令的翻译后的代码序列时,可以对其进行修改。如果virt_addr2存在于地址注射空间的话,则翻译后的代码序列可以直接计算相应的物理地址,否则,需要搜索TLB。第二个分支转移中的TLB搜索动作与传统的TLB搜索方法是相同的,在此就不再详述了。非第一条加载/存储指令的这个翻译过程与第一条加载/存储指令的翻译过程之间的不同之处在于:这个翻译过程中不需要保存TLB搜索结果。
图7示出了图5所示的代码序列的执行过程700(对应于图2所示的流程图中的步骤S260的生成结果的执行过程)的流程图。
从图6和图7所示的流程图中可以看出,处理过程600和处理过程700的处理流程是非常类似的,不同之处仅在于:处理700中不需要存储TLB搜索的结果,即省去了步骤S670的处理。
因此,为了说明书的简洁起见,在此就不再对图7所示的处理过程700进行详述了。
以上根据本发明的一个实施例、结合图2至图7对根据本发明的方法200进行了描述。但是,应当理解,图2、6和7中所示的处理流程仅仅是示例性的,实际上,根据设计需要,可以对其中的各个步骤的执行顺序进行修改或调整,也可以将其中的某些步骤的处理进行组合、合并或者并行执行。
例如,在图2所示的方法200的流程图中,分配地址注射空间的步骤S250也可以是预先执行的,例如,可以在步骤S220前执行。
显然,程序设计员等可以根据需要对图2所示的方法200做出各种各样的修改或调整,因此,在本说明书中没有必要一一列举出各种可能的实现方式。
图8示出了根据本发明一个实施例的具有动态二进制翻译功能的全系统模拟器800的结构方框图。
如图8所示,虚拟执行环境810提供了用于在宿主机上执行目标程序必需的所有单元,其中包括:模拟的存储器811,模拟的MMU和TLB 813,模拟的寄存器815,模拟的I/O设备817,和模拟的中断管理单元819等。
其中,模拟的存储器811是一块在宿主机平台上分配的虚拟内存。虚拟执行环境(目标机系统)中的操作系统和应用软件都存储在这个模拟的存储器中。从虚拟执行环境的角度来看,该模拟的存储器就好像是机器内的实际物理存储器一样。
模拟的MMU和TLB 813可以模拟地址翻译和保护的功能。模拟的寄存器815可以模拟目标机系统中的寄存器。例如,如果目标机系统是X86,则模拟的寄存器可以包括EAX、EBX等。如果目标机系统是PPC,则模拟的寄存器可以包括r0、r1等。这些目标寄存器在宿主机系统上通过32位或64位长的整数来进行模拟。模拟的I/O设备817类似于串行端口、物理接口卡等。
由于通常情况下目标机操作系统要求具备这些设备的功能,所以全系统模拟器必须模拟这些设备。当然,根据设计需要,有可能还包括其它的设备,在此,为了简单起见并未全部示出。
模拟的中断管理单元819用于模拟中断管理的功能。例如,其可以实现以下功能:(a)当发生中断时,其迫使计算机系统内的程序计数器记录中断处理器的地址改变;(b)屏蔽/禁用某些中断信号;(c)提供用于产生中断信号的I/O设备的索引编号;等。当然,根据设计需要,还可能包括其它功能,在此为了简单起见并未全部列出。
此外,全系统模拟器800还包括:代码翻译器820,执行单元830,翻译缓存管理单元840,翻译缓存850等。
本发明中的代码翻译器820不同于已有的常规全系统模拟器中的代码翻译器。代码翻译器820除了像常规代码翻译器那样具有将目标机代码翻译为宿主机代码的普通功能之外,还可以如图2所示的那样,对于具有良好数据局部性的每个代码段中的第一条加载/存储指令,将其翻译为执行TLB搜索并且将搜索结果(包括虚拟页号和物理页号)存储在地址注射空间854(稍后对其进行描述)中(在多数情况下都是如此),而对于同一代码段内的非第一条加载/存储指令,则将其翻译为使用所存储的搜索结果来执行快速的地址翻译。
此外,代码翻译器820还具备分配适当的地址注射空间这一特殊功能(如图8中的①所示)。分配适当的地址注射空间这一功能使得本发明区别于其它的常规二进制翻译系统。代码翻译器820的整体处理过程在上文中已经参照图2描述过了,其将目标机代码翻译为宿主机代码的处理过程与现有技术中的处理过程相同,而且分配地址注射空间的有关处理操作在上文中也已经结合图2和3描述过了,因此,为了避免重复,在此就不再对其进行详述了
如上文中所描述的那样,在每个地址注射空间中存储每个代码段中第一条加载/存储指令的TLB搜索结果,即,存储下述两个变量(或参数):virtual_page_num和physical_page_num,以加速该代码段内的非第一条加载/存储指令的地址翻译过程。因此,翻译后的程序代码必须记录所分配的地址注射空间的地址。也就是说,代码翻译器必须知晓所分配的地址注射空间的确切的物理地址,并且把这个确切的物理地址编码到翻译后的宿主机二进制代码中,就好像这个地址是汇编代码的立即数一样。至于如何把这个物理地址编码到翻译后的程序代码中,现有技术中存在多种方法,而且在不同平台上的具体实现方式可能是不同的,因而在此省略了对其的详细描述。
此外,申请人还注意到,以上结合图2所描述的方法200在执行二进制翻译之后会生成较大的代码,其中包括一个或多个分支结构(如图4和5所示),但是,由于大量代码存在于实际上很少执行的分支结构中,所以实际执行的代码是相对较小的。因此,在本发明的另外一个实施例,可以使代码翻译器以紧凑的方式重新组织翻译后的代码。例如,在图4和5中,有多段代码是类似的或者是完全相同的。因此,可以将这些段代码进一步集中起来并将其组合成一个子函数,这同样可以采用现有技术中的多种方法来实现。这样的话,原来需要大段代码的地方就可以用单个函数调用来代替,因此,所生成的代码的大小将会小得多。较小的代码大小增加了代码的局部性,这通常意味着可以更加快速地执行代码。此外,这样做减小了翻译后代码缓存的压力,因为无需准备较大的存储器了。
如图8所示,将翻译缓存850显示为包含翻译后代码缓存852和地址注射空间854。其中,翻译后代码缓存852用于存储对程序代码进行二进制翻译后所生成的代码。该翻译后的代码具有宿主机指令集的形式,并且可以直接在宿主机平台上由执行单元830执行。地址注射空间854用于存储各个代码段中的第一条加载/存储指令的所有TLB搜索结果。地址注射空间中的值在需要进行存储器地址翻译时由执行单元830进行存取。如果所期望的地址存在于地址注射空间中,则地址翻译工作将会是非常快速的,并且TLB搜索也不再是必需的。
虽然在图8中将翻译后代码缓存852和地址注射空间854显示为分开的两个部分,但是,地址注射空间854可以在翻译后的代码内分配,或者也可以在任何易于存取的位置上分配。
正如上文中所描述的那样,在本发明的一个实施例中,在每个地址注射空间中仅仅记录了两个参数,即,虚拟页号virtual_page_num和物理页号physical_page_num,因此,对于32位的系统而言,只需要为每个地址注射空间分配8个字节就足够了。此外,上文中也提到了,如果宿主机上的存储空间有限的话,也可以使分配的每个地址注射空间小于8个字节。在这种情况下,对于32位的系统而言,由于virtual_page_num和physical_page_num的低12位总为0,所以可以将其省略,而只需要记录地址的高20位即可。也就是说,只需要为每个地址注射空间分配5个字节即可。当然,分配更多的存储空间以记录更多的参数,也是有可能的。
在如图8所示的全系统模拟器800中,地址注射空间是分散的,并且如上所述,对于包含存储器存取指令的每个代码段而言,在该代码段的末尾分配8个字节的空间。这样做的主要原因是考虑到可扩展性(scalability)。如果预先准备一个连续的空间,则难以预测该连续空间的大小。此外,在释放期间,将会存在大量的零碎的空闲碎片,记录它们需要花费很大的系统开销。如果把地址注射空间附加到代码段的末尾(如图9所示),则维护该空间是比较容易的。当释放代码段时,同时释放与该代码段相关联的空间。这种方法利用了代码段和其地址注射空间具有相同的生命周期这一特性。
所分配的地址注射空间应当满足对齐要求。尽管大多数的机器都不会对存储器地址强加这样的限制,但是对齐的地址总是可以获得提高了的性能。因此,在根据本发明的另外一个优选实施例中,总是要求地址注射空间的开始地址为4的倍数。如果宿主机是x86,则需要在代码段之后填充某些字节(例如,补0)以便进行对齐。
当然,除了以上所描述的实现方式之外,还可以考虑使用其它的方法(尽管其优点未必是显然的)。例如,在模拟SMP(对称多处理器)系统时,对于一个处理器而言,地址注射空间可以是集中式的,而对于不同的处理器而言,则分配的地址注射空间是分散的。
如图8所示,执行单元830从翻译后代码缓存852中取出宿主机指令。由于代码是用于宿主机平台的,所以可以直接执行该代码。如果期望的代码不在翻译后代码缓存中,则需要尽快地通知代码翻译器820对所期望的代码进行翻译,并且等待翻译结果。
在图8所示的全系统模拟器800中,在地址翻译期间,可以快速地存取地址注射空间。只有当地址注射空间不能进行翻译时,才求助于模拟的MMU和TLB 813。执行单元830存取地址注射空间的动作在图8中如②所示,并且对应于图6和7。如上所述,在大多数情况下,由于存在数据局部性,所以地址注射空间能够成功地进行翻译。整体速度得到了相当显著地提高。
此外,还需要关注和处理的一个问题是:在存取地址注射空间期间正确地处理中断。例如,当一个代码段中的第一条加载/存储指令希望把地址翻译结果保存到地址注射空间中时,来自模拟的I/O设备817的中断停止了执行指令流,并且迫使执行单元830运行中断处理程序。假设中断正好在保存参数virtual_page_num和physical_page_num的两个实例之间发生。这意味着,仅仅保存了参数virtual_page_num,但是还未保存参数physical_page_num。在这种情况下,地址注射空间中存储的值可能是不一致的,这种情形应当被视为一个潜在的错误。在根据本发明的全系统模拟器800中,可以简单地通过使执行单元830在存取地址注射空间期间禁止执行任何中断,来避免这种潜在错误的出现。当然,也可以采用其它的方法。例如,如果无法保存物理页号physical_page_num,则清除地址注射空间中所存储的虚拟页号virtual_page_num(例如,可以将其设置为无效的值或者将其清空),并且在执行了中断之后重新执行保存这两个参数virtual_page_num和physical_page_num的动作。
在执行期间,翻译后的代码就像其它的模拟器系统中那样对模拟的I/O设备817、模拟的寄存器815和模拟的存储器811进行存取,这与现有技术中是一样的。
如图8所示,翻译缓存管理单元840负责对翻译后代码缓存852和地址注射空间854进行管理。只有最近使用的代码(hottest code)才会被存储在翻译后代码缓存852中。这意味着,翻译缓存管理单元840需要定期地检查翻译后代码缓存852,以便查看近来是否使用了代码段,并且将长时间内未被使用的代码段从翻译后代码缓存852中移除。该时间长短可以根据实际需要进行设置。以这种方式,可以将翻译后代码缓存852的大小维持在一个可以接受的水平。在虚拟执行环境中,许多程序只运行一次。因此,在这种程序结束之后,没有必要在翻译后代码缓存852中保存它们的翻译后代码。但是,某些程序可能会一次又一次地运行。对于这种多次运行的程序而言,在其结束之后,在翻译后代码缓存852中保存其翻译后的代码,就是非常有意义的。翻译缓存管理单元840负责判断是否应当从翻译后代码缓存中移除代码段。许多已有的算法、例如LRU算法(最近最少使用算法)或者随机选择算法等都适合于实现这样的功能。
此外,考虑到在实际应用中虚拟执行环境可以支持多进程程序,因此,可以对如图8所示的全系统模拟器800中的翻译缓存管理单元840加以改进。为此,在根据本发明的另外一个实施例中,翻译缓存管理单元除了具备对翻译后代码缓存852进行正常管理的功能之外,还具有另外一个非常重要和独特的功能。
虚拟执行环境支持多进程程序,意味着,进程上下文切换是一个经常发生的事件。当两个进程共享一个代码段但具有不同的TLB表时,由于在该代码段末尾所分配的地址注射空间中只能保存一个TLB搜索结果,所以在利用存储结果执行快速地址翻译时,地址注射空间中所存储的地址可能会导致出现错误。解决方法如下。在每次发生上下文切换时,TLB或者某个模拟的寄存器将会被刷新,并且被赋予一个新值。例如,在x86平台上,在每次发生进程切换时,CR3寄存器会发生改变。翻译缓存管理单元监视这个寄存器或TLB,就可以获知进程上下文切换的发生。在每次进行上下文切换时,清除对应的地址注射空间的值。这样可以避免出现错误以确保正确性。地址空间被清除之后,如果代码段再次被执行,则TLB将再次被搜索,并且搜索结果将再次被保存,就好像该代码段是第一次执行那样。
虽然以上结合图1-9对根据本发明实施例的方法和全系统模拟器进行了描述,但是,对于本领域技术人员而言,根据设计需要,可以对上述方法和全系统模拟器进行各种修改。
在根据本发明的全系统模拟器中,对于具有良好的数据局部性的代码段中的第一条加载/存储指令,需要执行TLB搜索,并且将搜索结果存储在地址注射空间中(在多数情况下都是如此)。搜索结果包括虚拟页号和物理页号。而对于同一代码段内的非第一条加载/存储指令,使用所存储的搜索结果来执行快速的地址翻译。然而,在地址注射空间中也可以保存多个TLB搜索结果,并且使地址注射空间的长度可变,也是可能实现的。这种情况是本发明中的方法的一种扩展,因此,也应当属于本发明的范围之内。
综上所述,在本发明中,基于计算机程序包括多个数据局部性良好的代码段这一事实,提出了一种新的所谓“地址注射”的技术,利用该技术能够显著地提高MMU模拟的速度。
实践表明,通过利用本发明中提出的地址注射技术,可以把地址翻译后的指令的数目从原来的20条减少为10条或者更少,这意味着可以把MMU模拟的速度提高至少50%以上。
此外,显然,根据本发明的上述方法的各个操作过程也可以以存储在各种机器可读的存储介质中的计算机可执行程序的方式实现。
而且,本发明的目的也可以通过下述方式实现:将存储有上述可执行程序代码的存储介质直接或者间接地提供给系统或设备,并且该系统或设备中的计算机或者中央处理单元(CPU)读出并执行上述程序代码。
此时,只要该系统或者设备具有执行程序的功能,则实施的方式不局限于程序,并且该程序也可以是任意的形式,例如,目标程序、解释器执行的程序或者提供给操作系统的脚本程序等
上述这些机器可读存储介质包括但不限于:各种存储器和存储单元,半导体设备,磁盘单元例如光、磁和磁光盘,以及其它适于存储信息的介质等。
另外,客户计算机通过连接到因特网上的相应网站,并且将依据本发明的计算机程序代码下载和安装到计算机中然后执行该程序,也可以实现本发明。
最后,还需要说明的是,在本文中,诸如左和右、第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上虽然结合附图详细描述了本发明的实施例,但是应当明白,上面所描述的实施方式只是用于说明本发明,而并不构成对本发明的限制。对于本领域的技术人员来说,可以对上述实施方式做出各种修改和变更而没有背离本发明的实质和范围。因此,本发明的范围仅由所附权利要求及其等效含义来限定。
Claims (20)
1.一种在计算机系统中对计算机程序执行快速的存储器管理单元模拟的方法,其中,在计算机系统中为计算机程序的每个含有加载/存储指令的代码段分配有一个预定大小的地址注射空间,所述地址注射空间被分配在所述代码段的末尾,而且在所述地址注射空间中存储虚拟页号和相应的物理页号,所述方法包括以下步骤:
对于所述计算机程序的一个代码段中的加载/存储指令,获得所述加载/存储指令的虚拟地址;
计算该虚拟地址的虚拟页号和页内偏移;
将所计算的虚拟页号与所述地址注射空间中所存储的虚拟页号进行比较;
如果两个虚拟页号相同,则根据所述地址注射空间中所存储的物理页号,获得相应的物理地址;
如果两个虚拟页号不相同,则执行地址转换旁路缓冲器搜索、即TLB搜索,以获得相应的物理地址;以及
从所获得的相应物理地址中读取数据,或者向其中写入数据。
2.根据权利要求1所述的方法,在所述从所获得的相应物理地址中读取数据、或者向其中写入数据的步骤之前,进一步包括步骤:
判断所述加载/存储指令是否为所述代码段内的第一条加载/存储指令,
其中,如果所述加载/存储指令是所述代码段内的第一条加载/存储指令,并且所述计算的虚拟页号与所述存储的虚拟页号不相同,则所述方法在所述执行TLB搜索以获得相应的物理地址的步骤之后,进一步包括步骤:
将所计算的虚拟页号和所获得的相应物理地址的物理页号存储到所述地址注射空间中。
3.根据权利要求1所述的方法,其中,所述根据所述地址注射空间中所存储的物理页号获得相应的物理地址的步骤,进一步包括步骤:
根据所述地址注射空间中所存储的物理页号和所计算的页内偏移,计算所述加载/存储指令的物理地址,作为所述相应的物理地址。
4.根据权利要求1所述的方法,其中,所述执行TLB搜索以获得相应的物理地址的步骤,进一步包括步骤:
逐行地搜索TLB,以查找包含所计算的虚拟地址的行,以便返回该行中所包含的物理地址,作为所述相应的物理地址。
5.根据权利要求1至4中任何一项权利要求所述的方法,其中,并且所述地址注射空间中存储的虚拟页号和物理页号在所述代码段的第一次地址翻译时被初始化为无效的值。
6.根据权利要求1至4中任何一项权利要求所述的方法,其中,在存取地址注射空间期间禁止执行任何中断。
7.根据权利要求1至4中任何一项权利要求所述的方法,其中,在计算机系统支持多进程程序的情况下,在每次进行进程上下文切换时,清除相应地址注射空间。
8.根据权利要求1至4中任何一项权利要求所述的方法,其中,所述计算机程序包括一个或多个代码段,其中每一个代码段均具有良好的数据局部性,并且所述方法可适用于其中的每一个代码段。
9.根据权利要求8所述的方法,其中,分配有多个地址注射空间,每个地址注射空间为8个字节长,所存储的虚拟页号和物理页号分别为32位长。
10.根据权利要求8所述的方法,其中,分配有多个地址注射空间,每个地址注射空间为5个字节长,所存储的虚拟页号和物理页号分别为20位长。
11.一种用于在计算机系统中对计算机程序代码执行快速的存储器管理单元模拟的装置,包括:
代码翻译器,用于将目标机程序代码翻译为宿主机程序代码,并且分配预定大小的地址注射空间;
执行单元,用于执行翻译后的宿主机程序代码;
翻译后代码缓存,用于存储由上述代码翻译器所翻译的宿主机程序代码;以及
翻译缓存管理单元,用于对所述翻译后代码缓存和地址注射空间进行管理,
其中,每个地址注射空间被分配在每个含有加载/存储指令的代码段的末尾,用于存储虚拟页号和相应的物理页号,
代码翻译器在执行程序代码翻译时,对于所述目标机程序代码的一个代码段中的加载/存储指令,将该加载/存储指令的虚拟地址的虚拟页号与所述地址注射空间中所存储的虚拟页号进行比较,如果两个虚拟页号相同,则根据所述地址注射空间中所存储的物理页号,获得相应的物理地址,否则,由执行单元执行地址转换旁路缓冲器搜索、即TLB搜索,以获得相应的物理地址。
12.根据权利要求11所述的装置,其中,所述计算机程序包括一个或多个代码段,其中每一个代码段均具有良好的数据局部性。
13.根据权利要求12所述的装置,其中,有多个地址注射空间。
14.根据权利要求13的装置,其中,每个地址注射空间为8个字节长,所存储的虚拟页号和物理页号分别为32位长。
15.根据权利要求13的装置,其中,每个地址注射空间为5个字节长,所存储的虚拟页号和物理页号分别为20位长。
16.根据权利要求11至15中任何一项所述的装置,其中,执行单元在存取地址注射空间期间禁止执行任何中断。
17.根据权利要求11至15中任何一项所述的装置,其中,翻译缓存管理单元定期地检查翻译后代码缓存,并从中移除长时间内未使用的程序代码。
18.根据权利要求11至15中任何一项所述的装置,其中,在全系统模拟器支持多进程程序代码的情况下,翻译缓存管理单元在每次进行进程上下文切换时,清除翻译后代码缓存中相应的地址注射空间。
19.根据权利要求11至15中任何一项所述的装置,其中,地址注射空间中存储的虚拟页号和物理页号在相应代码段的第一次翻译时被初始化为无效的值。
20.一种全系统模拟器,包括如根据权利要求11至19中任何一项所述的装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100052608A CN101246452B (zh) | 2007-02-12 | 2007-02-12 | 执行快速的mmu模拟的方法和装置、以及全系统模拟器 |
US12/030,163 US8301864B2 (en) | 2007-02-12 | 2008-02-12 | Apparatus and method for executing rapid memory management unit emulation and full-system simulator |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100052608A CN101246452B (zh) | 2007-02-12 | 2007-02-12 | 执行快速的mmu模拟的方法和装置、以及全系统模拟器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101246452A CN101246452A (zh) | 2008-08-20 |
CN101246452B true CN101246452B (zh) | 2010-12-15 |
Family
ID=39742810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100052608A Expired - Fee Related CN101246452B (zh) | 2007-02-12 | 2007-02-12 | 执行快速的mmu模拟的方法和装置、以及全系统模拟器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8301864B2 (zh) |
CN (1) | CN101246452B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751345B (zh) * | 2008-12-10 | 2012-04-11 | 国际商业机器公司 | 在主机中运行客户机的程序的模拟器和模拟方法 |
US8533429B2 (en) * | 2009-06-24 | 2013-09-10 | Panasonic Corporation | Memory access control device, integrated circuit, memory access control method, and data processing device |
US8244978B2 (en) * | 2010-02-17 | 2012-08-14 | Advanced Micro Devices, Inc. | IOMMU architected TLB support |
JP5625714B2 (ja) * | 2010-10-07 | 2014-11-19 | 富士通セミコンダクター株式会社 | シミュレーション装置、プログラム、記憶媒体、及び方法 |
CN102169459B (zh) * | 2010-11-29 | 2013-04-24 | 北京握奇数据系统有限公司 | 一种访问数据的方法、装置和智能卡 |
CN102184142B (zh) * | 2011-04-19 | 2015-08-12 | 中兴通讯股份有限公司 | 一种利用巨页映射降低cpu资源消耗的方法和装置 |
US10089093B1 (en) * | 2011-05-24 | 2018-10-02 | BlueStack Systems, Inc. | Apparatuses, systems and methods of switching operating systems |
CN102541623B (zh) * | 2011-12-20 | 2015-02-11 | 北京控制工程研究所 | 一种嵌入式处理器的存储空间模拟方法 |
US9804969B2 (en) * | 2012-12-20 | 2017-10-31 | Qualcomm Incorporated | Speculative addressing using a virtual address-to-physical address page crossing buffer |
CN104239236B (zh) * | 2013-06-17 | 2018-02-13 | 华为技术有限公司 | 旁路转换缓冲缺失的处理方法及旁路转换缓冲 |
CN104375950B (zh) * | 2013-08-16 | 2017-08-25 | 华为技术有限公司 | 一种基于队列对通信的物理地址确定方法及装置 |
US9582426B2 (en) * | 2013-08-20 | 2017-02-28 | International Business Machines Corporation | Hardware managed compressed cache |
US8930916B1 (en) * | 2014-01-31 | 2015-01-06 | Cylance Inc. | Generation of API call graphs from static disassembly |
US10437699B2 (en) | 2015-01-21 | 2019-10-08 | International Business Machines Corporation | Measuring execution time of benchmark programs in a simulated environment |
US9892060B2 (en) | 2015-12-02 | 2018-02-13 | International Business Machines Corporation | Identifying stale entries in address translation cache |
CN106371890B (zh) * | 2016-08-29 | 2019-05-28 | 山东乾云启创信息科技股份有限公司 | 一种gpu的模拟方法 |
CN108228239B (zh) * | 2016-12-13 | 2021-04-20 | 龙芯中科技术股份有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
US10564856B2 (en) * | 2017-07-06 | 2020-02-18 | Alibaba Group Holding Limited | Method and system for mitigating write amplification in a phase change memory-based storage device |
CN108710584B (zh) * | 2018-05-22 | 2021-08-31 | 郑州云海信息技术有限公司 | 一种提高tlb刷新效率的方法 |
CN109308270B (zh) * | 2018-09-04 | 2021-07-23 | 飞腾技术(长沙)有限公司 | 一种加速虚实地址转换的方法及装置 |
CN109407993B (zh) * | 2018-10-31 | 2022-05-27 | 深圳市硅格半导体有限公司 | 数据访问方法、装置、计算机可读存储介质及系统 |
CN110188026B (zh) * | 2019-05-31 | 2023-05-12 | 龙芯中科技术股份有限公司 | 快表缺失参数的确定方法及装置 |
CN111124954B (zh) * | 2019-11-12 | 2023-02-24 | 上海高性能集成电路设计中心 | 一种两级转换旁路缓冲的管理装置及方法 |
US11321225B2 (en) | 2020-05-22 | 2022-05-03 | International Business Machines Corporation | Reducing the memory load time for logic simulator by leveraging architecture simulator |
CN114416249B (zh) * | 2022-01-07 | 2023-11-03 | 北京百度网讯科技有限公司 | 程序处理方法、装置、设备及存储介质 |
CN115421864B (zh) * | 2022-09-14 | 2023-04-28 | 北京计算机技术及应用研究所 | 一种通用的PowerPC架构处理器指令集虚拟化仿真方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1896972A (zh) * | 2005-07-14 | 2007-01-17 | 中国科学院计算技术研究所 | 用于虚实地址变换及读写高速缓冲存储器的方法及装置 |
-
2007
- 2007-02-12 CN CN2007100052608A patent/CN101246452B/zh not_active Expired - Fee Related
-
2008
- 2008-02-12 US US12/030,163 patent/US8301864B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1896972A (zh) * | 2005-07-14 | 2007-01-17 | 中国科学院计算技术研究所 | 用于虚实地址变换及读写高速缓冲存储器的方法及装置 |
Non-Patent Citations (2)
Title |
---|
Emmett Witchel,Mendel Rosenblum.Embra:Fast and Flexible Machine Simulation.ACM Sigmetrics Performance Evaluation Review24 1.1996,24(1),68-79. |
Emmett Witchel,Mendel Rosenblum.Embra:Fast and Flexible Machine Simulation.ACM Sigmetrics Performance Evaluation Review24 1.1996,24(1),68-79. * |
Also Published As
Publication number | Publication date |
---|---|
CN101246452A (zh) | 2008-08-20 |
US20080222384A1 (en) | 2008-09-11 |
US8301864B2 (en) | 2012-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101246452B (zh) | 执行快速的mmu模拟的方法和装置、以及全系统模拟器 | |
US8370575B2 (en) | Optimized software cache lookup for SIMD architectures | |
US9256546B2 (en) | Transparent code patching including updating of address translation structures | |
US7739477B2 (en) | Multiple page size address translation incorporating page size prediction | |
US9569115B2 (en) | Transparent code patching | |
Van Essen et al. | DI-MMAP—a scalable memory-map runtime for out-of-core data-intensive applications | |
CN102117247B (zh) | 用于一系列页面的高速缓存刷新和一系列条目的tlb无效的系统、方法和设备 | |
US8166239B2 (en) | Translation lookaside buffer and related method and program product utilized for virtual addresses | |
US8688432B2 (en) | Method, apparatus and full-system simulator for speeding MMU simulation | |
KR20180099819A (ko) | 시스템 성능 향상을 위한 적응적 값 범위 프로파일링 | |
US20120011504A1 (en) | Online classification of memory pages based on activity level | |
US11409663B2 (en) | Methods and systems for optimized translation of a virtual address having multiple virtual address portions using multiple translation lookaside buffer (TLB) arrays for variable page sizes | |
EP4002131A2 (en) | Sequestered memory for selective storage of metadata corresponding to cached data | |
US8316193B2 (en) | Optimizing segment access in binary translation | |
Gioachin et al. | Scalable cosmological simulations on parallel machines | |
CN111566628B (zh) | 控制存储器访问中的守卫标签检查的设备和方法 | |
US10684951B2 (en) | Minimizing cache latencies using set predictors | |
US10748637B2 (en) | System and method for testing processor errors | |
Margaritov | Improving address translation performance in virtualized multi-tenant systems | |
Torok | Improving Graph Workload Performance by Rearranging the CSR Memory Layout | |
WO2024175869A1 (en) | Tag protecting instruction | |
US20200019405A1 (en) | Multiple Level History Buffer for Transaction Memory Support | |
Lan et al. | LAST: An Efficient In-place Static Binary Translator for RISC Architectures | |
Chen et al. | Statistical caching for near memory management | |
Aasaraai et al. | NCOR: An FPGA‐Friendly Nonblocking Data Cache for Soft Processors with Runahead Execution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20101215 Termination date: 20220212 |
|
CF01 | Termination of patent right due to non-payment of annual fee |