在 x86-64 上启用分段

Enabling segmentation on x86-64

我 运行 Ubuntu Linux 在 x86-64 架构上,我想启用分段(而不是分页)。
有没有办法在基于 x86-64 的 Linux 系统上使用分段而不是分页?
提前致谢。

P.S。我查了几个网站,比如 this but haven't got much information, and searching for "enabling segmentation on Linux" or "enabling segmentation on x86-64" doesn't return much information. I actually think the first answer here 可能意味着我不能再使用分段了,但我不确定。

您不必在 x86-64 GNU/Linux 上“启用”分段,它已将 FS 用于 thread-local 存储。但是 x86-64 分段是退化的,不能用作分页的替代方法。 CS/DS/ES/SS 的base 和limit 在long 模式下固定为0 / unlimited。它主要作为 x86 遗留物存在,并且作为一种控制 CPU 正在执行的模式的方式。(到目前为止跳转到 CS 段描述符,其中 L 位设置为 64 位长模式,或 32 位与 16 位兼容模式的其他位。)

您可能会编写一个 64 位内核,该内核使用分段来保护 32 位进程的内存(使用 1G 大页面 direct-mapping 您使用的所有虚拟地址 space;您不能在 x86-64 中禁用分页,除了“传统模式”使用 CPU 作为 32-bit-only CPU).

当然Linux不支持这个;它是围绕带有分页的平面内存模型构建的,就像所有现代主流 x86 OSes。 使用分段将从根本上改变有关如何管理内存和从 OS 获取新内存的一切.你至少得写一个新的libc,然后重写一堆对分页一窍不通的软件。