Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ARM体系结构中虚拟地址和修改虚拟地址的区别_Arm_Cpu_Cpu Cache_Addressing Mode_Armv6_Armv7_Armv8 - Fatal编程技术网

ARM体系结构中虚拟地址和修改虚拟地址的区别

ARM体系结构中虚拟地址和修改虚拟地址的区别,arm,cpu,cpu-cache,addressing-mode,armv6,armv7,armv8,Arm,Cpu,Cpu Cache,Addressing Mode,Armv6,Armv7,Armv8,我是手臂和手臂指令集的新手。在ARM Cortex A8的文档中,我看到了一些命令,如cache flush accept input address作为MVA修改的虚拟地址。修改后的虚拟地址和虚拟地址之间有任何区别,如果是,如何将32位长的虚拟地址转换为MVA。修改后的虚拟地址是使用快速上下文切换扩展的结果。修改后的虚拟地址在32位地址的上部包含一个7位进程ID,要求虚拟地址的这些位为零。这允许TLB标记和缓存虚拟标记使用一个32位地址,该地址未使用进程ID地址空间ID进行扩展标记 有关更多信

我是手臂和手臂指令集的新手。在ARM Cortex A8的文档中,我看到了一些命令,如cache flush accept input address作为MVA修改的虚拟地址。修改后的虚拟地址和虚拟地址之间有任何区别,如果是,如何将32位长的虚拟地址转换为MVA。

修改后的虚拟地址是使用快速上下文切换扩展的结果。修改后的虚拟地址在32位地址的上部包含一个7位进程ID,要求虚拟地址的这些位为零。这允许TLB标记和缓存虚拟标记使用一个32位地址,该地址未使用进程ID地址空间ID进行扩展标记


有关更多信息,请参阅波士顿大学的博文或Gilles Chanteperdrix和Richard Cochran的论文《Linux的ARM快速上下文切换扩展》;DR-MVA是一个古老的ARM技术术语,大多数现代OSs都不会使用它。即使使用它,它也只适用于用户空间代码,设备驱动程序可以忽略“VA==MVA”这一术语

MVA是使用某些ID标记缓存数据的结果。其目的是操作系统中的用户空间代码可以通过上下文切换保留在缓存中。在ARMv5中,引入了FSCE快速上下文切换扩展。这在被集成到Linux中时不是很成功,但在类似的产品中使用过

许多操作系统的结构都是在较低的位置启动用户空间,比如0x8000,这样更容易防止空写。因此,此FSCE允许将多个物理地址映射到低地址空间。这意味着不需要在OS上下文开关上刷新缓存

Armv6引入了其他三个概念来取代FSCE。首先是TTBR0和TTBR1,以允许拆分操作系统/用户页表。其次是分区库或逻辑内存组。第三页条目可以是非全局的,并通过CONTEXTIDR cp15寄存器和页表条目的GD位分配ASID地址空间id。在此,刷新/失效仅适用于激活的ASID。因此,即使缓存被标记,也没有“MVA”

因此,MVA可能仅适用于用户空间代码,具体取决于操作系统是否使用FSCE。对于内核和DMA/设备内存,在任何ARM系统上都应该始终具有VA=MVA。通常,您需要它,这样您的操作系统就不需要刷新用户内存,因为这是这些机制的全部要点

实例 CP15 C7缓存维护。 c5 1 ICIMVAU按PoU地址使指令缓存线无效。Rt=地址

此CP15寄存器使用“MVA”使L1无效。使用FSCE,您可以将PID添加到基址。使用ASID时,必须在调用之前设置该寄存器以使其无效。同样,大多数OSs只会在用户空间中这样做。设备和内核内存在任何正常情况下都不使用此机制

FSCE的一个主要限制是,您最多有128个进程,每个进程的大小限制为2^25或32MB以利用它。它还消耗大量的虚拟地址空间。这就是为什么它从未被引入Linux主线。尽管许多嵌入式Linux设备可能会受益,但它不像ASID那样通用,ASID支持256个进程,没有大小限制,也不消耗虚拟地址空间

ARMv5是第一个支持FSCE/PID/MVA的体系结构。 反对FSCE;始终存在,但不应使用。 使FSCE可选;cortex-A8可能在硅中只有残根。 没有FSCE;不存在,只存在存根或RZ/WI寄存器。
旁注:斯坦福MIPS提供了类似的机制,但具有可变大小的进程ID和掩码寄存器。参见第2.3.1节Steven A.Przybylski等人的内存映射。OPs CPU Cortex-A8不推荐使用MIPS FCSE的组织和VLSI实现,而不是“DACR”,域用于实现类似效果。请参阅:。因此,对于大多数系统来说,Cortex-A8 MVA==VA。只有使用旧的/怪异的操作系统端口时,PID才会处于活动状态。如果您对在ARMv5系统上使用FSCE的各种Linux修补程序感兴趣,请搜索“FASS”。我不相信它曾经集成到主线Linux中。缓存别名和虚拟寻址存在安全问题,因此这也会降低FSCE防止这种情况的有效性。