【发布时间】:2014-02-05 14:09:26
【问题描述】:
我是初学者 :) 我正在研究英特尔架构, 我正在研究内存管理,例如分段和分页。 我正在阅读英特尔的手册,了解英特尔的架构非常好。
但是我仍然对一些基本的东西感到好奇。 为什么在 64 位长模式下,所有段寄存器都将变为位 0? 为什么系统不再使用段寄存器?
因为系统的 64 位大小(例如 GP 寄存器)足以一次包含这些逻辑地址? 保护在 64 位模式下是否正常工作?
我尝试查找 64 位寻址,但在 Google 中找不到。也许我的搜索能力很差,或者我可能需要一些特定的先前知识才能在 google 中搜索。
因此我想知道为什么 16 位段寄存器不会在 64 位模式下使用, 以及保护如何在 64 位模式下正常工作。
谢谢!
【问题讨论】:
-
段寄存器是 16 位实模式的实现细节。这在 20 年前就不再重要了。 32 位和 64 位模式使用平坦的未分段虚拟内存地址空间。
-
@HansPassant:如果段寄存器与其他所有内容一起增长到 32 位,它们在面向对象的框架中可能非常相关和有用[让每个对象从某个段的偏移量零开始将允许框架使用偏移寄存器访问许多 gigs 的内存,这些偏移寄存器的大小是 x64 中的一半]。它们没有用的真正原因是段标识符保持 16 位,而其他所有内容都变大了。
-
going to bit 0。我不确定你的意思是什么,但它们既不一定为零,也不是 all 段寄存器的基数为零。FS和GS仍然用于完整的 64 位基础,对于访问线程本地存储非常有用。
标签: memory-management x86-64 intel memory-segmentation