Ubuntu 在x86-64上启用分段

Ubuntu 在x86-64上启用分段,ubuntu,operating-system,x86-64,paging,virtual-memory,Ubuntu,Operating System,X86 64,Paging,Virtual Memory,我在x86-64体系结构上运行Ubuntu Linux,我想启用分段而不是分页。 在基于x86-64的Linux系统上,有没有一种方法可以使用分段而不是分页? 提前谢谢 另外,我已经查看了一些网站,如,但没有太多的信息,搜索在Linux上启用分段或在x86-64上启用分段不会返回太多信息。实际上,我认为第一个答案可能意味着我不能再使用分段,但我不确定。您不必在x86-64 GNU/Linux上启用分段,它已经使用FS进行线程本地存储。但是x86-64分段是残留的,不能作为分页的替代方法。在长模式

我在x86-64体系结构上运行Ubuntu Linux,我想启用分段而不是分页。 在基于x86-64的Linux系统上,有没有一种方法可以使用分段而不是分页? 提前谢谢


另外,我已经查看了一些网站,如,但没有太多的信息,搜索在Linux上启用分段或在x86-64上启用分段不会返回太多信息。实际上,我认为第一个答案可能意味着我不能再使用分段,但我不确定。

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

您可以编写一个64位内核,使用分段来保护32位进程的内存,并使用1G hugepages直接映射您使用的所有虚拟地址空间;您不能在x86-64中禁用分页,除非在传统模式下将CPU用作仅32位的CPU


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

谢谢您的回答!我知道您提到的1G hugepages用于直接映射是因为x86支持4KB/2MB/1GB页面,但这是否意味着我需要4个1G hugepages来映射整个32位内存地址?@WannabeArchitect:是的。请注意,只有PAE/x86-64页表格使用4k/2M/1G页;未使用PAE的传统32位模式内核具有4k/4M页,每级10位,4字节PTE,没有用单个4G页覆盖整个地址空间的选项。如果需要,可以禁用分页。