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

时间:2015-05-15 07:14:53

标签: x86 cpu-architecture memory-segmentation

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

http://css.csail.mit.edu/6.858/2014/readings/i386/s05_01.htm

的图5-3

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

1 个答案:

答案 0 :(得分:2)

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

  

与80286兼容.80286的最大段大小为2 ^ 16,最大基数为2 ^ 24。因此,基本和限制字段为16和24位宽。当尺寸和底座扩大到32位时,它们必须放在其他地方,因为已经有了好地方。

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

enter image description here

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

enter image description here

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

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