实际上除了Sv39和Sv48外,系统在未来的扩展中还可能支持更多的扩展,如Sv57以及Sv64(见[RISC-V instruction set manual](#refenences))。从39、48以及57这几个数字,我们可以发现的规律是,它们之间两两的差是9!结合图1.9中的地址翻译过程,我们就很容易理解什么是Sv48了:它在Sv39的基础上,用上了虚地址中的39~47这9个位(一共用了虚地址中的48个位),作为第四级虚页号VPN[3]。这样做的结果是:在进行地址翻译的时候新增了一级地址翻译。显然,Sv48提供了比Sv39更大的虚拟地址空间(2^48B=256TB>512GB),从而能够支撑更大的应用程序的执行,那么选择Sv48是不是比选择Sv39更具优势呢?答案是:取决于是否真的有必要支撑超过512GB虚地址空间的应用,如果不需要,则Sv39是更合理的选择。从图1.9中的地址翻译过程,我们还可以看到,一次虚地址va到实地址pa的转换涉及到4次(根目录+页目录+页表+pa所在的页)访问内存操作!而相比于处理器内部进行的运算而言,访存显然是更为耗时的操作。可以想象,如果采用Sv48,这个转换所需要的访存操作是(5次)比Sv39更多的。
实际上除了Sv39和Sv48外,系统在未来的扩展中还可能支持更多的扩展,如Sv57以及Sv64(见[RISC-V instruction set manual](#refenences))。从39、48以及57这几个数字,我们可以发现的规律是,它们之间两两的差是9!结合图1.9中的地址翻译过程,我们就很容易理解什么是Sv48了:它在Sv39的基础上,用上了虚地址中的39~47这9个位(一共用了虚地址中的48个位),作为第四级虚页号VPN[3]。这样做的结果是:在进行地址翻译的时候新增了一级地址翻译。显然,Sv48提供了比Sv39更大的虚拟地址空间(2^48B=256TB>512GB),从而能够支撑更大的应用程序的执行,那么选择Sv48是不是比选择Sv39更具优势呢?答案是:取决于是否真的有必要支撑超过512GB虚地址空间的应用,如果不需要,则Sv39是更合理的选择。从图1.9中的地址翻译过程,我们还可以看到,一次虚地址va到实地址pa的转换涉及到4次(根目录+页目录+页表+pa所在的页)访问内存操作!而相比于处理器内部进行的运算而言,访存显然是更为耗时的操作。可以想象,如果采用Sv48,这个转换所需要的访存操作是(5次)比Sv39更多的。