32 位还是 64 位 CPU 在 Linux 上使用分段寻址?我知道在像 8086 这样的旧 CPU 上使用分段进行内存寻址,但不确定这种方法是否用于 Linux 操作系统的 32 位或 64 位 CPU。
最初(在 286 之前)分段主要是一种黑客技术,旨在使在 16 位 CPU 上寻址超过 64KB 成为可能。在 286 保护模式分段被扩展以引入保护并将支持的物理内存从 1MB 扩展到 16MB。但是 CPU 仍然只有 16 位寄存器,这意味着任何大于 64KB 的连续数据块都难以处理。
所有这一切都随着 386 的引入而改变。CPU 寄存器扩展到 32 位,并且添加了分页作为一项新功能。分页是一种比分段可实现的在逻辑地址和物理地址之间进行映射的更强大的方法。
Linux 最初是为 386 设计的,并利用了分页功能。Linux 对分段的使用很少,一些保护设置是通过分段描述符控制的,这意味着您无法完全避免分段的需要。但是 Linux 会将所有段配置为从地址 0 开始。
换句话说:Linux 从不使用分段寻址。它仅使用分段,因为需要控制某些保护功能。
当 AMD 设计 64 位 CPU 时,他们决定在 64 位模式下不支持某些历史功能。他们所做的一件事是强制段起始地址为 0。因此,在这一点上,硬件和软件都不再支持分段地址。
如果您在 16 位或 32 位模式下运行现代 CPU,它仍支持分段地址以实现向后兼容性。但是在 64 位模式下,您只有 64 位线性地址和分页。
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |