【问题标题】:calculate logical address from physical address (x86)从物理地址计算逻辑地址(x86)
【发布时间】:2013-05-01 10:34:50
【问题描述】:

据我所知,物理地址是通过将段地址(16 位)左移 4 次并加上 16 位偏移地址来计算的。 我的问题是,如果 2 组不同的段:偏移地址值给出相同的结果怎么办? 例如。对于 200A:B608 和 2138:A328

200A0

+B608


2B6A8


21380

+A328


2B6A8


两者的结果相同!!

现在,这是否意味着它们指向相同的物理地址(如果是,如何?),

或者物理地址是否不应该以上述方式计算?

或者,如果它有效,那么我怎样才能从物理地址中获取段:偏移地址(这可能吗?)

【问题讨论】:

  • 我认为任何现代操作系统都不再使用分段内存模型,尽管大多数 x86 芯片仍然包含启用该功能的电路。甚至 DOS 通常大部分时间都是在虚拟环境中运行...
  • @twalberg 实际上,操作系统使用分段内存,但仅用于保护地址空间(环或特权级别,链接到段 IIRC)。在 x86 上,NT 系列(包括 7 个)至少使用 4 个段,还有 IIRC(可能更多)
  • 关于这个问题..我发现这里使用物理地址和逻辑地址有点令人困惑(可能,从操作系统的角度来看,它们对我有不同的含义。无论如何,我相信段选择器是 16 位长,但在 8086 上只有 4 位有意义?这就是可寻址内存为 1 MB(20 位)的原因,这就是为什么您只需要移动 4 位。(作为评论发布,因为我不太确定,会需要检查但我现在没有材料)

标签: x86 computer-architecture x86-16 16-bit


【解决方案1】:

在实地址模式中,段选择器确实会左移 4 位,然后添加到偏移量以形成 20 位线性地址(在此模式下与物理地址相同)。

显然,这意味着不同的段:偏移量对可能被转换为相同的物理地址(就像在启用分页的保护模式下不同的线性地址可能被转换为相同的物理地址一样)。由于逻辑地址和线性地址之间没有 1:1 的映射关系,因此您可以从线性地址获得的唯一内容是一组转换为它的段:偏移量对。

您可以在英特尔手册,第 3B 卷,第 20.1.1 节中找到更详细的说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2013-07-05
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多