是否可以实现不分段的分页? x86

Is it possible to implement paging without segmentation? x86

有人告诉我分页需要分段,这是为什么?据我所知,大多数带有 UEFI 的系统将以长模式启动,我认为这根本不需要分段?

通常无法在 80x86 上禁用分段;即使在长模式下(fsgs 仍然有效,有点)。

相反,您通过将段寄存器的基数设置为零并将限制设置为最大值来“假禁用”分段;这样分割什么都不做。现代 CPUs 专门针对这种情况进行了优化(如果他们知道段基数无论如何都为零,则不会在“线性地址 = segment_base + 偏移量”计算中进行加法运算)。

因此可以说需要分段(有或没有分页);并且分页不需要分段(可以“假禁用”)。

请注意,大多数操作系统“假禁用”分段并且仅使用分页; fsfs 除外,它们通常(ab)用作指向线程本地或“CPU 本地”数据的指针(实际上并不用于段的属性)。