如何知道地址在页面中是否有效

时间:2016-11-18 12:49:34

标签: virtual-memory mmu

视觉和物理记忆分为几页。要检查页面是否有效,页表条目中有一个有效位。但是在一个页面中,MMU如何知道地址是否有效?例如,属于堆的一部分的页面。并非该页面的所有地址都有效,那么MMU如何检查地址以查看其是否有效?

2 个答案:

答案 0 :(得分:0)

页面是MMU存储信息的最小内存单位;这基本上是'page'的定义。因此,页面中的所有地址都同样有效。如果页面的某些部分是您无法访问的内容(可能在任何已分配的对象之外),那么这不是MMU可以检测到的内容。

答案 1 :(得分:0)

逻辑内存分为PAGES。物理内存分为PAGE FRAMES。页表:

  1. 标识哪些逻辑页面是进程地址空间的一部分
  2. 页面保护
  3. 映射到物理页面(或者在虚拟内存被分页的情况下没有映射)。
  4. 内存访问的有效性取决于访问类型,当前处理器模式和页表状态。

    逻辑上,当处理器进行内存访问时:

    1. 将地址分解为逻辑页面和逻辑页面的偏移量(取决于页面大小)。
    2. 查找逻辑页面的页表条目。可能不存在页表条目。在线性页表中,可以限制表的大小。在多级页表中,可能没有页面的嵌套表。如果有相应的条目=>访问违规。

    3. 检查页表条目是否表示有效页面。这通常使用有效位来完成,但还有其他方法可以执行此操作。如果页面无效=>访问违规。

    4. 检查当前处理器模式下页面是否允许访问类型(读/写/执行)。如果不是=>访问违规

    5. 检查逻辑页面是否映射到物理页面框架(这通常是作为步骤#3的一部分完成的)。如果不是=>页面错误

    6. A"堆"只是记忆。一个进程可以同时拥有多个堆。堆管理器将页面映射到逻辑地址空间,然后管理这些页面。堆甚至不需要驻留在连续的内存中。

      高级内存图通常显示"堆"这些都是对正在发生的事情的粗略简化。