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

时间:2014-01-16 15:17:55

标签: memory-management 64-bit intel memory-segmentation

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

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:18)

从某种意义上讲,当您使用通用寄存器执行数组(“索引”)类型寻址时,您实际上与段寄存器执行的操作基本相同。在8位和16位编程的糟糕的旧时代中,许多应用程序需要的数据量更多(偶尔会有更多代码),而不是16位地址。

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

然而,今天的情况正好相反!

怎么样?今天,64位CPU可以处理超过(不小于)所有可寻址存储空间。今天大多数64位CPU可以处理40位到48位物理内存。没错,没有什么可以阻止他们解决一个完整的64位内存空间,但是他们知道没有人(但是NSA)可以负担得起这么多RAM,而且,在CPU总线上挂上那么多的RAM会将其加载到电容上,并减慢CPU芯片外的所有内存访问速度。

因此,当前一代主流CPU可以满足40位到48位的存储空间,超过市场预期的99.999%。请注意,32位是4千兆字节(有些人今天超过了2倍,4倍,8倍,16倍),但即使是40位也可以解决256 * 4GB == 1024GB == 1TB。虽然今天64GB的RAM是合理的,在极端情况下甚至可能是256GB,但除了大约0.001%的应用程序外,不需要1024GB,并且无法启动。

如果您处于0.001%的类别,只需购买其中一个处理48位物理内存的CPU,而您正在谈论256TB ...这当前是不切实际的,因为它会加载内存总线电容量太大(甚至可能会使内存总线停止工作完全停止)。

重点是这一点。当普通64位寄存器的正常寻址模式已经可以处理的内存远远超过计算机可以包含的内存时,添加段寄存器的传统原因就会消失。

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

他们确实有。您可能已经注意到,AMD和英特尔不断向SIMD寄存器文件添加更多[sorta]通用寄存器,并且AMD在设计64位x86_64 CPU(英特尔)时将[真正]通用寄存器的数量增加了一倍复制)。

答案 1 :(得分:2)

关于32/64位世界中段寄存器无关的问题的大多数答案总是以存储器寻址为中心。我们都同意段寄存器的主要目的是在16位DOS世界中绕过地址空间限制。但是,从安全性能的角度来看,寄存器提供了4个地址空间隔离环,如果我们进行64位长模式(例如64位操作系统)则不可用。对于当前流行的操作系统(例如Windows和Linux)来说,这不是问题,它只使用具有两级隔离的环0和环3。环1和环2有时是内核的一部分,有时是用户空间的一部分,具体取决于代码的编写方式。随着从隔离角度出现硬件虚拟化(而不是操作系统虚拟化),虚拟机管理程序在环0或环1/2/3中都不太适合。英特尔和AMD为VM的根和非root操作添加了附加指令(例如,INTEL VMX)。

那么有什么意义呢?如果设计一个具有4个隔离环的新安全操作系统,那么如果禁用分段,我们就会遇到问题。例如,我们为硬件mux代码,管理程序代码/容器/ VM,OS内核和用户空间分别使用一个环。因此,我们可以根据上述要求,利用分段提供额外的安全性。但是,Intel / AMD仍然允许F和G段寄存器具有非零值(即,不禁用分段)。据我所知,没有任何操作系统利用这种希望为硬件虚拟化编写更安全的OS / Hypervisor。