【问题标题】:x86 segment descriptor layout - why is it weird?x86 段描述符布局 - 为什么它很奇怪?
【发布时间】:2015-07-27 00:49:26
【问题描述】:

为什么英特尔选择将段的基数和限制拆分为段描述符中的不同部分,而不是使用连续位?

参见http://css.csail.mit.edu/6.858/2014/readings/i386/s05_01.htm的图5-3

为什么他们不将基地址存储在 0 到 31 位,限制在 32 到 51 位,并将剩余位置用于其他位(或一些类似的布局)?

【问题讨论】:

  • 为了与 80286 兼容。80286 的最大段大小为 2^16,最大基数为 2^24。因此,基本字段和限制字段分别为 16 位和 24 位宽。当大小和基数扩展到 32 位时,它们必须放在其他地方,因为好的地方已经被占用了。
  • 试图了解英特尔,只会让你发疯。

标签: x86 cpu-architecture memory-segmentation


【解决方案1】:

Raymond Chen 已经在 cmets 中回答了这个问题:

为了与 80286 兼容。80286 的最大段大小为 2^16,最大基数为 2^24。因此,基本字段和限制字段分别为 16 位和 24 位宽。当 size 和 base 扩展到 32 位时,它们必须放在其他地方,因为好的地方已经被占用了。

这是对 Intel 80286 Programmer's Reference Manual 中段描述符(代码或数据类型)的扫描:

为了比较,这里是英特尔® 64 和 IA-32 架构软件开发人员手册(第 3A 卷)的屏幕截图:

格式完全相同,除了保留位的使用。基数从 24 位扩展到 32 位,段限制从 16 位扩展到 20 位,并添加了一些附加标志。 (“已访问”位包含在第二个屏幕截图中的“类型”字段中)

因此,简而言之:布局之所以奇怪,是因为它是为 16 位处理器设计的旧布局的向后兼容扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2021-06-01
    相关资源
    最近更新 更多