gpt4 book ai didi

memory-management - 为什么 64 位模式(长模式)不使用段寄存器?

转载 作者:行者123 更新时间:2023-12-03 13:58:25 24 4
gpt4 key购买 nike

我是学生的初学者:) 我正在研究英特尔架构,
我正在研究内存管理,例如分段和分页。
我正在阅读英特尔的手册,了解英特尔的架构非常好。

但是我仍然对一些基本的东西感到好奇。
为什么在 64 位长模式下,所有段寄存器都将变为位 0?
为什么系统不再使用段寄存器?

因为系统的 64 位大小(例如 GP 寄存器)足以一次包含那些逻辑地址?
保护在 64 位模式下是否正常工作?

我试图找到 64 位寻址,但在 Google 中找不到。也许我的搜索技巧很差,或者我可能需要一些特定的先前知识才能在谷歌中搜索。

因此我想知道为什么 16 位段寄存器不会在 64 位模式下使用,
以及保护如何在 64 位模式下正常工作。

谢谢!

最佳答案

从某种意义上说,当您使用通用寄存器执行数组(“索引”)类型寻址时,您所做的基本上与段寄存器相同。在 糟糕的过去在 8 位和 16 位编程中,许多应用程序需要比 16 位地址所能达到的更多的数据(有时还有更多的代码)。

许多 CPU 通过拥有比 16 位地址所能达到的更大的可寻址内存空间来解决这个问题,并通过“段寄存器”或类似的方式使这些内存区域可访问。程序会将“段寄存器”中的地址设置为高于(65536 字节)16 位地址空间的地址。然后在执行某些指令时,它们会将指令指定的地址添加到适当的(或指定的)“段寄存器”中,以读取超出 16 位地址或 16 位偏移量范围的数据(或代码)。

然而,今天的情况却相反!

为何如此?今天,一个 64 位 CPU 可以寻址超过(不少于)所有可寻址内存空间。今天的大多数 64 位 CPU 都可以处理 40 位到 48 位的物理内存。确实,没有什么可以阻止他们寻址完整的 64 位内存空间,但他们知道没有人(除了 NSA)能负担得起那么多 RAM,此外,将那么多 RAM 卡在 CPU 总线上会导调用容负载下降,并减慢 CPU 芯片外的所有内存访问。

因此,目前这一代主流 CPU 可以处理 40 位到 48 位的内存空间,超过了市场想象中的 99.999%。请注意,32 位是 4 GB(今天有些人确实超过了 2、4、8、16 倍),但即使是 40 位也可以处理 256 * 4GB == 1024GB == 1TB。虽然今天 64GB 的 RAM 是合理的,在极端情况下甚至可能是 256GB,但 1024GB 只是没有必要,除了可能 0.001% 的应用程序,并且无法启动。

如果你属于那个 0.001% 的类别,只需购买一个处理 48 位物理内存的 CPU,你说的是 256TB ......这目前是不切实际的,因为它会大量加载内存总线电容(甚至可能到内存总线完全停止工作的程度)。

重点是这个。当使用普通 64 位寄存器的普通寻址模式已经可以寻址比计算机可以容纳的内存多得多的内存时,添加段寄存器的传统理由就消失了。

这并不意味着人们无法在 64 位 CPU 中找到段寄存器的有用用途。他们可以。几种可能性是显而易见的。但是,对于 64 位通用寄存器和 64 位地址空间,没有什么是通用寄存器无法做到的,而段寄存器可以做到。通用寄存器有很多用途,而段寄存器没有。因此,如果有人计划向现代 64 位 CPU 添加更多寄存器,他们会添加通用寄存器(可以做“任何事情”),而不是添加用途非常有限的“段寄存器”。

他们确实有。您可能已经注意到,AMD 和 Intel 不断向 SIMD 寄存器文件添加更多 [sorta] 通用寄存器,而 AMD 在设计其 64 位 x86_64 CPU(英特尔复制)。

关于memory-management - 为什么 64 位模式(长模式)不使用段寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com