x86段描述符布局 - 为什么它很奇怪?

srg*_*nky 6 x86 cpu-architecture memory-segmentation

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

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

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

use*_*557 3

陈雷蒙德已经在评论中回答了这个问题:

\n\n
\n

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

\n
\n\n

以下是《Intel 80286 程序员参考手册》中对段描述符(代码或数据类型)的扫描:

\n\n

在此输入图像描述

\n\n

为了进行比较,以下是 Intel\xc2\xae 64 和 IA-32 架构软件开发人员\xe2\x80\x99s 手册(第 3A 卷)的屏幕截图:

\n\n

在此输入图像描述

\n\n

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

\n\n

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

\n