在x86-64上启用分段

问题描述

我正在x86-64架构上运行Ubuntu Linux,并且我希望启用分段(与分页相对)。
有没有办法在基于x86-64的Linux系统上使用分段而不是分页?
预先感谢。

P.S。我已经检查了几个网站,例如this,但没有太多信息,并且搜索“在Linux上启用分段”或“在x86-64上启用分段”不会返回太多信息。我实际上认为第一个答案here可能意味着我不再可以使用细分,但是不确定。

解决方法

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

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

当然,Linux不支持此功能。像所有现代主流x86操作系统一样,它是基于带分页的平面内存模型构建的。相反,使用分段将从根本上改变有关如何管理内存以及如何从操作系统获取新内存的一切。您至少必须编写一个新的libc,然后重写一堆对分页有所了解的软件。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...