Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Paging_Mmu - Fatal编程技术网

ARM在输入向量表时使用物理地址还是虚拟地址?

ARM在输入向量表时使用物理地址还是虚拟地址?,arm,paging,mmu,Arm,Paging,Mmu,启用分页并发生异常时,是否会进行转换表遍历以访问地址0x00000000处的异常向量表 如果仍然启用分页,那么用户模式进程和向量表如何共享地址0x00000000?TTBR(转换表基址寄存器)不会在异常条目上更新,并且TTBR不是一个存储寄存器(我们这里不讨论在安全和非安全世界之间切换) 如果否,那么我们必须使用物理寻址输入异常,在这种情况下,分页现在被禁用了吗 启用分页并发生异常时,是否会进行转换表遍历以访问地址0x00000000处的异常向量表 几乎所有ARM CPU都有配置异常表地址的方法

启用分页并发生异常时,是否会进行转换表遍历以访问地址0x00000000处的异常向量表

  • 如果仍然启用分页,那么用户模式进程和向量表如何共享地址0x00000000?TTBR(转换表基址寄存器)不会在异常条目上更新,并且TTBR不是一个存储寄存器(我们这里不讨论在安全和非安全世界之间切换)
  • 如果否,那么我们必须使用物理寻址输入异常,在这种情况下,分页现在被禁用了吗
  • 启用分页并发生异常时,是否会进行转换表遍历以访问地址0x00000000处的异常向量表

    几乎所有ARM CPU都有配置异常表地址的方法。因此,在大多数系统中,异常向量表不在地址0x00000000处。但是,当发生异常时,MMU将启用。TLB(MMU/页表缓存)将包含向量表物理地址

    在某些SOC中,引导向量表可能为0x0,但这通常由引导代码重新配置

  • 如果仍然启用分页,那么用户模式进程和向量表如何共享地址0x00000000?TTBR(转换表基址寄存器)不会在异常条目上更新,并且TTBR不是一个存储寄存器(我们这里不讨论在安全和非安全世界之间切换)
  • 如果您希望向量表位于地址0x00000000,那么除非您禁止,否则它就是用户空间将看到的。禁止访问0x0可能是防止使用空指针的理想设计。许多操作系统没有从0x0运行用户空间,而是使用类似0x8000的地址

    基于参数设置用户空间错误非常有用,因为在开发进程时可以捕获空指针访问。我建议始终保持打开状态,但有些人允许对生产代码进行空访问

  • 如果否,那么我们必须使用物理寻址输入异常,在这种情况下,分页现在被禁用了吗

  • 没有启用分页,因为缓存可能也处于打开状态。如果某些访问是物理访问,而其他访问是虚拟访问,则CPU的加载/存储单元将更加复杂;特别是当缓存由传统ARM CPU中的虚拟地址填充时。

    许多操作系统将使用virt==phys映射来别名物理RAM。这可以简化操作系统内存分配。没有物理支持的地址可以由用户空间使用(或用于其他目的)。非常简单的操作系统/引导代码通常只使用virt==phys映射来启用MMU进行缓存。节条目(1MB)使此映射相当紧凑。回答得很好,谢谢。因此,澄清一下,用户进程无法访问整个地址空间?通常是的,对于sane系统。您可以授予用户空间完全访问权限,但是用户空间可以修改向量表。这对于引导代码来说可能很好,但通常不会进入用户模式。在以后的一些ARM CPU中,如果启用了mmu,那么处理器只能看到mmu的虚拟地址端,则可以进行映射。对于ARM用户应用程序,用户模式程序通常从0x8000开始,而不是0x0000。为了好玩,请尝试从用户模式应用程序访问0x0000,查看是否出现故障。