首页 > 解决方案 > 在 x86-64 上启用分段

问题描述

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

PS 我检查了几个这样的网站,没有太多信息,搜索“在 Linux 上启用分段”或“在 x86-64 上启用分段”不会返回太多信息。我实际上认为这里的第一个答案可能意味着我不能再使用分段了,但不确定。

标签: ubuntuoperating-systemx86-64pagingvirtual-memory

解决方案


您不必在 x86-64 GNU/Linux 上“启用”分段,它已经使用 FS 进行线程本地存储。但是x86-64 分段是退化的,不能用作分页的替代品。CS/DS/ES/SS 的基数和限制在长模式下固定为 0 / 无限制。它主要作为 x86 遗留系统存在,并作为一种控制 CPU 执行模式的方式。(到目前为止,跳转到 CS 段描述符,其L位设置为 64 位长模式,或其他位设置为 32 位与 32 位长模式。 16 位兼容模式。)

您可能会编写一个 64 位内核,该内核使用分段来保护 32 位进程的内存(使用 1G 大页面直接映射您使用的所有虚拟地址空间;您不能在 x86-64 中禁用分页,除了“legacy模式”将 CPU 用作 32 位 CPU)。

当然 Linux 不支持这个;它是围绕带有分页的平面内存模型构建的,就像所有现代主流 x86 操作系统一样。 相反,使用分段将从根本上改变您管理内存和从操作系统获取新内存的方式。您至少必须编写一个新的 libc,并重写一堆对分页一无所知的软件。


推荐阅读