【问题标题】:Just as in Segmentation, can different addresses in Paging also point to the same physical memory location?就像在 Segmentation 中一样,Paging 中的不同地址也可以指向同一个物理内存位置吗?
【发布时间】:2018-05-08 19:05:57
【问题描述】:

例如。对于分段,0000:FFFF 等价于 0001:FFEF (只是假设情况,不知道我们在编程中是否真的使用这些,或者这些是保留空间)

(我是汇编编程的新手。特别是 x86。)

【问题讨论】:

    标签: pointers assembly x86 memory-address microprocessors


    【解决方案1】:

    是的,这是允许的。事实上,这不仅是合法的,它还经常用于称为共享内存的功能。

    【讨论】:

      【解决方案2】:

      0000:FFFF 仅在实模式、VM86 模式或 SMM 模式下等效于 0001:FFEF。在这些模式下,根据定义,不启用分页。在没有分页的保护模式下1,由于段偏移量不同(FFFFFFEF)但段基地址相同2,因此它们必然被转换为不同的物理地址。对于分页,当段偏移量被添加到段基地址(可能为零)时,它们可能指向相同的虚拟页面或不同的虚拟页面,但无论哪种方式,页面偏移量的最低 12 位有效位将是不同的(因为段偏移的最低 12 位有效位不同),因此无论页表如何设置,它们都不能相等。

      通常,不同的地址可以转换为相同的物理地址。当页面偏移量不同但最低有效 12 位仍然相同时,当逻辑地址指向不同大小的页面时,它们可能会转换为相同的物理地址。否则,如果虚拟地址中至少有一个最低有效位 12 位不同,则它们在物理地址空间中不能相等。


      1. 在保护模式下,段选择器 0000'0000'0000'00XXb 用作空段选择器,无法访问。但是我们假设它是可访问的(或者考虑 0000'0000'0000'0100b 与 0000'0000'0000'0101b 代替)。

      2. 它们引用相同的段,因为段选择器索引(每个选择器的最高有效 13 位)和表指示符(第三最低有效位)相等

      【讨论】:

      • 请注意,在保护模式下,即使没有分页,段的工作方式也与实模式下不同。在保护模式下,在本地和全局描述符表(ldt 和 gdt)中查找段,其中包含每个段选择器的基地址长度和一些其他数据。这些可以根据需要进行配置,段可以任意重叠。
      • x86 上的地址转换首先从段和偏移量计算一个 线性地址,然后在页表中查找这个线性地址(或者如果分页是直接使用它)禁用)。这第一步完全独立于分页。是否启用分页与分段的工作方式无关。
      • @fuz 是的,我已经知道了。我的答案的哪一部分另有说明?你是对我的回答投反对票的人吗?因为我不明白为什么。
      • 您说“在没有分页的保护模式下,由于段偏移量不同,它们必然被转换为不同的物理地址。”这通常是不正确的,因为多个段可以重叠并且段基可以是任意的(粒度为 1 或 4096 iirc)。进一步注意,0000 和 0001 都不是有效的段选择器,因为它们被保留为空指针。
      • 我没有对你投反对票(事实上,你得到了我的投赞成票)。我认为文本仍然具有误导性,因为您没有解释为什么段基地址相同(因为 0000 和 0001 指的是具有不同 RPL 的同一段),使您的回答听起来像是所有段都具有相同的基地址或其他东西同样荒谬。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2019-09-07
      • 1970-01-01
      相关资源
      最近更新 更多