对于简单的说明,请说
MOV memorylocationA, memorylocationB
假设我正在将值从一个寄存器移动到另一个寄存器。
如果我们考虑TLB未命中并且我们应该实际浏览页面表(我的意思是最坏的情况),
在嵌套页表的情况下,内存访问次数为48.即,1次访问CR3的内存访问,1次访问页表,20通过影子页面进行翻译访问,1用于访问指定的内存位置,1用于访问实际物理地址,因此每次访问内存时将为1 + 1 + 1 + 20 + 1。在这种情况下,我们访问寄存器BX和AX,所以总数没有。翻译的范围是42 + 24 = 48 。 在NPT中,访客页面表格中的每个翻译都会在VMM页面表格中进行额外的4次翻译。
现在,如果我们使用扩展页表执行相同操作,那么内存访问次数将是 CR3为1,Page表为1,指定的存储位置为1,内存翻译为4,然后使用EPT进行相同的操作,另一个(1 + 1 + 1 + 4 = 7)。因此,在这种情况下,它将是 14个内存访问(客户操作系统中的7个,以及VMM的7个,因为使用了两个页表)。所以总共28个因为我们将访问两个内存位置A和B.
这是我的理解。但他们不应该是一样的吗?我研究过英特尔和NPT引入了EPT,它的性能大致相同。
因此,在最坏的情况下,上述指令将需要48次存储器访问(如果使用NPT)和28次存储器访问(如果使用EPT)
Update1 :更改了说明以保持清晰。假设我正在将寄存器的值移到另一个寄存器中。 Update2:假设对于每个内存转换,我们访问页面目录指针,页面目录,页面表和4k页面。