ubuntu - 在 x86-64 上启用分段
问题描述
我在 x86-64 架构上运行 Ubuntu Linux,我想启用分段(而不是分页)。
有没有办法在基于 x86-64 的 Linux 系统上使用分段而不是分页?
提前致谢。
PS 我检查了几个这样的网站,但没有太多信息,搜索“在 Linux 上启用分段”或“在 x86-64 上启用分段”不会返回太多信息。我实际上认为这里的第一个答案可能意味着我不能再使用分段了,但不确定。
解决方案
您不必在 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,并重写一堆对分页一无所知的软件。
推荐阅读
- javascript - 通过多个属性值计算数组中的对象并在 HTML 中显示结果
- c# - 客户端无法连接到在 IIS 托管环境上运行的 Blazor WebAssembly 应用的 SignalR 集线器
- javascript - 在没有用户设置选项的情况下防止选项弹出关闭
- python - plotly express:如何控制条形开始位置?
- javascript - 如何正确延迟加载 Vue.js 中的 json 文件以减小包大小?
- debugging - Hyperledger Indy:无法初始化节点,init_indy_node 失败并出现错误
- python - 使用漂亮表向列添加信息
- scala - 从列中搜索字符串并在带有结果的 spark 数据框中创建新列
- .net - 无法在 Visual Studio 团队资源管理器中从 https://microsoftit.visualstudio.com 克隆分支存储库
- ios - 我们可以在 SwiftUI 中禁用 Textfield 的复制/粘贴选项吗?