linux内核使用哪种类型的内存模型(即平面/分段)?

时间:2016-06-01 04:10:41

标签: linux linux-kernel x86 operating-system kernel

我正在阅读关于x86保护模式的工作,因为我已经看到了平面内存模型和分段内存模型。

如果linux内核使用的是平面内存模型,那么它如何保护非特权应用程序对关键数据的访问?

1 个答案:

答案 0 :(得分:2)

Linux通常不使用。在x86上,Linux为用户空间进程和内核提供了单独的页表。用户空间页表不包含内核内存的映射,这使得用户空间进程无法直接访问内核内存。

从技术上讲,"虚拟地址"在通过页表从线性地址重新映射到物理地址之前,在x86上首先通过分段(并从逻辑地址转换为线性地址)。除非在特殊情况下,分段不会在64位模式下更改生成的物理地址(分段仅用于存储当前权限级别等特征,并强制执行SMEP等功能)。

一个众所周知的"不寻常的案例"是x86上大多数编译器实现的线程本地存储,它使用FS和GS段来定义每个逻辑处理器偏移到地址空间。其他段不能具有非零基数,因此不能通过分段移位地址。